Пример двумерного массива - зал в кинотеатре. В зале имеется некоторое количество рядов, в каждом из которых имеется некоторое количество мест. Допустим, 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