тип Т, определяющий компоненты массива, может быть любым (кроме файла). Следовательно, тип T может быть в частном случае составным типом, в том числе массивом.
Пример.
Const M = 10; N = 15; K = 1; L = 12;
Type T1 = M..N; T2 = K..L; T = real;
Var A : array[T1] of array[T2] of T;
B : array[M..N] of array[K..L] of T .
Компонент такого массива обозначается a[i][j], b[i][j].
Обычно используют сокращенную форму описания массива:
VarA : array[T1,T2] of T;
B : array[M..N,K..L] of T.
В этом случае компонент имеет вид a[i,j], b[i,j].
В нашем примере А и B - это двумерные массивы, т.е. матрицы, элементы которых имеют тип T (в данном случае тип real).
Массивы могут быть и более чем двумерные. Пример трехмерного массива:
VarC : array[1..10,1..15,1..8] of real.
Компоненты многомерного массива располагаются в памяти таким образом, что наиболее быстро изменяется последний индекс, а наиболее медленно - первый индекс. По отношению к матрице это означает, что ее элементы располагаются в памяти по строкам: вначале все элементы первой строки в соответствии с описанием типа матрицы, затем все элементы второй строки и т.д.
Сравним расположение в памяти элементов одномерного массива и матрицы.
Const Mmax = 30; Nmax = 40;
Type Ar = array[1..Nmax] of byte;
Matrix = array[1..Mmax,1..Nmax] of byte;
Var X : Ar;
A : Matrix;
m, n : byte;
Предположим, что в программе введено n = 20 элементов массива X и элементов матрицы A ( Mmax, n Nmax).
В поле памяти, отведенном для массива X, будут последовательно заняты первые 20 байт. В отличие от этого, поле памяти A будет заполнено не всплошную, а фрагментарно элементами матрицы: 20 байтов первой строки, 20 свободных байтов, 20 байтов второй строки, 20 свободных байтов, …, 20 байтов пятнадцатой строки, 20 + 5 40 свободных байтов. Эту фрагментарность необходимо учитывать в ряде случаев при программной обработке матрицы.
Если A и B - массивы одного типа, то возможно присваивание B := A . Это связано с общим принципом работы оператора присваивания вида y := x - пересылка содержимого поля x в поле y. Если массивы A и B описаны одним именем типа, то это гарантирует, что структура и длина полей A и B одинаковы, в связи с чем не может быть нарушений работы программы при такой пересылке.
Пусть многомерный массив имеет k индексов (для матрицы k = 2). При обработке такого массива в общем случае производится изменение каждого его индекса. В связи с этим каждому индексу должна соответствовать отдельная переменная, которая при использовании оператора For является именем параметра цикла. Имена переменных-индексов не должны совпадать между собой.
Обработка многомерных массивов выполняется путем использования вложенных циклов, когда тело внешнего цикла содержит в своем составе другой цикл, являющийся для него внутренним.