elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema if's anidados
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema if's anidados  (Leído 1,900 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
problema if's anidados
« 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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define OPERACIONES 5
  5. int main()
  6. {
  7.    int i,numero1,numero2,respuesta,resultado,aciertos=0;
  8.    char operacion;
  9.    srand(time(NULL));
  10.    for(i=0;i<OPERACIONES;i++)
  11.    {
  12.        numero1 = rand()% 11+1;
  13.        numero2 = rand()% 11+1;
  14.        operacion = rand()% 6+42;
  15.        if(operacion==42||operacion==43||operacion==45||operacion==47)
  16.        {
  17.            if(operacion==47)
  18.            {
  19.                if(numero2>numero1)
  20.                {
  21.                    printf("%d %c %d = ",numero2,operacion,numero1);
  22.                    scanf("%d",&respuesta);
  23.                    resultado = numero2/numero1;
  24.                }
  25.                else
  26.                {
  27.                    printf("%d %c %d = ",numero1,operacion,numero2);
  28.                    scanf("%d",&respuesta);
  29.                    resultado = numero1/numero2;
  30.                }
  31.            }
  32.            else
  33.            {
  34.                if(operacion==42)
  35.                {
  36.                    printf("%d %c %d = ",numero1,operacion,numero2);
  37.                    scanf("%d",&respuesta);
  38.                    resultado=numero1*numero2;
  39.                }
  40.                else if(operacion==43)
  41.                {
  42.                    printf("%d %c %d = ",numero1,operacion,numero2);
  43.                    scanf("%d",&respuesta);
  44.                    resultado=numero1+numero2;
  45.                }
  46.                else if(operacion==45)
  47.                {
  48.                    printf("%d %c %d = ",numero1,operacion,numero2);
  49.                    scanf("%d",&respuesta);
  50.                    resultado=numero1+numero2;
  51.                }
  52.  
  53.            }
  54.            if(respuesta==resultado)
  55.               aciertos++;
  56.        }
  57.        else
  58.            i--;
  59.    }
  60.    printf("\nTuviste %d aciertos, tu calificacion es %d\n",aciertos,aciertos*20);
  61.    return 0;
  62. }
  63.  
de antemano gracias por sus respuestas  :)


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problema if's anidados
« Respuesta #1 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:
Código
  1. }else if(operacion==43){
  2.   printf("%d %c %d = ",numero1,operacion,numero2);
  3.   scanf("%d",&respuesta);
  4.   resultado=numero1+numero2;
  5. }else if(operacion==45){
  6.   printf("%d %c %d = ",numero1,operacion,numero2);
  7.   scanf("%d",&respuesta);
  8.   resultado=numero1+numero2; /* <== */
  9.  

Ademas el programa es demasiado largo. Se puede reducir a:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <string.h>
  5.  
  6. #define NUM_INTENTOS  5
  7.  
  8. int main(void)
  9. {
  10.   int i, a, b, respuesta, resultado, aciertos = 0;
  11.   char oper;
  12.  
  13.   srand(time(NULL));
  14.  
  15.   for (i = 0; i < NUM_INTENTOS; i++){
  16.      while (1){
  17.         a = rand() % 10 + 1;
  18.         b = rand() % 10 + 1;
  19.         oper = rand() % 6 + 42;
  20.  
  21.         if (strchr("*+-", oper) || (oper == '/' && a > b && b != 0))
  22.            break;
  23.      }
  24.      printf("%d %c %d = ", b, oper, a);
  25.      scanf("%d", &respuesta);
  26.  
  27.      switch (oper){
  28.      case '+':
  29.         resultado = a + b;
  30.         break;
  31.      case '-':
  32.         resultado = a - b;
  33.         break;
  34.      case '*':
  35.         resultado = a * b;
  36.         break;
  37.      case '/':
  38.         resultado = a / b;
  39.         break;
  40.      }
  41.  
  42.      if (respuesta == resultado)
  43.         aciertos++;
  44.   }
  45.   printf("Aciertos: %d Calificacion %d\n", aciertos, aciertos * 20);
  46.  
  47.   return 0;
  48. }
No lo probé pero debería funcionar, eso te toca a ti.

Un saludo


En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Array bi-dimensinal & for’s anidados para inicializar... IDEAS...
Java
*-.Sub-Vorbio.-* 4 5,253 Último mensaje 21 Noviembre 2008, 16:06 pm
por *-.Sub-Vorbio.-*
¿ejercicio con if anidados? programacion c++?
Programación C/C++
vani18 1 5,149 Último mensaje 3 Junio 2010, 22:35 pm
por Horricreu
Ayuda con Switch anidados
Java
Fryuio 3 7,454 Último mensaje 3 Diciembre 2016, 22:55 pm
por ivancea96
JdateChooser anidados
Java
FISH in the house 0 1,566 Último mensaje 21 Febrero 2017, 16:43 pm
por FISH in the house
problema if anidados (notas)
Programación C/C++
juntacadaveres 5 2,921 Último mensaje 6 Junio 2020, 17:45 pm
por CalgaryCorpus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines