Двумерные массивы
Массивы, рассмотренные выше, имеют элементы, упорядоченные по одному индексу и называются одномерными массивами или векторами. Массив может быть двумерным, трехмерным и т. д. Двумерные массивы имеют элементы, упорядоченные по двум индексам и часто называются матрицами. В Турбо-Паскале при описании многомерного массива диапазоны изменения индексов перечисляются через запятые, например:
Var A: array[1..30, 1..7] of byte;
Рассмотрим пример работы с двумерными массивами.
Описанная выше таблица может быть представлена в виде набора элементов строк ( 30) и столбцов ( 7 ):
Массив значений можно, например, задать с использованием функции Random, например:
for i:= 1 to N do for j:= 1 to M do A[i, j]:= random(4)+2;
Для вывода элементов массива "A" на экран удобно использовать вложенный цикл:
for i:= 1 to N do
begin writeln; for j:= 1 to M do write(A[i,j]:7, ' _ _') end;
Для расчета массива "SS" - сумм "M" элементов в каждой из "N" строк массива "A" (NxM) можно применить операторы:
for i:= 1 to N do
begin SS[i]:= 0;
for j:= 1 to M do SS[i]:= SS[i] + A[i, j] end;
Здесь для каждого индекса "i" от 1 до N происходит суммирование элементов A[i, j] по индексу "j" от 1 до M.
При модификации массива "A" изменяется расположение данных в исходном массиве, например, в случае вставки данных из линейного массива "B" в колонку с номером "M1" необходимо сдвинуть данные в колонках J >= M1 используя операторы:
for i:= 1 to N do begin
for j:=M+1 downto M1+1 do A[i,j]:=A[i,j-1]; A[i,M1]:=B[i] end;
При создании новых массивов согласно некоторым условиям выбираются данные из элементов исходного массива. Например, для создания массива "В" из четных столбцов массива "A" можно использовать операторы:
for j:= 1 to M do If (j Mod 2) = 0 then
for i:= 1 to N do B[i,j Div 2]:= A[i,j];
Для создания массива "В", состоящего из строк массива "A", удовлетворяющих условию A[i,1] > C, где C - заданное число, можно использовать операторы:
k:= 0;
for i:= 1 to N do
If A[i,1] > C then begin k:= k + 1; for j:= 1 to M do B[k,j]:= A[i,j] end;
Пример 1.
Организация ввода элементов одномерного массива с клавиатуры.
PROGRAM Primer_1;
const K=5; { Количество элементов в массиве }
type M = Array [1...К] of Integer; { Описание типа массива}
var A:M;
PROCEDURE Wwod_Hass (var S:M); {вв.с клавиатуры эл.массива}
var I: Integer;
BEGIN
WrlteLn ('Введите элементы массива А: ');
For i:=1 to К do
begin Write ('Введите ',i, 'элемент массива '};
ReadLn(S[i]) end
END;
PROCEDURE Wywod_Mass (S:M); {выв. на экран эл. массива}
var i: Integer;
BEGIN
Write ('Вот Ваш массив: ');
For i:=1 to К do Write (S[i],' ')
END;
BEGIN
Wwod_Mass (A); { Вызов процедуры ввода элементов массива }
Wywod_Hass (A) { Вызов процедуры вывода элементов массива}
END
Пример 2.
Организация ввода элементов двухмерного массива с клавиатуры
PROGRAM Primer_2;
const M = 2; { Количество строк в массиве }
N = 3; { Количество столбцов в массиве }
type Т = Array [1..M,1..N] of Integer; {типа массива}
var A: T;
PROCEDURE Wwod_Mass (var S. T); {вв. с клав-ры эл. массива}
var i,j:Integer;
BEGIN
WriteLn ('Введите массив: ");
For i:= 1 to M do
For j:= 1 to N do begin
Write (-Введите S[-,i, ,j, ']: '); ReadLn (S[i,J]) end
ENd;
PROCEDURE Wywod_Mass (S: T); {выв на экран эл. массива }
var i,j: Integer;
BEGIN
WriteLn ('Вот Ваш массив: ');
For i:=1 to M do begin
For j:= 1 to N do Write (S[i,j], ' '); WriteLn end
END;
BEGIN
Wwod_Mass (A); { Вызов процедуры ввода элементов массива }
Wywod Mass (A) { Вызов процедуры вывода элементов массива }
END.