Пример двумерного массива - зал в кинотеатре. В зале имеется некоторое количество рядов, в каждом из которых имеется некоторое количество мест. Допустим, 8-й ряд место 12 – элемент двумерного массива – первый индекс i=8, второй индекс – j=12.
Еще один пример – пассажирский поезд, который имеет несколько вагонов, в каждом из которых имеется определенное число мест. И билет пассажира, в котором указаны 4-й вагон и 5-е место указывает на элемент двумерного массива, который располагается на пересечении 4-й строки и 5-го столбца.
Даже дата в каком-либо году – двумерный массив: первый индекс – номер месяца, второй – номер дня в месяце.
2.2 Описание двумерного массива
При описании массива нужно указать имя массива, диапазоны изменения двух индексов и тип элементов. Описывать массив можно как в разделе type, так и в разделе var тремя способами.
Самый частый способ:
Var имя_мас:array [нач_индекс1 .. кон_индекс1, нач_индекс2 .. кон_индекс2] of тип_элем;
Еще один способ – непосредственно указать, что данная структура – массив массивов:
Var имя_мас:array [нач_индекс1 .. кон_индекс1] of array [нач_индекс2 .. кон_индекс2] of тип_элем;
И наименее встречающееся описание:
Var имя_мас:array [нач_индекс1 .. кон_индекс1][нач_индекс2 .. кон_индекс2] of тип_элем;
Здесь имя_массива – имя самого массива, тип_элем – тип элементов массива, например integer; char; string; real и т. д., нач_индекс1 – нижнее значение первого индекса элементов массива, кон_индекс1 – верхнее значение первого индекса массива, нач_индекс2 – нижнее значение второго индекса элементов массива, кон_индекс2 – верхнее значение второго индекса массива. Первый индекс указывает на номер строки, а второй – на номер столбца, на пересечении которых находится элемент.
Пример объявления массива:
Var tabl: array [1..9,1..9] of integer;
Здесь описан тип массива из целочисленных элементов, количество строк в массиве – девять, количество столбцов в массиве – девять.
Тот же массив можно было объявить следующими способами:
Var tabl: array [1..9][1..9] of integer;
Var tabl: array [1..9] of array [1..9] of integer;
2.3 Операции с двумерными массивами
1) Обращение к элементу массива происходит путем указания имени массива, после чего в квадратных скобках указываются через запятую два индекса: номер строки, в которой расположен элемент, и номер столбца.
a[4,8] – обращение к элементу массива a, расположенному на пересечении четвертой строки и восьмого столбца;
b[i, j] – обращение к элементу массива b, расположенному на пересечении i-й строки и j-го столбца.
Над элементом массива можно осуществлять все допустимые операции для переменных типа того элемента.
2) Присваивание: с массивами в целом можно выполнять только эту операцию.
x:=y – присваивания одного массива другому,
или x[i]:=y[j] – присваивание одной строки массива другой,
причем массивы должны быть одного типа и иметь одинаковое количество присваиваемых элементов.
Все остальные действия можно выполнять лишь с отдельными элементами массива.
2.4 Стандартные процедуры обработки двумерных массивов
Пусть описан массив a следующим образом:
Var a:array [1..15, 1..10] of integer;
то есть массив состоит из пятнадцати строк и десяти столбцов.
1) Ввод массива.
Каждый элемент двумерного массива приходится вводить отдельно, так же как и в случае одномерного массива. А так как элементов несколько, то чтобы перебрать все элементы, нужно перебрать все строки от 1 до 15, а в каждой из строк перебрать все номера столбцов. То есть, при рассмотрении первой строки (i=1) мы должны рассмотреть все номера столбцов, (с j=1 до j=10), при рассмотрении второй строки (i=2) мы должны также рассмотреть все номера столбцов, (с j=1 до j=10), и т. д., при рассмотрении последней строки (i=15) мы должны рассмотреть все номера столбцов, (с j=1 до j=10). То есть для ввода массива нужно завести цикл от i=1 до i=15, который будет содержать внутренний цикл от j=1 до 10:
For i:=1 to 15 do for j:=1 to 10 do readln(a[i, j]);
2) Вывод массива.
Аналогично вводу, каждый элемент любого массива приходится выводить отдельно, для чего нужно завести цикл от i=1 до i=15, который также будет содержать внутренний цикл от 1 до 10. Чтобы вывести массив в виде таблицы, нужно после ввода каждой строки (то есть после перебора всех номеров столбцов), перейти на новую строку при помощи оператора writeln:
For i:=1 to 15 do
begin for j:=1 to 10 do writeln(a[i]);
writeln;
end;
3) Нахождение суммы элементов массива.
Элементы двумерного массива складываются аналогично одномерным, только меняются уже два индекса, в то время как в одномерном массиве – один.
Соответствующий фрагмент программы:
S:=0;
For i:=1 to 15 do for j:=1 to 10 do s:=s+a[i, j];
Writeln(s);
Что касается всей программы, то перед подсчетом суммы обязательно нужно ввести массив, после чего вывести. Текст всей программы:
Program z1;
Var a:array [1..15,1..10] of integer;
i, j, s:integer;
begin
for i:=1 to 15 do for j:=1 to 10 do readln(a[i, j]);
for i:=1 to 15 do
begin for j:=1 to 10 do writeln(a[i, j]);
writeln;
end;
s:=0;
for i:=1 to 15 do for j:=1 to 10 do s:=s+a[i, j];
writeln(s)
end.
4) Нахождение произведения элементов массива.
Program z2;
Var a:array [1..15,1..10] of integer;
i, j, p:integer;
begin
for i:=1 to 15 do for j:=1 to 10 do readln(a[i, j]);
for i:=1 to 15 do
begin for j:=1 to 10 do writeln(a[i, j]);
writeln;
end;
p:=1;
for i:=1 to 15 do for j:=1 to 10 do p:=p*a[i, j];
writeln(s)
end.
5) Нахождение минимального (наименьшего) и максимального (наибольшего) элемента массива.
Аналогично одномерному массиву, для определения максимума в двумерном массиве первый элемент массива (а он стоит в первой строке и в первом столбце) обозначим за максимальный, затем пересмотрим все остальные элементы массива и если встретим элемент, больший того, который считался максимальным до этого момента, то обозначим его за максимальный.
Для хранения максимального элемента заведем переменную max, в которую на первом шаге занесем первый элемент массива.
max:=a[1,1];
Перебирая в двойном цикле все строки и столбцы, а тем самым и все элементы массива, будем сравнивать их с переменной max, и если элемент массива больше переменной max, то переменной max присвоим текущий i-й элемент массива, если же элемент массива не больше переменной max, то переменная max не меняется.
For i:=1 to 15 do for j:=1 to 10 do if a[i, j]>max then max:=a[i, j];
Соответствующий фрагмент программы:
max:=a[1,1];
For i:=1 to 15 do for j:=1 to 10 do if a[i, j]>max then max:=a[i, j];
Writeln(max);
Текст всей программы:
Program z3;
Var a:array [1..15,1..10] of integer;
i, ,j, max:integer;
begin
for i:=1 to 15 do for j:=1 to 10 do readln(a[i, j]);
for i:=1 to 15 do
begin for j:=1 to 10 do writeln(a[i, j]);
writeln;
end;
max:=a[1,1];
For i:=1 to 15 do for j:=1 to 10 do if a[i, j]>max then max:=a[i, j];
Writeln(max);
end.
2.5 Некоторые примеры решения задач на массивы
Пусть описан массив a следующим образом:
Var a:array [1..15,1..10] of integer;
Рассмотри те же самые задачи, что и в пункте 1, обращая внимания на то, что разница при обработке одномерных и двумерных массивов состоит в том, что в двумерном массиве при переборе всех элементов нужно перебирать и номера строк, и номера столбцов.
Пример 1. Найти сумму элементов, больших трех.
Текст программы:
Program z4;
Var a:array [1..15,1..10] of integer;
i, ,j, s:integer;
begin
for i:=1 to 15 do for j:=1 to 10 do readln(a[i, j]);
for i:=1 to 15 do
begin for j:=1 to 10 do writeln(a[i, j]);
writeln;
end;
s:=0;
for i:=1 to 15 do for j:=1 to 10 do if a[i, j]>3 then s:=s+a[i, j];
writeln(s)
end.
Пример 2. Найти произведение четных элементов.
Program z5;
Var a:array [1..15,1..10] of integer;
i, ,j, p:integer;
begin
for i:=1 to 15 do for j:=1 to 10 do readln(a[i, j]);
for i:=1 to 15 do
begin for j:=1 to 10 do writeln(a[i, j]);
writeln;
end;
p:=1
for i:=1 to 15 do for j:=1 to 10 do if a[i, j] mod 2 =0 then p:=p*a[i, j];
writeln(p)
end.
Пример 3. Найти количество элементов, принадлежащих промежутку (2; 10].
Program z6;
Var a:array [1..15,1..10] of integer;
i, ,j, k:integer;
begin
for i:=1 to 15 do for j:=1 to 10 do readln(a[i, j]);
for i:=1 to 15 do
begin for j:=1 to 10 do writeln(a[i, j]);
writeln;
end;
k:=0;
for i:=1 to 15 do for j:=1 to 10 do if (a[i, j]>2)and(a[i, j]<=10) then k:=k+1;
writeln(k)
end.
Пример 4. Найти максимальный элемент в массиве и его порядковый номер (то есть его нахождение в массиве).
Введем две дополнительных переменных, допустим k1, в которой хранится номер строки максимального элемента, и k2, в которой хранится номер столбца максимального элемента.
Max:=a[1,1]; k1:=1; k2:=1;
For i:=1 to 15 do for j:=1 to 10 do if a[i, j]>max then begin
Max:=a[i, j];
K1:=i;
K2:=j
end;
Текст программы:
Program z7;
Var a:array [1..15,1..10] of integer;
i, ,j, max, k1, k2:integer;
begin
for i:=1 to 15 do for j:=1 to 10 do readln(a[i, j]);
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


