![]() |
|
#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]; |