« Curiosités mathématiques/Trouver le jour de la semaine avec une date donnée » : différence entre les versions

→‎Méthode 1 : Correction de la mauvaise traduction de l'algo original en C qui fonctionne bien
(→‎Méthode 1 : Correction de la mauvaise traduction de l'algo original en C qui fonctionne bien)
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 en C s'écrit :
 
<syntaxhighlight lang="C">
(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7
</syntaxhighlight>
 
Comme Mike Keith est un mathématicien américain, Dd = Day pour Jour ; Mm = Month pour Mois et Yy = Year pour Année.
''' Jour de semaine : si m >= 3, D = { [(23m)/9] + d + 4 + y + [z/4] - [z/100] + [z/400] - 2 } mod 7'''
 
L'algorithme traduit les formules mathématiques suivantes :
'''si m < 3, D = { [(23m)/9] + d + 4 + y + [z/4] - [z/100] + [z/400] } mod 7'''
 
Si m < 3 :
 
:<math>wd = \left\lfloor \frac{23 \times m}{9} \right\rfloor + d + 4 + y + \left\lfloor \frac{y - 1}{4} \right\rfloor - \left\lfloor \frac{y - 1}{100} \right\rfloor + \left\lfloor \frac{y - 1}{400} \right\rfloor</math>
 
Sinon :
Comme Mike Keith est un mathématicien américain, D = Day pour Jour ; M = Month pour Mois et Y = Year pour Année.
 
:<math>wd = \left\lfloor \frac{23 \times m}{9} \right\rfloor + d + 2 + y + \left\lfloor \frac{y}{4} \right\rfloor - \left\lfloor \frac{y}{100} \right\rfloor + \left\lfloor \frac{y}{400} \right\rfloor</math>
Pour les francophones J = Jour M = Mois et A = Année.
 
Pour l'explication de la division par 100 et par 400, c'est pour savoir si l'année est bissextile :
 
13 mars 1998 = un Vendredi 13 !
 
Je voudrais préciser que cet algorithme ne fonctionne pas pour le 1 Janvier 2020 par exemple. Bizzard non? le résultat est 4, (4 = Jeudi) alors que c'est un Mercredi (mercredi = 3). 1 Janvier 2020: day = 1 ; months = 1 ; years = 2020
 
Essayez par vous même ;)