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

Serie o sumatoria en C# o C++

Estas en el tema de Serie o sumatoria en C# o C++ en el foro de C/C++ en Foros del Web. 16. Calcular la sumatoria: S= 1 + x^1/1! + x^2/2! + x^3/3! + x^4/4! + … + (x^n)/(n!). Se debe ingresar x real y n ...
  #1 (permalink)  
Antiguo 02/02/2014, 21:02
 
Fecha de Ingreso: febrero-2014
Mensajes: 1
Antigüedad: 10 años, 2 meses
Puntos: 0
Serie o sumatoria en C# o C++

16. Calcular la sumatoria:
S= 1 + x^1/1! + x^2/2! + x^3/3! + x^4/4! + … + (x^n)/(n!). Se debe ingresar x real y n entero positivo
Por favor ayuda con el modo consola Gracias
  #2 (permalink)  
Antiguo 03/02/2014, 04:57
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años
Puntos: 20
Vamos que no es difícil. Con un solo while ya lo armas. Copia el código que tenes hecho hasta ahora, aunque no funcione, así te podemos ayudar mejor sin tener que hacerte todo el trabajo de cero.
Saludos.
  #3 (permalink)  
Antiguo 03/02/2014, 12:20
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Serie o sumatoria en C# o C++

Tengo la duda si el "16" puesto al inicio tiene alguna relevancia.
__________________
Visita mi perfil en LinkedIn
  #4 (permalink)  
Antiguo 03/02/2014, 12:26
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años
Puntos: 20
Cita:
Iniciado por CalgaryCorpus:4562599
Tengo la duda si el "16" puesto al inicio tiene alguna relevancia.
Yo creo que viene con el copy&paste de alguna guía de problemas a resolver.
  #5 (permalink)  
Antiguo 09/02/2014, 18:29
 
Fecha de Ingreso: febrero-2014
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Serie o sumatoria en C# o C++

Te doy un ejemplo que calcula la serie con un x y n fijos, establecidos en el programa. De ejercicio te queda la modificación (sencilla) para que se pidan estos valores al usuario.

Código C++:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. /* Función que calcula el factorial de un entero no negativo */
  6. int fact( int );
  7.  
  8. int main ( ) {
  9.    
  10.     double x = 1.53464;
  11.     int i, N = 10;
  12.     double s = 1;
  13.  
  14.     for (i = 0; i < N; i++)
  15.     s = s + pow(x, i) / (double) fact(i);
  16.  
  17.     printf( "El valor es: %lf\n", s );
  18.     return 0;
  19. }
  20.    
  21. /* Definición de la función fact */
  22. int fact( int n ) {
  23.    
  24.     int i;
  25.     int prod = 1;
  26.    
  27.     /* para argumento menor o igual a uno devuelve 1 */
  28.     if ( n <= 1 ) return 1;
  29.    
  30.     for (i = 2; i<= n; i++ )
  31.         prod *= i;
  32.    
  33.     return prod;
  34. }
  #6 (permalink)  
Antiguo 09/02/2014, 18:36
 
Fecha de Ingreso: febrero-2014
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Serie o sumatoria en C# o C++

Volviendo al caso, el tema me interesó porque observé un pequeño detalle que se presta a la discusión constructiva.

Si observamos, la función factorial que presenté es muy básica y tiene el inconveniente de que para calcular el factorial de un nuevo número hay que calcular todo el producto de nuevo. Es decir, no aprovecha los resultados previos, incurriendo así en una sobrecarga en tiempo de ejecución.

Podría mejorarse como:

Código C++:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. int main ( ) {
  6.    
  7.     double x = 1.53464;
  8.     int i, N = 10;
  9.     double s = 0;
  10.     int prod = 1;
  11.  
  12.     for (i = 0; i < N; i++) {
  13.         if ( i >= 2 ) prod *= i;
  14.         s = s + pow(x, i) / (double) prod;
  15.     }
  16.  
  17.     printf( "El valor es: %lf\n", s );
  18.     return 0;
  19. }

lo que haría innecesario el empleo de una función auxiliar.

Pero la discusión sigue abierta, se oyen comentarios y opiniones .....
  #7 (permalink)  
Antiguo 09/02/2014, 19:20
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Serie o sumatoria en C# o C++

El re-usar el resultado de la iteracion anterior para no calcular el factorial todas las veces puede tambien usarse para no tener que calcular la potencia usando pow(), pero mejor aun es aprovechar que tanto el numerador como el denominador crecen de acuerdo a la iteracion.

No hacerlo asi te puede llevar a que,para N suficientemente grande, el factorial no quepa en el nro entero que lo tiene que guardar.

Lo que podria ayudar es combinar ambas observaciones, por ejemplo, si estas calculando el sumando x^4/4!, y este particular sumando estuviera guardado en una variable, digamos "s" el siguiente sumando sera s*x/i. Hacer esto en cada iteracion hará que se consideren siempre valores que caben en un entero y no habrá overflow.
__________________
Visita mi perfil en LinkedIn
  #8 (permalink)  
Antiguo 10/02/2014, 14:38
 
Fecha de Ingreso: febrero-2014
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Serie o sumatoria en C# o C++

Sí claro Corpus, así más o menos:

Código C++:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main ( ) {
  5.    
  6.     double x = 1.53464;
  7.     int i, N = 10;
  8.     double s = 1;
  9.     int prod = 1;
  10.  
  11.     for (i = 1; i <= N; i++) {
  12.         prod *= x / (double) i;
  13.         s = s + prod;
  14.     }
  15.  
  16.     printf( "El valor es: %lf\n", s );
  17.     return 0;
  18. }

sin usar para nada a math.h

Etiquetas: serie, sumatoria
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 23:37.