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;
srand(time(NULL));
for(i=0;i<OPERACIONES;i++)
{
numero1 = rand()% 11+1;
numero2 = rand()% 11+1;
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);
scanf("%d",&respuesta);
resultado = numero2/numero1;
}
else
{
printf("%d %c %d = ",numero1,operacion,numero2);
scanf("%d",&respuesta);
resultado = numero1/numero2;
}
}
else
{
if(operacion==42)
{
printf("%d %c %d = ",numero1,operacion,numero2);
scanf("%d",&respuesta);
resultado=numero1*numero2;
}
else if(operacion==43)
{
printf("%d %c %d = ",numero1,operacion,numero2);
scanf("%d",&respuesta);
resultado=numero1+numero2;
}
else if(operacion==45)
{
printf("%d %c %d = ",numero1,operacion,numero2);
scanf("%d",&respuesta);
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 :)
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);
scanf("%d",&respuesta);
resultado=numero1+numero2;
}else if(operacion==45){
printf("%d %c %d = ",numero1,operacion,numero2);
scanf("%d",&respuesta);
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;
srand(time(NULL));
for (i = 0; i < NUM_INTENTOS; i++){
while (1){
a = rand() % 10 + 1;
b = rand() % 10 + 1;
oper = rand() % 6 + 42;
if (strchr("*+-", oper) || (oper == '/' && a > b && b != 0))
break;
}
printf("%d %c %d = ", b, oper, a);
scanf("%d", &respuesta);
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