unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids,math;type TForm1 = class(TForm) StringGrid1: TStringGrid; StringGrid3: TStringGrid; Edit1: TEdit; Label1: TLabel; Button1: TButton; Button2: TButton; Edit2: TEdit; Label2: TLabel; Edit3: TEdit; procedure Button1Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure StringGrid1KeyPress(Sender: TObject; var Key: Char); procedure Button2Click(Sender: TObject); procedure Edit3Change(Sender: TObject); private { Private declarations } public { Public declarations } end; type Arrayint=array of array of integer; PArrayint=^ArrayInt ; var Form1: TForm1; implementation{$R *.dfm} procedure getarray(var arry,prry:Arrayint; m,n,k:integer);//代数余子 var i,j:integer; begin for j:=0 to n-1 do begin for i:=0 to m-1 do begin prry[j,i]:=arry[j,i]; end; end; for j:=0 to n-1 do begin for i:=m+1 to k-1 do begin prry[j,i-1]:=arry[j,i]; end; end; for j:=n+1 to k-1 do begin for i:=0 to m-1 do begin prry[j-1,i]:=arry[j,i]; end; end; for j:=n+1 to k-1 do begin for i:=m+1 to k-1 do begin prry[j-1,i-1]:=arry[j,i]; end; end; end;function func( _part:ArrayInt;n:integer):integer;//句镇求值 var t:integer; str:Arrayint; i,j:integer; k:integer; begin setlength(str,n-1); k:=0; for i:=0 to n-2 do begin setlength(str[i],n-1); end; if(n>1) then begin for i:=0 to n-1 do begin getarray(_part,str,i,0,n); t:=func(str,n-1); if (i mod 2 =0) then k:=k +t*_part[0,i] else k:=k-t*_part[0,i]; end; result:=k; end else result:=_part[0,0]; end;FUNCTION DOphone(m,n:integer):string; var i,j:integer; k:integer; q:integer; begin if(m*n>0) then q:=1 else if(m*n=0) then q:=0 else q:=-1; m:=abs(m); n:=abs(n); if(m<n) then k:=m else k:=n; for i:=k downto 1 do begin if((m mod i=0) and (n mod i=0)) then begin if(q=-1) then begin if(n<>i) then result:='-'+inttostr(m div i)+'/'+inttostr(n div i) else result:='-'+inttostr(m div i); end else if(n<>i) then result:=inttostr(m div i)+'/'+inttostr(n div i) else result:=inttostr(m div i); break; end; end; if(k=0) then result:='0'; end; procedure TForm1.Button1Click(Sender: TObject); var passint:Arrayint; Tpassint:ArrayInt; i,j:integer; num:integer; K:integer; begin num:=strtoint(edit1.Text); setLength(passint,num); for i:=0 to num-1 do begin setlength(passint[i],num); end; setlength(Tpassint,num-1); for i:=0 to num-2 do begin setlength(Tpassint[i],num-1); end; for i:=0 to num-1 do begin for j:=0 to num-1 do begin if(stringgrid1.Cells[j+1,i+1]='') then begin passint[i,j]:=0; end else passint[i,j]:=strtoint(stringgrid1.Cells[J+1,i+1]); end; end; k:=func(passint,num); showmessage(inttostr(k)); for i:=0 to num-1 do begin for j:=0 to num-1 do begin getarray(passint,Tpassint,i,j,num); if((i+j) mod 2 =0) then stringgrid3.Cells[j+1,i+1]:=Dophone(func(Tpassint,num-1),k) else stringgrid3.Cells[j+1,i+1] :=DoPhone((-1)*func(Tpassint,num-1),k); end; end; end;procedure TForm1.Edit1Change(Sender: TObject); var i:integer; begin try stringGrid1.ColCount:=strtoint(edit1.Text)+1; stringgrid1.RowCount:=strtoint(edit1.Text)+1; stringgrid3.ColCount:=strtoint(edit1.Text)+1; stringgrid3.RowCount:=strtoint(edit1.Text)+1; stringGrid1.Cells[0,0]:='j\i'; for i:=1 to strtoint(edit1.Text) do begin stringgrid1.Cells[i,0]:=inttostr(i); stringgrid1.Cells[0,i]:=inttostr(i); end; except showmessage('input the number'); end; end;procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char); begin stringgrid1.Cells[stringgrid1.Selection.Left,stringgrid1.Selection.Top]:= stringgrid1.Cells[stringgrid1.Selection.Left,stringgrid1.Selection.Top]+Key; if(key='`') then stringgrid1.Cells[stringgrid1.Selection.Left,stringgrid1.Selection.Top]:=''; end; function caulate(var shu:array of integer):integer; var i,j:integer; begin for i:=0 to high(shu) do begin if(shu[i]<>0) then break; end; result:=i; end; function myfunc(m,n:integer):integer; var k:integer; t:integer; begin if(m>n) then k:=m else k:=n; for t:=k to m*n do begin if((t mod m=0) and (t mod n=0)) then begin break; end; end; result:=t; end; procedure TForm1.Button2Click(Sender: TObject); var passint:Arrayint; Tpassint:ArrayInt; i,j:integer; num:integer; K:integer; colnum:integer; oNumber:array of integer; myrecord:array of integer; m,n,o:integer; begin num:=strtoint(edit1.Text); colnum:=strtoint(edit3.Text); setLength(passint,num); setlength(oNumber,num); setlength(myrecord,num); for i:=0 to num-1 do begin myrecord[i]:=i; setlength(passint[i],colnum); end; { setlength(Tpassint,num-1); for i:=0 to num-2 do begin setlength(Tpassint[i],num-1); end; } for i:=0 to num-1 do begin for j:=0 to colnum-1 do begin if(stringgrid1.Cells[j+1,i+1]='') then begin passint[i,j]:=0; end else passint[i,j]:=strtoint(stringgrid1.Cells[J+1,i+1]); end; end; for i:=0 to num-1 do begin for j:=0 to num-2 do begin for m:=0 to num-1 do begin oNumber[m]:=caulate(passint[myrecord[m]]); end; if(oNumber[j]>onumber[j+1]) then begin k:=myrecord[j]; myrecord[j]:=myrecord[j+1]; myrecord[j+1]:=k; end else if((oNumber[j]=oNumber[j+1]) and (oNumber[j]<>colnum-1)) then begin k:=myfunc(passint[myrecord[j],oNumber[j]],passint[myrecord[j+1],oNumber[j+1]]); n:= k div passint[myrecord[j],oNumber[j]]; o:= k div passint[myrecord[j+1],oNumber[j+1]]; for m:=oNumber[j] to strtoint(edit3.Text)-1 do begin passint[myrecord[j],m]:=n*passint[myrecord[j],m]; passint[myrecord[j+1],m]:=o*passint[myrecord[j+1],m]; end; for n:=oNumber[j] to strtoint(edit3.text)-1 do begin passint[myrecord[j+1],n]:=passint[myrecord[j+1],n]-passint[myRecord[j],n]; end; end; end; end; for m:=0 to num-1 do begin for n:=0 to colnum-1 do begin StringGrid3.Cells[n+1,m+1]:=inttostr(passint[myrecord[m],n]); end; end; end;procedure TForm1.Edit3Change(Sender: TObject); var i:integer; begin try stringGrid1.ColCount:=strtoint(edit3.Text)+1; stringgrid3.ColCount:=strtoint(edit3.Text)+1; stringGrid1.Cells[0,0]:='j\i'; for i:=1 to strtoint(edit1.Text) do begin stringgrid1.Cells[0,i]:=inttostr(i); end; for i:=1 to strtoint(edit3.Text) do begin stringgrid1.Cells[i,0]:=inttostr(i); end; button1.Visible:=false; except showmessage('input the number'); end; end;end.
////////////////////
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids,math;type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
procedure Edit3Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
Arrayint=array of array of integer;
PArrayint=^ArrayInt ;
var
Form1: TForm1;
implementation{$R *.dfm}
procedure getarray(var arry,prry:Arrayint; m,n,k:integer);//代数余子
var
i,j:integer;
begin
for j:=0 to n-1 do
begin
for i:=0 to m-1 do
begin
prry[j,i]:=arry[j,i];
end;
end;
for j:=0 to n-1 do
begin
for i:=m+1 to k-1 do
begin
prry[j,i-1]:=arry[j,i];
end;
end;
for j:=n+1 to k-1 do
begin
for i:=0 to m-1 do
begin
prry[j-1,i]:=arry[j,i];
end;
end;
for j:=n+1 to k-1 do
begin
for i:=m+1 to k-1 do
begin
prry[j-1,i-1]:=arry[j,i];
end;
end;
end;function func( _part:ArrayInt;n:integer):integer;//句镇求值
var
t:integer;
str:Arrayint;
i,j:integer;
k:integer;
begin
setlength(str,n-1);
k:=0;
for i:=0 to n-2 do
begin
setlength(str[i],n-1);
end;
if(n>1) then
begin
for i:=0 to n-1 do
begin
getarray(_part,str,i,0,n);
t:=func(str,n-1);
if (i mod 2 =0)
then
k:=k +t*_part[0,i]
else
k:=k-t*_part[0,i];
end;
result:=k;
end
else
result:=_part[0,0];
end;FUNCTION DOphone(m,n:integer):string;
var
i,j:integer;
k:integer;
q:integer;
begin
if(m*n>0)
then q:=1
else if(m*n=0)
then q:=0
else q:=-1;
m:=abs(m);
n:=abs(n);
if(m<n)
then k:=m
else k:=n;
for i:=k downto 1 do
begin
if((m mod i=0) and (n mod i=0))
then begin
if(q=-1)
then begin
if(n<>i)
then result:='-'+inttostr(m div i)+'/'+inttostr(n div i)
else result:='-'+inttostr(m div i);
end
else
if(n<>i)
then result:=inttostr(m div i)+'/'+inttostr(n div i)
else result:=inttostr(m div i);
break;
end;
end;
if(k=0)
then result:='0';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
passint:Arrayint;
Tpassint:ArrayInt;
i,j:integer;
num:integer;
K:integer;
begin
num:=strtoint(edit1.Text);
setLength(passint,num);
for i:=0 to num-1 do
begin
setlength(passint[i],num);
end;
setlength(Tpassint,num-1);
for i:=0 to num-2 do
begin
setlength(Tpassint[i],num-1);
end;
for i:=0 to num-1 do
begin
for j:=0 to num-1 do
begin
if(stringgrid1.Cells[j+1,i+1]='')
then begin
passint[i,j]:=0;
end
else
passint[i,j]:=strtoint(stringgrid1.Cells[J+1,i+1]);
end;
end;
k:=func(passint,num);
showmessage(inttostr(k));
for i:=0 to num-1 do
begin
for j:=0 to num-1 do
begin
getarray(passint,Tpassint,i,j,num);
if((i+j) mod 2 =0)
then stringgrid3.Cells[j+1,i+1]:=Dophone(func(Tpassint,num-1),k)
else stringgrid3.Cells[j+1,i+1] :=DoPhone((-1)*func(Tpassint,num-1),k);
end;
end;
end;procedure TForm1.Edit1Change(Sender: TObject);
var
i:integer;
begin
try
stringGrid1.ColCount:=strtoint(edit1.Text)+1;
stringgrid1.RowCount:=strtoint(edit1.Text)+1;
stringgrid3.ColCount:=strtoint(edit1.Text)+1;
stringgrid3.RowCount:=strtoint(edit1.Text)+1;
stringGrid1.Cells[0,0]:='j\i';
for i:=1 to strtoint(edit1.Text) do
begin
stringgrid1.Cells[i,0]:=inttostr(i);
stringgrid1.Cells[0,i]:=inttostr(i);
end;
except
showmessage('input the number');
end;
end;procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
stringgrid1.Cells[stringgrid1.Selection.Left,stringgrid1.Selection.Top]:=
stringgrid1.Cells[stringgrid1.Selection.Left,stringgrid1.Selection.Top]+Key;
if(key='`')
then stringgrid1.Cells[stringgrid1.Selection.Left,stringgrid1.Selection.Top]:='';
end;
function caulate(var shu:array of integer):integer;
var
i,j:integer;
begin
for i:=0 to high(shu) do
begin
if(shu[i]<>0)
then break;
end;
result:=i;
end;
function myfunc(m,n:integer):integer;
var
k:integer;
t:integer;
begin
if(m>n)
then k:=m
else k:=n;
for t:=k to m*n do
begin
if((t mod m=0) and (t mod n=0))
then begin
break;
end;
end;
result:=t;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
passint:Arrayint;
Tpassint:ArrayInt;
i,j:integer;
num:integer;
K:integer;
colnum:integer;
oNumber:array of integer;
myrecord:array of integer;
m,n,o:integer;
begin
num:=strtoint(edit1.Text);
colnum:=strtoint(edit3.Text);
setLength(passint,num);
setlength(oNumber,num);
setlength(myrecord,num);
for i:=0 to num-1 do
begin
myrecord[i]:=i;
setlength(passint[i],colnum);
end;
{ setlength(Tpassint,num-1);
for i:=0 to num-2 do
begin
setlength(Tpassint[i],num-1);
end; }
for i:=0 to num-1 do
begin
for j:=0 to colnum-1 do
begin
if(stringgrid1.Cells[j+1,i+1]='')
then begin
passint[i,j]:=0;
end
else
passint[i,j]:=strtoint(stringgrid1.Cells[J+1,i+1]);
end;
end; for i:=0 to num-1 do
begin
for j:=0 to num-2 do
begin
for m:=0 to num-1 do
begin
oNumber[m]:=caulate(passint[myrecord[m]]);
end;
if(oNumber[j]>onumber[j+1])
then begin
k:=myrecord[j];
myrecord[j]:=myrecord[j+1];
myrecord[j+1]:=k;
end
else if((oNumber[j]=oNumber[j+1]) and (oNumber[j]<>colnum-1))
then begin
k:=myfunc(passint[myrecord[j],oNumber[j]],passint[myrecord[j+1],oNumber[j+1]]);
n:= k div passint[myrecord[j],oNumber[j]];
o:= k div passint[myrecord[j+1],oNumber[j+1]];
for m:=oNumber[j] to strtoint(edit3.Text)-1 do
begin
passint[myrecord[j],m]:=n*passint[myrecord[j],m];
passint[myrecord[j+1],m]:=o*passint[myrecord[j+1],m];
end;
for n:=oNumber[j] to strtoint(edit3.text)-1 do
begin
passint[myrecord[j+1],n]:=passint[myrecord[j+1],n]-passint[myRecord[j],n];
end;
end;
end;
end;
for m:=0 to num-1 do
begin
for n:=0 to colnum-1 do
begin
StringGrid3.Cells[n+1,m+1]:=inttostr(passint[myrecord[m],n]);
end;
end;
end;procedure TForm1.Edit3Change(Sender: TObject);
var
i:integer;
begin
try
stringGrid1.ColCount:=strtoint(edit3.Text)+1;
stringgrid3.ColCount:=strtoint(edit3.Text)+1;
stringGrid1.Cells[0,0]:='j\i';
for i:=1 to strtoint(edit1.Text) do
begin
stringgrid1.Cells[0,i]:=inttostr(i);
end;
for i:=1 to strtoint(edit3.Text) do
begin
stringgrid1.Cells[i,0]:=inttostr(i);
end;
button1.Visible:=false;
except
showmessage('input the number');
end;
end;end.
真是后悔了,,这么垃圾也拿出来,怕版主说我灌水.哈哈.
多多原谅拉