problema if's anidados

Iniciado por m@o_614, 27 Diciembre 2012, 01:11 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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  :)

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language