2013-03-20 30 views
6

Bu kodu vardır:Girdi denklemi, C++

yerine yazma
#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" Benim kodunda, ben aralığının başlaması istemeden önce giriş o kullanıcıyı istiyorum . Bunu nasıl yapabilirim?

"x * x * x-x-2" dosyasını saklamak için bir değişken kullanmayı denedim, ancak çalışmaz.

+1

Böyle muParser olarak ifade değerlendirme için bir kütüphane isteyeceksiniz. –

+0

Bir kullanıcının tanımlamasını yapmak, özellikle derlenmiş bir dilde çok basit değildir. –

+0

possible dup http://stackoverflow.com/questions/9503455/equation-parsing-library-c –

cevap

6

Girişi ayrıştırmanız gerekiyor, muhtemelen düşündüğünüz kadar kolay değil ama size yardımcı olabilecek bazı kütüphaneler var.

muparser.sourceforge.net/

code.google.com/p/expressionparser/

partow.net/programming/exprtk/index.html

burada

da C# bir çözümdür Bu da sana yardımcı olabilir.

Is there a string math evaluator in .NET?