注册 登录
编程论坛 Delphi论坛

pascal编程的一道题,我怎么搞也搞不对,请看看吧!

chenxiaohan757 发布于 2006-06-09 16:33, 738 次点击
题目是:计算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值不对,请大家看看有哪里错了,谢谢了
3 回复
#2
yjmovice2006-06-11 16:37

计算效率太低了,
该公式是计算弧度的
var
x:real;
m,n:integer;

i:integer;
ret,y:real;
xx:real;//x^n
nj:real;//n!

begin
//sin
//sin(x)=x-(x∧3)/3!+(x∧5)/5!-(x∧7)/7!+……直到最后一项绝对值小于10∧-7时停止运算
x:=spinedit1.Value/57.29577951 ; //角度转弧度
ret := x;
n:=1;
xx:=x;
nj:=1;
//m 3,7.9...
repeat
m:=2*n+1;
//x^n
xx:=xx*x*x;
//n!
nj:=nj*(m-1)*m;

y:=xx/nj;
if n mod 2 =0 then
ret := ret +y
else
ret := ret -y;

n:=n+1;
until y<(1/(10*10*10*10*10*10*10));
edit1.Text:= FloatToStr(ret);


end;

#3
chenxiaohan7572006-06-11 20:32
thank you very much
#4
chenxiaohan7572006-06-11 20:38
甘拜下风,代码写得太太太太太太太强了。
看来以后的路还很长。

[此贴子已经被作者于2006-6-11 20:38:45编辑过]

1