Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2014, 21:22   #1
ExDeez
Пользователь
 
Регистрация: 09.10.2014
Сообщений: 11
По умолчанию УКАЗАТЕЛИ И МАССИВЫ (С)

Есть программа, в ней необходимо определить указатели. Все обращения к элементам массивов (одномерных и двумерных) производить с помощью указателей.

Код:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<locale>
#include<time.h>
void main()
	{
	setlocale(LC_ALL, "Russian");
    srand(time(0));
printf ("ЗАДАНИЕ а)\n");
	int A[20], i;
	printf ("Массив A:\n");
	for (int i = 0; i< 20; i++) 
		{
		A[i] = rand() % 101 - 50;
		printf("%3d ", A[i]);
		}
	printf ("\n\nНЕотрицательные элементы массива А:\n");
	for (int i = 0; i< 20; i++)	
		if (A[i] >= 0)
		{
		printf ("%2d\n", A[i]);
		} 
	printf ("\nотрицательные элементы массива А:\n");
	for (int i = 0; i< 20; i++)	
		if (A[i] < 0)
		{
		printf ("%3d\n", A[i]);
		} 
	getch();
//
printf ("ЗАДАНИЕ б)\n");
	int M[10][10], j, k, z;
	double sum, SRAR[10];
	sum = 0;
	z = 0;
		printf("\n\n\nМассив M:\n");
	for (int j = 0; j < 10; j++)
	for (int k = 0; k < 10; k++)
		{
	M[j][k] = rand() % 101;
	printf("%3d \t", M[j][k]);
		}
	for (k=0; k<10; k++)
		{
		for (j=0; j<10; j++)
		{
		sum += M[j][k];
		}
		SRAR[z] = sum/10;
		z = z+1;
		sum = 0;
		}
	for (z=0; z<10; z++)
	{
		printf ("%*.*f\t", 3, 1, SRAR[z]);
	}
	getch();
}
ExDeez вне форума Ответить с цитированием
Старый 07.11.2014, 00:34   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

молодец .
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.11.2014, 06:49   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Обращение с помощью указателей к элементу массива A[i] производится так *(A+i)
Для двухмерного массива A[i][j] преобразуется так *(*(A+i)+j)
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось challengerr; 07.11.2014 в 10:11.
challengerr вне форума Ответить с цитированием
Старый 07.11.2014, 07:13   #4
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,986
Сообщение

Вообще то, не
Код:
void main(){}
а
Код:
int main(){}
У тебя функция ни чего не возвращает...

p.s. И кто тебя так учил?
vasek123 вне форума Ответить с цитированием
Старый 07.11.2014, 10:11   #5
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Цитата:
p.s. И кто тебя так учил?
Зачем main что-то возвращать? void main является правильным.

Исправленная программа:

Код:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<locale>
#include<time.h>
void main()
	{
	setlocale(LC_ALL, "Russian");
    srand(time(0));
printf ("ЗАДАНИЕ а)\n");
	int A[20], i;
	printf ("Массив A:\n");
	for (int i = 0; i< 20; i++) 
		{
		*(A+i) = rand() % 101 - 50;
		printf("%3d ", *(A+i));
		}
	printf ("\n\nНЕотрицательные элементы массива А:\n");
	for (int i = 0; i< 20; i++)	
		if (*(A+i) >= 0)
		{
		printf ("%2d\n", *(A+i));
		} 
	printf ("\nотрицательные элементы массива А:\n");
	for (int i = 0; i< 20; i++)	
		if (*(A+i) < 0)
		{
		printf ("%3d\n", *(A+i));
		} 
	getch();
//
printf ("ЗАДАНИЕ б)\n");
	int M[10][10], j, k, z;
	double sum, SRAR[10];
	sum = 0;
	z = 0;
		printf("\n\n\nМассив M:\n");
	for (int j = 0; j < 10; j++)
	for (int k = 0; k < 10; k++)
		{
	*(*(M+j)+k) = rand() % 101;
	printf("%3d \t", *(*(M+j)+k));
		}
	for (k=0; k<10; k++)
		{
		for (j=0; j<10; j++)
		{
		sum += *(*(M+j)+k);
		}
		*(SRAR+z) = sum/10;
		z = z+1;
		sum = 0;
		}
	for (z=0; z<10; z++)
	{
		printf ("%*.*f\t", 3, 1, *(SRAR+z));
	}
	getch();
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 07.11.2014, 19:30   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Вот пример помещения целочисленных данных массива целого типа в область памяти


Код:
const n=3;

int a[n][n]; // {0,1,2,3,4,5,6,7,8}
int *pA// объявляем переменную указателя

pA=&A[0][0]; // в указатель помещаем адрес нулевого элемента массива
// чтоб было от чего отталкиваться

for (int k=0;k<9;k++ )// цикл с параметром от 0 до 8 (так как в массиве задано 9 ячеек)

{
printf("%d", *pA); // выводим содержимое разыменованного указателя 
// (звездочку не забудьте)
pA++ // инкрементируем на int байт памяти (float-64 бита, int-32 бита), то есть переходим к данным другого элемента, массив в памяти располагается не сеткой))

return 0;
}
в данном случае pA++-это не эквивалент увеличения переменной на единицу) помните!) Спасибо!)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 08.11.2014, 01:42   #7
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,986
Сообщение

Цитата:
Сообщение от challengerr Посмотреть сообщение
Зачем main что-то возвращать? void main является правильным.
Цитата:
Функция main() возвращает целое число, которое принимает вызывающий процесс — обычно этим процессом является операционная система. Возврат значения из main() эквивалентен вызову функции exit() с тем же самым значением. Если main() нe возвращает значение явно, то вызывающий процесс получает формально неопределенное значение. На практике же большинство компиляторов С автоматически возвращают 0, но если встает вопрос переносимости, то на такой результат полагаться с уверенностью нельзя.
Достаточно доходчиво объяснил? А если вы уж, даже, этого не знали ранее, то, вам опасно доверять саму среду разработки для личных нужд а какой либо серьезный проект и подавно...

Последний раз редактировалось vasek123; 08.11.2014 в 02:25.
vasek123 вне форума Ответить с цитированием
Старый 08.11.2014, 06:35   #8
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Цитата:
Сообщение от vasek123 Посмотреть сообщение
Достаточно доходчиво объяснил? А если вы уж, даже, этого не знали ранее, то, вам опасно доверять саму среду разработки для личных нужд а какой либо серьезный проект и подавно...
Когда Microsoft в 1998 писали свой компилятор Microsoft Visual C++ 6.0, они переносимостью не заморачивались. Статические библиотеки .lib и исполняемые файлы .exe c windows на unix/linux непереносимы, так там используется другой формат и библиотек .o и исполняемых файлов omf. Им это не нужно, так как то большинство людей, что используют Windows, использовать Linux или Unix не будут, так как им ничего не нужно из того, что там есть. Unix это серверная ОС, имеющая очень ограниченную область применения (DNS сервера интернета, обеспечивающие функционирование интернета), и судя по количеству вопросов по программированию на форуме в системе Unix, им эта переносимость никогда не понадобится. Чтобы настроить Linux, нужно быть крутым программистом, и большинству эта задача настройки не по силам. Кроме того, под Linux / Unix не производятся драйвера. Посещаемость форума обусловлена тем, что студентам надо по учебе, так что студентам никто не доверит серьезный проект, так как с них будут требовать опыт при устройстве на работу, а у них его нет, и не будет, потому что их никто не будет брать.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 08.11.2014, 08:35   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Чтобы настроить Linux, нужно быть крутым программистом, и большинству эта задача настройки не по силам.
Ухты!!! Оказывается, я - крутой программист.
Не знал, не знал...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.11.2014, 08:39   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Когда Microsoft в 1998 писали свой компилятор Microsoft Visual C++ 6.0, они переносимостью не заморачивались.
Ты опять здесь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Указатели и массивы CHELOVEKPAUK Помощь студентам 0 20.10.2013 21:22
Указатели. Массивы.Си Антон Лысенко Помощь студентам 2 11.04.2012 23:18
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Массивы и указатели (С++) slavy Помощь студентам 3 26.08.2009 19:39
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39