Cool C/C++

Programacion en C/C++

Home FAQ Determinar si una fecha es valida o no
Determinar si una fecha es valida o no PDF Imprimir E-mail
Escrito por adrianvaca   
Martes, 22 de Marzo de 2011 23:43

Suponiendo que tenemos una fecha definida como:

struct date fecha;



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.

 
Otros artículos

Escribir un comentario


Código de seguridad
Refescar