Anidando instrucciones if y switch

Escribir en lenguaje C un programa que:
1º) Pida por teclado una fecha en tres variables: día, mes y año (datos enteros).
2º) Muestre por pantalla:
  • "FECHA CORRECTA", en el caso de que la fecha sea válida.
  • "FECHA INCORRECTA", en el caso de que la fecha no sea válida.
Nota 1: Para que una fecha sea válida, se tiene que cumplir que:
  • El mes debe ser mayor o igual que 1 y menor o igual que 12.
  • El día debe ser mayor o igual que 1 y menor o igual que un número, el cual dependerá del mes y año introducidos por el usuario.
Nota 2:
  • Tienen 31 días: enero, marzo, mayo, julio, agosto, octubre y diciembre.
  • Tienen 30 días: abril, junio, septiembre y noviembre.
  • Tiene 29 días: febrero (si el año es bisiesto).
  • Tiene 28 días: febrero (si el año no es bisiesto).
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:


Ahora bien, si la fecha es correcta, se verá:

Véase que, en el código fuente de la solución propuesta, hay seis anidamientos de instrucciones if y switch.


/* Programa: Validar fecha  */

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

void main()
{
    int dia, mes, anio;

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

    if ( mes >= 1 && mes <= 12 )
    {
        switch ( mes )
        {
            case  1 :
            case  3 :
            case  5 :
            case  7 :
            case  8 :
            case 10 :
            case 12 : if ( dia >= 1 && dia <= 31 )
                          printf( "\n   FECHA CORRECTA" );
                      else
                          printf( "\n   FECHA INCORRECTA" );
                      break;

            case  4 :
            case  6 :
            case  9 :
            case 11 : if ( dia >= 1 && dia <= 30 )
                          printf( "\n   FECHA CORRECTA" );
                      else
                          printf( "\n   FECHA INCORRECTA" );
                      break;

            case  2 : if( anio % 4 == 0 && anio % 100 != 0 || anio % 400 == 0 )
                          if ( dia >= 1 && dia <= 29 )
                              printf( "\n   FECHA CORRECTA" );
                          else
                              printf( "\n   FECHA INCORRECTA" );
                      else
                          if ( dia >= 1 && dia <= 28 )
                              printf( "\n   FECHA CORRECTA" );
                          else
                              printf( "\n   FECHA INCORRECTA" );
        }
    }
    else
        printf( "\n   FECHA INCORRECTA" );

    getch(); /* Pausa */
    clrscr(); /*limpiar pantalla*/

    }


Comentarios

Entradas populares de este blog

PROGRAMA 20