Hola
Bueno, solo tengo una pequeña duda, espero se pueda resolver
Segun yo mi código ya esta correcto, de hecho hace lo que debería hacer (calcular una integral definida con la regla de simpson), pero cuando pretendo introducir codigo para que se repita hasta que el usuario desee no le el caracter de validación, simplemente termina, es decir, solo ejecuta el programa una vez.
Aqui dejo el código:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
float delta_x(float a, float b, float n){
return (b-a)/n; }
float f(float x, int op){
switch(op){
case 1: return 1.0/x;
case 2: return 1.0/(1.0+x);
case 3: return sqrt(1.0+pow(x,3.0));
case 4: return sin(exp(x/2.0)); } }
int menu(){
int op;
printf("\n\t=Calculo de la integral definida por la Regla del Trapecio=\n\n");
printf("1) F(x) = 1/x\n2) F(x) = 1/(1+x)\n3) F(x) = (1+x^3)^(1/2)\n4) F(t) = sin[e^(t/2)]\n\n");
printf("Elige un ejemplo (1-4): "); scanf("%d", &op);
return op;}
void intercambio(float *a, float *b){
float aux;
aux=*a; *a=*b; *b=aux; }
float simpson(float a, float b, int n, int op){
int i;
float dx, x, sumatoria=0;
dx=delta_x(a, b, n);
for(i=0 ; i<=n ; i++){
x=a+i*dx;
if(i!=0 && i!=n){
if(i%2)
sumatoria+=4.0*f(x, op);
else
sumatoria+=4.0*f(x, op);}
else
sumatoria+=f(x, op);
if(i>1)
printf("Divisiones: %d\tIntegral: %f\n", i, sumatoria*delta_x(a, b, i)/3.0); }
return sumatoria*(dx/3.0); }
int main(){
char c='s';
int op, n;
float integral, a, b;
do{
op=menu();
printf("Teclea los limites (a, b): "); scanf("%f %f", &a, &b);
printf("Teclea el numero de divisiones: "); scanf("%d", &n);
printf("\n");
if(a>b)
intercambio(&a, &b);
integral=simpson(a, b, n, op);
printf("\nEl valor aproximado de la integral definida para %d trapecios es: %f\n", n, integral);
printf("\nDesea probar otro problema? (s/n): "); fflush(stdin);
scanf("%c", &c);
//fflush(stdin); }
}
while(c=='s' || c=='S');
return 0; }
De antemano muchas gracias, espero la respuesta...