unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm} function gauss(n:Integer;a:array of Double;var an:array of Double):Boolean; var l,k,i,j,i2,p,q:Integer; d,t:Double; js:array of Integer; begin Result:=False; // if High(a)<>n-1 then Exit; // if High(an)<>n-1 then Exit; SetLength(js,n); l:=1; i2:=0; for k:=0 to n-2 do begin d:=0.0; for i:=k to n-1 do for j:=k to n-1 do begin t:=abs(a[i*n+j]); if (t>d) then begin d:=t; js[k]:=j; i2:=i; end; end; if (d+1.0=1.0)then l:=0 else begin if (js[k]<>k) then for i:=0 to n-1 do begin p:=i*n+k; q:=i*n+js[k]; t:=a[p]; a[p]:=a[q]; a[q]:=t; end; if (i2<>k) then begin for j:=k to n-1 do begin p:=k*n+j; q:=i2*n+j; t:=a[p]; a[p]:=a[q]; a[q]:=t; end; t:=an[k]; an[k]:=an[i2]; an[i2]:=t; end; end; if (l=0) then Exit; d:=a[k*n+k]; for j:=k+1 to n-1 do begin p:=k*n+j; a[p]:=a[p]/d; end; an[k]:=an[k]/d; for i:=k+1 to n-1 do begin for j:=k+1 to n-1 do begin p:=i*n+j; a[p]:=a[p]-a[i*n+k]*a[k*n+j]; end; an[i]:=an[i]-a[i*n+k]*an[k]; end; end; d:=a[(n-1)*n+n-1]; if d=0 then Exit; an[n-1]:=an[n-1]/d; for i:=n-2 downto 0 do begin t:=0.0; for j:=i+1 to n-1 do t:=t+a[i*n+j]*an[j]; an[i]:=an[i]-t; end; js[n-1]:=n-1; for k:=n-1 downto 0 do if (js[k]<>k) then begin t:=an[k]; an[k]:=an[js[k]]; an[js[k]]:=t; end; Result:=True; end; procedure TForm1.Button1Click(Sender: TObject); const a:array[0..8] of double=(1,2,1, 4,5,6, 7,8,9); var an:array[0..8] of double; ans:String; i,j:Integer; begin ans:=''; if not gauss(3,a,an) then ans:='no 1/A!' else begin for i:=0 to 2 do begin ans:=ans+FormatFloat('0.00000',an[i*3]); for j:=1 to 2 do ans:=ans+','+FormatFloat('0.00000',an[i*3+j]); ans:=ans+#13; end; end; ShowMessage(ans); end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function gauss(n:Integer;a:array of Double;var an:array of Double):Boolean;
var
l,k,i,j,i2,p,q:Integer;
d,t:Double;
js:array of Integer;
begin
Result:=False;
// if High(a)<>n-1 then Exit;
// if High(an)<>n-1 then Exit;
SetLength(js,n);
l:=1;
i2:=0;
for k:=0 to n-2 do
begin
d:=0.0;
for i:=k to n-1 do
for j:=k to n-1 do
begin
t:=abs(a[i*n+j]);
if (t>d) then
begin
d:=t;
js[k]:=j;
i2:=i;
end;
end;
if (d+1.0=1.0)then
l:=0
else
begin
if (js[k]<>k) then
for i:=0 to n-1 do
begin
p:=i*n+k;
q:=i*n+js[k];
t:=a[p];
a[p]:=a[q];
a[q]:=t;
end;
if (i2<>k) then
begin
for j:=k to n-1 do
begin
p:=k*n+j;
q:=i2*n+j;
t:=a[p];
a[p]:=a[q];
a[q]:=t;
end;
t:=an[k];
an[k]:=an[i2];
an[i2]:=t;
end;
end;
if (l=0) then Exit;
d:=a[k*n+k];
for j:=k+1 to n-1 do
begin
p:=k*n+j;
a[p]:=a[p]/d;
end;
an[k]:=an[k]/d;
for i:=k+1 to n-1 do
begin
for j:=k+1 to n-1 do
begin
p:=i*n+j;
a[p]:=a[p]-a[i*n+k]*a[k*n+j];
end;
an[i]:=an[i]-a[i*n+k]*an[k];
end;
end;
d:=a[(n-1)*n+n-1];
if d=0 then Exit;
an[n-1]:=an[n-1]/d;
for i:=n-2 downto 0 do
begin
t:=0.0;
for j:=i+1 to n-1 do t:=t+a[i*n+j]*an[j];
an[i]:=an[i]-t;
end;
js[n-1]:=n-1;
for k:=n-1 downto 0 do
if (js[k]<>k) then
begin
t:=an[k];
an[k]:=an[js[k]];
an[js[k]]:=t;
end;
Result:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
a:array[0..8] of double=(1,2,1,
4,5,6,
7,8,9);
var
an:array[0..8] of double;
ans:String;
i,j:Integer;
begin
ans:='';
if not gauss(3,a,an) then
ans:='no 1/A!'
else
begin
for i:=0 to 2 do
begin
ans:=ans+FormatFloat('0.00000',an[i*3]);
for j:=1 to 2 do
ans:=ans+','+FormatFloat('0.00000',an[i*3+j]);
ans:=ans+#13;
end;
end;
ShowMessage(ans);
end;end.