Тема: Робота з матрицями (Delphi)
Допоможіть з програмним кодом: Якщо у матриці А(3*3) cума елементів побічної діагоналі рівна сумі елементів 3 рядочка, то головну діагональ замінити 3 стовпцем.
частина коду:
For i:=n to 1 do
begin
s:=0;
s:=s+a[i,n+1-i];
end;
For j:=1 to n do
begin
k:=0;
k:=k+a[3,j];
end;
If s=k then
begin
for i:=1 to n do
begin
a[i,i]:=a[i,3];
end;
Моя проблема в тому, що коли я запускаю програму то у виводі я отримую транспоновану матрицю, а не ту яка в умові...(взагалі ця програма це робота із компонентою StringGrid.Може бути що проблема(помилка) у виводі чи десь ще?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
StringGrid1: TStringGrid;
Button2: TButton;
Label2: TLabel;
StringGrid2: TStringGrid;
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
matr=array[1..3,1..3] of real;
var
Form1: TForm1;
n: integer;
a:matr;
implementation
{$R *.dfm}
procedure matrix(n:integer;var a:matr);
Var
i,j:integer;
s,k:real;
Begin
For i:=n to 1 do
begin
s:=0;
s:=s+a[i,n+1-i];
end;
For j:=1 to n do
begin
k:=0;
k:=k+a[3,j];
end;
If s=k then
begin
for i:=1 to n do
begin
a[i,i]:=a[i,3];
end;
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
n:=StrToInt(Edit1.Text);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
n:=2;
StringGrid1.Visible:=False;
StringGrid2.Visible:=False;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
StringGrid1.ColCount:=n+1;
StringGrid1.RowCount:=n+1;
StringGrid1.Cells[0,0]:='A';
for i:=1 to n do
for j:=1 to n do
begin
StringGrid1.Cells[j,i]:='0';
a[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
end;
for i:=1 to n do
StringGrid1.Cells[0,i]:=FloatToStr(i);
StringGrid1.Cells[i,0]:=FloatToStr(i);
StringGrid1.Cells[i,i]:= '1';
StringGrid1.Visible:=True ;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j:Integer;st:string;
begin
for i:=1 to n do
for j:=1 to n do
a[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
matrix(n,a);
StringGrid2.RowCount:=n+1;
StringGrid2.ColCount:=n+1;
StringGrid2.Cells[0,0]:='A';
for i:=1 to n do
for j:=1 to n do
begin
StringGrid2.Cells[i,j] :=FloatToStr(a[i,j]);
end;
for i:=1 to n do
for j:=1 to n do
StringGrid2.Cells[i,j]:=FloatToStr(a[i,j]);
StringGrid2.Visible:=True;
end;
end.