Tutoriales de informática - Abrirllave.com

Abrirllave.com

Ejemplo de lenguaje C - Días de un mes

Si en lenguaje C se quiere escribir un programa que:

1º) Pida por teclado un año (dato entero).

2º) Pida por teclado un mes (dato entero) de ese año.

3º) Muestre por pantalla el número de días que tiene dicho mes.

Nota 1: Si el número de mes introducido es menor que 1 ó mayor que 12, se mostrará el mensaje: "ERROR: Mes incorrecto.".

Nota 2:

Nota 3: Son bisiestos todos los años múltiplos de 4, excepto aquellos que son múltiplos de 100 pero no de 400.

En pantalla se verá, por ejemplo:

Visualización en pantalla del programa Días de un mes, resuelto en lenguaje C.

Ahora bien, si el mes no es correcto, se verá:

Visualización en pantalla del programa Días de un mes incorrecto, resuelto en lenguaje C.

Solución 1: anidando instrucción if en switch

Una posible solución es:

/* Programa: Días de un mes (Solución 1) */

#include <conio.h>
#include <stdio.h>

int main()
{
    int anio, mes;

    printf( "\n   Introduzca a%co: ", 164 );
    scanf( "%d", &anio );
    printf( "\n   Introduzca mes: " );
    scanf( "%d", &mes );

    switch ( mes )
    {
          case  1 :
          case  3 :
          case  5 :
          case  7 :
          case  8 :
          case 10 :
          case 12 : printf( "\n   31 d%cas", 161 );
                    break;

          case  4 :
          case  6 :
          case  9 :
          case 11 : printf( "\n   30 d%cas", 161 );
                    break;

          case  2 : /* Inicio del anidamiento */

                    if ( anio % 4 == 0 && anio % 100 != 0 || anio % 400 == 0 )
                        printf( "\n   29 d%cas", 161 );
                    else
                        printf( "\n   28 d%cas", 161 );
                    break;

                    /* Fin del anidamiento */

        default : printf( "\n   ERROR: Mes incorrecto." );
    }

    getch(); /* Pausa */

    return 0;
}

Solución 2: anidando if en switch y switch en if

El programa también se puede escribir comprobando, en primer lugar, el valor del mes, y solamente ejecutar la alternativa múltiple (switch), si el valor introducido es mayor o igual que 1 y menor o igual que 12:

/* Programa: Días de un mes (Solución 2) */

#include <conio.h>
#include <stdio.h>

int main()
{
    int anio, mes;

    printf( "\n   Introduzca a%co: ", 164 );
    scanf( "%d", &anio );
    printf( "\n   Introduzca mes: " );
    scanf( "%d", &mes );

    if ( mes >= 1 && mes <= 12 )

        /* Inicio del anidamiento 1 */
        switch ( mes )
        {
            case  1 :
            case  3 :
            case  5 :
            case  7 :
            case  8 :
            case 10 :
            case 12 : printf( "\n   31 d%cas", 161 );
                      break;

            case  4 :
            case  6 :
            case  9 :
            case 11 : printf( "\n   30 d%cas", 161 );
                      break;

            case  2 : /* Inicio del anidamiento 2 */
                      if ( anio % 4 == 0 && anio % 100 != 0 || anio % 400 == 0 )
                          printf( "\n   29 d%cas", 161 );
                      else
                          printf( "\n   28 d%cas", 161 );
                      /* Fin del anidamiento 2 */
        }
        /* Fin del anidamiento 1 */

    else
        printf( "\n   ERROR: Mes incorrecto." );

    getch(); /* Pausa */

    return 0;
}