English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

#include
using namespace std;
int main()
{
double x1=0.5,x2=2,x;
double error(1);
cout<<"利用二分法求在0.5與2之間的根"< cout<<"計算結果:此根為";
while((error<0)||(error>=0.0000000001))
{
x=(x2+x1)/2;
error=(1*x*x*x)-(1*x*x)-(1*x)-1;
if(error<0)
x1=x;
else
x2=x;
}
cout< return 0;
}
請問一下,debug沒有錯誤 但是沒有結果呢
哪邊錯了呢
如果還要再加上我已經算了n次
如果n已經大於10次 就不再繼續算下去
那要怎麼加呢
拜託了

2006-09-30 15:44:28 · 4 個解答 · 發問者 ? 1 in 電腦與網際網路 程式設計

我也有跑出這結果
但是怎ㄇ加入計數的功能呢
我想要列出n=0時 root=多少
n=1時 root=多少
.....n=10 root=多少
如果超過10 就不再繼續算下去
這功能怎ㄇ加上去呢
還是要怎ㄇ寫比較好ㄋ

2006-09-30 16:45:28 · update #1

4 個解答

這程式至少有 3 個 bug:
1. double error(1); 應該改為 double error = 1; 不然,有時會有你說的〝沒有結果〞。
2. 這個結構在這題剛好沒問題;但不保證在其它題沒有:你第一個 x1 剛好 < 0;若是第一組 x1 > 0 而 x2 <0,就掛了!
 若只是要交這題的作業,可以;若要以後拿來用,要再加判斷。(這個 bug 我的程式沒改。)
3. 關於 while 裡 error 的判斷在多數情況下沒問題,但不保證永遠沒問題!建議改為
 (error < -1e-7 || error > 1e-7) 不要用 0。萬一剛好命中,結果因為你把 0 排除了,那真的只找到近似值了。
 而你上限用 1e-10 這值通常也太小(在你這題不會)。建議放寬一點。如:1e-7。
另外,雲影的修改也有個 bug
((error<0)||(error>=0.0000000001)&&counter<10) 應改為
((error<0 || error>=0.0000000001)&&counter<10) 因為 && 比 || 優先

#include
#include
using namespace std;
int main()
{double x1=0.5, x2=2, r, ans = 1;
int i;
cout << "利用二分法求在0.5與2之間的根" << endl;
cout << "計算結果:此根為";
for (i=0; i<11 && fabs(ans) < 1e-7; i++)
{ r = (x2+x1) / 2;
if ( (ans = r*r*r - r*r - r -1) < 0) x1 = r;
else x2 = r;
cout << "Iter. " << i << "prox. root " << r << endl;
}
return 0;
}

我目前沒有 C++ 的 compiler,你要自己試一下囉!
有問題再問。
祝 學習有成 ^_^

2006-09-30 18:07:51 · answer #1 · answered by ? 7 · 0 0

把你的程式碼拿來用,多補個counter
int counter=1;//剛開始就算第一遍了吧
while((error<0)||(error>=0.0000000001)&&counter<10)//小於十遍都會做,超過十遍強制跳出,所以才用&&
{
x=(x2+x1)/2;
error=(1*x*x*x)-(1*x*x)-(1*x)-1;
if(error<0)
x1=x;
else
x2=x;
cout< counter++;
}
後面的程式碼請自行加油囉

2006-09-30 17:06:06 · answer #2 · answered by 雲影 2 · 0 0

我也有跑出這結果
但是怎ㄇ加入計數的功能呢
我想要列出n=0時 root=多少
n=1時 root=多少
.....n=10 root=多少
如果超過10 就不再繼續算下去
這功能怎ㄇ加上去呢
還是要怎ㄇ寫比較好ㄋ

2006-09-30 16:49:15 · answer #3 · answered by ? 1 · 0 0

我複製貼上你的code直接跑,跑出1.83729的結果。

2006-09-30 16:04:48 · answer #4 · answered by Almond 6 · 0 0

fedest.com, questions and answers