Programación General > C/C++
Serie matemática...
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
[#] Página Siguiente
Ir a la versión completa