[Ex] Validation d'une année bissextile

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

[Ex] Validation d'une année bissextile

#1

Message 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
Avatar du membre
Ahbadiane
Niveau 5
Niveau 5
Messages : 139
Enregistré le : jeu. 20 déc. 2007 22:39
Localisation : Paris
Status : Hors ligne

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

#2

Message 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
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

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

#3

Message 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 ?
Avatar du membre
arrkhan
Niveau 8
Niveau 8
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : Hors ligne

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

#4

Message par arrkhan »

sauf que 1900 n'etait pas une année bisextile ^^ merci wikipédia...
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

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

#5

Message 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
???
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

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

#6

Message 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:
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

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

#7

Message par ani »

UP!!UP

C'est bon comme çà ?
merci pour les info ;)
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

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

#8

Message 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...
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

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

#9

Message 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 ;)
Répondre