Ввод-вывод матриц


Двумерный массив

 

Двумерный массив отличается от одномерного массива тем, что для доступа к его элементам используется два индекса. Для того, чтобы задать какую-либо ячейку двумерной таблицы указывают номер строки и номер столбца.

Двумерный массив можно описать тремя способами:

 

1) с использованием раздела описания типов:

Type Matrica=array[1..10, 1..10] of real;

Var a,b: matrica;

 

2) без использования раздела описания типов:

Var X: array[1..5,1..4] of integer; {Двумерный массив 5х4 элементов}

 

Полный вид двухмерного массива (матрицы):

a[1,1] a[1,2] a[1,3] a[1,4]

a[2,1] a[2,2] a[2,3] a[2,4]

a[3,1] a[3,2] a[3,3] a[3,4]

a[4,1] a[4,2] a[4,3] a[4,4]

a[5,1] a[5,2] a[5,3] a[5,4]

 

3) с использованием констант:

Const M=5; N=4;

Var Matr: array[1..M, 1..N] of real;

1) Ввод элементов матрицы осуществляют с помощью вложенных цик­лов for:

for i:=1 to 5 do

for j:=1 to 4 do Read(а[i,j]);

 

2) Вывод элементов матрицы можно осуществлять по строкам или по столбцам, но лучше, если они будут выводиться в виде таблицы, например

1 2 0 4

2 4 1 2

1 4 5 4

8 7 9 0

for i:=1 to 4 do

begin

for j:=1 to 4 do Write(a[i,j],’ ‘); {Печатается строка}

WriteLn; {Переход на новую строку}

end;

Свойства элементов матрицы:

1. если номер строки элемента совпадает с номером столбца (i=j), это означает что элемент лежит на главной диагонали матрицы.

2. если номер строки превышает номер столбца (i>j), то элемент находится ниже главной диагонали.

3. если номер столбца больше номера строки (i<j), то элемент находится выше главной диагонали.

4. элемент лежит на побочной диагонали, если его индексы удовлетворяют равенству i + j – 1 = n.

Пример1. Выведите элементы побочной диагонали квадратичной мат­рицы (3х3) на экран.

Program Primer1;

Var i,j :byte;

a: array[1..3,1..3] of integer;

begin

for i:=1 to 3 do

for j:=1 to 3 do Read(a[i,j]);

for i:=1 to 3 do

for j:=1 to 3 do If i+j-1=3 then Write(a[i,j],’ ‘);

end.

Пример 2. Составить программу, которая формирует двумерный массив случайных чисел, находит максимальный элемент в каждой строке матрицы и выводит его на экран.

 

program primer2;

const n=3;m=3;

var a:array[1..m,1..n] of integer;

i,j,max:integer;

begin

randomize;

for i:=1 to n do

begin

for j:=1 to m do

begin

a[i,j]:=random(20);

write(a[i,j],' ');

end;

writeln;

end;

for i:=1 to n do

begin

max:=a[i,1];

for j:=2 to m do

if a[i,j]>max then max:=a[i,j];

writeln('a[',i,']=',max);

end;

end.

Пример 3. Найти средние значения элементов каждого столбца матрицы (n,m) и вывести их на экран в виде одномерного массива.

 

program primer3;

var a:array[1..10,1..10] of integer;

b:array[1..10] of real;

i,j,S,n,m:integer;

begin

writeln('Введите n,m');

readln(n,m);

for i:=1 to n do

for j:=1 to m do

begin

write('a[',i,',',j,']=');

readln(a[i,j]);

end;

writeln('Исходная матрица');

for i:=1 to n do

begin

for j:=1 to m do

write(a[i,j],' ');

writeln;

end;

for j:=1 to m do

begin

S:=0;

for i:=1 to n do S:=S+a[i,j];

b[j]:=S/m;

end;

for i:=1 to m do write(b[i]:6:2,' ');

end.

 

Пример 4. Написать программу умножения двух матриц A(n, m) и B(m, l).

Например, необходимо перемножить две матрицы

 

,

Воспользовавшись правилом «строка на столбец», получим матрицу:

.

В общем виде формула для нахождения Сij матрицы имеет вид:

,

где i = 1, N и j = 1, L. Обратите внимание, что проводить операцию умножения можно только в том случае, если количество строк левой матрицы совпадает с количеством столбцов правой. Кроме того, А*В ≠ В*А.

 

program primer4;

var a,b,c: array [1..10,1..10] of integer;

i,j,k,m,n,l: byte;

s:integer;

begin

writeln('Vvedite m,n,l');

read(n,m,l);

writeln('Vvedite massiv A');

for i:=1 to n do

for j:=1 to m do read(a[i,j]);

writeln('Vvedite massiv B');

for i:=1 to m do

for j:=1 to l do read(b[i,j]);

writeln;

for i:=1 to n do

for j:=1 to l do

begin

S:=0;

for k:=1 to m do S:=S+a[i,k]*b[k,j];

c[i,j]:=S;

end;

for i:=1 to n do

begin

for j:=1 to l do write(c[i,j],' ');

writeln;

 

end;

end.

 

 

Пример 5. Написать программу, которая в каждой строке матрицы сортирует элементы по возрастанию.

 

program Sort;

const m=4; n=4;

var a: array [1..n,1..m] of integer;

i,j,c,k: byte;

begin

writeln('Введите матрицу');

for i:=1 to n do

for j:=1 to m do read(a[i,j]);

writeln;

for i:=1 to n do

for k:=1 to m-1 do {k - номер просмотра}

for j:=1 to m-k do

if a[i,j]>a[i,j+1] then

begin

c:=a[i,j];

a[i,j]:=a[i,j+1];

a[i,j+1]:=c;

end;

for i:=1 to n do

begin

for j:=1 to m do write(a[i,j],' ');

writeln;

end;

end.