PureBasic

Forums PureBasic
Nous sommes le Mer 13/Nov/2019 13:59

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
 Sujet du message: l'algorithme de Mike Keith
MessagePosté: Lun 20/Déc/2010 15:54 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 923
Ceci repond a un vieux topic de Dobro, ou Détermination du jour de la semaine pour une date quelconque :wink:
l'algorithme de Mike Keith est semblet'il le plus court connu a ce jour.
Code:
;======================================
; 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. :wink:

Michel


Dernière édition par MLD le Lun 20/Déc/2010 17:35, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: l'algorithme de Mike Keith
MessagePosté: Lun 20/Déc/2010 17:17 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8779
Image MLD

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: l'algorithme de Mike Keith
MessagePosté: Lun 20/Déc/2010 18:09 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
oui ! excellent Merci :D


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: l'algorithme de Mike Keith
MessagePosté: Lun 20/Déc/2010 23:04 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 556
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 !!!


Citation:
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.



@+

_________________
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: l'algorithme de Mike Keith
MessagePosté: Mar 21/Déc/2010 1:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 27/Jan/2005 19:07
Messages: 2194
Sinon il reste la collection du calendrier des Postes :)
Et pour 2011 on peut même se reservir de celui de 2005 ;)

_________________
Est beau ce qui plaît sans concept :)
Speedy Galerie


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: l'algorithme de Mike Keith
MessagePosté: Mar 21/Déc/2010 11:40 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 923
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 :D
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) :mrgreen:
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 :mrgreen: (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. :?: :?:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: l'algorithme de Mike Keith
MessagePosté: Mar 21/Déc/2010 12:08 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
pour moi ton algo va tres bien Merci :)


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye