Cómo calcular el día correspondiente a la fecha de cualquier año

/ * Resuelto: Encuentre el día de la semana en cualquier fecha del 1 de enero de 0001 al infinito en lenguaje C * /

#include

int dow (int, int, int); / * fecha de la semana * /

int main ()
{int d = -1, m = -1, y = -1;
printf (“\ nIntroduzca la fecha (DMY): – \ n”);
scanf (“% i% i% i”, & d, & m, & y);

printf (“\ n = Día (% i /% i /% i):”, d, m, y);

interruptor (dow (d, m, y))
{
caso 0:
printf (“domingo”);
rotura;
caso 1:
printf (“lunes”);
rotura;
caso 2:
printf (“martes”);
rotura;
caso 3:
printf (“miércoles”);
rotura;
caso 4:
printf (“jueves”);
rotura;
caso 5:
printf (“viernes”);
rotura;
caso 6:
printf (“sábado”);
rotura;
defecto:
printf (“# Error inesperado #”);
}

printf (“\ n \ n \ n \ n”);
devuelve 0;
}

int dow (int d, int m, int y)
{
int t [] = {0,3,2,5,0,3,5,1,4,6,2,4};
y – = m <3;
return (y + y / 4 – y * 3/400 – y / 4000 / * si se implementará en el futuro * / + t [m-1] + d)% 7;

}

Citando un buen algoritmo para encontrar el día correspondiente al 1 de enero del año Y:
Deje que floor (x) denote el mayor entero menor o igual a x.
Deje que 0 represente el lunes, 1 martes, … 6 domingo. También el 1 de enero 1 AD fue un lunes
Ahora, el número de años bisiestos antes de Y es floor ((Y-1) / 4) – floor ((Y-1) / 100) + floor ((Y-1) / 400). Esto se deduce del hecho de que
Un año es bisiesto si es divisible por 4 y no divisible por 100.
Un año no es bisiesto si es divisible entre 4 y es divisible entre 100 pero no entre 400
Un año es bisiesto si es divisible por 4, divisible por 100 y divisible por 400.
Entonces, el número total de días desde el 1 de enero de 1 AD hasta el 31 de diciembre, el anuncio Y-1 es
365 * (Y-1) + piso ((Y-1) / 4) – piso ((Y-1) / 100) + piso ((Y-1) / 400). Tomando el módulo 7, obtenemos la respuesta requerida el 1 de enero y el anuncio como
Mod (365 * (Y-1) + piso ((Y-1) / 4) – piso ((Y-1) / 100) + piso ((Y-1) / 400), 7)
= Mod ((Y-1) + piso ((Y-1) / 4) – piso ((Y-1) / 100) + piso ((Y-1) / 400), 7)
******* Una vez que sepamos esto, simplemente podemos agregar los días adicionales a la fecha dada del año Y para obtener el día correspondiente a cualquier fecha del año.

Por ejemplo, el 1 de enero de 1900 fue un lunes (ref wiki)
Usando el algo, obtenemos
Mod ((1899) + piso ((1899) / 4) – piso ((1899) / 100) + piso ((1899) / 400), 7)
= Mod (1899 + 474-18 + 4,7)
= mod (2359,7)
= 0, que es el lunes para verificar nuestro reclamo


Hay muchos algoritmos para hacer esto. Aquí se muestra uno de los buenos:
Cómo calcular el día de la semana

Si lo publica en Google en lugar de QUORA