新手求助,请告诉我错在哪?有没有可以改进的地方?

var i,j,a,b,c,d:longint;
l,r,mid,x,x1,x2,x3,x4,x5:real;
function f1(x:real):real;
begin
f1:=3*a*x*x+2*b*x+c;
end;
function find1(l,r:real):real;
var mid:real;
begin
while abs(l-r)>0.001 do
begin
mid:=(l+r)/2;
if f1(l)=0 then mid:=l;
if f1(r)=0 then mid:=r;
if f1(l)*f1(mid)<0 then r:=mid;
if f1(mid)*f1(r)<0 then l:=mid;
if f1(mid)=0 then break;
end;
find1:=mid;
end;
function f2(x:real):real;
begin
f2:=a*x*x*x+b*x*x+c*x+d;
end;
function find2(l,r:real):real;
var mid:real;
begin
while abs(l-r)>0.0001 do
begin
mid:=(l+r)/2;
if f2(l)=0 then mid:=l;
if f2(r)=0 then mid:=r;
if f2(l)*f2(mid)<0 then r:=mid;
if f2(r)*f2(mid)<0 then l:=mid;
if f2(mid)=0 then break;
end;
find2:=mid;
end;

begin
readln(a,b,c,d);
j:=0;
i:=-100;
while (i>=-100) and (i<=99) do
begin
if f1(i)=0 then
begin
inc(j);
if j=1 then x1:=i else x2:=i;
end;
if f1(i+1)=0 then
begin
inc(j);
if j=1 then x1:=i+1 else x2:=i+1;
inc(i);
end;
if f1(i)*f1(i+1)<0 then
begin
inc(j);
if j=1 then x1:=find1(i,i+1) else x2:=find1(i,i+1);
end;
inc(i);
end;
x3:=find2(-100,x1);
x4:=find2(x1,x2);
x5:=find2(x2,100);
writeln(x3:0:2,' ',x4:0:2,' ',x5:0:2);
end.

0 条评论

目前还没有评论...

信息

ID
1116
难度
5
分类
搜索 | 枚举 点击显示
标签
递交数
7786
已通过
2832
通过率
36%
被复制
14
上传者