
Ввод или инициализация двумерного массива
Двумерный вводится в память машины поэлементно.
Для этого необходимое наличие двух циклов, так как изменяется и номер строки и номер столбца.
Ввод массива с клавиатуры:
program Vvod_matr1;
const n=9; m=11;
{общее максимальное количество строк и столбиков }
var а : array [1..n,1..m] of byte;
i, j:byte; {текущие индексы}
n1, m1:byte; ; { количество строк и столбиков при вводе – реальное}
begin
writeln('Enter number of rows <=',n);
readln(n1);
writeln('Enter number of columns <=',m);
readln(m1);
writeln('Enter matrix a(',n1,'*',m1,')');
{Внешний цикл по строкам}
for i:=1 to n1 do
{Внутренний цикл по столбцам}
for j:=1 to m1 do
read(a[i,j]);
end.
При вводе массива старайтесь сохранять на экране внешний вид таблицы. Это значит, что после того как вы ввели через пробел три элемента строки, необходимо нажать клавишу Enter и приступить к вводу элементов следующей строки и т.д.
Также для инициализации можно использовать массивы-константы.
const b: array [1..3, 1..2 ] of byte = ((0, 1), (2, 3), (4,5));
Создать массив можно, с использованием какой-нибудь функции.
for i:=1 to n1 do
for j:=1 to m1 do
a[i,j]:=sqr(i+j);
Вывод двумерного массива
Рассмотрим следующий фрагмент программы.
for i:=1 to n1 do
for j:=1 to m1 do
write(a[i,j]:2,' ');
Данный пример иллюстрирует вывод двумерного массива в строку через пробел. Такой вариант вывода нарушает структуру таблицы. Поэтому обычно используют способ, когда после вывода полной строки таблицы на экран осуществляется перевод на следующую строку, с использованием процедуры writeln без параметров.
for i:=1 to n1 do
begin
for j:=1 to m1 do
write(a[i,j]:3);
writeln
end;
Пример.
program Vvod_matr2;
const n=9; m=11;
var A:array [1..n,1..m] of byte;
i,j:byte;
n1,m1:byte;
begin
writeln('Enter number of rows <=',n);
readln(n1);
writeln('Enter number of columns <=',m);
readln(m1);
for i:=1 to n1 do
for j:=1 to m1 do
a[i,j]:=sqr(i+j);
writeln;
writeln('Output matrix a(',n1,'*',m1,')');
for i:=1 to n1 do
begin
for j:=1 to m1 do
write(a[i,j]:3);
writeln
end;
readln;readln
end.
Решим задачу, когда матрицу необходимо получить за заданным алгоритмом.
Дано натуральное число n. Создать целочисленную матрицу А порядка m, которая на главной диагонали имеет 1, под ней – 5, над ней – 4.
Розв'язок
В
математике матрица это прямоугольная
таблица, образованная из элементов
некоторого множества и составляет с m
строк и n столбцов. Если
таблица
называется прямоугольной матрицей
размера
.
Если
матрица называется квадратной, а число
m – ее порядком.
Р
ассмотрим
эту задачу на примере матрицы
.
Выучим условия какие присутствуют в
этом примере:
,
,
(i – номер строки, j – номер столбца).
Равные индексы ( ) имеют элементы главной диагонали. Если ( ), то элементы расположены над главной диагональю (i изменяется от 1 до 3, j изменяется от 2 до 4). Если ( ), то элементы расположены под главной диагональю (i изменяется от 2 до 4, j изменяется от 1 до 3).Учитывая эти соображения, запишем формулу для вычисления элемента матрицы
program N2;
const m=4;
var A:array [1..m,1..m] of byte;
i,j,n:byte;
begin
//Создание матрицы по заданному правилу
for i:=1 to m do
for j:=1 to m do
if i=j then A[i,j]:=1
else
if i<j then A[i,j]:=4
else A[i,j]:=5;
//Вывод матрицы на экран
for i:=1 to m do
begin
for j:=1 to m do
write(a[i,j],' ');
writeln
end;
end.
Дана прямоугольная матрица размером 3*4. Найти количество нулевых элементов в каждом столбце матрицы
хотя бы
program DM;
const m=3; n=4;
var a : array [1..m,1..n] of byte;
i, j, k : byte;
begin
writeln('Vvedite matrizu razmerom ',m,'*',n);
//Создание матрицы
For i:=1 to m do
For j:=1 to n do
read(a[i,j]);
For j:=1 to n do
begin
k:=0;
For i:=1 to m do
if A[i,j]=0 then k:=k+1;
writeln('v ',j, ' stolbze ',k, ' elementov');
end;
readln ;readln
end.
Результат
Поиск максимального или минимального элемента матрицы
Самостоятельно Ковалюк стр. 231
Выполнение определенных операций над компонентами матриц (перестановка строк и столбцов и т.д.) или над матрицами в целом (умножение матриц и т.д.)
Самостоятельно Ковалюк стр. 231-234