Pascal


13. Двумерные массивы (прямоугольные таблицы)

Рассмотрим массив массивов. Т.е. массив, элементы которого в свою очередь являются массивами. Такая конструкция в Паскале возможна, т.к. никаких ограничений на тип элементов (кроме принадлежности к одному и тому же типу) не накладывается:
m: array [1 .. 3] of array [1 .. 2] of integer;

Попробуем разобраться. Первая часть описания: array [1 .. 3] of ...   указывает на то, что речь идет о массиве m из 3 элементов (домов). Из второй части выясняется, что элементы m[1], m[2] и m[3] в свою очередь тоже являются массивами типа array [1 .. 2] of integer.
Следовательно, транслятор, встретив такое объявление переменной m, выделит в памяти 3 блока, каждый из которых в свою очередь будет состоять из двух (всего: 3*2=6) ячеек (квартир) типа integer (три двухквартирных дома - негусто):

1
2
3
<-
первый индекс (дом)
   
1
2
   
1
2
   
1
2
<-
второй индекс (квартира)

Ясно, что для указания на элемент, выделенный цветом, надо к обычному указанию на элемент "внешнего" массива m[2] (номеру дома) добавить еще и "внутренний" индекс интересующей нас компоненты (номер квартиры): m[2][1].

Итак, с помощью вышеприведенного описания объявляются cледующие шесть переменных: m[1][1], m[1][2], m[2][1], m[2][2], m[3][1], m[3][2].

С точки зрения программиста эти переменные удобнее представить в виде прямоугольной таблицы, где две компоненты каждого из трех "внешних" элементов располагаются в одной строке:

 
1
2
1
m[1][1]
m[1][2]
2
m[2][1]
m[2][2]
3
m[3][1]
m[3][2]

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


Возвращаясь к описанию, отметим, что в Паскале допускается сокращенная форма объявления прямоугольного (двумерного) массива:
m: array [1 .. 3, 1 .. 2] of integer;

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

Возможна и более компактная форма обращения к отдельному элементу массива: вместо m[2][1] можно писать m[2, 1], указав в одинарных квадратных скобках номер строки и номер столбца (именно в таком порядке), на пересечении которых находится элемент.