Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие Алгоритмизация и программирование.doc
Скачиваний:
57
Добавлен:
11.03.2015
Размер:
796.67 Кб
Скачать

19.3. Многомерные массивы

Если количество типов индекса в описании массива равно n, то массив называютn-мерным. Формально размерность массива не ограничена, но фактически она зависит и от размера базового типа, и от ограничения на объем памяти структурированных типов.

Для представления матриц используются двумерные массивы. Тип первого индекса определяет число строк, а тип второго индекса число столбцов матрицы. Например,

const ROW=20;

COL=10;

type t_matr=array[1..ROW, 1..COL] of word;

var a : t_matr;

d: array[1..2, 1..3, (x, y)] of real;

Тип t_matrдвумерный массив размером 20х10. Его можно использовать для работы с матрицами порядка не больше чем 20x10. Переменнаяdтрехмерный массив.

Обращение к элементам многомерных массивов:

Идентификатор имя массива. Число выражений (индексов) в квадратных скобках должно быть равно размерности массива. Например,a[3, 4],d[2, 1,y].

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

d [1, 1, x], d [1, 1, y], d [1, 2, x], d [1, 2, y], d [1, 3, x], d [1, 3, y],

d [2, 1, x], d [2, 1, y], d [2, 2, x], d [2, 2, y], d [2, 3, x], d [2, 3, y].

Для ввода и вывода многомерных массивов используются вложенные циклы. В качестве примера приведем фрагмент программы вывода в виде таблицы описанного выше массива a(iиjцелочисленные переменные):

for i :=1 to ROW do {i  номер строки }

begin

writeln; {переход к новой строке}

for j :=1 to COL do {j  номер столбца}

write( a[i, j] : 7)

end;

19.4. Еще один способ получения многомерных массивов

В Паскале нет ограничений на базовый тип массива. Базовым типом одномерного массива может быть, в частности, одномерный массив. Например,

constMaxLen = 100;

typet_xyz= (x,y,z);

t_point= array[t_xyz]ofreal;{тип для координат точки или вектора}

t_points = array [1..MaxLen] of t_point; {тип для координат 100 точек}

varp:t_points;

С переменной р можно работать как с двумерным массивом. p[i]одномерный массив координатi-й точки, содержащий 3 элемента:p[i][х],p[i][y],p[i][z] (iцелое от 1 до 100). Индексы в ТР можно записывать не в отдельных скобках, а перечислить через запятую:p[i, х],p[i,y],p[i,z].

Использование многомерного массива, описанного как массив массивов меньшей размерности, удобно, если предполагается обрабатывать массивы меньшей размерности как единые целые. Например, в массиве точек pобменi-й иj-й точек выполняет фрагмент программы

t := p[i]; p[i] := p[j]; p[j] := t; (t  переменная типа t_point).

П

var p : array[1..MaxLen, t_xyz] of real;

ри описании аналогичный фрагмент имеет вид:

t := p[i, х]; p[i, х] := p[j, х]; p[j, х] := t;

t := p[i, y]; p[i, y] := p[j, y]; p[j, y] := t;

t := p[i, z]; p[i, z] := p[j, z]; p[j, z] := t;