|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Работа с квадратными матрицами
Здравствуйте ! Помогите пожалуйста с задачей:
Даны две действительные квадратные матрицы порядка n. Получить новую матрицу прибавлением к элементам каждого столбца 1-й матрицы произведения элементов соответствующих строк 2-й матрицы. Сидел ломал голову, вроде все сделал но в чем-то есть ошибка, числа считает не правильно. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Math, StdCtrls, Spin, Grids; type TForm1 = class(TForm) G1: TStringGrid; Button1: TButton; SpinEdit1: TSpinEdit; Label1: TLabel; G2: TStringGrid; Label2: TLabel; Label3: TLabel; G3: TStringGrid; Button2: TButton; procedure FormCreate(Sender: TObject); procedure SpinEdit1Change(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } N : integer; function UMN(k : integer) : integer; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Randomize; end; procedure TForm1.SpinEdit1Change(Sender: TObject); var i, j : integer; G : TStringGrid; begin N := SpinEdit1.Value; for i := 0 to ControlCount - 1 do if Controls[i] is TStringGrid then begin G := (Controls[i] as TStringGrid); G.ColCount := N; G.RowCount := G.ColCount; for j := 0 to N - 1 do begin G.Cols[j].Clear; G.ColWidths[j] := Round(G.RowHeights[0] * 1.5); end; end; end; procedure TForm1.Button1Click(Sender: TObject); var i, j : integer; begin for i := 0 to N - 1 do for j := 0 to N - 1 do begin G1.Cells[j, i] := IntToStr(RandomRange(1, 10)); G2.Cells[j, i] := IntToStr(RandomRange(1, 10)); end; Button2.Enabled := true; end; procedure TForm1.Button2Click(Sender: TObject); var i, j, k : integer; begin for i := 0 to N - 1 do begin k := UMN(i); for j := 0 to N - 1 do G3.Cells[j, i] := IntToStr(StrToInt(G1.Cells[j, i]) * k); end; end; function TForm1.UMN(k: integer): integer; var i:integer; pr:real; begin pr:=1; For i:=0 to G2.ColCount-1 do pr:=pr*StrToFloat(G2.Cells[i,1]) end; end. |
#2
|
|||
|
|||
Ну и в чем проблема?
Внешним циклом бежим по столбцам. Внутри первый внутренний цикл считает произведение элементов i-ой строки. Второй внутренний цикл бежит по элементам столбца и прибавляет полученный результат. Вроде вот так: Код:
type TSquareMatrix : Array Of Array Of Integer; var A, B, C : TSquareMatrix const MatrixSize = 10; var I, J, M : Integer; begin // Init matrices SetLength(A,MatrixSize,MatrixSize); SetLength(B,MatrixSize,MatrixSize); SetLength(C,MatrixSize,MatrixSize); // Fill A and B by random values 1..10 Randomize; For I := Low(A) To High(A) Do For I := Low(A[i]) To High(A[i]) Do Begin A[I,J] := Random(10) + 1; B[I,J] := Random(10) + 1; End; // Create matrix C For I := Low(A) To High(A) Do Begin M := 1; For J := Low(A[i]) To High(A[i]) Do M := M * B[J,I]; For J := Low(A[i]) To High(A[i]) Do C[I,J] := A[I,J] + M; End; end; |
#3
|
|||
|
|||
Спасибо за помощь, я нашел ошибку в своем коде и исправил
|