ПОМОГИТЕ НАЙТИ ОШИБКУ
Добавлено: 03 фев 2007, 22:51
Задача : Заданы две матрицы А и Б порядка 3*3. Проверить будет ли произведение этих матриц коммутативным т.э. АБ=БА. Если Да - напечатать "АБ=БА", нет - "Произведение некоммутативное". Программу решить с помощью подпрограммы процедуры. Вот мой скрипт
program lab5_2;
uses crt;
type mass=array[1..50,1..50] of integer;
var i,j:integer; a:mass; b:mass;flag:boolean;
procedure matr(a,b:mass; i,j:integer;flag:boolean; var ab,ba:mass);
begin
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin
ab[i,j]:=(a[i,j])*(b[j,i]); {matrica A*b}
write (ab[i,j]:6);
end;
writeln;
end;
writeln;
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin {martica B*A}
ba[i,j]:=(b[i,j])*(a[j,i]);
write (ba[i,j]:6);
end;
writeln;
end;
writeln;
flag:=true;
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin
if ab[i,j]<>ba[i,j] then
begin {sravnenie AB i BA}
flag:=false;
break;
end;
end;
if ab[i,j]<>ba[i,j] then break;
end;
end;
begin
clrscr;
randomize;
for i:=1 to 3 do
begin
for j:=1 to 3 do {Vvod elementov v matricy A}
begin
a[i,j]:=random(1);
write (a[i,j]:6);
end;
writeln;
end;
writeln;
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin
b[i,j]:=random(1);
write (b[i,j]:6); {Vvod elementov v matricy B}
end;
writeln;
end;
writeln ;
matr (a,b,0,0,true,a,a); {Vb)zov podprogramb)}
if flag=true then write ('AB=BA')
else write ('Proizvedenie nekomutativnoe');
readkey;
end.
Умножает матрицы правильно, (выводит на экран 2 исходные и 2 перемноженые) Но не работает сравнение АБ=БА Подскажите в чём дело ...
program lab5_2;
uses crt;
type mass=array[1..50,1..50] of integer;
var i,j:integer; a:mass; b:mass;flag:boolean;
procedure matr(a,b:mass; i,j:integer;flag:boolean; var ab,ba:mass);
begin
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin
ab[i,j]:=(a[i,j])*(b[j,i]); {matrica A*b}
write (ab[i,j]:6);
end;
writeln;
end;
writeln;
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin {martica B*A}
ba[i,j]:=(b[i,j])*(a[j,i]);
write (ba[i,j]:6);
end;
writeln;
end;
writeln;
flag:=true;
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin
if ab[i,j]<>ba[i,j] then
begin {sravnenie AB i BA}
flag:=false;
break;
end;
end;
if ab[i,j]<>ba[i,j] then break;
end;
end;
begin
clrscr;
randomize;
for i:=1 to 3 do
begin
for j:=1 to 3 do {Vvod elementov v matricy A}
begin
a[i,j]:=random(1);
write (a[i,j]:6);
end;
writeln;
end;
writeln;
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin
b[i,j]:=random(1);
write (b[i,j]:6); {Vvod elementov v matricy B}
end;
writeln;
end;
writeln ;
matr (a,b,0,0,true,a,a); {Vb)zov podprogramb)}
if flag=true then write ('AB=BA')
else write ('Proizvedenie nekomutativnoe');
readkey;
end.
Умножает матрицы правильно, (выводит на экран 2 исходные и 2 перемноженые) Но не работает сравнение АБ=БА Подскажите в чём дело ...