![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Спасибо за помощь, я нашел ошибку в своем коде и исправил
|