Sachant que le 01/01/1900 était un Lundi...
Sachant que le 01/01/1900 était un Lundi...
Avec le calcul des années bissextiles que Dobro a posté, me vient une idée désormais possible : trouver le nom d'un jour en fonction d'une date (JJ/MM/AAAA).
Un indice supplémentaire est dans le titre...
Un indice supplémentaire est dans le titre...
Euh non. Pour l'instant, je viens de découvrir une erreur qui me fait marrer pour le pruneau que j'ai:
Il n'y a pas forcément besoin de récursivité pour calculer le nom d'un jour en fonction d'une date 
Code : Tout sélectionner
Expression is too complex (Out of CPU registers). Please split it.

Et puis là, j'ai un autre bug, celui-là c'est expédition bug report topic...
Code : Tout sélectionner
Procedure Equ(a, b)
Protected s.L
s = 0: If a = b: s = 1: EndIf
ProcedureReturn s
EndProcedure
Macro Bissex(x): Equ((x % 4), 0) & ((1 - Equ((x % 100), 0) ) | Equ(((x >> 2) % 100), 0) ): EndMacro
; Ici on a une autre macro ()
Macro JoursDansUnMois(x, y): (30 + ((x & 1) ! (x / 8) ) ) - (Equ(x, 2) * (2 - y) ): EndMacro
;
Procedure.L JourParAn(Annee)
Protected JPA.L
JPA = 0
For i = 1900 To Annee - 1
Debug "JPA = " + Str(JPA)
ZERO = JPA
Debug "365 + Bissex(i) = " + Str(365 + Bissex(i) )
JPA + (365 + Bissex(i) )
Debug Str(ZERO) + " + " + Str(365 + Bissex(i) ) + " = " + Str(JPA)
Next
ProcedureReturn JPA
EndProcedure
JourParAn(1901)
Bon allez, ça marche à partir du Lundi 1/1/1901...
Et là où je suis vert, ce sont sur les posts anglais: ils font ça avec des virgules. Incorrigibles!
Et là où je suis vert, ce sont sur les posts anglais: ils font ça avec des virgules. Incorrigibles!
Code : Tout sélectionner
Global Dim Jour.S(6)
Jour(0) = "Lundi"
Jour(1) = "Mardi"
Jour(2) = "Mercredi"
Jour(3) = "Jeudi"
Jour(4) = "Vendredi"
Jour(5) = "Samedi"
Jour(6) = "Dimanche"
Procedure Equ(a, b)
Protected s.L
s = 0: If a = b: s = 1: EndIf
ProcedureReturn s
EndProcedure
; Merci Dobro pour cet algo!
Procedure.L Bissex(x.L)
Protected Result.L
Result = (1 - Equ((x % 100), 0) )
Result | Equ(((x >> 2) % 100), 0)
Result & Equ((x % 4), 0)
ProcedureReturn Result
EndProcedure
Procedure JoursDansUnMois(x.L, y.L)
Protected Result.L
Result = (30 + ((x & 1) ! (x / 8) ) )
Result - (Equ(x, 2) * (2 - y) )
ProcedureReturn Result
EndProcedure
Procedure.L JourJ(JJ.L, MM.L, AA.L)
Protected JPM.L
Protected J.L
J = 0
JPM = 0
For i = 1900 To AA - 1: J + (365 + Bissex(i) ): Next
For i = 1 To MM - 1: J + JoursDansUnMois(i, Bissex(AA) ): Next
J = ((J + JJ) - 1) % 7
ProcedureReturn J
EndProcedure
Date$ = InputRequester("Saisie d'une date", "JJ/MM/AAAA", "01/01/1900")
Debug Jour(JourJ(Val(StringField(Date$, 1, "/") ), Val(StringField(Date$, 2, "/") ), Val(StringField(Date$, 3, "/") ) ) ) + " " + Date$
J'avais concervé un programme similaire dans ma calculatrice, pour trouver le jour de la semaine.
Ce programme venait d'un st-mag (n°30 à n°45 ?) rubrique gfa punch.
Il ne restera plus qu'à ajouter toutes les conditions, pour ne pas se retrouver avec des dates qui n'existent pas.
Si cela pouvait aider un mage, un savant fou
à comprendre, pour qu'il puisse à son tour expliquer le pourquoi du comment cela marche.
Ce serait bête
de voyager dans le temps, et d'arriver un dimanche où tous les magasins seraient fermés
, suivit du Lundi de pâques et d'arriver comme un terminator sans ses vêtements
, non ?
@ peluche les nounours
du présent et aussi à ceux qui voyagent dans le temps.

Ce programme venait d'un st-mag (n°30 à n°45 ?) rubrique gfa punch.
Code : Tout sélectionner
; PB 4.02
Procedure.s JourSemaineDate(j.b,m.b,a.w)
Protected jd.d,js.d
Protected man.l,mp.l,ap.l
man=Int(0.6+1/m+0.001)
mp=m+12*man
ap=a-man
jd=j+Int((367*(mp-1)+5)/12+0.001)+Int(365.25*(ap+4712)+0.001)
jd=jd-Int(ap/100)+Int(ap/400)
js=(jd-1720977)/7
js=Int(7*(js-Int(js))+0.001)
ProcedureReturn RTrim(Mid("DIMANCHE LUNDI MARDI MERCREDI JEUDI VENDREDI SAMEDI ",js*9+1,9))
EndProcedure
For jour=10 To 30
Debug Str(jour)+" "+JourSemaineDate(jour,9,2007)
Next jour

Si cela pouvait aider un mage, un savant fou


Ce serait bête




@ peluche les nounours

- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
bravo olivier, pour ton programme a la bill gate!!!!! ou pour ton jeudi 1 janvier 1970.

j ai modifier le code pour que ca marche bien pour cette date...
depuis plus de 20 ans je pensais etre né un mardi, ca fiche un coup quant meme
.


j ai modifier le code pour que ca marche bien pour cette date...
Code : Tout sélectionner
Global Dim Jour.S(6)
Jour(0) = "mardi"
Jour(1) = "Mardi"
Jour(2) = "mardi"
Jour(3) = "mardi"
Jour(4) = "mardi"
Jour(5) = "mardi"
Jour(6) = "mardi"
Procedure Equ(a, b)
Protected s.L
s = 0: If a = b: s = 1: EndIf
ProcedureReturn s
EndProcedure
; Merci Dobro pour cet algo!
Procedure.L Bissex(x.L)
Protected Result.L
Result = (1 - Equ((x % 100), 0) )
Result | Equ(((x >> 2) % 100), 0)
Result & Equ((x % 4), 0)
ProcedureReturn Result
EndProcedure
Procedure JoursDansUnMois(x.L, y.L)
Protected Result.L
Result = (30 + ((x & 1) ! (x / 8) ) )
Result - (Equ(x, 2) * (2 - y) )
ProcedureReturn Result
EndProcedure
Procedure.L JourJ(JJ.L, MM.L, AA.L)
Protected JPM.L
Protected J.L
J = 0
JPM = 0
For i = 1900 To AA - 1: J + (365 + Bissex(i) ): Next
For i = 1 To MM - 1: J + JoursDansUnMois(i, Bissex(AA) ): Next
J = ((J + JJ) - 1) % 7
ProcedureReturn J
EndProcedure
Date$ = InputRequester("Saisie d'une date", "JJ/MM/AAAA", "01/01/1900")
Debug Jour(JourJ(Val(StringField(Date$, 1, "/") ), Val(StringField(Date$, 2, "/") ), Val(StringField(Date$, 3, "/") ) ) ) + " " + Date$


Psst!
Si ça peut aider
(forfait
dates, années bissextiles....
les dates peuvent aller jusqu'à l'an -4712)!
http://www.purebasic.fr/french/viewtopic.php?t=6634
Hasta la vista!


les dates peuvent aller jusqu'à l'an -4712)!
http://www.purebasic.fr/french/viewtopic.php?t=6634
Hasta la vista!
Ca alors ? des STéistes ici ? GFA Basic n'est pas mort ???Lna a écrit :J'avais concervé un programme similaire dans ma calculatrice, pour trouver le jour de la semaine.![]()
Ce programme venait d'un st-mag (n°30 à n°45 ?) rubrique gfa punch.

Ton message m'a renvoyé dans ma période "ordi 24h/24" avec le magazine le plus génial (une épaisseur et un nombre de page incroyable pour le prix

Je remercie d'ailleurs Fred pour le pliage de procédure enfin dispo sous l'IDE de PureBasic : un clin d'oeil à mon éditeur favori de l'époque (GFABasic) qui interdisait de quitter une ligne avant que la syntaxe ne soit juste

Définition : un GFA Punch est un programme en GFA Basic tenant en 20 lignes maximum et ayant un intérêt maximum (scrolling, jeux, player, etc.)
On devrait avoir une rubrique comme celle-ci dans le forum

Edit: pour les nostalgiques qui ont encore un ST(E) à la maison ou un émulateur sur un bord de disque-dur : http://stmagazine.org/
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/
Pure Punch, ça le ferait bien effectivementGolfy a écrit : Définition : un GFA Punch est un programme en GFA Basic tenant en 20 lignes maximum et ayant un intérêt maximum (scrolling, jeux, player, etc.)
On devrait avoir une rubrique comme celle-ci dans le forum
Edit: pour les nostalgiques qui ont encore un ST(E) à la maison ou un émulateur sur un bord de disque-dur : http://stmagazine.org/

cette ete au camping du festival de country music, un tres bon guitariste m'a epaté !
il etait capable de calculer de tete, le jour de naissance de n'importe qui !!
il a expliqué sont system, mais va falloir que je lui redemande plus de details
c'est un system a base 7 qu'il remplace par des lettres , c'est tres rapide, et tres tres efficace , il a fait la démonstration sur plusieurs personnes présente, et ça tombais juste a chaque fois ...
ce genre d'algo se coderai en a peine une 10 aine de lignes, a mon avis ..
je vais essayer de le contacter
il etait capable de calculer de tete, le jour de naissance de n'importe qui !!

il a expliqué sont system, mais va falloir que je lui redemande plus de details

c'est un system a base 7 qu'il remplace par des lettres , c'est tres rapide, et tres tres efficace , il a fait la démonstration sur plusieurs personnes présente, et ça tombais juste a chaque fois ...
ce genre d'algo se coderai en a peine une 10 aine de lignes, a mon avis ..
je vais essayer de le contacter
