#include < stdio.h >
void leer_entrada(int *pm, int *pd, int *pa);
int convertir(int mm, int dd, int aa);
int main()
{
int mm,dd,aa;
int dia_semana;
static char *diasemana[] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Sabado" };
static char *mes[] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
printf("Rutina de conversion de fecha \n Para parar, introducir 0 0 0");
leer_entrada(&mm, &dd, &aa);
//Convertir fecha a dia numerico de la semana
while (mm > 0)
{
dia_semana = convertir (dd, mm, aa);
printf("\n El dia fue %s, %d %s de %d \n",diasemana[dia_semana], dd,mes[mm-1], aa);
leer_entrada(&mm, &dd, &aa);
}
}
void leer_entrada(int *pm, int *pd, int *pa) //Convertir una fecha en el dia de la semana.
{
printf("\n Introducir MM DD AAAA: ");
scanf("%d %d %d", pm, pd, pa);
system("clear"); //Sirve para limpiar la pantalla en Linux.
return;
}
int convertir (int mm, int dd, int aa) //Convertir una fecha en el dia de la semana.
{
long ndias; //Num de dias desde el comienzo de 1900.
long nciclos; //Num de cliclos de 4 años despues de 1900.
int nanios; //Num de años despues del ultimo cilico de 4 años.
int dia; //Dia de la semana {0,1,2,3,4,5,6}
//Conversiones numericas
aa-=1900;
ndias = (long) (30.42 * (mm - 1)) + dd; //Dia aprox del año.
if(mm == 2) ++ndias; //Ajuste para febrero.
if((mm > 2) && (mm < 8)) --ndias; //Ajuste para marzo-julio.
if((aa % 4 == 0) && (mm > 2)) ++ndias; //Ajuste para el año bisiesto.
nciclos = aa / 4; //Ciclos de 4 años despues de 1900.
ndias += nciclos * 1461; //Añadir dias por ciclos de 4 años.
nanios = aa % 4; //Años despues del ultimo ciclo de 4 años.
if(nanios > 0) //Añadir dias por años despues del ultimo ciclo.
ndias += 365 * nanios +1;
if(ndias > 59) --ndias; //Ajustar para 1900 (No año bisiesto).
dia = ndias % 7;
return(dia);
}
No hay comentarios:
Publicar un comentario