рефераты рефераты
Главная страница > Курсовая работа: Массивы. Двумерные массивы  
Курсовая работа: Массивы. Двумерные массивы
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Курсовая работа: Массивы. Двумерные массивы

 .. /* а не их значения */

 ..

 }

 int vvod(double ***a, long **b)

 { int n,m,i,j;

 scanf (" %d %d ",&n,&m);

 *a=(double **)calloc(n,sizeof(double *));

 *b=(long *)calloc(n,sizeof(long));

 for (i=0; i<=n; i++)

 *a[i]=(double *)calloc(m,sizeof(double));

 .....

 }

Отметим также то обстоятельство, что указатель на массив не обязательно должен показывать на начальный элемент некоторого массива. Он может быть сдвинут так, что начальный элемент будет иметь индекс отличный от нуля, причем он может быть как положительным так и отрицательным.

Пример:

 #include

 int main()

 { float *q, **b;

 int i, j, k, n, m;

 scanf("%d %d",&n,&m);

 q=(float *)calloc(m,sizeof(float));

 /* сейчас указатель q показывает на начало массива */

 q[0]=22.3;

 q-=5;

 /* теперь начальный элемент массива имеет индекс 5, */

 /* а конечный элемент индекс n-5 */

 q[5]=1.5;

 /* сдвиг индекса не приводит к перераспределению */

/* массива в памяти и изменится начальный элемент */

 q[6]=2.5; /* - это второй элемент */

 q[7]=3.5; /* - это третий элемент */

 q+=5;

 /* теперь начальный элемент вновь имеет индекс 0, */

 /* а значения элементов q[0], q[1], q[2] равны */

 /* соответственно 1.5, 2.5, 3.5 */

 q+=2;

 /* теперь начальный элемент имеет индекс -2, */

 /* следующий -1, затем 0 и т.д. по порядку */

 q[-2]=8.2;

 q[-1]=4.5;

 q-=2;

 /* возвращаем начальную индексацию, три первых */

 /* элемента массива q[0], q[1], q[2], имеют */

 /* значения 8.2, 4.5, 3.5 */

 q--;

 /* вновь изменим индексацию . */

 /* Для освобождения области памяти в которой размещен */

 /* массив q используется функция free(q), но поскольку */

 /* значение указателя q смещено, то выполнение */

 /* функции free(q) приведет к непредсказуемым последствиям. */

 /* Для правильного выполнения этой функции */

 /* указатель q должен быть возвращен в первоначальное */

 /* положение */

 free(++q);

 /* Рассмотрим возможность изменения индексации и */

 /* освобождения памяти для двумерного массива */

 b=(float **)calloc(m,sizeof(float *));

 for (i=0; i < m; i++)

 b[i]=(float *)calloc(n,sizeof(float));

 /* После распределения памяти начальным элементом */

 /* массива будет элемент b[0][0] */

 /* Выполним сдвиг индексов так, чтобы начальным */

 /* элементом стал элемент b[1][1] */

 for (i=0; i < m ; i++) --b[i];

 b--;

 /* Теперь присвоим каждому элементу массива сумму его */

 /* индексов */

 for (i=1; i<=m; i++)

 for (j=1; j<=n; j++)

 b[i][j]=(float)(i+j);

 /* Обратите внимание на начальные значения счетчиков */

 /* циклов i и j, он начинаются с 1 а не с 0 */

/* Возвратимся к прежней индексации */

 for (i=1; i<=m; i++) ++b[i];

 b++;

 /* Выполним освобождение памяти */

 for (i=0; i < m; i++) free(b[i]);

 free(b);

 ...

 ...

 return 0;

 }

В качестве последнего примера рассмотрим динамическое распределение памяти для массива указателей на функции, имеющие один входной параметр типа double и возвращающие значение типа double.

Пример:

 #include

 #include

 double cos(double);

 double sin(double);

 double tan(double);

 int main()

 { double (*(*masfun))(double);

 double x=0.5, y;

 int i;

 masfun=(double(*(*))(double))

 calloc(3,sizeof(double(*(*))(double)));

 masfun[0]=cos;

 masfun[1]=sin;

 masfun[2]=tan;

 for (i=0; i<3; i++);

 { y=masfun[i](x);

 printf("\n x=%g y=%g",x,y);

 }

 return 0;

 }

Элементом массива может быть в свою очередь тоже массив. Таким образом, мы приходим к понятию двумерного массива или матрицы. Описание двумерного массива строится из описания одномерного путем добавления второй размерности, например:

int a[4][3];

Анализ подобного описания необходимо проводить в направлении выполнения операций [], то есть слева направо. Таким образом, переменная a является массивом из четырех элементов, что следует из первой части описания a[4]. Каждый элемент a[i] этого массива в свою очередь является массивом из трех элементов типа int, что следует из второй части описания.

Для наглядности двумерный массив можно представить в виде таблицы с числом строк, равным первому размеру массива, и числом столбцов, равным второму размеру массива, например:

Массива

Столбец 0          

Столбец 1

Столбец 2

Строка 0

18

21

5

Строка 1            

6

7

11

Строка 2

30

52

34

Строка 3            

24

4

67

Страницы: 1, 2, 3, 4, 5, 6, 7, 8

рефераты
Новости