• Jueves 2 de Mayo de 2024, 02:47

Autor Tema:  Serie matemática...  (Leído 1469 veces)

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Serie matemática...
« en: Jueves 10 de Diciembre de 2009, 11:42 »
0
Hola a todos y buenos días...

Tengo un problemilla con un ejercicio que no me sale; dice así:

Escribe un programa que calcule el valor de S para un número real X dado, utilizando la siguiente serie:
 S = 1 + X + ((X^2)/2!) + ((X^3)/3!) +((X^4)/4!)...

Llevo hecho lo siguiente, que solo me funciona si no pongo sumandos fraccionarios...

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/*Algotirmo -> SUCESION*/
int main (void){
   /*Entradas*/
   int numaprox;   //el numero de sumandos factoriales deseados
   double x;      //el numero en cuestion para el que se calcula la sucesión
   /*Salidas*/
   float S;
   /*Intermedias*/
   float factorial=2;   //el factorial del número del denominador
   float aux;         //las X de los numeradores de los sumandos
   int i=2;            //contador del bucle 'for'
   float sumando=0;   //el valor del sumando concreto de la iteración
   float cuentasumando=0;   //el valor total de los sumandos fraccionarios
   /*Leer Entradas*/
   printf("Introducir numero real para la sucesion: ");
   scanf("%lg", &x);
   printf("Indicar el numero de sumandos factoriales deseados: ");
   scanf("%i", &numaprox);
   
   /*OPERACIONES*/
   /*Calculo de los Sumandos fraccionarios*/               
   if(numaprox > 0){
      for(i=2; i<=numaprox; i++){
         for(i=2; i<=numaprox; i++){            //calcular los factoriales
            factorial=factorial*i;
         }
         aux=pow(x, i);
         sumando=(aux/factorial);
         cuentasumando=cuentasumando+sumando;
      }
   }
   /*RESULTADOS*/
   S = 1+x+cuentasumando;
   printf("Para x=%lg, S = %fn", x, S);
   
   system("PAUSE");
}


Gracias a todos por vuestra atencion!!!

locazopro

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Serie matemática...
« Respuesta #1 en: Viernes 11 de Diciembre de 2009, 03:17 »
0
veo un poco enredado tu código, te recomiendo que mejor uses por ejemplo alguna función para calcular los factoriales, asi tu código será mas legible, podrías hacer algo como esto:

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5.  
  6. /* Programa que calcula la serie
  7.  * S= 1 + X + ((X^2)/2!) + ((X^3)/3!) +((X^4)/4!)...*/
  8.  
  9. /*Calcula el factorial de un numero */
  10. int factorial(int x){
  11.     if(x!=1)
  12.         return x*factorial(x-1);
  13.    
  14.     return 1;
  15. }
  16.  
  17. int main(){
  18.     int nivelAproximacion=0; /* El total de sumandos de la serie */
  19.     int i;/*Contadores*/
  20.     double s=1,X;
  21.    
  22.     printf("Ingrese el numero para evaluar la suma:n");
  23.     scanf("%lf",&X);
  24.    
  25.     while(nivelAproximacion==0){
  26.         printf("Ingrese el nivel de aproximacion de la suma (total de sumandos):n");
  27.         scanf("%d",&nivelAproximacion);
  28.     }
  29.    
  30.     for(i=1;i<nivelAproximacion+1;i++){
  31.         s += pow(X,i)/factorial(i);
  32.     }
  33.    
  34.     printf("El valor de la suma es %fn",s);
  35.    
  36.     return -1;
  37. }
  38.  
  39.  
  40.  

Donde dices que no acepta numeros fraccionarios, no entiendo realmente a que te refieres, te refieres al formato del número?, por favor si explicaras mejor lo que realmente necesitas quizás pueda ayudar mas.

Saludos!

punteroNULO

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Serie matemática...
« Respuesta #2 en: Sábado 12 de Diciembre de 2009, 11:43 »
0
Otra forma de hacerlo:

Si mostramos todos los elementos del cálculo:
S = 1 + X + ((X*X)/(1*2)) + ((X*X*X)/(1*2*3)) +((X*X*X*X)/(1*2*3*4))..

se ve que
(considerando <> como un subíndice)
S<i> = S<i-1> * X / i
siendo S<0> = 1

S = S<0> + S<1> + S<2> + S<3> + .........


Por lo tanto se puede utilizar este código que utiliza muchas menos operaciones matemáticas:
Código: C
  1.  
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5.  
  6. int main(){
  7.     int nivelAproximacion=0; /* El total de sumandos de la serie */
  8.     int i;/*Contadores*/
  9.     double s=1,X, aux=1;
  10.    
  11.     printf("Ingrese el numero para evaluar la suma:n");
  12.     scanf("%lf",&X);
  13.    
  14.     while(nivelAproximacion==0){
  15.         printf("Ingrese el nivel de aproximacion de la suma (total de sumandos):n");
  16.         scanf("%d",&nivelAproximacion);
  17.     }
  18.    
  19.     for(i=1;i<nivelAproximacion+1;i++){
  20.         aux = (aux *X)/i;
  21.         s += aux;
  22.     }
  23.    
  24.     printf("El valor de la suma es %fn",s);
  25. }
  26.  
  27.  

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Serie matemática...
« Respuesta #3 en: Sábado 12 de Diciembre de 2009, 19:32 »
0
Gracias por vuestro tiempo chicos. Mañana me pongo a terminarlo a ver si lo tengo listo para el lunes.
Las funciones y procedimientos aún no puedo usarlas, cosa de las prácticas, pero parecen de gran ayuda. Por lo menos para simplificar el código.

Un saludo a todos y felices fiestas, que ya se acercan!!!

Vndecid

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: Serie matemática...
« Respuesta #4 en: Sábado 12 de Diciembre de 2009, 19:42 »
0
Totalmente de acuerdo con locazopro deberia poner una cosa asi

FUNCION FACTORIAL
FUNCION ALGORITMO
MAIN

Si haces esto sabes donde esta el error . Si no estas al horno :)
Como dato anecdotico esa formula es la aproximacion de TAYLOR para una variable en el punto 1 (parece) dejando todos los otros valores dependientdo del punto deuna funcion

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Serie matemática... detalle!!
« Respuesta #5 en: Lunes 14 de Diciembre de 2009, 12:01 »
0
Tengo una preguntilla para vosotros, por qúe poneis:

s += pow(X,i)/factorial(i);

No me queda claro lo sel s +=

+= es algún tipo de función??, porque en la instrucción no está contemplado el 1+X y sin embargo si lo suma.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Serie matemática...
« Respuesta #6 en: Lunes 14 de Diciembre de 2009, 18:10 »
0
el += es un  operador de c que significa "S es igual al valor de S + el valor a la derecha del ="

S+=2 -> S= S + 2;

por lo demas, yo haria la funcion de calculo con una funcion recursiva.