jueves, 16 de julio de 2009

Calcular dia de la semana de una fecha cualquiera

Si se sienten buenos con cálculos mentales y algún día quieren impresionar a alguien o simplemente estan de ociosos; esta es una opción siempre y cuando la fecha sea del 1ero de marzo en de 1600 en adelante, ya que a partir de esta fecha (o algo así...) se hizo oficial el calendario que utilizamos en estos días
Vamos a utilizar la notación
domingo=0, lunes=1,...,sábado=6

Sea f(m,n) = dia de la semana del primer día del mes "m" del año "n"


1.Lo primero que hay que calcular es B(n) y se calcula así:

B(n)= piso((n-1600)/4) - piso((n-1600)/100)+ piso((n-1600)/400))
piso(n)=entero más pequeño que "n" ej. piso(2.5)=2

Esta B(n) tiene que ver con que si un año es bisiesto o no

2.Ahora lo que hay que calcular es

f(3,n)=3+(n-1600)+B(n) mod 7

Un comentario antes del último paso
en general f(m,n) = f(3,n) +g(m) mod7
donde
g(3)=0
g(5)=5
g(7)=3
g(9)=2
g(11)=0
g(1)=4
g(4)=3
g(6)=1
g(8)=7
g(10)=4
g(12)=2
g(2)=0

3. AHora sí, el último paso es calcular
S(d,m,n)= f(m,n) +(d-1) mod 7

Ejemplo
Calcular dia de la semana del 11 Sept 2001

B(2001)=piso(401/4) -piso(401/100) + piso(401/400) = 97

f(3,2001)=3+401+97 =4mod7 <-4 es el residuo al dividir (3+401+97) entre 7

f(9,2001)=4+g(9) = 4+2 =6mod7

S(11,09,2001)=6+(11-1)=16=2mod7

el resultado bueno es ese "2" del final que es el residuo de 16 al dividirlo entre 7
y con eso sabemos que fue un martes

No hay comentarios:

Publicar un comentario