Даны две матрицы (порядок не выше третьего).транспонировать ту из них , определитель которой больше — Pascal(Паскаль)

uses crt;
const nmax=3;
type matr=array[1..nmax,1..nmax] of real;
//ввод данных
procedure Vvod(var a:matr;var n:byte;c:char);
var i,j:byte;
begin
writeln('Матрица ',c);
repeat
write('Размер матрицы от 1 до ',nmax,'=');
readln(n);
until n in [1..nmax];
writeln('Введите элементы матрицы');
for i:=1 to n do
for j:=1 to n do
 begin
  write('el[',i,',',j,']=');
  readln(a[i,j]);
 end;
end;
//вывод матриц
procedure Vyvod(var a:matr;n:byte);
var i,j:byte;
begin
for i:=1 to n do
 begin
  for j:=1 to n do
  write(a[i,j]:6:2);
  writeln;
 end;
end;
//нахождение определителя
function Det(a:matr;n:byte):real;
begin
if n=1 then Det:=0
else if n=2 then
Det:=a[1,1]*a[2,2]-a[1,2]*a[2,1]
else
Det:= a[1,1]*a[2,2]*a[3,3]-a[1,1]*a[2,3]*a[3,2]
   -a[1,2]*a[2,1]*a[3,3]+a[1,2]*a[2,3]*a[3,1]
   +a[1,3]*a[2,1]*a[3,2]-a[1,3]*a[2,2]*a[3,1];
end;
//транспонирование
procedure Trans(var a:matr;n:byte);
var i,j:byte;
     x:real;
begin
if n>1 then
for i:=2 to n do
for j:=1 to i-1 do
 begin
  x:=a[i,j];
  a[i,j]:=a[j,i];
  a[j,i]:=x;
 end;
end;
var a,b,c:matr;
    na,nb:byte;
    da,db:real;
    s:char;
begin
clrscr;
Vvod(a,na,'A');
Vvod(b,nb,'B');
clrscr;
writeln('Исходная матрица А:');
Vyvod(a,na);
da:=Det(a,na);
writeln('Определитель=',da:0:0);
writeln('Исходная матрица B:');
Vyvod(b,nb);
db:=Det(b,nb);
writeln('Определитель=',db:0:0);
if da>db then
 begin
  Trans(a,na);
  writeln('Определитель А больше');
  writeln('Транспонированная матрица A:');
  Vyvod(a,na);
 end
else if db>da then
 begin
  Trans(b,nb);
  writeln('Определитель B больше');
  writeln('Транспонированная матрица B:');
  Vyvod(b,nb);
 end
else write('Определители равны');
readln
end.

Leave a Comment

4 + 6 =