Міністерство освіти і науки України
Вінницький національний технічний університет
Факультет інформаційних технологій і комп'ютерної інженерії
Кафедра комп'ютерних наук
Лабораторна робота №7
з дисципліни: "Алгоритмізація та програмування"
Тема:
обчислення матриць
Хід роботи:
Транспонування та множення матриць
Код програми:
uses crt;
const max=20;
type Tmatr=array[1..max,1..max] of integer;
procedure Vvod(var mt:Tmatr;var n:byte);
var i,j:byte;
begin
for i:=1 to n do
for j:=1 to n do
mt[i,j]:=random(100)+1;
end;
procedure Vyvod(var m:Tmatr;n:byte;c:string);
var i,j:byte;
begin
writeln(c,':');
for i:=1 to n do
begin
for j:=1 to n do
write(m[i,j]:5);
writeln;
end;
writeln;
end;
procedure Trans(m1:Tmatr;n:byte; var m2:Tmatr);
var i,j:byte;
begin
for i:=1 to n do
for j:=1 to n do
m2[i,j]:=m1[j,i];
end;
procedure UmnMatr(m1,m2:Tmatr;n:byte;var m:Tmatr);
var i,j,k:byte;
begin
for k:=1 to n do
for j:=1 to n do
begin
m[k,j]:=0;
for i:=1 to n do
m[k,j]:=m[k,j]+m1[k,i]*m2[i,j];
end;
end;
var a,a1,b,b1,c,m1,m2:Tmatr;
n:byte;
begin
clrscr;
randomize;
repeat write('Розмірність матриці до ',max,'=');
readln(n);
until n in [1..max];
Vvod(a,n);
Vvod(b,n);
Vyvod(a,n,'Матриця A');
Vyvod(b,n,'Матриця B');
UmnMatr(a,b,n,m1);
Vyvod(m1,n,'Матриця M1=A*B');
write('Press Enter...');
readln;
clrscr;
Trans(a,n,a1);
Trans(b,n,b1);
Vyvod(a1,n,'Транспонована матриця А - A1');
Vyvod(b1,n,'Транспонована матриця В - B1');
UmnMatr(a1,b1,n,m2);
Vyvod(m2,n,'Матриця M2=A1*B1');
write('Press Enter...');
readln;
end.
/
/
Сума елементів побічної діагоналі
Код програми:
type
type_arr = array[1..10, 1..10] of byte;
var
arr: type_arr; i, j: byte; sum: byte;
function diagonal (arr1: type_arr): byte;
var sum1: byte; i, j: byte;
begin
sum1 := 0;
j:= 10;
for i:=1 to 10 do begin
sum1 := sum1 + arr1[i][j];
j := j-1;
end;
diagonal := sum1;
end;
begin
randomize;
for i:=1 to 10 do begin
for j:=1 to 10 do begin
arr[i,j] := random(10);
write(arr[i,j], ' ');
end;
writeln;
end;
sum := diagonal(arr);
writeln('_________________');
writeln('Сума елементів побічної діагоналі:', sum);
readln;
end.
/
Сума елементів над головною діагоналлю
Код програми:
const nmax=50;
var a:array[1..nmax,1..nmax]of integer; n,i,j,kol,sum:integer;
begin
randomize;
repeat write('0<n<50 n=');
readln(n);
until(n>0)and(n<50);
kol:=0; sum:=0;
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(45);
write(a[i,j]:4);
if (j>i)and(a[i,j]>0) then
begin
kol:=kol+1; sum:=sum+a[i,j];
end; end;
writeln
end;
Writeln('____________');
writeln();
writeln('kol=',kol); writeln('sum=',sum);
writeln();
writeln('Press Enter...');
readln;
end.
/
Сума елементів під головною діагоналлю
Код програми:
const nmax=50;
var a:array[1..nmax,1..nmax]of integer; n,i,j,kol,sum:integer;
begin
randomize;
repeat write('0<n<50 n=');
readln(n);
until(n>0)and(n<50);
kol:=0; sum:=0;
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(45);
write(a[i,j]:4);
if (j<i)and(a[i,j]>0) then
begin
kol:=kol+1; sum:=sum+a[i,j];
end; end;
writeln
end;
Writeln('____________');
writeln();
writeln('kol=',kol); writeln('sum=',sum);
writeln();
writeln('Press Enter...');
readln;
end.
/
Виведення елементів матриці в певному порядку (кутиками)
Код програми:
uses crt;
var a:array[1..100,1..100] of integer;
i,n,j,k:integer;
s:char;
begin
clrscr;
writeln('Vvedite n ');
readln(n);
writeln('Zapolnit sluchayno y/n ');
s:=readkey;
randomize;
if (s='y') or(s='Y') then
for i:=1 to n do
for j:=1 to n do
a[i,j]:=random(50)+1
else
for i:=1 to n do
for j:=1 to n do
readln(a[i,j]);
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j],' ');
writeln;
end;
i:=0;
repeat
i:=i+1;
for j:=1 to n-i do
write(a[i,j],' ');
for k:=i to n do
write(a[k,n-i+1],' ');
until(i>=n);
readln;
end.
/