elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:58  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Programa estaciones (cambio de if-else por switch)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa estaciones (cambio de if-else por switch)  (Leído 522 veces)
jamatbar

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Programa estaciones (cambio de if-else por switch)
« en: 11 Noviembre 2011, 11:57 »

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
// 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


En línea
KaL3o

Desconectado Desconectado

Mensajes: 32



Ver Perfil
Re: Programa estaciones (cambio de if-else por switch)
« Respuesta #1 en: 11 Noviembre 2011, 12:34 »

hola yo cambiaria un poquito el codigo que tienes

Código
// 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

Código
// 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 ;)


En línea

Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.
LearningSpanishProgrammer

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Re: Programa estaciones (cambio de if-else por switch)
« Respuesta #2 en: 11 Noviembre 2011, 14:57 »

Creo ser menos redundante así:

Código
// 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;
}
« Última modificación: 11 Noviembre 2011, 15:00 por LearningSpanishProgrammer » En línea

Estoy aprendiendo español, y tu estas aprendiendo programación
KaL3o

Desconectado Desconectado

Mensajes: 32



Ver Perfil
Re: Programa estaciones (cambio de if-else por switch)
« Respuesta #3 en: 11 Noviembre 2011, 15:15 »

Código
// 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 ;)
En línea

Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.
jamatbar

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Programa estaciones (cambio de if-else por switch)
« Respuesta #4 en: 12 Noviembre 2011, 14:23 »

Muchas gracias a ambos!

Saludos!
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines