Двухмерные массивы можно представить в виде прямоугольной таблицы или матрицы.
Рассмотрим матрицу А размерностью 2х3 (состоящую из двух строк по три элемента в каждой):
a11 a12 a13
A=
a21 a22 a23
Положение каждого элемента определяется двумя числами: номером строки, в которой находится элемент, и номером столбца. Например, а12 − это элемент, стоящий в первой строке и во втором столбце.
Имеется несколько способов объявления двухмерных массивов.
Способ 1. В Паскале двухмерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведенной выше:
Const n=2; m=3;
Type omyarray=Array[1..m] Of real;
dmyarray=Array[1..n] Of omyarray;
Var v: omyarray;
a: dmyarray;
В данном случае переменная v объявлена как одномерный массив из трех элементов вещественного типа. Переменная а описана как двухмерный массив из двух строк, в каждой по три элемента.
Способ 2. Описание массива А можно сократить, исключив определение типа omyarray в определении типа dmyarray:
Const n=2; m=3;
Type dmyarray=Array[1..n] Of Array[1..m]
Of <тип элементов>;
Var a: dmyarray;
Способ 3. Еще более краткое описание массива А можно получить, указывая диапазоны изменения индексов для каждой размерности массива:
Const n=2; m=3;
Type dmyarray=Array[1..n, 1..m]
Of <тип элементов>;
Var a: dmyarray;
Если нет необходимости описывать тип, то можно просто объявить массив в разделе описания переменных:
Var a: Array[1..n,1..m]
Of <тип элементов>;
Рассмотренные выше методы решения задач обработки одномерных массивов могут применяться и для обработки двухмерных массивов. Поскольку положение элемента в двухмерном массиве описывается двумя индексами (первый − номер строки, второй − номер столбца), программы для решения большинства матричных задач строятся на основе вложенных циклов. Обычно внешний цикл организуется по строкам матрицы, то есть в нем выбирается требуемая строка матрицы, а внутренний цикл − по столбцам матрицы, в нем выбирается элемент строки. Для присваивания значений элементам массива могут быть использованы операторы присваивания и операторы ввода.
Пример
В приведенном ниже примере осуществляются ввод и вывод двухмерного массива А размерностью 10х15. Формирование и вывод массива производятся в двух процедурах, которые последовательно вызываются из основной программы. Надо заметить, что формирование двухмерного массива можно осуществлять всеми четырьмя способами, описанными для одномерных массивов, то есть: вводом с клавиатуры, посредством генератора случайных чисел, с помощью файла или описанием типизированной константы. Пусть в нашем примере элементы задаются посредством генератора случайных чисел.
Program Example_110;
Const n=10; m=15;
Type dmyarray = Array[1..n, 1..m]
Of Integer;
Var A: dmyarray;
Procedure Init(Var x: dmyarray);
{Процедура формирования массива}
Var i, j: Integer;
Begin
For i=1 To n Do
For j:= 1 To m Do x[i, j]:=
-25+Random(51);
End;
Procedure Print(x: dmyarray);
{Процедура вывода массива на экран}
Var i, j: Integer;
Begin
For i:=1 To n Do
Begin {Вывод i-й строки массива}
For j:=1 To m Do Write(x[i, j]:5);
Writeln; {Переход на начало
следующей строки}
End;
End;
Begin
Init(A);
Writeln('Массив А:');
Print(A);
Readln;
End.
Можно выделить несколько видов задач на двухмерные массивы.