Pascal позволяет создавать массивы, объединяющие данные любого из типов: и целые, и вещественные, и символьные, и строковые. Объединить в массив можно даже... сами массивы. Да! И такие массивы в программировании встречаются довольно часто. Например, пусть массив A содержит 10 годовых оценок ученика Иванова. А тогда где хранить информацию о годовых оценках всех, например, двадцати трех учеников класса? Для такого типа данных подойдет массив, элементами которого являются массивы A. Представить такой массив можно в виде прямоугольной таблицы (матрицы), состоящей из 23 строк по 10 элементов в каждой строке:
Двумерный массив или матрица представляет собой таблицу, в которой расположены элементы в i-строках и j-столбцах.
Описание матрицы:
Объявляется матрица следующим образом:
var A: array[1..23] of array[1..10] of integer;
или сокращенно:
var A: array[1..23, 1..10] of integer;
Обращение к элементу матрицы:
A[1, 10] - элемент, стоящий в 1 строке и в 10 столбце.
A[5, 3] - элемент, стоящий в 5 строке и в 3 столбце.
Важно! При обращении к элементу сначала указывается номер строки, затем номер столбца!
Для обработки двумерных массивов (заполнение, вывод на экран, поиск нужного элемента) приходится использовать вложенные циклы: внешний цикл перебирает строки, внутренний - элементы столбцы.
Ввод и вывод двумерного массива производится поэлементно.
{ввод матрицы}
writeln(‘введите матрицу’);
for i:=1 to 23 do
for j:=1 to 10 do begin write('A[', i , ',' , ,j, ']=');
readln(A[i, j]);
end;
В памяти компьютера матрица хранится поэлементно, в таком же порядке, как показано выше, поэтому для более наглядного представления при выводе, матрицу лучше выводить в виде таблицы по строкам.
{вывод матрицы}
writeln(‘полученная матрица’);
for i:=1 to 23 do begin
for j:=1 to 10 do write(A[i, j], ' ');
writeln;
end;
Матрицу можно вводить и с помощью датчика случайных чисел, например:
for i:=1 to 10 do
for j:=1 to 10 do B[i, j]:=random(100);
Задание 1. Запишите объявление целочисленного массива по его изображению:
а1,1 а1,2 ... а1,13
а2,1 а2,2 ... а2,13
.....................................
а6,1 а6,2 ... а6,13
Задание 2. Запишите фрагмент кода, в котором массив a, объявленный как a: array[1..6, 0..14] of integer;, заполняется по предложенному правилу:
элементы массива - случайные числа из промежутка от -5 до 5:
каждый элемент массива равен сумме своих индексов:
Задание 3. Создайте программу, которая заполняет массив 6×7 числами по следующему правилу:
Каждый элемент равен разности своих индексов. Выведите созданный массив на экран.
var A: array[1..6, 1..7] of integer;
i,j:integer;
begin
writeln('введите матрицу');
for i:=1 to 6 do
for j:=1 to 7 do begin write('A[', i , ',' , j, ']=');
readln(A[i, j]);
end;
for i:=1 to 6 do
for j:=1 to 7 do A[i, j]:=i - j;
writeln('полученная матрица');
for i:=1 to 6 do begin
for j:=1 to 7 do write(A[i, j], ' ');
writeln;
end;
end.
Задание 4. Напишите программу формирования и вывода массива размером 6x3, каждые три последовательных элемента в строке которого составлены по следующему правилу:
1-й — равен случайному двузначному числу;
2-й — равен целой части от деления случайного трехзначного числа на сумму индексов текущего элемента;
3-й — равен разности двух предыдущих элементов.
Фрагмент программы:
for i:=1 to 6 do begin
A[i, 1]:=random(90)+10;
A[i, 2]:=(random(900)+100) div (i+2);
A[i, 3]:= A[i, 1] - A [i, 2];
end;
Задание 5. Составьте программу решения следующей задачи: Дан массив 5*5. Найдите максимальное значение для каждого столбца и индексы максимального элемента всего массива. Найдите сумму элементов главной диагонали.
var A: array[1..5, 1..5] of integer;
i, j, max, nom_i, nom_j, Sum: integer;
begin
{ввод матрицы}
for i:=1 to 5 do
for j:=1 to 5 do A[i, j]:=random(100);
{вывод матрицы}
for i:=1 to 5 do begin
for j:=1 to 5 do write(A[i, j]:5);
writeln;
end;
{найдем максимальный элемент для каждого столбца}
for j:=1 to 5 do begin
max:=A[1, j];
for i:=1 to 5 do if A[i, j]>max then max := A[i, j];
writeln('максимальный элемент ', j, ' - го столбца равен ', max);
end;
{найдем максимальный элемент для всей матрицы и его индексы}
max:=A[1,1];
nom_i:=1;
nom_j:=1;
for i:=1 to 5 do
for j:=1 to 5 do if A[i, j]>max then begin
max:=A[i, j];
nom_i:=i;
nom_j:=j;
end;
writeln('максимальный элемент для всей матрицы равен ',max, ' его индексы: ', nom_i, nom_j);
{найдем сумму элементов главной диагонали}
j:=1;
Sum:=0;
for i:=1 to 5 do begin Sum:=Sum+A[i, j];
j:=j+1;
end;
writeln('сумма элементов главной диагонали равна ',sum);
end.