Determinar si una fecha es valida o no |
|
|
|
Escrito por adrianvaca
|
Martes, 22 de Marzo de 2011 23:43 |
Suponiendo que tenemos una fecha definida como:
Queremos saber si esa fecha es valida o no, bien la cabecera y funciones clave de nuestro programas serían:
#include <stdio.h> #include <dos.h> #include <conio.h>
#define es_anio_bisiesto(y) ((((y)%400)==0)||((((y)%4)==0)&&(((y)%100)!=0)))
enum bool { false = 0, true = 1 };
enum Mes { Enero = 1, Febrero = 2, Marzo = 3, Abril = 4, Mayo = 5, Junio = 6, Julio = 7, Agosto = 8, Septiembre = 9, Octubre = 10, Noviembre = 11, Diciembre = 12 };
int dias_en_el_mes (int y, int m) { const int dias[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int resultado;
resultado = dias[m-1];
if ( m == Febrero && es_anio_bisiesto ( y ) ) resultado++;
return resultado; }
bool es_fecha_valida ( struct date fecha ) { if ( fecha.da_mon < Enero || fecha.da_mon > Diciembre ) return false;
if ( fecha.da_day < 0 || fecha.da_day >= dias_en_el_mes ( fecha.da_year, fecha.da_mon ) ) return false;
return true; } |
La función definida como es_fecha_valida, retorna true si la fecha es valida, en caso contrario retorna false.
Ahora un pequeño programita para verificar si funciona todo esto:
void main() { struct date fecha1, fecha2;
fecha1.da_day=1; fecha1.da_mon=6; fecha1.da_year=2006;
fecha2.da_day=30; fecha2.da_mon=2; fecha2.da_year=2006;
clrscr();
if(es_fecha_valida(fecha1)) printf("La fecha1 es valida\n"); else printf("La fecha1 NO es valida\n");
if(es_fecha_valida(fecha2)) printf("La fecha2 es valida"); else printf("La fecha2 NO es valida");
getch(); } |
Fíjense en lo fácil que resulta determinar si la fecha es valida o no.
|