有人可以教我做這個C++的程式嗎?(程式碼附上)

是這樣的
在我的C++功課裡
有一題是要用 16arctan(1/5)-4arctan(1/239) 去計算圓周率
程式的要求是希望你用arctan的泰勒展開式之後
(arctan(x)=x-x^3/3+x^5/5-x^7/7.......)
去比較只有一項x跟兩項x跟三項x...如此
當後值跟前值小於你所給定的值之後
此程式就自動結束
P.S. 不可用 pow 和 atan...如果可以就簡單了

這是我的程式碼

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

int main()
{
long double tol,diff,x,y,total_a,total_b,t1,t2,p1,p2,n,t1n,t2n;

cout << "Enter tolerence" << endl;<br>cin >> tol;
cout.precision(14);
x=1.0/5.0;
y=1.0/239.0;
total_a=1.0/5.0;
total_b=1.0/239.0;
t1=x;
t2=y;
p1=16*(total_a)-4*(total_b);
do
{
for(n=3;n>=0;n=n+2)
{
t1n=t1*(-1*x*x)/n;
t2n=t2*(-1*y*y)/n;

total_a=(total_a+t1n);
total_b=(total_b+t2n);

t1=t1n;
t2=t2n;

p2=16*(total_a)-4*(total_b);
cout<<p2<<endl;
p1=p2;
diff=fabs(p2-p1);

}
}while(diff>=tol);

return 0;
}

我的程式可以compile,但是卻沒有辦法結束,他會一直得到固定的值
所以我在猜想這中間我是不是有什麼value沒有reassign到
有人可以告訴我嗎
在程式碼中加入debug message或善用debuger都可以幫你找到為什麼
debug也是必備的技巧吧
...
p1=16*(total_a)-4*(total_b);
...
p2=16*(total_a)-4*(total_b);
cout<<p2<<endl;
p1=p2;
diff=fabs(p2-p1);

抱歉...沒有很認真的compile跑一次...

but...這樣子....

p1在第一次跑完p1= p2之後就會always等於p2了吧??~~

fabs(0) ???

喔喔,我打反了

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

int main()
{
long double tol,diff,x,y,total_a,total_b,t1,t2,p1,p2,n,t1n,t2n,k;

cout << "Enter tolerence" << endl;
cin >> tol;
cout.precision(14);
x=1.0/5.0;
y=1.0/239.0;
total_a=1.0/5.0;
total_b=1.0/239.0;
t1=x;
t2=y;
k=4;
p1=16*(total_a)-4*(total_b);
do
{
for(n=3;n<k;n=n+2)
{
t1n=t1*(-1*x*x)/n;
t2n=t2*(-1*y*y)/n;

total_a=(total_a+t1n);
total_b=(total_b+t2n);

t1=t1n;
t2=t2n;

p2=16*(total_a)-4*(total_b);
cout<<p2<<endl;
diff=fabs(p2-p1);
p1=p2;
k+=2;
}

}while(diff>=tol);

return 0;
}

應該是這樣的
不過我有發現一件事情,就是這樣For-loop不會結束

哭哭
for(n=3;n<k;n=n+2)
{
t1n=t1*(-1*x*x)/n;
t2n=t2*(-1*y*y)/n;

total_a=(total_a+t1n);
total_b=(total_b+t2n);

t1=t1n;
t2=t2n;

p2=16*(total_a)-4*(total_b);
cout<<p2<<endl;
diff=fabs(p2-p1);
if (diff >= tol)
break;

p1=p2;
k+=2;
}


do...while拿掉,沒有trace的很仔細,不過你的for迴圈若其中沒有判斷式的確是變成無窮迴圈,程式變數應該有機會再用少些、code再簡潔些。
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!