Понятие двухмерного массива и их объявление в Паскале
Из нескольких одномерных массивов одной длины можно "соорудить" двухмерный массив. На рисунке 2 изображен массив, состоящий из 3-х строк и 4-х столбцов (часто просто говорят: двухмерный массив 3 на 4). В двухмерных массивах каждая ячейка имеет два индекса: строка и столбец.
A =
1 2 3
Рисунок 2
Элементы данного двухмерного массива А записываются так:
Например элемент А(2,4) = 3, а элемент А(3, 2) = 7.
Значения элементов этого массива таковы:
А(1,1) = 8
А(1,2) = 7
А(1,3) = 2
А(1,4) = 13
А(2,1) = 5
А(2,2) = 1
А(2,3) = 0
А(2,4) = 3
А(3,1) = 8
А(3,2) = 7
А(3,3) = 9
А(3,4) = 15
Действия над элементами двухмерного массива осуществляются аналогично действиям над элементами одномерного массива:
А(1,2) + А(2,3) = 7 + 0 = 7
При работе с двухмерными массивами (так же как и при работе с одномерными массивами) возникает необходимость в отведении места памяти компьютера под массив (говорят о резервировании памяти под массив). Для этого также используется описание следующего вида:
const m = 10; {число строк}
n = 15; {число столбцов}
A : array[1..m,1..n] of Integer;
При решении задач удобно изображать массив в виде соответствующей алгебраической матрицы:
А(1,1)
А(1,2)
А(1,3)
А(1,4)
...
А(1,М)
А(2,1)
А(2,2)
А(2,3)
А(2,4)
...
А(2,М)
...
...
...
...
...
...
А(N,1)
А(N,2)
А(N,3)
А(N,4)
...
А(N,М)
где N - это количество строк, M - это количество столбцов
Ввод элементов двумерного массива осуществляется поэлементно, как и в случае одномерного массива. Для решения задачи ввода изобразим массив в виде матрицы:
перемещение по строкам (цикл по переменной I)
перемещение вдоль строки (цикл по переменной J)
А(1,1)
А(1,2)
А(1,3)
А(1,4)
...
А(1,М)
А(2,1)
А(2,2)
А(2,3)
А(2,4)
...
А(2,М)
...
...
...
...
...
...
А(N,1)
А(N,2)
А(N,3)
А(N,4)
...
А(N,М)
Зададим с помощью двух циклов перебор всех элементов массива. Один цикл (по переменной I) будет осуществлять перебор строк, другой (по переменной J) перебор элементов в строке. В качестве значения элемента будем записывать сумму номера строки и номера столбца элемента в массиве:
const m = 10; {число строк}
n = 15; {число столбцов}
var
A : array[1..m,1..n] of Integer; {Объявление двумерного массива}
Begin
for I:=1 to N do {Цикл по строкам. От 1 до максимального номера строки}
for J:=1 to M do {Цикл по столбцам. От 1 до максимального номера столбца}
A(I,J):= i+j; {Запись в элемент значения}
End.
Как видно цикл по J находится внутри цикла по I (они так и называются внутренний и внешний), поэтому на один шаг "сработает" цикл по I, затем полностью цикл по J, снова на один шаг цикл I и опять полностью цикл по J и т.д. Таким образом выбирается строка 1 и начинается перемещение вдоль этой строки (по столбцам). Далее выбирается строка 2 и начинается ввод всех ее элементов и т.д., т.е. обработка элементов массива осуществляется по строкам. Если же циклы поменять местами, т.е. цикл по J сделать внешним, а цикл по I - внутренним обработка массива будет происходить по столбцам.