[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Dia da semana






>From: "Wellington Ribeiro de Assis" <wassis@epq.ime.eb.br>
>Reply-To: obm-l@mat.puc-rio.br
>To: "discusspio de problemas" <obm-rj@mat.puc-rio.br>
>Subject: Dia da semana
>Date: Fri, 18 Aug 2000 23:59:17 -2:00
>
>Prezados amigos
>
>Alguem sabe dizer como eh o algoritmo usado para se descobrir que dia
>da semana cai uma determinada data de um ano qualquer?
>
>Bons estudos e abraco a todos,
>Wellington

Olá,

eu tenho uma idéia. Conseguiremos descobrir em que dia da semana cai o dia D 
do mês M do ano A, se soubermos que dia da semana foi 1/1/1 (por exemplo), e 
quantos dias já se passaram até o dia D/M/A desde 1/1/1, e fazer o resto da 
divisão por 7, o resto 0 nos dirá que D/M/A é o mesmo dia da semana de 
1/1/1, o resto 1 que D/M/A é um dia depois, e assim por diante. Vou 
apresentar uma possível solução. Defino o seguinte:
- DA(A) = número de dias dos anos entre o ano 1 e A-1 (inclusive), para A>0, 
não vou considerar os casos com o ano negativo.
- DM(M) = número de dias dos meses entre 1 e M-1, do ano A.
- DD(D) = número de dias anteriores a D, no mês M do ano A.
O resto procurado é o da divisão de ND(D/M/A)=DA(A)+DM(M)+DD(D)-ND(1/1/1) 
por 7.
Eu não vou falar muitos detalhes (para não ficar muito chato). Tomando a 
função [x], menor inteiro, que diz o natural N, tal que N<=x<N+1, daí, 
[x]=N, temos
DA(A) = 365(A-2) + [(A-1)/4], se A>0
DM(M) = 31([M/2] + [M/9] - [M/10] + [M/11] - [M/12])
        + 30([M/5] + [M/7] + [M/12])
        + 28([M/3] - [M/6] - [M/9] - [M/12])
        + [1 - A/4 + [A/4]]([M/3] - [M/6] - [M/9] - [M/12])
DD(D) = D
Agora podemos fazer algumas simplicações módulo 7.

ND(D/M/A) = 
(A-2)+[(A-1)/4]+3([M/2]+[M/9]-[M/10]+[M/11]-[M/12])+2([M/5]+[M/7]+[M/12])+[1-A/4+[A/4]]([M/3]-[M/6]-[M/9]-[M/12])+D 
(mod 7)

Hoje, ND(20/8/2000) = 0 (mod 7), domingo.
Primeiro dia da era cristã, ND(1/1/1) = 0 (mod 7), domingo.
Proclamação da Independência, ND(7/9/1922) = 5 (mod 7), sexta-feira.
Proclamação da República, ND(15/11/1889) = 4 (mod 7), quinta-feira.


Eu tenho quase certeza de que para anos A negativos, uma expressão válida é 
a seguinte:

ND(D/M/A) = 
A-[(|A|+3)/4]+3([M/2]+[M/9]-[M/10]+[M/11]-[M/12])+2([M/5]+[M/7]+[M/12])+[1-(A+1)/4+[(A+1)/4]]([M/3]-[M/6]-[M/9]-[M/12])+D 
(mod 7),

ela deixa os restos similares aos da expressão com o A>0, ou seja, 0 
continua sendo domingo, e assim por diante.


Eu não uni os dois casos (A>0 e A<0) numa expressão só, por que não existe o 
ano 0, e isso complicou tudo para mim, talvez eu até conseguisse, mas 
ficaria algo tão comprido que prefiro nem tentar.

Obrigado!

Eduardo Casagrande Stabel.




________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com