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

No corre correctamente mi programa...

Estas en el tema de No corre correctamente mi programa... en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 25/03/2009, 11:51
 
Fecha de Ingreso: marzo-2009
Mensajes: 2
Antigüedad: 15 años, 1 mes
Puntos: 0
No corre correctamente mi programa...

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...
  #2 (permalink)  
Antiguo 25/03/2009, 17:54
Avatar de pacmanaman  
Fecha de Ingreso: marzo-2009
Mensajes: 84
Antigüedad: 15 años, 1 mes
Puntos: 3
Respuesta: No corre correctamente mi programa...

en vez de usar scanf("%c", &c);

proba con

c = getch(); // getche(); imprime el valor tipeado en pantalla!
  #3 (permalink)  
Antiguo 25/03/2009, 22:57
 
Fecha de Ingreso: marzo-2009
Mensajes: 2
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: No corre correctamente mi programa...

Cita:
Iniciado por pacmanaman Ver Mensaje
en vez de usar scanf("%c", &c);

proba con

c = getch(); // getche(); imprime el valor tipeado en pantalla!
Lo probé de igual forma, con la función getchar() y con la función getc, pero obtuve el msmo resultado, sin embargo, ya quedó solucionado mi problema.

Lo que se debe hacer (puesto que ahora se que no soy el único que ha tenido este problema) es incluir en el código nuevamente la linea de lectura de la variable, es decir, se escribe, en este caso, dos veces la función scanf("%c", c); .

.
.
.
printf("\nDesea probar otro problema? (s/n): "); fflush(stdin);
scanf("%c", &c);
scanf("%c", &c);
//fflush(stdin); }
}
while(c=='s' || c=='S');
return 0; }


No estoy muy seguro de que es lo que esta sucediendo, pero al parecer es que al trabajar con enteros y caracteres flota por la memoria un valor desconocido, entonces al momento de intentar leer el caracter (teoricamente leería ese valor) se salta la instrucción automáticamente y continua con el programa. Insertando esa línea de código al programa funciona perfectamente.

Gracias
  #4 (permalink)  
Antiguo 26/03/2009, 02:12
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: No corre correctamente mi programa...

Mejor usar fgets y sscanf, de esa manera no tenes que usar un hack como leer dos veces.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 18:43.