2013-03-20 12 views
6

私はこのコードを持っている:入力式、C++

#include <iostream> 
#include <cmath> 
#include <stdlib.h> 
using namespace std; 
double f(double x); 
double biseccion(double a, double b, double tolerancia, int maxiter); 
int main() 
{ 
    double a, b, raiz; 
    double tolerancia=0.00000; 
    int maxiter=25; 
    cout << "Input begin of interval: "; 
    cin >> a; 
    cout << "Input end of interval: "; 
    cin >> b; 
    cout << "\n"; 
    cout << " # de"<<"\n"<<"Iteration"<<"\t"<<" A"<<"\t"<<" B"<<"\t"<<" C"<<"\t"<<" f(c)"<<endl; 
    raiz=biseccion(a,b,tolerancia,maxiter); 
    cout << "\n"; 
    cout << "The root is: "<< raiz <<endl; 
    return 0; 
} 

double f(double x) 
{ 
     return x*x*x-x-2; 
} 
double biseccion(double a, double b, double tolerancia, int maxiter) 
{ 
     double c; 
     int numiter=1; 
     do 
     { 
      c=(a+b)/2; 
      if(f(a)*f(c)<0) 
      { 
       b=c; 
      } 
      else 
      { 
       a=c; 
      } 
      cout<<"  "<<numiter<<"\t"<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t"<<f(c)<<endl; 
      numiter++; 
     } 
     while((abs(f(c))>tolerancia)&&(numiter<maxiter)); 
     return c; 
} 

代わりに執筆の「X * X * XX-2」私のコードでは、私が入力したユーザをしたい、それ区間の開始を求める前に、 。どうやってやるの?

「x * x * x-x-2」という変数を使用してみましょう。

+1

muParserなどの式評価用のライブラリが必要です。 –

+0

ユーザが関数を定義することは、特にコンパイルされた言語ではあまり簡単ではありません。 –

+0

可能なdup http://stackoverflow.com/questions/9503455/equation-parsing-library-c –

答えて

6

入力を解析する必要がありますが、考えているほど簡単ではないかもしれませんが、手助けできるライブラリがいくつかあります。ここ

muparser.sourceforge.net/

code.google.com/p/expressionparser/

partow.net/programming/exprtk/index.html

は、C#でのソリューションですそれもあなたを助けるかもしれません。

Is there a string math evaluator in .NET?