-2
私は4度でコンピュータサイエンスを学び、私はC++の二分法の実装に問題があります。 エラーがコードを実行して1回終了しましたが、いくつかの変更を試みましたが、良い結果を得ました:( 助けてくれれば助けてください 私はいくつかの代替コードを見ましたが、 。異なる私の二分法をC++で
私のコード以下:
#include <iostream>
#include <math.h>
using namespace std;
double funcao(double x)
{
double resultado;
resultado = x*log10(x)-1;
return resultado;
}
double E(double xk,double xkAnt)
{
double resultado =0;
resultado= fabs((xk-(xkAnt))/xk);
cout<<"O resultado de E é: "<<resultado<<"\n\n";
return resultado;
}
// 1)metodo da Bissecção:
// Este programa implementa o método da bissecção para obter a raíz
int main()
{
setlocale(LC_ALL,"Portuguese");
double a,b,xk,xkAnt,erro;
xkAnt=0;
a=2.0;
b=3.0;
//cout<<"Digite o valor(double) para o erro \n"<<"Erro: ";
erro=0.005;
while(E(xk,xkAnt)>erro)
{
xk= (a+b)/2;
if((funcao(a)*funcao(xk))<0)
{
b=xk;
xkAnt=xk;
cout<<"Multiplicação das Func. <0 B = xk \n\n";
}
else
{
a=xk;
xkAnt=xk;
cout<<"Multiplicação das Func. >0 A = xk \n\n";
}
if(xkAnt==0)
{
cout<<"A: "<<a<<endl<<"B: "<<b<<endl<<"XK: "<<xk<<endl<<"Fun(XK): "<<funcao(xk)<<endl<<"Erro: *"<<endl<<endl;
}
else
{
cout<<"A: "<<a<<endl<<"B: "<<b<<endl<<"XK: "<<xk<<endl<<"Fun(XK): "<<funcao(xk)<<endl<<"Erro: "<<E(xk,xkAnt)<<endl<<endl;
}
}
return 0;
}
コードが機能していて、レビューしたい場合は、[codereview.se]に投稿してください。 –
あなたのデバッグセッションの結果をあなたの投稿に編集してください。どの声明が問題を引き起こしていますか?精度についての問題ですか?入力は何ですか?予想されるアウトプットと実際のアウトプットは何ですか? –
'funcao(a)'を一時変数に、 'funcao(xk)'を 'if'文の前の別の変数に代入すると、デバッグ中にその値が分かりやすくなります。製品と同じです。 –