中国37mm高炮:pascal编程的一道题,我怎么搞也搞不对,帮忙看看吧!

来源:百度文库 编辑:高考问答 时间:2024/04/29 08:43:18
题目是:计算sin(x)=x-(x∧3)/3!+(x∧5)/5!-(x∧7)/7!+……直到最后一项绝对值小于10∧-7时停止运算,x由键盘输入。(x∧3表示x的3次方,下同)
我编的代码是
program ex9;
var y:real;
i,n,t,s,x:longint;
begin
write('x=');readln(x);
n:=1;
y:=0;
repeat
s:=1; t:=1;
if n mod 2=1 then
begin
for i:=1 to (2*n-1) do
begin
t:=t*x;
s:=s*i;
end;
y:=y+t/s;
end
else
begin
for i:=1 to (2*n-1) do
begin
t:=t*x;
s:=s*i;
end;
y:=y-t/s;
end;
n:=n+1;
until t/s<1/(10*10*10*10*10*10*10);
write('sin',x,'=',y:0:4);
readln;
end.
所用的软件是Borland Pascal 7
但算出来的sin值不对,请大家看看有哪里错了,谢谢了。
但是repeat...until语句已经有判断t/s的值了呀,
而且repeat...until的最后一句n:=n+1已经把n进行了循环。
我算出来的sin值和真实值有出入,并非算不出来。

real是普通实数类型,最好打开{$N}编译开头,用双精度实数.
我还编了个更简单的程序
Program sin;
var
sum:real;
f1,f2:longint;
i,x,fuhao:intreger;
begin
readln(x);
sum:=0;
f1:=x;
f2:=1;
i:=2;
fuhao:=1;
repeat
sum:=sum+f1/f2*fuhao;
fuhao:=-fuhao;
f1:=f1*sqr(x);
f2:=f2*i*(i+1);
i:=i+2
until f1/f2<0.0000001
writeln('sin(',x,')=',sum);
readln
end.

y:=y+/-t/s; 的时候应该加上判断,t/s的值小于10∧-7时候停止。
if n mod 2=1 then `这个if外面应该加个while类型的语句,把n纳入循环递增中。

until t/s<1/(10*10*10*10*10*10*10);
==>until t/s>1/(10*10*10*10*10*10*10);

同意

213

Program example16(input,output);
Const
w=1e-7;
Var
x,sum,t:real;
n:integer;
Begin
read(x);
writeln(‘x=’,x);
n:=1;
t:=x;
sum:=x;
Repeat
n:=n+2;
t:=t*(-x*x)/(n-1)/n;
sum:=sum+t;
Until abs(t)<w ;{结束Repeat,其中不需要复合语句}
writeln(‘sin(x)=’,sum);
End.