![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте!
Написала маленькую программу перемножения 2 матриц, но результат перемножения неверный=( Помогите, пожалуйста, найти где у меня ошибка и подскажите пожалуйста как ее исправить Код:
procedure TForm1.Button1Click(Sender: TObject);
type matrica=array[1..15,1..15] of real;
var a, b, c: matrica;
i, j, m, n, l, k: byte;
s: real;
begin
n:=4;
m:=4;
l:=4;
for i := 1 to n do
for j := 1 to m do a[i,j]:=strtoint(stringgrid1.cells[i,j]);
for i := 1 to n do
for j := 1 to m do b[i,j]:=strtoint(stringgrid2.cells[i,j]);
for I := 1 to n do
for j := 1 to l do
begin
s:=0;
for k := 1 to m do
s:=s+a[i,k]*b[k,j];
c[i,j]:=s;
end;
for I := 1 to n do
for j := 1 to m do
stringgrid3.cells[i,j]:=floattostrf(c[i,j],fffixed,4,1);
end; |
|
#2
|
|||
|
|||
|
Cells[номер столбца, номер строки], а в математике наоборот, первый индекс - номер строки. Меняем местами индексы вот так:
for k := 1 to m do s:=s+a[k,i]*b[j,k]; c[j,i]:=s; и все работает. |
|
#3
|
|||
|
|||
|
Что-то здесь циклов слишком много... Вот код на C++ я когда-то писал.
Код:
for (int j = 0; j<Len1; j++)
for (i = 0; i< Len2; i++)
for (int index = 0; index<Len2; index++)
ResMatr[i][j] = ResMatr[i][j] + Matr1[index][j]*Matr2[i][index]; |