Page 1 sur 1

[Ex] Validation d'une année bissextile

Posté : dim. 13 avr. 2008 13:20
par ani

Code : Tout sélectionner

Func isYearBissextile($iNumber)
; Nom.............: isYearBissextile
; Description.....: Renvoie l'année encodé
; Syntaxe.........: isYearBissextile($iNumber)
; Paramètres......: $iNumber - Année supérieur ou égal à lan 1600
; Valeur.retourné.: Succés - Année séculaire / Année Bissextile.
; ==> Calendrier Grégorien.
; Auteur .......: Ani
; Création .....: 13 avril 2008
; Distribué ....: 13 avril 2008
; Modifié.......: 14 avril 2008
; Version.......: 0.0.0.1 a
; Groupe........: Autoit-fr
    Local $Modulo4 = StringRight($iNumber,2)/4
    Local $Modulo400 = StringLeft($iNumber,2)/4
    Local $b ="", $Seculaire = "00"

    If $iNumber < 1600 Then 
        $b &= $iNumber & " est invalide" 
        ConsoleWrite($b)
        Exit
    EndIf

    If ($Seculaire = $Modulo4) Then $b &= $iNumber & " est une année séculaire" & @CRLF

    If (StringIsDigit($Modulo4) And StringIsDigit($Modulo400)) = 0 Then
        $b &= $iNumber & " n'est pas une annnée bissextile"
    Else
        $b &= $iNumber & " est une année bissextile"
    EndIf

    Return $b
EndFunc
Exemple d'utilisation
ConsoleWrite(isYearBissextile(@YEAR + 4))
renvoie = 2012 est une année bissextile

ConsoleWrite(isYearBissextile(2007))
renvoie = 2007 n'est pas une année bissextile

ConsoleWrite(isYearBissextile(1600))
renvoie =
1600 est une année séculaire
1600 est une année bissextile

ConsoleWrite(isYearBissextile(1900))
renvoie =
1900 est une année séculaire
1900 n'est pas une année bissextile

Re: [Ex] Validation d'une année bissextile

Posté : dim. 13 avr. 2008 16:33
par Ahbadiane
Bonjour,

il faut gérer les exceptions au calcul des annèes bissextile (ex 1900)
voir http://fr.wikipedia.org/wiki/Ann%C3%A9e_bissextile

Re: [Ex] Validation d'une année bissextile

Posté : dim. 13 avr. 2008 16:45
par ani
pas compris .

ConsoleWrite(isYearBissextile(1900))
renvoie

1900 est une année bissextile.

ou peut etre que tu parle de la date d'apparution des années bissextile ?

Re: [Ex] Validation d'une année bissextile

Posté : dim. 13 avr. 2008 17:12
par arrkhan
sauf que 1900 n'etait pas une année bisextile ^^ merci wikipédia...

Re: [Ex] Validation d'une année bissextile

Posté : dim. 13 avr. 2008 17:22
par ani
ok, mais vu que j'ai du mal à lire,, j'ai pas lu le wikibook,,
Indiquer ceux-ci

Code : Tout sélectionner

If $iNumber < 2000 Then 
    $b &= $iNumber & " est invalide, veuillez indiquer une date supérieur ou égal à l'an 2000" 
    ConsoleWrite($b)
    Exit
EndIf
..sivous pouviez m'indiquer les indices des dates grégoriennes :p

$modulo4=$inumber/4
$modulo400=$inumber/400
???

Re: [Ex] Validation d'une année bissextile

Posté : dim. 13 avr. 2008 19:05
par Voodoo
"Toute année dont l'expression numérale est divisible par 4 est bissextile. Toutefois, les années séculaires ne sont pas bissextile, sauf celles dont les 2 premiers chiffres forment un nombre divisible par 4 !" - Larousse

Par exemple 1600 est bissextile. Car 1600/4 = 400 et 16/4 = 4 mais pour l'année 1900, 1900 /4 = 475 par contre 19/4 = 4,75 donc séculaire mais pas bissextile.

Une année séculaire se termine par 00 (1100,1200,...)

bonne chance :mrgreen:

Re: [Ex] Validation d'une année bissextile

Posté : lun. 14 avr. 2008 14:03
par ani
UP!!UP

C'est bon comme çà ?
merci pour les info ;)

Re: [Ex] Validation d'une année bissextile

Posté : lun. 14 avr. 2008 14:11
par Voodoo
je ne peux pas tester immédiatement mais à vu

Code : Tout sélectionner

If $iNumber < 1600 Then
        $b &= $iNumber & " est invalide"
        ConsoleWrite($b)
        Exit
    EndIf
 
Pourquoi ? et si je veux tester 1500 je n'ai donc pas le droit ! c'est inconcevable :D

Ensuite si c'est une fonction il faut faire des return apropriés ! par exemple return 0 si vrai -1 si seculaire et pas bissextile -2 si rien du tout...

Re: [Ex] Validation d'une année bissextile

Posté : lun. 14 avr. 2008 14:21
par ani
Si on retire la vérification if $inumber < 1600 çà ne change pas, pour 100 il retourne année séculaire mais pas une année bissextile ect

la $B c'est un boolen (vrai ou faux) :o

Je vais essayer pour les retours,
je suis pas codeur ;)

Code : Tout sélectionner

ConsoleWrite(isYearBissextile("1900"))
Func isYearBissextile($iNumber,$Log=0)
    Local $Modulo4 = StringRight($iNumber,2)
    Local $Modulo400 = StringReplace($iNumber,StringRight($iNumber,2),"",1)
    Local $Seculaire = "00"
    
    Local $DSM =  ($Seculaire <> $Modulo4)
    Local $DMM = ((StringIsDigit($Modulo4/4) And StringIsDigit($Modulo400/4)) = 0)

    Local $b, $Return
    
    If (($DSM=0) And ($DMM = 0)) then 
        $b = $iNumber & " est une année séculaire et bissextile" & @CRLF
        $Return = True
    ElseIf (($DSM = 1) And ($DMM = 1)) then 
        $b = $iNumber & " n'est pas une année séculaire ni bissextile" & @CRLF
        $Return = False
    ElseIf ($DSM=0) Then    
        $b = $iNumber & " est une année séculaire mais pas bissextile" & @CRLF
        $Return = False
    ElseIf ($DMM=0) Then
        $b = $iNumber & " est une année bissextile mais pas séculaire" & @CRLF
        $Return = True
    EndIf
    
    If $log <> 0 Then 
        $Return = $b
    EndIf
    
    Return $Return

EndFunc   ;==>isYearBissextile
exemple d'utilisation
ConsoleWrite(isYearBissextile("1900"))
renvoie = false

ConsoleWrite(isYearBissextile("1900",1))
renvoie = 1900 est une année séculaire mais pas bissextile


sinon je serai ravis de comprendre le système des retour d'erreur et de leur construction :)

Dans la fonction je vois bien 4 Messages si j'ai bien résonné selon le cas rencontré.

merci pour les commentaires ;)