Sachant que le 01/01/1900 était un Lundi...

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

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!

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$
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

J'avais concervé un programme similaire dans ma calculatrice, pour trouver le jour de la semaine. 8)

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
Il ne restera plus qu'à ajouter toutes les conditions, pour ne pas se retrouver avec des dates qui n'existent pas. 8O

Si cela pouvait aider un mage, un savant fou Image à comprendre, pour qu'il puisse à son tour expliquer le pourquoi du comment cela marche. :roll:

Ce serait bête Image de voyager dans le temps, et d'arriver un dimanche où tous les magasins seraient fermés Image, suivit du Lundi de pâques et d'arriver comme un terminator sans ses vêtements Image, non ? :wink:

@ peluche les nounours Image du présent et aussi à ceux qui voyagent dans le temps.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

@Ollivier
Bravo, du bon boulot :wink:

@Lna
Ce programme venait d'un st-mag (n°30 à n°45 ?) rubrique gfa punch.
Mais alors, excell n'a rien inventé ? :lol:

Merci à vous deux :D
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

bravo olivier, pour ton programme a la bill gate!!!!! ou pour ton jeudi 1 janvier 1970.

:D

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$ 
depuis plus de 20 ans je pensais etre né un mardi, ca fiche un coup quant meme 8O .
:oops:
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message par Good07 »

Bonsoir à tous.

Super programme :D

Par contre dans sa première version le 24 janvier 1953 tombe bien un Samedi et ça fait 54 ans que je sais que c'est un Samedi. :D

Par contre dans la version remanié par Tonton voilà que je suis né un Mardi 8O
Comme dit si bien tonton sa fiche un sacré coup 8O
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Psst!

Message par Huitbit »

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

Hasta la vista!
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Message par Golfy »

Lna a écrit :J'avais concervé un programme similaire dans ma calculatrice, pour trouver le jour de la semaine. 8)

Ce programme venait d'un st-mag (n°30 à n°45 ?) rubrique gfa punch.
Ca alors ? des STéistes ici ? GFA Basic n'est pas mort ??? :P
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 8O )

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 :twisted:

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 :roll:

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/
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Ben alors, petit sujet... As-tu fini de te « plancker » un Max ?

>> Impossible n'est pas français !
Avatar de l’utilisateur
Ar-S
Messages : 9542
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Golfy 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 :roll:

Edit: pour les nostalgiques qui ont encore un ST(E) à la maison ou un émulateur sur un bord de disque-dur : http://stmagazine.org/
Pure Punch, ça le ferait bien effectivement :P
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

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 !!
8O

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

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 :D
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

J'ai vu aussi des gens dit "simple d'esprit" donner instantanément le jour quand on leur disait par exemple 3 décembre 1923 8O
Il doit y avoir un truc évident dans le calandrier qui nous échappe :roll:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Frenchy Pilou a écrit :J'ai vu aussi des gens dit "simple d'esprit" donner instantanément le jour quand on leur disait par exemple 3 décembre 1923 8O
Il doit y avoir un truc évident dans le calandrier qui nous échappe :roll:


non! non! moi je te parle de qulqu'un de "normal" , il a une methode a lui , je
vais lui demander !! :)

[Reedit] j'attends sa reponse :)
Dernière modification par Backup le dim. 24/août/2008 11:36, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

C'est une bonne idée ces PurePunch. Si on met ça au point, je pourrai en faire l'annonce sur le forum anglais; il faudra trouver quelqu'un pour le forum allemand.

Ca pourrait par exemple être un forum mensuel, avec un vote des membres pour déterminer le gagnant. Il n'y avait pas vraiment de thème si je me souviens bien, juste le meilleur code en dix lignes, c'est ça?
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Message par Golfy »

Voici une méthode :
http://villemin.gerard.free.fr/CultureG/Semaine.htm

et une explication :
http://www.recreomath.qc.ca/dict_semaine_jour.htm

Qui va écrire ce Pure'Punch ? :roll:
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Message par GeBonet »

Lna a écrit :J'avais concervé un programme similaire dans ma calculatrice, pour trouver le jour de la semaine. 8)
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
Il ne restera plus qu'à ajouter toutes les conditions, pour ne pas se retrouver avec des dates qui n'existent pas. 8O
Reprise d'un Ordinateur individuel du 5 mars 1979 N° 5 page 52... Fiche Exemple N°4
Et probablement d'autres par la suite.. Personnellement, j'en ai au moins 4 ou 5 formes (et c'est suffisant)... Et aucune de moi :?
Comme quoi, les nouveauté d'aujourd'hui peuvent aussi être celle d'hier... Et d'avant hier :lol: :lol:
Quand à Excell et d'autres beau joujou, ne sont que la somme d'une multitude "sous routines" "inventée" au fur et à mesure des besoins...
Un peu comme PB est en train de se construire sous nos yeux !
Alors dans ??? Quelqu'un dira...
Alors PB n'a rien inventé ! (pour l'une ou l'autre de ses spécificités)
C'est le lot de toute invention, une fois qu'elle est inventée, elle ne devient que la partie d'autre chose :wink:
Répondre