Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jamatbar en 11 Noviembre 2011, 11:57 am



Título: Programa estaciones (cambio de if-else por switch)
Publicado por: jamatbar en 11 Noviembre 2011, 11:57 am
He realizado este programa que hace lo siguiente: Según el més que indiques, te dirá de que estación se trata, te pide que introduzcas otro numero de mes, hasta que pongas un 0, que el programa saldrá, el código es el siguiente:

Código
  1. // Ficheros include del sistema
  2. #include <stdio.h>
  3. // Ficheros include de la aplicacion
  4. // Constantes de la aplicacion
  5. #define ERROR     0
  6. #define INVIERNO  1
  7. #define PRIMAVERA 2
  8. #define VERANO    3
  9. #define OTONO     4
  10.  
  11. int main ()
  12. {
  13. int mes;
  14. int estacion;
  15.  
  16. do
  17. {
  18.  
  19. printf("Introduzca un mes: ");
  20. scanf(" %d", &mes);
  21. if (mes == 12 || mes == 1 || mes == 2)
  22. estacion = INVIERNO;
  23. else if (mes == 3 || mes == 4 || mes == 5)
  24. estacion = PRIMAVERA;
  25. else if (mes == 6 || mes == 7 || mes == 8)
  26. estacion = VERANO;
  27. else if (mes == 9 || mes == 10 || mes == 11)
  28. estacion = OTONO;
  29. else
  30. estacion = ERROR;
  31. if (mes >= 1 && mes <=12)
  32. printf("El mes %d pertenece a la estacion %d\n", mes, estacion);
  33. }
  34. while (mes > 0 );
  35.  
  36. return 0;
  37. }
  38.  

Pero ahora me piden sustituir el if-else anidado por una sentencia switch, y la verdad, no sé como implementarla, ¿alguna sugerencia?

Saludos


Título: Re: Programa estaciones (cambio de if-else por switch)
Publicado por: KaL3o en 11 Noviembre 2011, 12:34 pm
hola yo cambiaria un poquito el codigo que tienes

Código
  1. // Ficheros include del sistema
  2. #include <stdio.h>
  3. // Constantes de la aplicacion
  4. #define INVIERNO  1
  5. #define PRIMAVERA 2
  6. #define VERANO    3
  7. #define OTONO     4
  8.  
  9. int main ()
  10. {
  11.    int mes;
  12.    int estacion;
  13.    do
  14.    {
  15.        printf("Introduzca un mes: ");
  16.        scanf(" %d", &mes);
  17.        if (mes==0)
  18.           return 0;
  19.        if (mes == 12 || mes == 1 || mes == 2)
  20.            estacion = INVIERNO;
  21.        if (mes == 3 || mes == 4 || mes == 5)
  22.            estacion = PRIMAVERA;
  23.        if (mes == 6 || mes == 7 || mes == 8)
  24.            estacion = VERANO;
  25.        if (mes == 9 || mes == 10 || mes == 11)
  26.            estacion = OTONO;
  27.        if (mes >= 1 && mes <=12)
  28.            printf("El mes %d pertenece a la estacion %d\n", mes, estacion);
  29.        else
  30.            printf("ERROR- El mes %d no corresponde a el mes de ningun año\n",mes);
  31.    }
  32.    while (mes != 0 );
  33.    return 0;
  34. }
  35.  

y con un switch seria

Código
  1. // Ficheros include del sistema
  2. #include <stdio.h>
  3. // Constantes de la aplicacion
  4. #define INVIERNO  1
  5. #define PRIMAVERA 2
  6. #define VERANO    3
  7. #define OTONO     4
  8.  
  9. int main ()
  10. {
  11.    int mes;
  12.    int estacion;
  13.    do
  14.    {
  15.        printf("Introduzca un mes: ");
  16.        scanf(" %d", &mes);
  17.        switch(mes)
  18.        {
  19.            case 1: estacion=INVIERNO;
  20.                 break;
  21.            case 2: estacion=INVIERNO;
  22.                 break;
  23.            case 3: estacion=PRIMAVERA;
  24.                 break;
  25.            case 4: estacion=PRIMAVERA;
  26.                 break;
  27.            case 5: estacion=PRIMAVERA;
  28.                 break;
  29.            case 6: estacion=VERANO;
  30.                 break;
  31.            case 7: estacion=VERANO;
  32.                 break;
  33.            case 8: estacion=VERANO;
  34.                 break;
  35.            case 9: estacion=OTONO;
  36.                 break;
  37.            case 10: estacion=OTONO;
  38.                 break;
  39.            case 11: estacion=OTONO;
  40.                 break;
  41.            case 12: estacion=INVIERNO;
  42.                 break;
  43.            case 0: printf("Buen Viaje...");
  44.                 fflush(stdin);
  45.                 getchar();
  46.                 break;
  47.            default: printf("ERROR- mes inexistente\n");
  48.        }
  49.        if (mes >= 1 && mes <=12)
  50.            printf("El mes %d pertenece a la estacion %d\n", mes, estacion);
  51.    }
  52.    while (mes != 0 );
  53.    return 0;
  54. }
  55.  


Aunque creo que no te ayudo mucho dandote la solución, bueno igual espero te sirva :)

salu2 ;)


Título: Re: Programa estaciones (cambio de if-else por switch)
Publicado por: LearningSpanishProgrammer en 11 Noviembre 2011, 14:57 pm
Creo ser menos redundante así:

Código
  1. // por encima tienes que hacer un codigo de validacion [1, 12]
  2. int estacao = 1 + (mes / 3) % 4;
  3.  
  4. switch (estacao)
  5. {
  6.  case INVIERNO: puts("i"); break;
  7.  case PRIMAVERA: puts("p");  break;
  8.  case VERANO: puts("v"); break;
  9.  case OTONO: puts("o"); break;
  10. }


Título: Re: Programa estaciones (cambio de if-else por switch)
Publicado por: KaL3o en 11 Noviembre 2011, 15:15 pm
Código
  1. // por encima tienes que hacer un codigo de validacion [1, 12]
  2. int estacao = 1 + (mes / 3) % 4;
  3.  
  4. switch (estacao)
  5. {
  6.  case INVIERNO: puts("i"); break;
  7.  case PRIMAVERA: puts("p");  break;
  8.  case VERANO: puts("v"); break;
  9.  case OTONO: puts("o"); break;
  10. }
Me gusta tu solucion es mucho mejor :D
Salu2 ;)


Título: Re: Programa estaciones (cambio de if-else por switch)
Publicado por: jamatbar en 12 Noviembre 2011, 14:23 pm
Muchas gracias a ambos!

Saludos!


Título: Re: Programa estaciones (cambio de if-else por switch)
Publicado por: ceded en 2 Mayo 2019, 23:07 pm
como diseño un algoritmo en sel2 que permita mostras las estaciones climaticas( verano, invierno, otoño, primavera.