Представление многомерных массивов как массив массивов.
Для четырехмерного
Многомерные массивы
Массивы бывают одномерные и многомерные. Одномерные массивы представляют собой ряд чисел или символов. Они уже были рассмотрены выше.
Примером многомерного массива является матрица. Это двухмерный массив. Многомерный массив имеет количество размерностей больше одного.
Примеры массивов:
Одномерный массив:
а1 , а2 , а3 , . . . , аn .
Двухмерный массив (матрица):
b11 , b12 , b13 , . . . , b1n
b21 , b22 , b23 , . . . , b2n
. . . . . . . . . . . . . . . . .
bm1 , bm2 , bm3 , . . . ,bmn
Синтаксис оператора описания многомерного массива следующий:
тип имя[размер1][размер2]. . . [размер n] |
Отсюда следует, что оператор описания матрицы будет выглядеть как:
short a[4][5];
Из примера можно заключить, что это матрица целых чисел, значения которых находятся в диапазоне –128 … +127, строк у матрицы 4, а столбцов 5. При описании матриц первой размерностью всегда указываются строки, второй – столбцы.
Для трехмерного массива оператор описания будет иметь вид:
float b[m][n][k];
int c[m][n][k][l];
и так далее.
Идентификатор элемента многомерного массива аналогичен идентификатору одномерного b[2][3], c[1][3][5] с той лишь разницей, что указывается адрес элемента не в одной, а в нескольких размерностях.
Ввод многомерных массивов возможен такими же двумя способами, как и при вводе одномерных массивов: путем инициализации при описании массивов и поэлементный ввод в циклической операции.
Синтаксис оператора описания двухмерного массива (матрицы) путем его инициализации следующий:
тип имя[n][m]={{эл.11,эл12,…,эл1n}, {эл.21,эл.22,…,эл.2n}, . . . . . . . . . . . . . . . . . {эл.m1,эл.m2,…,эл.mn}}; |
Например:
int b[2][3]={{-2,4,0},{15,0,-7}};
Вводом массивов путем инициализации пользуются тогда, когда размер массива небольшой и запись оператора описания при этом не очень громоздка. В противном случае используют поэлементный ввод.
Поэлементный ввод матрицы а(M*N) с клавиатуры имеет вид:
for (i=0; i < M; i++)
for (j=0; j < N; j++)
cin >> a[i][j];
Вывод многомерных массивов осуществляется только поэлементно также как и одномерные массивы. Пример вывода матрицы а(M*N) на экран:
for (i=0; i < M; i++)
{
cout << setw(30)<<” “;
for (j=0; j < N; j++)
cout << setw(6)<< a[i][j]<<” “;
cout<<endl;
}
В этом фрагменте программы оператор cout << setw(30)<<” “; предназначен для создания отступа от левой границы экрана на 30 позиций. Далее с помощью оператора цикла
for (j=0; j < N; j++)
cout << setw(6)<< a[i][j]<<” “;
производится вывод всех элементов строки в один ряд и после этого совершается перевод курсора с помощью оператора cout<<endl; в начало следующей строки. Таким образом выводятся на экран все последующие строки матрицы.
Массивы могут представляться не только как совокупность однотипных простых данных, но и как совокупность других однотипных массивов.
Например:
int mas1 [l];
mas1 mas2[k]; int mas2[k][l];
mas2 mas3[n]; int mas3[n][k][l];
mas3 mas4[m]; int mas4[m][n][k][l];
В приведенном примере первый массив mas1 – одномерный, состоящий из l целых чисел типа int. Второй массив mas2 – одномерный, но состоящий из kэлементов типа mas1, то есть из k одномерных массивов. Третий массив также как и четвертый также одномерные, состоящие, в свою очередь, из массивов соответственно mas2 и mas3. Таким образом, многомерные массивы (запись справа) могут быть записаны как одномерные (запись слева).
Рис. 12.2. Блок–схема ввода четырехмерного массива
Иногда это бывает удобно. Из приведенного примера видно, что в качестве типа элементов последующего массива используется имя предыдущего массива.
Для доступа к отдельному элементу массива mas4 необходимо использовать четыре вложенных цикла. Причем, самим внутренним циклом должен быть цикл, который указывает текущее значение самого правого индекса, а самим внешним циклом должен быть цикл, который указывает текущее значение самого левого индекса. Это иллюстрируется ниже фрагментом блок – схемы (Рис.12.2), где самый внутренний цикл обеспечивает изменение самого правого индекса d, а самый внешний цикл обеспечивает изменение самого правого индекса a. По этому принципу могут описываться массивы любой размерности.
Описание массивов с помощью инструкции typedef
Инструкция typedef позволяет упростить описание группы однотипных массивов. Синтаксис ее следующий:
typedef тип элемента имя массива; |
Например:
float a[5][3], b[5][3], c[5][3];
Этот оператор описания группы массивов можно представить по–другому:
typedef float mas[5][3];
mas a, b, c;
Здесь в первом операторе создан новый тип массива mas, а во втором операторе он используется для описания массивов a, b, c. Этот прием удобен для описания большой группы однотипных массивов.