Programa estaciones (cambio de if-else por switch)

Iniciado por jamatbar, 11 Noviembre 2011, 11:57 AM

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

jamatbar

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:


// Ficheros include del sistema
#include <stdio.h>
// Ficheros include de la aplicacion
// Constantes de la aplicacion
#define ERROR     0
#define INVIERNO  1
#define PRIMAVERA 2
#define VERANO    3
#define OTONO     4

int main ()
{
int mes;
int estacion;

do
{

printf("Introduzca un mes: ");
scanf(" %d", &mes);
if (mes == 12 || mes == 1 || mes == 2)
estacion = INVIERNO;
else if (mes == 3 || mes == 4 || mes == 5)
estacion = PRIMAVERA;
else if (mes == 6 || mes == 7 || mes == 8)
estacion = VERANO;
else if (mes == 9 || mes == 10 || mes == 11)
estacion = OTONO;
else
estacion = ERROR;
if (mes >= 1 && mes <=12)
printf("El mes %d pertenece a la estacion %d\n", mes, estacion);
}
while (mes > 0 );

return 0;
}


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

Saludos

KaL3o

hola yo cambiaria un poquito el codigo que tienes


// Ficheros include del sistema
#include <stdio.h>
// Constantes de la aplicacion
#define INVIERNO  1
#define PRIMAVERA 2
#define VERANO    3
#define OTONO     4

int main ()
{
    int mes;
    int estacion;
    do
    {
        printf("Introduzca un mes: ");
        scanf(" %d", &mes);
        if (mes==0)
           return 0;
        if (mes == 12 || mes == 1 || mes == 2)
            estacion = INVIERNO;
        if (mes == 3 || mes == 4 || mes == 5)
            estacion = PRIMAVERA;
        if (mes == 6 || mes == 7 || mes == 8)
            estacion = VERANO;
        if (mes == 9 || mes == 10 || mes == 11)
            estacion = OTONO;
        if (mes >= 1 && mes <=12)
            printf("El mes %d pertenece a la estacion %d\n", mes, estacion);
        else
            printf("ERROR- El mes %d no corresponde a el mes de ningun año\n",mes);
    }
    while (mes != 0 );
    return 0;
}


y con un switch seria


// Ficheros include del sistema
#include <stdio.h>
// Constantes de la aplicacion
#define INVIERNO  1
#define PRIMAVERA 2
#define VERANO    3
#define OTONO     4

int main ()
{
    int mes;
    int estacion;
    do
    {
        printf("Introduzca un mes: ");
        scanf(" %d", &mes);
        switch(mes)
        {
            case 1: estacion=INVIERNO;
                 break;
            case 2: estacion=INVIERNO;
                 break;
            case 3: estacion=PRIMAVERA;
                 break;
            case 4: estacion=PRIMAVERA;
                 break;
            case 5: estacion=PRIMAVERA;
                 break;
            case 6: estacion=VERANO;
                 break;
            case 7: estacion=VERANO;
                 break;
            case 8: estacion=VERANO;
                 break;
            case 9: estacion=OTONO;
                 break;
            case 10: estacion=OTONO;
                 break;
            case 11: estacion=OTONO;
                 break;
            case 12: estacion=INVIERNO;
                 break;
            case 0: printf("Buen Viaje...");
                 fflush(stdin);
                 getchar();
                 break;
            default: printf("ERROR- mes inexistente\n");
        }
        if (mes >= 1 && mes <=12)
            printf("El mes %d pertenece a la estacion %d\n", mes, estacion);
    }
    while (mes != 0 );
    return 0;
}



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

salu2 ;)
Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.

LearningSpanishProgrammer

#2
Creo ser menos redundante así:

Código (cpp) [Seleccionar]

// por encima tienes que hacer un codigo de validacion [1, 12]
int estacao = 1 + (mes / 3) % 4;

switch (estacao)
{
 case INVIERNO: puts("i"); break;
 case PRIMAVERA: puts("p");  break;
 case VERANO: puts("v"); break;
 case OTONO: puts("o"); break;
}
Estoy aprendiendo español, y tu estas aprendiendo programación

KaL3o

Cita de: LearningSpanishProgrammer en 11 Noviembre 2011, 14:57 PM
Código (cpp) [Seleccionar]

// por encima tienes que hacer un codigo de validacion [1, 12]
int estacao = 1 + (mes / 3) % 4;

switch (estacao)
{
  case INVIERNO: puts("i"); break;
  case PRIMAVERA: puts("p");  break;
  case VERANO: puts("v"); break;
  case OTONO: puts("o"); break;
}

Me gusta tu solucion es mucho mejor :D
Salu2 ;)
Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.

jamatbar


ceded

como diseño un algoritmo en sel2 que permita mostras las estaciones climaticas( verano, invierno, otoño, primavera.