Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Introducir mes y mostrar numero dias en C

Estas en el tema de Introducir mes y mostrar numero dias en C en el foro de C/C++ en Foros del Web. Hola a todos Foreros. He buscado por si esta pregunta ya existía en el Foro pero no encontré respuesta así que la posteo. 1.Escribe un ...
  #1 (permalink)  
Antiguo 12/10/2014, 08:41
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 1 mes
Puntos: 17
Pregunta Introducir mes y mostrar numero dias en C

Hola a todos Foreros.

He buscado por si esta pregunta ya existía en el Foro pero no encontré respuesta así que la posteo.

1.Escribe un programa que solicite al usuario el nombre de un mes en minúsculas (enero, febrero, ..., diciembre) y responda con un mensaje indicando el número de días del mes elegido. El programa debe informar si el usuario introduce un nombre de mes incorrecto.
Lo que sigue es un ejemplo de ejecución:

Introduzca el nombre de un mes: marzo

marzo tiene 31 dias

Bien esa es la pregunta, lo he intentado con este código, pero me falta saber como mostrar los días y conocer que enero pertenece a posición 0 del array, febrero posicion 1 etc.

Dejo mi código espero puedan ayudarme a solucionar este problema básico, recién empiezo con C.

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.    
  5.     char mes[12];
  6.     int dias_meses = {30,28,31,30,30,30,30,30,30,30,31,30};
  7. /*    int n = 1; */
  8.    
  9.     printf("Introduzca el nombre del mes: ");
  10.     scanf("%s", mes);
  11.    
  12.     printf("Mes %s tiene %d dias.", mes, mes[dias_meses] );
  13.    
  14.    
  15.     return (1);
  16. }
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #2 (permalink)  
Antiguo 12/10/2014, 17:09
 
Fecha de Ingreso: octubre-2014
Ubicación: Lima
Mensajes: 74
Antigüedad: 9 años, 6 meses
Puntos: 1
Respuesta: Introducir mes y mostrar numero dias en C

Hola,
Yo optaría por crear 2 funciones:
- Una que encapsule un array de cadenas con los nombres de los meses válidos y que devuelva la posición en que se encuentra el nombre del mes que le envío por parámetro.
- Otra función que encapsule los días correspondientes a cada mes y que devuelva la posición correspondiente al mes que le envío por parámetro (la posición del mes correspondiente la obtengo de la función anterior).

Algo como esto:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define NMESES 12
  6.  
  7. int esMesValido(const char* nombre)
  8. {
  9.     char sMeses[][10] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Setiembre", "Octubre", "Noviembre", "Diciembre" };
  10.  
  11.     int i;
  12.  
  13.     for (i = 0; i < NMESES && !strcmp(nombre, sMeses[i]) == 0; ++i);
  14.  
  15.     return i;
  16. }
  17.  
  18. int getDiasMes(const int index)
  19. {
  20.     int iMeses[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  21.  
  22.     return iMeses[index];
  23. }
  24.  
  25. int main()
  26. {
  27.     char entrada[80];
  28.     int index;
  29.  
  30.     do
  31.     {
  32.         printf("Introduzca el nombre del mes: ");
  33.         fflush(stdout);
  34.         gets(entrada);
  35.  
  36.         index = esMesValido(entrada);
  37.         if (index == NMESES) puts("\tMes incorrecto");
  38.     }
  39.     while (index == NMESES);
  40.  
  41.     printf("\n%s tiene %d dias\n", entrada, getDiasMes(index));
  42.  
  43.     return EXIT_SUCCESS;
  44. }
Cabe mencionar que se considera que Febrero siempre tendrá 28 días, ya que según tu enunciado no intervienen años bisiestos.

Saludos.
  #3 (permalink)  
Antiguo 13/10/2014, 03:42
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 1 mes
Puntos: 17
Respuesta: Introducir mes y mostrar numero dias en C

Gracias magnifica solución un poco avanzada para lo que aún estoy dando en C . :)

Pero vienen bien para ir viendo nuevas funciones en los códigos.

Al final conseguí la solución de esta forma un poco más simple.
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.    
  5.     char *meses[] = {"enero", "febrero", "marzo", "abril", "mayo", "junio",
  6.                        "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"};
  7.     char mes[12];
  8.     int dias_meses[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  9.     int i ;
  10.    
  11.     printf("Introduzca el nombre del mes: ");
  12.     scanf("%s", mes);
  13.    
  14.     for (i=0; i<12; i++) {
  15.                  /*comparo la respuesta sea igual a 0, es decir que existe el mes introducido*/  
  16.         if ( strcmp ( mes, meses[i] ) == 0 )
  17.             break;  
  18.     }
  19.     /*imprimo el mes, de acuerdo a la posicion donde se encuentra [i] */
  20.     printf("Mes %s tiene %d dias.", mes, dias_meses[i] );
  21.    
  22.     return (0);
  23. }

Saludos y Gracias por tu aporte eduar2083

Una pregunta el return (0) es obligatorio en este programa, es que veo muchas veces lo ponen y otras no.
Si puedes responderme lo agradezco, igual buscare info sobre esto.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #4 (permalink)  
Antiguo 13/10/2014, 05:04
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 11 años, 10 meses
Puntos: 49
Respuesta: Introducir mes y mostrar numero dias en C

Cita:
Iniciado por HackID1 Ver Mensaje
Gracias magnifica solución un poco avanzada para lo que aún estoy dando en C . :)

Pero vienen bien para ir viendo nuevas funciones en los códigos.

Al final conseguí la solución de esta forma un poco más simple.
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.    
  5.     char *meses[] = {"enero", "febrero", "marzo", "abril", "mayo", "junio",
  6.                        "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"};
  7.     char mes[12];
  8.     int dias_meses[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  9.     int i ;
  10.    
  11.     printf("Introduzca el nombre del mes: ");
  12.     scanf("%s", mes);
  13.    
  14.     for (i=0; i<12; i++) {
  15.                  /*comparo la respuesta sea igual a 0, es decir que existe el mes introducido*/  
  16.         if ( strcmp ( mes, meses[i] ) == 0 )
  17.             break;  
  18.     }
  19.     /*imprimo el mes, de acuerdo a la posicion donde se encuentra [i] */
  20.     printf("Mes %s tiene %d dias.", mes, dias_meses[i] );
  21.    
  22.     return (0);
  23. }

Saludos y Gracias por tu aporte eduar2083

Una pregunta el return (0) es obligatorio en este programa, es que veo muchas veces lo ponen y otras no.
Si puedes responderme lo agradezco, igual buscare info sobre esto.
Tal como lo tienes, y como ya te indiqué anteriormente, si introduces un mes erróneo, ejemplo emmero, te devolverá el printf "basura" en el número de días. Relee lo que te puse anteriormente respecto a lo fundamental del uso del if, tal como te indicó eferion:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main() {
  5.  
  6.     char *meses[] = {"enero", "febrero", "marzo", "abril", "mayo", "junio",
  7.                        "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"};
  8.     char mes[12];
  9.     int dias_meses[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  10.     int i ;
  11.  
  12.     printf("Introduzca el nombre del mes: ");
  13.     scanf("%s", mes);
  14.  
  15.     for (i=0; i<12; i++) {
  16.  
  17.         if ( strcmp ( mes, meses [i] ) == 0 )
  18.             break;
  19.     }
  20.  /******* ESTO ES FUNDAMENTAL **/
  21.     if ( i == 12 )
  22.         puts ( "Mes incorrecto" ) ;
  23.     else
  24.         printf("Mes %s tiene %d dias.", mes, dias_meses[i] );
  25.     return (0);
  26. }

Y respecto a main, por cuestiones del estándar del C ha de ser una función de tipo "int" con lo que lo correcto es que devuelva un int. Se suele indicar 0 tipo "return 0" , aunque si tienes varias "salidas " del programa yo acostumbro a ir poniendo return 1, etc ( revisa el código que te pasé con el array bidimensional para que lo veas ) así según el valor del return que devuelve al final de ejecutarse el código sé por dónde ha salida. Unido a unos cuantos printf me evita la mayor parte de las veces el usar el debuger. Aunque a fuerza de ser puristas, tal como te indicó Profesor_Falken, lo más correcto sería retornar la constante EXIT_SUCCESS, definida en stdlib.h.

¡¡¡Saluditos!!!

  #5 (permalink)  
Antiguo 13/10/2014, 12:25
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 1 mes
Puntos: 17
Respuesta: Introducir mes y mostrar numero dias en C

De nuevo gracias y si perdona en mi solución tenía el código con el IF del final para comprobar si es correcto el mes introducido y mostrar resultado, o incorrecto y mostrar error.

Fue un despiste que copie aquí el código anterior, pero en el mio si lo he usado todo tal cual me habeis indicado.

y Gracias por la aclaración del return, porque en clase el maestro esto de explicarlo se lo salto, pero habia visto que la función main es int y suponia algo de 0 o 1 al resultado, ahora quedo más claro.

Saludos!!!
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Etiquetas: dias, lenguajec, meses, numero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:09.