пдскажите пожалуйста как написать программу перемножения двух произвольных матриц? размер матриц запрашивается с клавиатуры. на экране должно появится:
1)запрос размера матриц
2)две заполненные матрицы
3 третья матрица-результат перемножения
вот написала программу... проверьте пожалуйста так или нет?
program five;
var
a:array[1..100,1..100] of integer; {можно было объединить a,b,c:array[1..100,1..100] of integer;}
b:array[1..100,1..100] of integer;
c:array[1..100,1..100] of integer;
m,k,n,i,j,m2,n2,S:integer;
begin
randomize;
write ('введите n= ');
read(n);
write ('введите m= ');
read(m);
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(20)-10; {наверное так}
writeln('матрица а=');
for i:=1 to n do
begin
for j:=1 to m do
write(round(a[i,j]),' '); {Зачем округляете, матрица целочисленная}
writeln( );
end;
write('введите n2= ');
read(n2);
write('введите m2= ');
read(m2);
for i:=1 to n2 do
for j:=1 to m2 do
b[i,j]:=random(20)-10;
writeln('матрица b=');
for i:=1 to n2 do
begin
for j:=1 to m2 do
write(round(b[i,j]),' ');
writeln( );
end;
if m=n2 then
begin
for i:=1 to n do
for j:=1 to m2 do
begin
S:=0;
for k:=1 to m do
S:=S+a[i,k]*b[k,j];
c[i,j]:=S;
end;
writeln('матрица c=a*b');
for i:=1 to n do
begin
for j:=1 to m2 do
write(round(c[i,j]),' ');
writeln( );
end;
end
else
write('перемножение невозможно');
end.
В остальном вроде бы верно.
В первой матрице должно быть 6 столбцов, а у вас 4, очевидно есть ошибка при создании или при выводе матрицы а. Проверяем программу, и, действительно, ошибка!(см. выше)
А вот вычислять у меня к сожалению нет времени, проверьте в любом математическом пакете или задайте размер матрицы поменьше и посчитайте на калькуляторе.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)