Versión Completa : Posible problema de casting...
the_jackal
julio 15, 2006, 07:03
Que tal...
Pues me habian mandado a hacer un programa en C++ que calculara el numero "e" elevado a un numero introducido por el usuario, y que tambien el usuario introduciera el numero de decimales que queria que se mostraran por pantalla. El programa habia que hacerlo sin incluir la funcion "exp", de la libreria cmath.
El codigo que realice fue usando el teorema de taylor para calcular aproximaciones:
#include <iostream>
#include <cmath>
using namespace std;
float potencia (float, int);
float factorial (int);
float sumatoria (float);
float x,n;
int main ()
{
cout<<"Introduzca exponente para elevar el numero e: ";
cin >> x;
cout<<"Introduzca cantidad de decimales que desee obtener: ";
cin >> n;
cout << "El numero e elevado a " <<x<< " es igual a: "<<sumatoria
(x)<<endl;
}
float sumatoria (float x)
{
float suma = 0;
for (int i = 0; i <= x; i++)
suma = suma + (float)potencia(x,i)/factorial(i);
return suma;
}
float potencia (float a, int b)
{
float pot;
pot = pow (a,b);
return pot;
}
float factorial (int a)
{
int long fact = 1;
for (int i = 1; i <= a; i++)
fact = fact* i;
return fact;
}
Pero la salida del programa no me muestra los decimales de la division "potencia(x,i)/factorial(i)"...
El introducir x = 1, y n (numero de decimales) = 8, el programa deberia mostrar como resultado algo parecido a: 2.71828182, pero me muestra solo 2....
Le hice el casting, y le puse "suma = suma + (float) potencia(x,i)/factorial(i);".... pero aun asi no funciona.
Que podria estar pasando?..
Gracias de antemano...:)
jomunoz
julio 16, 2006, 01:49
incluya la cabecera:
#include <iomanip>
E imprima la solucion asi:
std::cout << std::setprecision(n) << "El numero e elevado a " <<x<< " es igual a: "<<sumatoria (x)<< std::endl;
the_jackal
julio 16, 2006, 02:21
ya intente esa solucion y no me funciono.. = \
jomunoz
julio 16, 2006, 01:22
ya intente esa solucion y no me funciono.. = \
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
float potencia (float, int);
float factorial (int);
float sumatoria (float);
float x;
int n;
int main ()
{
cout<<"Introduzca exponente para elevar el numero e: ";
cin >> x;
cout<<"Introduzca cantidad de decimales que desee obtener: ";
cin >> n;
cout.setf(ios::fixed);
cout << setprecision(n) << "El numero e elevado a " <<x<< " es igual a: " << sumatoria
(x)<<endl;
}
float sumatoria (float x)
{
float suma = 0;
for (int i = 0; i <= x; i++)
suma = suma + (float)potencia(x,i)/factorial(i);
return suma;
}
float potencia (float a, int b)
{
float pot;
pot = pow (a,b);
return pot;
}
float factorial (int a)
{
int long fact = 1;
for (int i = 1; i <= a; i++)
fact = fact* i;
return static_cast<float>(fact);
}
Asi funciona, si habia un problema de cast en la funcion factorial, le añadí el cast necesario.
el_guazu
julio 19, 2006, 01:11
En la llamada a la funcion sumatoria le manda un entero, y no un flotante,
puede ser que halla algun conflicto en eso...
y si lo existiese cheque el for de la misma funcion, ya que esta comparado un entero con un flotante.
vBulletin®, Copyright ©2000-2008, Jelsoft Enterprises Ltd.