代码书写的问题(100分)

  • 主题发起人 主题发起人 sunjialong
  • 开始时间 开始时间
S

sunjialong

Unregistered / Unconfirmed
GUEST, unregistred user!
在下面的代码中,o 函数如何才能不用,在程序中到底应该怎么写?

type
PERadical=^ERadical;
Fraction=Record
n:Int64;
d:Int64;
end;
ERadical=Record
q:Fraction;
r:Int64;
end;
Radical=Record
r:Fraction;
i:Tlist;
end;

Function o(a:pointer):PERadical;
begin
o:=a;
end;

function PR(a:Radical):Radical;
var
out:Radical;
dtemp1,dtemp2:Integer;
gs:Fraction;
begin
out:=a;
gs.n:=1;
for dtemp1:=1 to out.i.Countdo
begin
gs.n:=SSqrt(o(out.i[dtemp1-1]).r);
o(out.i[dtemp1-1]).r:=o(out.i[dtemp1-1]).r div gs.n div gs.n;
o(out.i[dtemp1-1]).q:=CF(o(out.i[dtemp1-1]).q,gs,3);
end;
for dtemp1:=1 to out.i.Countdo
begin
if (dtemp1>out.i.Count ) then
break;
for dtemp2:=1 to out.i.Count -dtemp1do
begin
while (out.i.Count >=dtemp1+dtemp2) and (o(out.i[dtemp1-1]).r=o(out.i[dtemp1+dtemp2-1]).r)do
begin
o(out.i[dtemp1-1]).q:=CF(o(out.i[dtemp1-1]).q,o(out.i[dtemp1+dtemp2-1]).q,1);
out.i.Delete(dtemp1+dtemp2-1);
end;
end;
end;
dtemp1:=1;
while (dtemp1<=out.i.Count )do
begin
if (out.i.Count >= dtemp1 ) and (o(out.i[dtemp1-1]).r=1) then
begin
out.r:=CF(out.r,o(out.i[dtemp1-1]).q,1);
out.i.Delete(dtemp1-1);
end else
dtemp1:=dtemp1+1;
end;
dtemp1:=1;
while (dtemp1<=out.i.Count )do
begin
if (out.i.Count >=dtemp1) and ((o(out.i[dtemp1-1]).r=0) or (o(out.i[dtemp1-1]).q.n=0)) then
out.i.Delete(dtemp1-1)
else
dtemp1:=dtemp1+1;
end;
PR:=out;
end;
 
用 o 函数 也是没有办法的办法,很麻烦,所以才请教大家
 
用PERadical(a)来取代您的"o"函数.
 
接受答案了.
 
后退
顶部