PASCAL习题急求解(WHILE循环语句)

来源:百度知道 编辑:UC知道 时间:2024/06/17 23:24:52
题目是这样的:
利用WHILE循环完成:
求π的值。
已知π/4=1-1/3+1/5-1/7+1/9-……,要求最后一项小于10的负六次方为止。输出π。
我是这样做的:

program while01;
VAR pi:real;
i,j:longint;
begin
pi:=1;
j:=0;
i:=3;
while 1/i>1e-6 do
begin
j:=j+1;
if j mod 2=0 then pi:=pi-1/i
else if j mod 2=1 then pi:=pi-1/i;
end;
writeln(pi*4);
readln;
end.

这个程序几乎把机器拖死,不得已无法等到结果出来直接关掉了。这说明这个程序可能有错。
检查了好多遍,仍无法发现到底错在哪里。
帮帮我把这道题目做出来……至为感谢。

你漏掉了i:=i+2语句,这样循环一直不能结束,这是死循环的关键。你还有两个小错误,修改后的程序如下:

program while01;
VAR pi:real;
i,j:longint;
begin
pi:=1;
j:=1;
i:=3;
while 1/i>1e-6 do
begin
if j mod 2=0 then pi:=pi+1/i else pi:=pi-1/i;
j:=j+1;
i:=i+2;
end;
writeln(pi*4);
readln;
end.

以上程序在DELPHI7下成功运行,结果如下:

E:\ygb>dcc32 b.dpr
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
b.dpr(18)
19 lines, 4.23 seconds, 12260 bytes code, 1857 bytes data.

E:\ygb>b.exe
3.14159065358969E+0000

其实很简单,只需要11行。。
程序如下:
var i,t:longint; ans:real;
begin
t:=-1;
while i shl 1+1<=1000000 do
begin
t:=-1*t;
ans:=ans+t/(i shl 1+1);
inc(i);
end;
writeln(ans*4);
end.