Входное уравнение в методе деления пополам, переполнение стека

У меня есть этот код:

#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 * x-x-2» в моем коде, я хочу, чтобы пользователь ввел его перед запросом начала интервала. Как я могу это сделать?

Я пытаюсь использовать переменную для хранения «x * x * x-x-2», но ни одна из них не работает.

6

Решение

Вам нужно проанализировать входные данные, вероятно, это не так просто, как вы думаете, но есть некоторые библиотеки, которые могут вам помочь.

muparser.sourceforge.net/

code.google.com/p/expressionparser/

partow.net/programming/exprtk/index.html

Вот также решение в C #, которое может помочь вам тоже.

Есть ли в .NET оценщик математики строки?

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector