Una guia sobre esto... hay varias formas de hacer esto... cada una con sus ventajas y sus inconvenientes.
Yo personalmente "recompilaria" la función. Un polinomio se puede encapsular fácilmente como una sucesión de monomios del tipo:
class Monomio
{
public:
Monomio( double multiplicador, double exponente )
: _multiplicador( multiplicador),
_exponente( exponente )
{
}
double operator( )( double x) const
{
return pow( x * multiplicador, _exponente );
}
friend std::ostream& operator << ( std::ostream& out, const Monomio& monomio )
{
if ( monomio.multiplicador > 0 )
out << "+";
out << monomio.multiplicador;
if ( monomio._exponente != 0.0 )
{
out << "x";
if ( monomio._exponente != 1.0 )
out << "^" << monomio._exponente;
}
return out;
}
private:
double multiplicador;
double _exponente;
};
Y con esto el resto del proceso se simplifica enormemente:
class Polinomio
{
public:
Polinomio( const std::vector< Monomio >& monomios )
: _monomios( monomios )
{ }
double operator( )( double x) const
{
double resultado = 0.0f;
for ( const auto& monomio : _monomios )
{
resultado += monomio( x);
}
return resultado;
}
friend std::ostream& operator<<( std::ostream& out, const Polinomio& poli )
{
out << "y=";
for ( const auto& monomio : poli._monomios )
out << monomio;
return out;
}
private:
std::vector< Monomio > _monomios;
};
int main()
{
std::vector< Monomio > monomios { { 1.0, 2.0 }, { -14.0, 1.0 }, { 48.0, 0.0 } };
Polinomio poli( monomios );
std::cout << "Función: " << poli << std::endl;
std::cout << "Resultados: " << std::endl;
for ( double x = 0; x < 10; x++ )
{
std::cout << "x=" << x << " - y=" << poli( x ) << std::endl;
}
}
Para graficar las funciones tendrás que pelearte con alguna librería gráfica... pero al menos ya tienes la pareja de valores (x,y)