unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Math, Registry;
type
matr =
array
of
array
of
real
;
TForm1 =
class
(TForm)
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Edit1: TEdit;
Button1: TButton;
StringGrid3: TStringGrid;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure
Button1Click(Sender: TObject);
procedure
Button2Click(Sender: TObject);
procedure
Button3Click(Sender: TObject);
private
public
end
;
procedure
Gaus(A:matr;B:
array
of
real
;
Var
X:
array
of
real
;n:
integer
;
Var
err:
integer
); stdcall; external
'DLL.dll'
;
var
Form1: TForm1;
Xt,Yt,Xp,Yp,B,X:
array
of
real
;
A:matr;
n,i,j,err,k:
integer
;
g:textfile;
implementation
{$R *.dfm}
procedure
TForm1
.
Button1Click(Sender: TObject);
begin
n:=StringGrid1
.
RowCount;
SetLength(A, n, n);
SetLength(B, n);
SetLength(X, n);
For
i:=
0
to
n-
1
do
Begin
For
j:=
0
to
n-
1
do
begin
Val
(StringGrid1
.
Cells[j,i], A[i,j], k);
if
k <>
0
then
begin
MessageBox(Handle,
PAnsiChar
(
'В ячейке матрицы A['
+ IntTostr(j+
1
) +
', '
+ IntToStr(i+
1
) +
'] не число'
),
'Внимание'
, MB_OK+MB_ICONINFORMATION);
Exit;
end
;
end
;
End
;
For
i:=
0
to
n-
1
do
Begin
Val
(StringGrid2
.
Cells[
0
,i], B[i], k);
if
k <>
0
then
begin
MessageBox(Handle,
PAnsiChar
(
'В ячейке столбцов свободных членов B['
+ IntToStr(i+
1
) +
'] не число'
),
'Внимание'
, MB_OK+MB_ICONINFORMATION);
Exit;
end
;
End
;
Gaus(A, B, x, n, err);
if
err <>
0
then
begin
MessageBox(Handle,
'Система уравнений не имеет решения'
,
'Внимание'
, MB_OK+MB_ICONINFORMATION);
Exit;
end
;
For
i:=
0
to
n-
1
do
StringGrid3
.
Cells[i,
0
]:=FloatToStrF(X[i], fffixed,
8
,
2
);
AssignFile(g,
'out.txt'
);
Rewrite(g);
writeln
(g,
'Система уравнений'
);
For
i:=
0
to
n-
1
do
Begin
For
j:=
0
to
n-
1
do
write
(g, a[i,j]:
6
:
2
,
' '
);
writeln
(g,
'| '
, b[i]:
0
:
2
);
End
;
writeln
(g,
'Корни системы уравнений'
);
For
i:=
0
to
n-
1
do
write
(g,x[i]:
6
:
2
,
' '
);
CloseFile(g);
end
;
procedure
TForm1
.
Button2Click(Sender: TObject);
begin
Val
(Edit1
.
Text, n, i);
if
i <>
0
then
begin
MessageBox(Handle,
'Не корректное число '
,
'Внимание'
, MB_OK+MB_ICONINFORMATION);
Exit;
end
;
if
(n<=
0
)
or
(n>
10
)
then
begin
MessageBox(Handle,
'Число должно быть из отрезка [1..10]'
,
'Внимание'
, MB_OK+MB_ICONINFORMATION);
Exit;
end
;
StringGrid1
.
RowCount:=n;
StringGrid1
.
ColCount:=n;
StringGrid2
.
RowCount:=n;
StringGrid3
.
ColCount:=n;
For
i:=
0
to
n-
1
do
For
j:=
0
to
n-
1
do
StringGrid1
.
Cells[j,i]:=
''
;
For
i:=
0
to
n-
1
do
begin
StringGrid2
.
Cells[
0
,i]:=
''
;
StringGrid3
.
Cells[i,
0
]:=
''
;
end
;
end
;
procedure
TForm1
.
Button3Click(Sender: TObject);
begin
SetLength(a, n+
1
, n+
1
);
SetLength(b, n+
1
);
randomize;
for
i:=
1
to
n
do
for
j:=
1
to
n
do
begin
a[i,j]:=
1
+random(
100
);
StringGrid1
.
Cells[j-
1
,i-
1
]:=FloatToStr(a[i,j]);
end
;
for
i:=
1
to
n
do
for
j:=
1
to
n
do
begin
b[i]:=
1
+random(
100
);
StringGrid2
.
Cells[
0
,i-
1
]:=FloatToStr(b[i]);
end
;
end
;
end
.