Programación General > C/C++

 Serie matemática...

(1/2) > >>

ermiguel1979:
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:
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 --- #include <stdio.h>#include <math.h>  /* Programa que calcula la serie  * S= 1 + X + ((X^2)/2!) + ((X^3)/3!) +((X^4)/4!)...*/ /*Calcula el factorial de un numero */int factorial(int x){    if(x!=1)        return x*factorial(x-1);        return 1;} int main(){    int nivelAproximacion=0; /* El total de sumandos de la serie */    int i;/*Contadores*/    double s=1,X;        printf("Ingrese el numero para evaluar la suma:n");    scanf("%lf",&X);        while(nivelAproximacion==0){        printf("Ingrese el nivel de aproximacion de la suma (total de sumandos):n");        scanf("%d",&nivelAproximacion);    }        for(i=1;i<nivelAproximacion+1;i++){        s += pow(X,i)/factorial(i);    }        printf("El valor de la suma es %fn",s);        return -1;}   
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:
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 --- #include <stdio.h>#include <math.h>  int main(){    int nivelAproximacion=0; /* El total de sumandos de la serie */    int i;/*Contadores*/    double s=1,X, aux=1;        printf("Ingrese el numero para evaluar la suma:n");    scanf("%lf",&X);        while(nivelAproximacion==0){        printf("Ingrese el nivel de aproximacion de la suma (total de sumandos):n");        scanf("%d",&nivelAproximacion);    }        for(i=1;i<nivelAproximacion+1;i++){        aux = (aux *X)/i;        s += aux;    }        printf("El valor de la suma es %fn",s);}  

ermiguel1979:
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:
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

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa