Вывод элементов двумерного массива осуществляется поэлементно, как и в случае ввода. Для решения задачи вывода снова изобразим массив:
перемещение по строкам (цикл по переменной 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; {Запись в элемент значения}
// Вывод массива
for I:=1 to N do{Цикл по строкам. От 1 до максимального номера строки}
begin
for J:=1 to M do {Цикл по столбцам. От 1 до максимального номера столбца}
Write( A(I,J):4,’ ‘); // вывод элемента массива на экран
writeln;
end;
End.
Как видно цикл по J находится внутри цикла по I (они так и называются внутренний и внешний), поэтому на один шаг "сработает" цикл по I, затем полностью цикл по J, снова на один шаг цикл I и опять полностью цикл по J и т.д. Таким образом, выбирается строка 1 и начинается перемещение вдоль этой строки (по столбцам). Далее выбирается строка 2 и начинается вывод всех ее элементов и т.д., т.е. обработка элементов массива осуществляется по строкам. Если же циклы поменять местами, т.е. цикл по J сделать внешним, а цикл по I - внутренним обработка массива будет происходить по столбцам.
4.3 Многомерные массивы в Pascal
Кроме одномерных массивов могут быть и двумерные, и трехмерные, и прочие n-мерные массивы. "Мерность" массивов определяется количеством индексов, указываемых в квадратных скобках, для того чтобы определить элемент массива.
Пример:
A[7]
- A
- одномерный массив
S[2,-3]
- S
- двумерный массив
W[1,0,0]
- W
- трехмерный массив
Z[-1,3,4,3,0]
- Z
- пятимерный массив
На практике чаще всего используются одномерные массивы, реже двумерные, и значительно реже массивы больших размерностей.
Пример 1: Заполнить массив 1 случайными числами от -10 до 10. Заполнить массив 2 отрицательными числами из первого массива.
Сложность данной задачи в том, что заранее не известно сколько будет отрицательных чисел в массиве 1. Для подсчета их количества, а значит и количества элементов во втором массиве нужно использовать специальный счетчик, значение которого нужно увеличивать каждый раз при нахождении отрицательного элемента и его записи во второй массив.
Const
N = 15
Var
M1 : array [1..N] of Integer; // исходный массив
M2 : array [1..N] of Integer; // массив для «-» чисел.
I: integer; // Счетчик для перебора элементов массива в цикле
J: integer; // Счетчик для подсчета отрицательных значений
Begin
I:=1;
J:=1;
Randomize; // инициализация генератора случайных чисел
// заполнение массива 1 числами
For I:=1 to N do
M1[I]:= random(21) – 10; { в i-й элемент записывается число (от 1 до 20) - 10 }
For I := 1 to N do // цикл перебирает все элементы массива 1
If (M1[I] < 0) Then //Если элемент массива меньше 0, то
Begin //Будет несколько действий, открываем операторные скобки
M2[J] := M1[I]; {Записываем элемент массива 1 в текущий элемент массива 2}
J:= J+1; //Вручную увеличиваем счетчик элементов массива 2
End; //Закрываем операторные скобки
End.
Пример 2. Ввести с клавиатуры массив и распечатать его в обратном порядке
Program M2;
Var
A : Array [1..20] Of Integer;
I : Integer;
Begin
For I:=1 To 20 Do {Организуем цикл с параметром I по всем возможным элементам массива}
Readln(A[I]); {значениям индексов и вводим A[I] с клавиатуры}
For I:=20 Downto 1 Do {Распечатываем массив в обратном порядке}
Write(A[I]:4,' ')
End.
Пример 3. Задать и распечатать массив 10X10, состоящий из целых случайных чисел в интервале [1,100]. Найти сумму элементов, лежащих выше главной диагонали.
Program M5;
Var
A : Array[1..10,1..10] Of Integer;
I, K : Byte; // индексы массива
S : Integer; // сумма элементов
Begin
Randomize;
S:=0; // стартовое обнуление суммы элементов
For I:=1 To 10 Do
Begin
For K:=1 To 10 Do
Begin
A[I,K]:= Random(101);
Write(A[I,K]:6);
If K>I Then S:=S+A[I,K]
End;
Writeln
End;
Writeln('Сумма элементов выше гл. диагонали равна ',S)