Calcul du jour de la semaine ---------------------------- 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 : JS = {[(23m)/9]+j+4+a+[z/4]-[z/100]+[z/400]-y}mod7 où: JS = Jour de semaine (J = 0 à 6; 0=Dim., 1=Lun., ... , 6=Sam.) [n] signifie le nombre entier résultant de la division, le reste étant ignoré m = Mois (m = 1 à 12; 1=Jan., 2=Fév., 3=Mars, ... , 12=Déc.) j = Jour (d = 1 à 31) a = année z = a-1 si m<3 et z = a si m>=3 y = 0 si m<3 et y=2 si m>=3 mod 7 = reste de la division par 7 Ecriture en structurée ---------------------- BEGIN DECLARE joursem AS NIBBLE ' Jour de la semaine 0=dim....6=sam DECLARE jour AS NIBBLE ' Jour du mois, varie de 1 à 31 DECLARE mois AS NIBBLE ' Mois, varie de 1 à 12 DECLARE annee AS WORD ' Année, varie de 1900 à 2999 DECLARE jour$(6) ' Définit la matrice des noms des jours DECLARE a AS WORD ' Variable de travail DECLARE y AS NIBBLE ' Variable de travail DECLARE z AS WORD ' Variable de travail LET jour$(0)="Dimanche" LET jour$(1)="Lundi" LET jour$(2)="Mardi" LET jour$(3)="Mercredi" LET jour$(4)="Jeudi" LET jour$(5)="Vendredi" LET jour$(6)="Samedi" < Introduire la date sous la forme "jour/mois/annee"> IF m < 3 THEN LET z = annee - 1 LET y = 0 ELSE LET z = annee LET y = 2 ENDIF LET a = ENT(23*mois/9)+jour+4+annee+ENT(z/4)-ENT(z/100)+ENT(z/400)-y LET joursem = a-ENT(a/7)*7 END