Page 1 sur 1
l'algorithme de Mike Keith
Publié : lun. 20/déc./2010 15:54
par MLD
Ceci repond a un vieux topic de Dobro, ou Détermination du jour de la semaine pour une date quelconque
l'algorithme de Mike Keith est semblet'il le plus court connu a ce jour.
Code : Tout sélectionner
;======================================
; MLD le 20/12/2010 =
; Détermination du jour de la semaine =
; pour une date quelconque =
; selon l'algorithme de Mike Keith =
; PB 4.51 =
;======================================
Global Dim Jour.s(6)
Jour(0) = "Dimanche"
Jour(1) = "Lundi"
Jour(2) = "Mardi"
Jour(3) = "Mercredi"
Jour(4) = "jeudi"
Jour(5) = "Vendredi"
Jour(6) = "Samedi"
Procedure joursem(d,m,y)
xz = 0 : z = 0
If m<3
z = y-1 : xz =0
Else
z = y : xz = 2
EndIf
D = (((((23*m)/9) + d + 4 + y + (z/4)) - (z/100) + (z/400)) - xz)%7
ProcedureReturn D
EndProcedure
Date$ = InputRequester("Saisie d'une date", "JJ/MM/AAAA", "14/07/1789")
MessageRequester("reponse",jour(joursem(Val(StringField(Date$, 1, "/")),Val(StringField(Date$, 2, "/")),Val(StringField(Date$, 3, "/")))) + " " + Date$ ,#PB_MessageRequester_Ok )
Dim Jour.s(0)
End
Faites en ce que vous voulez.
Michel
Re: l'algorithme de Mike Keith
Publié : lun. 20/déc./2010 17:17
par Ar-S

MLD
Re: l'algorithme de Mike Keith
Publié : lun. 20/déc./2010 18:09
par Backup
oui ! excellent Merci

Re: l'algorithme de Mike Keith
Publié : lun. 20/déc./2010 23:04
par PAPIPP
Bonjour à tous
Quelques remarques :
L'algorithme de Mike Keith n’est valable que dans le calendrier grégorien à partir du 15/10/1582
Car dans ce calendrier il n’existe pas de date entre le 04/10/1582 et le 15/10/1582
L’algo en trouve !!!!
Autre remarque le 01/01/01 est toujours un dimanche
L’algo me donne un Lundi !!!
Algorithme de Mike Keith
Algorithme
Dans un article publié en 1990 dans le Journal of Recrational Mathematics, Vol. 22, No. 4, 1990, p. 280, Mike Keith propose un algorithme pour la détermination du jour de la semaine correspondant à une date quelconque. Sa formule, inspirée de la congruence de Zeller et traduite en seulement 45 caractères précise-t-il, est la suivante :
(d+=m<3?y--:y-2, 23*m/9 + d + 4 + y/4 -y/100 + y/400) ÷ 7
Mike Keith déclare lui-même qu'il s'agit là de la " plus simple formule possible " pour le calcul du jour de la semaine, " la meilleure qui puisse être construite ", ajoute-t-il. Dans sa forme opérationnelle, son algorithme s'écrit :
Jour de semaine D = { [(23m)/9] + d + 4 + y + [z/4] - [z/100] + [z/400] - 2 (si m >= 3) } mod 7
où:
D = Jour de semaine (D = 0 à 6; 0 = Dimanche, 1 = Lundi, ... , 6 = Samedi)
[x] signifie le nombre entier résultant de la division, le reste étant ignoré
m = Mois (m = 1 à 12; 1 = Janvier, 2 = Février, 3 = Mars, ... , 12 = Décembre) m >= 3 signifie m supérieur ou égal à 3
d = Jour (d = 1 à 31)
y = année
z = y - 1 si m < 3
z = y si m >= 3
Modulo 7 ou mod 7 = reste de la division par 7
Exemples
1er cas : m < 3
Le 18 janvier 1953 tombait quel jour de la semaine?
d = 18, m = 1, y = 1953 et z = y-1 = 1952; d'où
D = { [(23x1)/9] + 18 + 4 + 1953 + [1952/4] - [1952/100] + [1952/400] } mod 7
D = (2 + 18 + 4 + 1953 + 488 - 19 + 4) mod 7
D = 2450 mod 7 = 0 car 2450 = 7 x 350 + 0
18 janvier 1953 = un Dimanche
2eme cas : m > 3
Le 2 août 1953 tombait quel jour de la semaine?
d = 2, m = 8, y = 1953 et z = y = 1953; d'où
D = { [(23x8)/9] + 2 + 4 + 1953 + [1953/4] - [1953/100] + [1953/400] - 2 } mod 7
D = (20 + 2 + 4 + 1953 + 488 - 19 + 4 - 2) mod 7
D = 2450 mod 7 = 0 car 2450 = 7 x 350 + 0
2 août 1953 = un Dimanche
3eme cas : m = 3
Le 13 mars 1998 tombait quel jour de la semaine?
d = 13, m = 3, y = 1998 et z = y = 1998; d'où
D = { [(23x3)/9] + 13 + 4 + 1998 + [1998/4] - [1998/100] + [1998/400] - 2 } mod 7
D = (7 + 13 + 4 + 1998 + 499 - 19 + 4 - 2) mod 7
D = 2504 mod 7 = 5 car 2504 = 7 x 357 + 5
13 mars 1998 = un Vendredi 13 !!!
Au besoin, le lecteur pourrait vérifier ses résultats de calcul du jour de la semaine au moyen de notre Calendrier pratique, du Calendrier permanent ou du Calendrier perpétuel à 12 mois.
@+
Re: l'algorithme de Mike Keith
Publié : mar. 21/déc./2010 1:36
par Frenchy Pilou
Sinon il reste la collection du calendrier des Postes

Et pour 2011 on peut même se reservir de
celui de 2005 
Re: l'algorithme de Mike Keith
Publié : mar. 21/déc./2010 11:40
par MLD
PAPIPP a écrit :Bonjour à tous
Quelques remarques :
L'algorithme de Mike Keith n’est valable que dans le calendrier grégorien à partir du 15/10/1582
Car dans ce calendrier il n’existe pas de date entre le 04/10/1582 et le 15/10/1582
L’algo en trouve !!!!
Autre remarque le 01/01/01 est toujours un dimanche
L’algo me donne un Lundi !!!
C'est tout de même mieux que les limitations de dates de PB
Je n'ai pas programmer de garde fous pour l'entrée des dates dans l'algo.(J'ai fait confiance a l'intelligence de l'opérateur)
PAPIPP a écrit :Autre remarque le 01/01/01 est toujours un dimanche
L’algo me donne un Lundi !!!
De quoi ? Du premier jour du monde, de la première année aprés J.C, de l'an 1 de la révolution.

quelle est la source
PAPIPP a écrit :
Car dans ce calendrier il n’existe pas de date entre le 04/10/1582 et le 15/10/1582
L’algo en trouve !!!!
Autre remarque le 01/01/01 est toujours un dimanche
L’algo me donne un Lundi !!!
Le trou noir de 11 jours

(En fait changement du calendrier Julien en Grégorien "Date variable selon les pays")
Pourtant notre ami Huitbit dans un topic sur ce forum intitulé "Jour Julien,Applications", en basant sur d'autres sources trouve la même chose que Mike Keith.

Re: l'algorithme de Mike Keith
Publié : mar. 21/déc./2010 12:08
par Backup
pour moi ton algo va tres bien Merci
