Понятие многомерных массивов
До сих пор мы рассматривали массивы, каждый элемент которых содержал только один индекс. Такие массивы обычно называются одномерными. В математике часто используются многомерные массивы, т. е. массивы массивов. Особенно широкое распространение получили двухмерные массивы, иначе называемые матрицами.
Описание двумерного массива:
Type
<имя>=array[диапазон1,диапазон2] of <базовый тип>;
диапазон1, диапазон2 – диапазоны для двух индексов.
Например, изображение целых чисел последовательно в нескольких строках является матрицей:
5 4 3 6
2 8 1 7
4 3 9 5
Данная матрица имеет размер 3 на 4, т. е. она состоит из трех строк и четырех столбцов. Если всю матрицу обозначить одним именем, например А, то каждый элемент матрицы обозначается с двумя индексами, например A[I,J]. Здесь первый индекс I обозначает номер строки (I = 1, 2, 3), второй индекс J — номер столбца (J = 1, 2, 3, 4). Такую матрицу можно описать следующим образом (с использованием имени типа Т):
TYPE
Т=ARRAY [1..3, 1..4] OF INTEGER;
VAR А:Т;
ПРИМЕРЫ ПРОГРАММИРОВАНИЯ ЗАДАЧ С ИСПОЛЬЗОВАНИЕММАССИВОВ
Найти максимальный элемент массива В
а) массив – константа
Program m1;
const
B:array[1..2,1..5] of integer=((4,3,2,-1,0),(-7,0,13,2,8));
var
max,i,j:integer;
begin
max:=b[1,1];
for i:=1 to 2 do
for j:=1 to 5 do
if b[i,j]>max then max:=b[i,j];
writeln('max=',max);
end.
--------------
Ответ
max=13
-----------------------------------------------------------
б) Массив – переменная величина; элементы массива задаются с клавиатуры.
Program m4;
type
mass=array[1..2,1..5] of integer;
var
B:mass;
max,i,j:integer;
begin
writeln('введите массив В');
for i:=1 to 2 do
for j:=1 to 5 do
read(b[i,j]);
writeln;
max:=b[1,1];
for i:=1 to 2 do
for j:=1 to 5 do
if b[i,j]>max then max:=b[i,j];
writeln('max=',max);
end.
--------------------
Ответ
введите массив В
4 3 5 2 6
9 8 -4 67 2
max=67
--------------------------------------------------------------------------------
в) Массив – переменная величина; элементы массива задаются с помощью генератора случайных чисел RANDOMIZE.
Program m3;
var
B:array[1..2,1..5] of integer;
max,i,j:integer;
begin
randomize;
writeln('введите массив В');
for i:=1 to 2 do begin
for j:=1 to 5 do begin
b[i,j]:=random(30)-10;
write(b[i,j]:3,' ');
end;
writeln;
end;
writeln;
max:=b[1,1];
for i:=1 to 2 do
for j:=1 to 5 do
if b[i,j]>max then max:=b[i,j];
writeln('max=',max);
end.
-----------------------------
Ответ
введите массив В
18 10 17 10 10
12 10 7 8 19
max=19
--------------------------------------------------------------------------------------------------
г) Описание типа массива задаётся в разделе описаний типа TYPE; массив – переменная величина; элементы массива вводятся с клавиатуры.
Program m4;
type
mass=array[1..2,1..5] of integer;
var
B:mass;
max,i,j:integer;
begin
writeln('введите массив В');
for i:=1 to 2 do
for j:=1 to 5 do
read(b[i,j]);
writeln;
max:=b[1,1];
for i:=1 to 2 do
for j:=1 to 5 do
if b[i,j]>max then max:=b[i,j];
writeln('max=',max);
end.
------------------------------------
Ответ
введите массив В
5 6 7 8 4
9 8 7 6 -5
max=9
----------------------------------------------------------------------------------------------------
Пример (одномерные массивы)
Вычислить сумму действительных чисел.
Программу составим в трех вариантах: в варианте 1 массив не используется, в варианте 2 он описывается в разделе переменных, в варианте 3 массив определяется в разделе типов.
Для иллюстрации результата выполнения программы возьмем семь конкретных чисел 5.1, 6.4, 8,7, 1.9, 3.6, 2.0, 4,2
PROGRAM АЗО;
CONST N=7; (* КОЛИЧЕСТВО ЧИСЕЛ *)
VAR
A : REAL; (* ВВОДИМОЕ ЧИСЛО *)
SUM : REAL; (* СУММА *)
I: INTEGER; (* ПАРАМЕТР ЦИКЛА *)
BEGIN
SUM:=0;
WRITELN('ВВЕДИТЕ ЧИСЛА ЧЕРЕЗ ПРОБЕЛЫ:');
FOR 1:=1 TO N DO
BEGIN
READ(A);
SUM:=SUM +A
END;
WRITELN('----------------------------------');
WRITELN ('СУММА ЧИСЕЛ =', SUM:6:2 )
END.
Здесь каждое число вводится внутри цикла и прибавляется к накапливаемой сумме SUM. Значение переменной А изменяется внутри цикла. После выполнения всего цикла значение А равно последнему введенному числу. Для А отведена одна ячейка памяти ЭВМ, если условно считать, что действительное число занимает одну ячейку.
ВЫЧИСЛЕНИЕ СУММЫ, 2-й ВАРИАНТ
PROGRAM A31;
CONST N=7; (* КОЛИЧЕСТВО ЧИСЕЛ *)
VAR
A : ARRAY[1..N] OF REAL; (* МАССИВ ЧИСЕЛ *)
SUM : REAL; (* СУММА *)
I : INTEGER; (* ПАРАМЕТР ЦИКЛА *)
BEGIN
WRITELN('ВВЕДИТЕ МАССИВ ЧИСЕЛ ЧЕРЕЗ ПРОБЕЛЫ:');
FOR I:=1 ТО N DO
RЕAD(А[i] ) ;
SUM:=0;
FOR I:=1 ТО N DO
SUM:=SUM +A[I] ;
WRITELN('----------------------------------'):
WRITELN('СУММА ЧИСЕЛ = ‘, SUM:6:2 )
END.
Здесь в разделе переменных VAR явно описан массив А. Для массива выделяется память в количестве семи ячеек, т. е. для каждого числа одна ячейка. В разделе операторов с помощью цикла сначала вводятся все значения элементов массива А. Затем организуется новый цикл для вычисления суммы. Применение массива приводит к увеличению используемой памяти ЭВМ - вместо одной ячейки (см. вариант 1) здесь выделено семь ячеек памяти. В то же время значения элементов массива сохраняются в памяти ЭВМ, и их можно использовать и после окончания выполнения циклической части.
Такой вариант программы целесообразно использовать в тех случаях, когда значения введенного массива многократно используются в программе.
ВЫЧИСЛЕНИЕ СУММЫ, 3-й ВАРИАНТ
PROGRAM А32А;
CONST N=7; (* КОЛИЧЕСТВО ЧИСЕЛ *)
TYPE Т=ARRAY[1..N] OF REAL; (* ТИП МАССИВА *)
VAR
А:Т; (* МАССИВ *)
SUM:REAL; (* СУММА *)
I:INTEGER; (* ПАРАМЕТР ЦИКЛА *)
BEGIN
WR1TELN('ВВЕДИТЕ МАССИВ ЧИСЕЛ ЧЕРЕЗ ПРОБЕЛЫ:');
FOR I:=1 ТО N DO
READ(А[I]);
SUM:=0;
FOR I:=1TO N DO
SUM:=SUM +A[I] ;
WRITELN('----------------------------------');
WRITELN('СУММА ЧИСЕЛ = ', SUM:6:2 )
END.
Вариант З отличается от предыдущего только введением типа массива, что делает программу более эффективной