program Matrix_work;
uses crt;
const
n=5; {максимальный порядок матрицы}
type
matrix=array[1..n,1..n] of real;
var
row : integer; {Порядок матриц}
c,t : matrix; {Исходные матрицы}
f : matrix; {Результирующая матрица}
r,tt : matrix; {Рабочие матрицы}
i,j : integer;
kc,kt : integer;
s : string;
{ Описания подпрограмм }
{1. Описание функции koln }
{ Функция определения количества отрицательных элементов в матрице}
function koln(a:matrix; m:integer):integer;
var
i,j,mx : integer;
begin
mx:=0;
for i:=1 to m do
for j:=1 to m do
if a[i][j]<0 then mx:=mx+1;
koln:=mx;
end;
{ 2. Описание процедуры умножения матриц umn(a,b,m,r). r=a*b }
procedure umn(a, b:matrix; m:integer; var r:matrix);
var
i,j,k:integer;
z:real;
begin
for i:=1 to m do
for j:=1 to m do
begin
z:=0;
for k:=1 to m do
z:=z+ a[i,k]*b[k,j];
r[i,j]:=z;
end;
end;
{ 3. Описание процедуры trans. r=b транспонированная }
procedure trans( b:matrix; m:integer; var r:matrix);
var
i,j:integer;
begin
for i:=1 to m do
for j:=1 to m do
r[i,j]:=b[j,i];
end;
{ 4. Описание процедуры input – ввод квадратной матрицы A[m,m] }
procedure input( var a:matrix; m:integer);
var
i,j:integer;
begin
clrscr;
writeln(' ввод матрицы порядка ',m);
writeln(' Ввод каждого элемента завершайте нажатием EnteR');
for i:=1 to m do
begin
gotoxy(1,i+2); write(' row #',i);
for j:=1 to m do
begin
gotoxy(j*6+8,i+2); readln(a[i,j])
end;
end;
end;
{ 5. Описание процедуры print. Вывод квадратной матрицы A[m,m] }
procedure print( a:matrix; m:integer);
var
i,j:integer;
begin
for i:=1 to m do
begin
for j:=1 to m do
write(a[i,j]:8:2);
writeln
end;
end;
begin
{ главный модуль }
clrscr;
{ввод порядка матриц с контролем}
repeat
write('Read row '); readln(row);
until (row>0)and(row<=n);
writeln(' ввод матрицы С ');
input (c,row);
writeln(' ввод матрицы T ');
input (t,row);
writeln(' Матрица С');
print(C,row);
kc:= koln(c,row);
writeln('count of negative in C ',kc);
writeln(' Матрица T');
print(T,row);
kt:= koln(t,row);
writeln('count of negative in T ',kt);
if kc>kt then
begin
{ Вычисление матрицы F }
umn(c, t,row,r);
trans(r, row,f);
s:='=(c*t) transp';
end else
begin
{ f = c транспонированная, умножена на t }
s:='=C транспонированная, умножена на t ';
trans(c, row,r);
umn(r, t,row,f);
{ Вычисленa матрицa F}
end;
writeln(' Матрица F'+s);
print(f,row);
readln;
end.