miércoles, 29 de agosto de 2012

Algoritmo en C:Comprobar si una fecha es correcta

En este ejemplo ingresaremos el dia, el mes y el año y con switch case analizamos el mes ingresado para validar si el dia es correcto para ese mes ya que algunos meses como Enero, Marzo, Agosto ... son maximo 31 dias y otros meses como Abril, Junio admiten 30 y tenemos el particular caso de febrero 29 en bisiesto y 28 en años no bisiestos. Para el caso de bisiesto cree un procedimiento el cual valida el año y devuelve un valor booleano
#include <stdio.h>
#include <conio.h>
#define Booleano int
#define Verdadero 1
#define Falso 0
unsigned int dia;
unsigned int mes;
long int anio;
Booleano esBisiesto;//indicador de anio bisiesto
Booleano fechaValida;//indicador de fecha valida
void AnioBisiesto()
{
esBisiesto=(anio%4==0)&&(anio%100!=0)||
    (anio%400)&&(anio!=3600);
}
int main()
{
 clrscr();
 printf("\n");
 printf("****\n");
 printf("**** Algoritmo: Comprobar si una fecha es correcta ****\n");
 printf("****\n");
 printf("\n");
 printf("Introduzca el dia: ");
 scanf("%u", &dia);
 while(getchar() != '\n');
 printf("Introduzca el mes: ");
 scanf("%u", &mes);
 while(getchar() != '\n');
 printf("Introduzca el anio: ");
 scanf("%ld",&anio);
 while(getchar() != '\n');
 fechaValida=Verdadero;
 if(dia<1) fechaValida=Falso;
 else
 switch(mes)
 {
 case 1:
 case 3:
 case 5:
 case 7:
 case 8:
 case 10:
 case 12: //meses de 31 dias
      if(dia>31)
      fechaValida=Falso; break;
 case 4:
 case 6:
 case 9:
 case 11://meses de 30 dias
      if(dia>30)
      fechaValida=Falso; break;
 case 2://mes de febrero
      AnioBisiesto();
      if((dia>29)||(!esBisiesto && (dia>28)))
      fechaValida=Falso; break;
 default: fechaValida=Falso; break;
 }
 printf("%u/ %u/ %ld", dia, mes, anio);
 if(fechaValida) printf(" es una fecha valida\n");
 else printf("no es una fecha valida\n");
 printf("\nPulse enter para continuar");
 getchar();
 return 0;
}

0 comentarios:

Publicar un comentario