Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema en c++

Estas en el tema de Problema en c++ en el foro de C/C++ en Foros del Web. Tengo que resolver el problema del polinomio de legendre donde ya tengo la logica y todo pero el problema es ke no me vota los ...
  #1 (permalink)  
Antiguo 24/04/2012, 22:18
 
Fecha de Ingreso: marzo-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Problema en c++

Tengo que resolver el problema del polinomio de legendre donde ya tengo la logica y todo pero el problema es ke no me vota los resultados correctos
Este es el codigo completo...
#include <iostream>
#include <cmath>
using namespace std;

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void leerdatos(unsigned &n, double &x){
  5.     cout<<"Orden(n)? "<<endl;
  6.     cin>>n;
  7.     cout<<"Numero (x)? "<<endl;
  8.     cin>>x;
  9. }
  10.  
  11. double leg(unsigned n, double x){
  12.     if (n==0) return 1;
  13.     if (n==1) return x;
  14.     double le0=1,le1=x, le2,aux;
  15.     for (unsigned int i=2; i<=n; i=i+1){
  16.         le2=((2*n-1)/n)*x*le1;
  17.         aux=((n-1)/n)*le0;
  18.         le2=le2-aux;
  19.         le0=le1; le1=le2;
  20.     }
  21.     return le2;
  22. }
  23.  
  24. void mostrar(unsigned int n, double x, double le2){
  25.     cout<<"Legendre ("<<n<<", "<<x<<") = "<<le2<<endl;
  26. }
  27.  
  28. int main(){
  29.     cout<<"***Legendre enesimo (n) de un numero real (x) ***"<<endl;
  30.     cout<<"Orden = 0 para salir"<<endl;
  31.     unsigned n; double le2,x;
  32.     leerdatos(n,x);
  33.     le2=leg(n,x);
  34.     mostrar(n,x,le2);
  35.     return 0;
  36. }

El problema esta en esta funcion, bueno eso es lo que creo yo

Código C++:
Ver original
  1. double leg(unsigned n, double x){
  2.     if (n==0) return 1;
  3.     if (n==1) return x;
  4.     double le0=1,le1=x, le2,aux;
  5.     for (unsigned int i=2; i<=n; i=i+1){
  6.         le2=((2*n-1)/n)*x*le1;
  7.         aux=((n-1)/n)*le0;
  8.         le2=le2-aux;
  9.         le0=le1; le1=le2;
  10.     }
  11.     return le2;
  12. }

Donde por ejemplo para n=2 y x=2 los resultados deberian ser
le2=6 y aux=0,5
le2=6-0,5= 5,5 siendo este ultimo (5,5) el resultado que deberia mostrarse pero por alguna razon no funciona =( por favor si me dieran una ayuda. Gracias de antemano

Última edición por drd222; 24/04/2012 a las 22:28
  #2 (permalink)  
Antiguo 25/04/2012, 03:02
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Problema en c++

El problema puede ser cuestión de tipos y de las operaciones.

Por ejemplo: Si n=2 : (n-1)/n => (2-1)/2 = 0

Pensarás que el resultado debería ser 0.5, pero como n es un entero sin signo, se realiza una división entera. Para hacer la división como tu quieres tienes que convertir el tipo de dato.

Código C++:
Ver original
  1. double leg(unsigned n, double x){
  2.     if (n==0) return 1;
  3.     if (n==1) return x;
  4.  
  5.  
  6.     double le0=1,le1=x, le2,aux;    
  7.  
  8.     for (unsigned int i=2; i<=n; i=i+1){
  9.         le2=((double)(2*n-1)/n)*x*le1;
  10.         aux=((double)(n-1)/n)*le0;
  11.         le2=le2-aux;
  12.         le0=le1; le1=le2;
  13.     }
  14.     return le2;
  15. }

Etiquetas: c++, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:53.