Двумерные массивы
Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из
двух чисел – номера строки, в которой находится элемент, и номера столбца. Таким образом, номер
элемента определяется пересечением строки и столбца. Например, A12 - это элемент, стоящий в
первой строке и во втором столбце.
Самый простой способ описания двумерного массива
Var A: array[1..n,1..m] of <тип элементов>.
Поскольку положение элемента в двумерном массиве описывается двумя индексами (первый –
номер строки, второй – номер столбца), программы большинства задач для работы с матрицами
строятся на основе вложенных циклов. Обычно внешний цикл работает по строкам матрицы, т.е. с
его помощью выбирается требуемая строка матрицы, а внутренний цикл – по столбцам матрицы, т.е.
здесь выбирается нужный элемент из выбранной уже строки.
Значения двухмерного массива вводятся с помощью вложенного оператора цикла типа for:
for I:=1 to 10 do
for J:=1 to 10 do
read(Massiv[I,J]);
Второй способ задания – это задание с помощью генератора случайных чисел.
Аналогом массивов языка Паскаль в математике являются матрицы. Матрицы, у которых число
строк равно числу столбцов, называются квадратными. Квадратные матрицы имеют главную и
побочную диагонали. Например, для матрицы A на главной диагонали лежат элементы 1, 5 и 9, а на
побочной – 3, 5 и 7.
A=
Если:
I = j – элемент расположен на главной диагонали
I > j - элемент расположен ниже главной диагонали
[ < j - элемент расположен выше главной диагонали
I + j = n+1 - элемент расположен на побочной диагонали
I + j < n+1 - элемент расположен над побочной диагональю
I + j > n+1 - элемент расположен под побочной диагональю
Вывод матрицы в виде таблицы:
For i:=1 to n do
Begin
For j:= 1 to m do
Write(a[i]:4);
Writeln
End;
Еще один способ:
For i:=1 to n do
For j:= 1 to m do
If j<m then write(a[i]:4)
Else writeln(a[i]:4);
Пример 1. Дан двумерный массив размерности 10х10. Заполнить его случайными числами на
отрезке [-10,10]. Вывести на печать исходный массив и массив, полученный заменой всех
отрицательных элементов нулями.
Program prim1;
Uses crt;
Var mm:array[1..10,1..10] of integer;
I,j:integer;
Begin
Clrscr;
Randomize;
for I:=1 to 10 do
for J:=1 to 10 do
Mm[I,J]:=random(21)-10; {заполнение массива случайными числами}
writeln(‘исходный массив’);
for I:=1 to 10 do begin {печать исходного массива}
gotoxy(1,1+i);
for J:=1 to 10 do
write(mm[i,j]:3);
end;
for I:=1 to 10 do {преобразование массива}
for J:=1 to 10 do
if mm[I,j]<0 then mm[I,j]:=0;
writeln(‘Преобразованный массив’);
for I:=1 to 10 do begin {печать преобразованного массива}
gotoxy(1,14+i);
for J:=1 to 10 do
write(mm[i,j]:3);
end;
readln;
end.
Для вывода двумерных массивов очень полезно использовать стандартную функцию, gotoxy(x,y),
которая перемещает курсор в точку с координатами (x,y). Печать исходного массива начинается с
позиции (1,2), а печать преобразованного массива начинается с позиции (1,14).
Пример 2. Составить программу вычисления суммы всех элементов матрицы размером 4х4.
Элементы матрицы задаются с помощью генератора случайных чисел.
program prim2;
var
i,j: integer;
s: real;
matr: array[1..4,1..4] of integer;
begin
randomize;
for i:= 1 to 4 do
for j:= 1 to 4 do
begin
matr[i,j]:=random(25);
end;
for i:= 1 to 4 do
for j:= 1 to 4 do
begin
s:=s+matr[i,j];
end;
writeln('Сумма всех элементов матрицы = ',s:8:2);
readln
end.
program prim3;
var
i,j: integer;
matr: array[1..4,1..6] of integer;
sum:array[1..4] of integer;
begin
randomize;
for i:= 1 to 4 do
for j:= 1 to 4 do
matr[i,j]:=random(25)-15;
for i:= 1 to 4 do begin
sum[i]:=0; {задание нач. значений элементов массива сумм}
for j:= 1 to 6 do {накопление суммы отриц. элементов}
if matr[I,j] < 0 then sum[i]:=sum[i]+matr[i,j];
end;
writeln(‘исходный массив’);
for I:=1 to 10 do begin {печать исходного массива}
gotoxy(1,1+i);
for J:=1 to 10 do
write(matr[i,j]:4);
end;
gotoxy(1,10);
for i:=1 to 4 do {печать массива сумм}
write(sum[i]:4);
readln
end.