Código:
#include <stdio.h>
struct fecha leeFecha()
{
printf("Introduzca la fecha en formato dd/mm/aaaa :");
scanf("%d/%d/%d", &leeFecha.dia, &leeFecha.mes, &leeFecha.anio);
}
int compruebaFecha(struct fecha*pFecha)
{
int resul;
int bis;
bis = esBisiesto(*pFecha);
switch(pFecha->mes)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(pFecha->dia > 31 || pFecha->dia == 0)
resul = 0;
else
resul = 1;
break;
case 4:
case 6:
case 9:
case 11:
if(pFecha->dia > 30 || pFecha->dia == 0)
resul = 0;
else
resul = 1;
break;
case 2:
if (bis == 0)
if(pFecha->dia > 28 || pFecha->dia == 0)
resul = 0;
else
resul = 1;
else
if(pFecha->dia > 29 || pFecha->dia == 0)
resul = 0;
else
resul = 1;
break;
default:
resul=0;
}
return resul;
}
int comparaFecha(struct fecha f1, struct fecha f2)
{
int resul;
if(f1.anio<f2.anio)
resul=1;
else if(f1.anio>f2.anio)
resul=-1;
else if(f1.anio==f2.anio)
{
if(f1.mes<f2.mes)
resul=1;
else if(f1.mes>f2.mes)
resul=-1;
else if(f1.mes==f2.mes)
{
if(f1.dia<f2.dia)
resul=1;
else if(f1.dia>f2.dia)
resul=-1;
else if(f1.dia==f2.dia)
resul=0;
}
}
return resul;
}
void imprimeFecha(struct fecha f)
{
printf("%d/%d/%d", f.dia, f.mes, f.anio);
}
int esBisiesto(struct fecha f)
{
int resul;
if (0 == (f.anio % 4))
{
if (0 == (f.anio % 100))
{
if (0 == (f.anio % 400))
resul = 1;
else
resul=0;
}
else
resul = 1;
}
else
resul=0;
return resul;
}
Código:
#include <stdio.h>
#include "fecha.h"
#include "fecha.c"
int main()
{
struct fecha f1;
struct fecha f2;
struct fecha *pf1=NULL;
struct fecha *pf2=NULL;
f1 = leeFecha();
pf1=&f1;
if (compruebaFecha(pf1) == 0)
printf("Formato de fecha incorrecto\n");
else
{
f2 = leeFecha();
pf2=&f2;
if (compruebaFecha(pf2) == 0)
printf("Formato de fecha incorrecto\n");
else
{
if(comparaFecha(f1,f2)>0)
{
imprimeFecha(f1);
printf(" es anterior a ");
imprimeFecha(f2);
printf("\n");
}
else if(comparaFecha(f1,f2)<0)
{
imprimeFecha(f1);
printf(" es posterior a ");
imprimeFecha(f2);
printf("\n");
}
else if(comparaFecha(f1,f2)==0)
{
imprimeFecha(f1);
printf(" es igual a ");
imprimeFecha(f2);
printf("\n");
}
}
if(esBisiesto(f1)==1 && esBisiesto(f2)==1)
printf(AMBAS_BISIESTO);
else if(esBisiesto(f1)==1 && esBisiesto(f2)==0)
printf(PRIMERA_BISIESTO);
else if(esBisiesto(f1)==0 && esBisiesto(f2)==1)
printf(SEGUNDA_BISIESTO);
else if(esBisiesto(f1)==0 && esBisiesto(f2)==0)
printf(NINGUNA_BISIESTO);
}
return 0;
}