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

Problema C++ serie

Estas en el tema de Problema C++ serie en el foro de C/C++ en Foros del Web. Este es el ejercicio: Me da error en las líneas: 17 , 28 con el mismo error (comparison between signed and unsigned integer expressions). y ...
  #1 (permalink)  
Antiguo 21/11/2011, 18:21
 
Fecha de Ingreso: octubre-2011
Mensajes: 15
Antigüedad: 12 años, 6 meses
Puntos: 1
Problema C++ serie

Este es el ejercicio:



Me da error en las líneas:

17 , 28 con el mismo error (comparison between signed and unsigned integer expressions).

y 36 (unused variable 'suma').

Y no sale el resultado.

Si alguien me podría ayudar se lo agradecería.
Muchas gracias.

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. unsigned pedir_numero(){
  5.     unsigned n;
  6.  
  7.     cout << "Introduzca X: ";
  8.     cin >> n;
  9.  
  10.     return n;
  11. }
  12.  
  13. long potencia(unsigned n, unsigned cont){
  14.     long res=n;
  15.     int i;
  16.  
  17.     for(i=1; i<=cont; i++){
  18.         res=n*res;
  19.     }
  20.  
  21.     return res;
  22. }
  23.  
  24. long fact(unsigned cont){
  25.     long res=1;
  26.     int i;
  27.  
  28.     for(i=2; i<=cont; i++){
  29.         res=res*i;
  30.     }
  31.  
  32.     return res;
  33. }
  34.  
  35. double suma(unsigned n){
  36.     double res=0, suma=1;
  37.     bool comp=true;
  38.     unsigned cont=1;
  39.  
  40.     while(comp){
  41.         res=potencia(n, cont)/fact(cont);
  42.         if(res<0.0001){
  43.             comp=false;
  44.         }
  45.         cont++;
  46.     }
  47.  
  48.     return res;
  49. }
  50.  
  51. int main(){
  52.     double resultado;
  53.     unsigned numero;
  54.  
  55.     numero=pedir_numero();
  56.     resultado=suma(numero);
  57.  
  58.     return 0;
  59. }
  #2 (permalink)  
Antiguo 21/11/2011, 18:59
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema C++ serie

Es facil, en la linea 17 y en la 18 estas comparando un entero con signo con un entero sin signo...parecen ser el mismo tipo de datos pero su representacion es diferente, por eso a nivel maquina a lo mejor no se obtienen los resultados imaginados. Recomendacion en ambas funciones declara a i como unsigned .

Y otra vez mas el compilador tiene razon, si te vijas la variable suma no la usas. Devolves res pero eso es solo el ultimo termino de la seria. Deberias agregar esta linea:

res=potencia(n, cont)/fact(cont);
suma += res;

Por ultimo, para ver algo debes imprimirlo en pantalla:

cout << resultado << endl;

tenes que agregar en el main.

Saludos..

Y un consejo...aprende del compilador, que casi siempre es muy sabio....
  #3 (permalink)  
Antiguo 21/11/2011, 19:10
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Problema C++ serie

Una observacion:

La division de enteros (o long, en tu caso) da entero. Hay que transformar al menos 1 de los participantes de la division a float o double para convertir al otro a double y asi obtener el resultado en double.
__________________
Visita mi perfil en LinkedIn
  #4 (permalink)  
Antiguo 22/11/2011, 02:33
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Problema C++ serie

Un pequeño detalle que te podría causar problemas:

Tienes una función llamada suma, dentro de ella declaras una variable llamada suma. En C/C++, el nombre de una función es un puntero a esa función. Si al compilar el compilador no ha tirado error ni warning puede que no pase nada, pero también podrías encontrarte con un comportamiento raro del programa. Conviene tener cuidado con ese tipo de cosas.
  #5 (permalink)  
Antiguo 22/11/2011, 05:02
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema C++ serie

No creo que pase nada. Al declarar la variable suma, se pierde el concepto de la funcion dentro de ese ambito. Simplemente no va a poder hacer llamados recursivos.

Etiquetas: serie, variables
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 00:46.