|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с функцией.
В общем задача у меня такая: возвести матрицу А в 6 степень, получить матрицу В, используя рекурсию.
Но возникла проблема с функцией, она правильно высчитывает результат, но в самом конце, на слове end, она начинает "портить" все значения, возвращает к началу (выяснял я это с помощью Add Watch). Помогите, пожалуйста. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; const n = 3; type TMas = array [1..n, 1..n] of integer; TForm1 = class(TForm) Label1: TLabel; StringGrid1: TStringGrid; StringGrid2: TStringGrid; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; function MultiMatrix(A, B: TMas; d: integer): TMas; var Form1: TForm1; implementation {$R *.dfm} function MultiMatrix(A, B: TMas; d: integer): TMas; var i, j, k, sum: integer; newA: TMas; begin if d <> 1 then begin for i := 1 to n do for j := 1 to n do begin sum := 0; for k := 1 to n do sum := sum + A[i,k]*B[k,j]; newA[i,j] := sum; end; dec(d); MultiMatrix(A, newA, d) end else MultiMatrix := B; end; procedure TForm1.Button1Click(Sender: TObject); var A, B: TMas; i, j, d: integer; begin d:=6; for i := 1 to n do for j := 1 to n do A[i, j] := StrToInt(StringGrid1.Cells[i-1, j-1]); B := MultiMatrix(A, A, d); for i := 1 to n do for j := 1 to n do StringGrid2.Cells[i-1, j-1] := IntToStr(B[i,j]); end; end. |
#2
|
|||
|
|||
А ты чего хотел? Ты же результат не сохраняешь для середины итерации.
Код:
function MultiMatrix(A, B: TMas; d: integer): TMas; var i, j, k, sum: integer; newA: TMas; begin if d <> 1 then begin for i := 1 to n do for j := 1 to n do begin sum := 0; for k := 1 to n do sum := sum + A[i,k]*B[k,j]; newA[i,j] := sum; end; dec(d); MultiMatrix(A, newA, d) // <- Здесь! Где сохранение результата??? end else MultiMatrix := B; end; |