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, 07:39
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
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, 09:19
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Introducir mes y mostrar numero dias en C

Para indicar el número de días que tiene un mes antes tienes que identificar el mes en cuestión. Para ello necesitas comparar el mes introducido por el usuario con una lista de meses... si no el trabajo se torna complicado:

Código C:
Ver original
  1. int i;
  2. char *meses[12] = { "enero", "febrero", ..., "diciembre"};
  3. char mes[12];
  4.  
  5. printf("Introduzca el nombre del mes: ");
  6. scanf("%s", mes);
  7.  
  8. for ( i=0; i<12; i++)
  9. {
  10.   if ( strcmp( mes, meses) == 0 )
  11.     break;
  12. }
  13.  
  14. if ( i == 12 )
  15. {
  16.   // El mes introducido es incorrecto
  17. }
  18. else
  19. {
  20.   // El mes introducido es el mes i+1
  21. }

Una vez identificado el mes en cuestión ya si puedes ir al array de días para indicar al usuario el número de días que tiene el mes. Claro está, el array de días hay que declararlo de forma correcta:

Código C:
Ver original
  1. int dias_meses[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  2.  
  3. // ...
  4. else
  5. {
  6.   printf("Mes %s tiene %d dias.", mes, dias_meses[ i ] );
  7. }

Un saludo.
  #3 (permalink)  
Antiguo 12/10/2014, 10:51
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Introducir mes y mostrar numero dias en C

Buenas,

Cita:
return (1);
Solo añadir que en C, para indicar una ejecución correcta, el programa debe se debe retornar 0, como establece el standard (C99 y C11).
Lo más correcto sería retornar la constante EXIT_SUCCESS, definida en stdlib.h.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #4 (permalink)  
Antiguo 12/10/2014, 11:09
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Mensaje Respuesta: Introducir mes y mostrar numero dias en C

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,



Solo añadir que en C, para indicar una ejecución correcta, el programa debe se debe retornar 0, como establece el standard (C99 y C11).
Lo más correcto sería retornar la constante EXIT_SUCCESS, definida en stdlib.h.


Un saludo
Lo del Return(1) o (0) no lo entendí muy bien cuando empece con esto :( .

Y la respuesta la he intentado asimilar así pero sigue mostrando el error en el número de días del mes.

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.    
  16.         if ( strcmp ( mes, meses ) == 0 )
  17.             break;  
  18.     }
  19.    
  20.     printf("Mes %s tiene %d dias.", mes, dias_meses[i] );
  21.    
  22.     return (0);
  23. }

No entiendo para que la comparación if( i == 12) por eso la he quitado, si me puedes explicar un poco.

Gracias por la ayuda y espero resolver pronto este ejercicio. 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
  #5 (permalink)  
Antiguo 12/10/2014, 11:31
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Introducir mes y mostrar numero dias en C

Hola HackID1.
Si bien el enunciado no lo aclara tal vez debas contemplar si el año es bisiesto, por si la desconoces puedes hacer algo como lo siguiente.-

Código C:
Ver original
  1. int dias_meses_reg[]={31,28,31,30,31,30,31,31,30,31,30,31};
  2. int dias_meses_bis[]={31,29,31,30,31,30,31,31,30,31,30,31};
  3. int aaaa = 2014;
  4.  
  5. if ((aaaa%4 == 0 && aaaa%100 != 0) || (aaaa%400) == 0)
  6. {………;}
  7. else
  8. {………;}
Espero que te sea de ayuda, lo que si no esperes mucho más de mi ya que si bien hace unos meses que estudio c de forma autodidacta (tengo 62 años), estoy muy enfocado en aprovechar las posibilidades que me da c de trabajar a bajo nivel.-

Un gran abrazo.
Daniel
  #6 (permalink)  
Antiguo 12/10/2014, 11:35
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 5 meses
Puntos: 49
Respuesta: Introducir mes y mostrar numero dias en C

Antes que nada un fuerte abrazo amigo eferion, un placer volver a encontrarte y una suerte, tal como ya comentó vangodp, por tus excelentes aportaciones. Y aunque había decicdido apartarme de estas lides, imagínate el por qué, me has animado.

Cita:
Iniciado por eferion Ver Mensaje
Para indicar el número de días que tiene un mes antes tienes que identificar el mes en cuestión. Para ello necesitas comparar el mes introducido por el usuario con una lista de meses... si no el trabajo se torna complicado:
...............
Un saludo.
Difícil tal como lo tenía que le devolviese el mes .

Sólo un pequeño aporte, podría usar un array bidimensional con meses y días:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main ( ) {
  6.   int i ;
  7.   char meses_dias [ 2 ][ 12 ][ 15 ] = { { "enero" , "febrero" ,...  "diciembre" } ,
  8.                                         { "31" , "28" ,..."31" } } ;
  9.   char mes [ 15 ] ;
  10.   printf ( "Introduzca el nombre del mes: " ) ;
  11.   scanf ( "%s" , mes ) ;
  12.   for ( i = 0 ; i < 12 ; i++ ) {
  13.     if ( strcmp ( mes , meses_dias [ 0 ][ i ] ) == 0 ) {
  14.        printf ( "%s tiene %s dias.", mes , meses_dias [ 1 ][ i ] );
  15.        return 1 ;
  16.     }
  17.   }
  18.   puts ( "El mes introducido es incorrecto" ) ;
  19.   return 0 ;}

Están un poco sobre dimensionados los arrays pero más vale que sobre a ue falte.

¡¡¡Saluditos!!!

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

Gracias por tu interés, por ahora no han dicho nada de contemplar si es bisiesto o no pero es bueno siempre tenerlo en cuenta.
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
  #8 (permalink)  
Antiguo 12/10/2014, 11:59
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 5 meses
Puntos: 49
Respuesta: Introducir mes y mostrar numero dias en C

Cita:
Iniciado por HackID1 Ver Mensaje
Lo del Return(1) o (0) no lo entendí muy bien cuando empece con esto :( .

Y la respuesta la he intentado asimilar así pero sigue mostrando el error en el número de días del mes.

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.    
  16.         if ( strcmp ( mes, meses ) == 0 )
  17.             break;  
  18.     }
  19.  /******* ESTO ES FUNDAMENTAL **/
  20.     if ( i == 12 )
  21.         puts ( "Mes incorrecto" ) ;
  22.     else
  23.         printf("Mes %s tiene %d dias.", mes, dias_meses[i] );
  24.     return (0);
  25. }

No entiendo para que la comparación if( i == 12) por eso la he quitado, si me puedes explicar un poco.
...............................
La comparación es fundamental. Si sólo pones el printf, como tenías, si el mes es incorrecto al llegar al printf imprimirá "basura" ya que te habrás "salido" del array ya que este sólo llega hasta once y el valor es indicativo de que recorrió todo el array y no hubo coincidencia alguna.

Y aprovecho para darle otro fuerte abrazo al amigo Daniel, parece que nos unimos todos en este foro.

Y respecto a lo que propones para años bisiestos o no yo sería partidario de usar un solo array y al averiguar si es o no bisiesto definir el valor dias_meses[1].

Algo como:

Código C++:
Ver original
  1. if ( anyo == bisiesto )
  2.   dias_meses[1] = 29
  3. else
  4.   dias_meses[1] = 28

¡¡¡Saluditos!!!


Última edición por leosansan; 12/10/2014 a las 12:08
  #9 (permalink)  
Antiguo 12/10/2014, 12:30
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Introducir mes y mostrar numero dias en C

Hola leosansan, aún con el IF me sigue mostrando mal el código porque aparece mes incorrecto cuando digito: enero o cualquier otro mes.

El código anterior que me proporcionaron con el array bidi si me funciono, pero me gustaría realizarlo de esta forma también.

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
  #10 (permalink)  
Antiguo 12/10/2014, 12:33
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 5 meses
Puntos: 49
Respuesta: Introducir mes y mostrar numero dias en C

Cita:
Iniciado por HackID1 Ver Mensaje
Hola leosansan, aún con el IF me sigue mostrando mal el código porque aparece mes incorrecto cuando digito: enero o cualquier otro mes.

El código anterior que me proporcionaron con el array bidi si me funciono, pero me gustaría realizarlo de esta forma también.

Saludos
Corrige esto:

Código C++:
Ver original
  1. if ( strcmp ( mes, meses [i] ) == 0 )

Saludios!.
  #11 (permalink)  
Antiguo 12/10/2014, 12:46
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
De acuerdo Respuesta: Introducir mes y mostrar numero dias en C

Cita:
Iniciado por leosansan Ver Mensaje
Corrige esto:
Código C++:
Ver original
  1. if ( strcmp ( mes, meses [i] ) == 0 )
Saludios!.
Exacto falto eso unicamente, recorria el array con el For pero no indicaba el indice.

Ahora si funciona muchísimas gracias a los 2, estas dos formas las tengo en cuenta y ahora seguiré aprendiendo un poco de C.

Gracias por la ayuda !!!
__________________
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
  #12 (permalink)  
Antiguo 13/10/2014, 03:29
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Introducir mes y mostrar numero dias en C

Cita:
....tal como ya comentó vangodp...
Es que con programadores con experiencia como vosotros, y algunos colegas que ya estan aqui, se puede aprender mucho.
Solo un necio no lo veria. =)
Ademas no creo que resfriegar normas en la cara de las personas por haberse pasado con 2 lineas de texto no sea una buena idea. Creo que sabeis a que me refiero verdad? XD
Pena que muchos compañeros no van a estar por aqui. Al menos tengo algunos en el chat group. =)
Suerte! No puedo entretenerme aqui que mi pc lleva una semana con espiritus malignus y no los consigo echar jajaa, hay que hacer un exorcismo. XDD

Y por cierto...
Cita:
...Y aunque había decicdido apartarme de estas lides...
¡Ni se te ocurra! XDDD
  #13 (permalink)  
Antiguo 13/10/2014, 03:30
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Introducir mes y mostrar numero dias en C

Cita:
....tal como ya comentó vangodp...
Es que con programadores con experiencia como vosotros, y algunos colegas que ya estan aqui, se puede aprender mucho.
Solo un necio no lo veria. =)
Ademas no creo que resfriegar normas en la cara de las personas por haberse pasado con 2 lineas de texto no sea una buena idea. Creo que sabeis a que me refiero verdad? XD
Pena que muchos compañeros no van a estar por aqui. Al menos tengo algunos en el chat group. =)
Suerte! No puedo entretenerme aqui que mi pc lleva una semana con espiritus malignus y no los consigo echar jajaa, hay que hacer un exorcismo. XDD

Y por cierto...
Cita:
...Y aunque había decicdido apartarme de estas lides...
¡Ni se te ocurra! XDDD

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




La zona horaria es GMT -6. Ahora son las 10:15.