Título: problema if's anidados
Publicado por: m@o_614 en 27 Diciembre 2012, 01:11 am
saludos estoy haciendo un programa que me tiene que: generar 5 operaciones aritmeticas aleatorias, los números (aleatorios) deben estar comprendidos entre 10 y 1, y las operaciones deberán ser suma, resta multiplicación, división (en el caso de la división se realizará siempre una división entera y el primer número tendrá que ser mayor que el segundo) al final imprimir el número de aciertos t la calificación pero el problema es que no me da bien el número de los aciertos, no se si es porque tengo muchos ifs anidados o porque no me calcula bien las operaciones que dan resultados negativos como: 5-7 =-2 #include <stdio.h> #include <stdlib.h> #include <time.h> #define OPERACIONES 5 int main() { int i,numero1,numero2,respuesta,resultado,aciertos=0; char operacion; for(i=0;i<OPERACIONES;i++) { operacion = rand()% 6+42; if(operacion==42||operacion==43||operacion==45||operacion==47) { if(operacion==47) { if(numero2>numero1) { printf("%d %c %d = ",numero2 ,operacion ,numero1 ); resultado = numero2/numero1; } else { printf("%d %c %d = ",numero1 ,operacion ,numero2 ); resultado = numero1/numero2; } } else { if(operacion==42) { printf("%d %c %d = ",numero1 ,operacion ,numero2 ); resultado=numero1*numero2; } else if(operacion==43) { printf("%d %c %d = ",numero1 ,operacion ,numero2 ); resultado=numero1+numero2; } else if(operacion==45) { printf("%d %c %d = ",numero1 ,operacion ,numero2 ); resultado=numero1+numero2; } } if(respuesta==resultado) aciertos++; } else i--; } printf("\nTuviste %d aciertos, tu calificacion es %d\n",aciertos ,aciertos *20); return 0; }
de antemano gracias por sus respuestas :)
Título: Re: problema if's anidados
Publicado por: rir3760 en 27 Diciembre 2012, 03:45 am
El error principal es lógico y se debe a utilizar el mismo operador en las operaciones de suma y resta: }else if(operacion==43){ printf("%d %c %d = ",numero1 ,operacion ,numero2 ); resultado=numero1+numero2; }else if(operacion==45){ printf("%d %c %d = ",numero1 ,operacion ,numero2 ); resultado=numero1+numero2; /* <== */
Ademas el programa es demasiado largo. Se puede reducir a: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define NUM_INTENTOS 5 int main(void) { int i, a, b, respuesta, resultado, aciertos = 0; char oper; for (i = 0; i < NUM_INTENTOS; i++){ while (1){ if (strchr("*+-", oper ) || (oper == '/' && a > b && b != 0)) break; } printf("%d %c %d = ", b , oper , a ); switch (oper){ case '+': resultado = a + b; break; case '-': resultado = a - b; break; case '*': resultado = a * b; break; case '/': resultado = a / b; break; } if (respuesta == resultado) aciertos++; } printf("Aciertos: %d Calificacion %d\n", aciertos , aciertos * 20); return 0; }
No lo probé pero debería funcionar, eso te toca a ti. Un saludo
|