Année bissextile
Résolu
Anna
-
Anna -
Anna -
Bonjour,
Mon prof nous a proposé une correction pour l'exercice suivant:
Exercice:
Une année bissextile (contient 366 jours) si elle est multiple de 4, sauf les années de début de siècle (qui se terminent par 00) qui ne sont bissextiles que si elles sont divisibles par 400.
Exemples
1980 et 1996 sont bissextiles car elles sont divisibles par 4
2000 est une année bissextile car elle est divisible par 400
2100 et 3000 ne sont pas bissextiles car elles ne sont pas divisibles par 400.
Ecrire un algorithme qui permet de déterminer si un entier positif donne correspond a une année bissextile ou non.
Correction:
Algorithme Bissextile
Var
n : Entier
Début
Ecrire("Entrer l'annee="), Lire(n)
Si ( n Mod 400 = 0) OU (( n Mod 100 # 0) ET (n Mod 4) = 0))<0 ) Alors
Ecrire("Annee bissextile")
Sinon
Ecrire("Annee non bissextile")
FinSi
Fin.
J'ai pas compris cette instruction " Si ( n Mod 400 = 0) OU (( n Mod 100 # 0) ET (n Mod 4) = 0))<0 )" et surtt pourquoi "<0" . Qui peut m'expliquer svp. Merci d'avance.
Mon prof nous a proposé une correction pour l'exercice suivant:
Exercice:
Une année bissextile (contient 366 jours) si elle est multiple de 4, sauf les années de début de siècle (qui se terminent par 00) qui ne sont bissextiles que si elles sont divisibles par 400.
Exemples
1980 et 1996 sont bissextiles car elles sont divisibles par 4
2000 est une année bissextile car elle est divisible par 400
2100 et 3000 ne sont pas bissextiles car elles ne sont pas divisibles par 400.
Ecrire un algorithme qui permet de déterminer si un entier positif donne correspond a une année bissextile ou non.
Correction:
Algorithme Bissextile
Var
n : Entier
Début
Ecrire("Entrer l'annee="), Lire(n)
Si ( n Mod 400 = 0) OU (( n Mod 100 # 0) ET (n Mod 4) = 0))<0 ) Alors
Ecrire("Annee bissextile")
Sinon
Ecrire("Annee non bissextile")
FinSi
Fin.
J'ai pas compris cette instruction " Si ( n Mod 400 = 0) OU (( n Mod 100 # 0) ET (n Mod 4) = 0))<0 )" et surtt pourquoi "<0" . Qui peut m'expliquer svp. Merci d'avance.
A voir également:
- Année bissextile
- 21 trimestre en année - Forum Excel
- Chanteur blond annee 80 - Forum Musique / Radio / Clip
- Chanson i love you année 70 ✓ - Forum Musique / Radio / Clip
- Chanteur blond année 80 - Forum Musique / Radio / Clip
- 1 million de seconde en année - Accueil - Technologies
1 réponse
Bonjour,
Le problème avec les algorithmes c'est que chacun met la syntaxe qu'il veut et qu'il y a autant de façon d'écrire un algo qu'il n'y a de personnes (contrairement aux langages de programmation qui doivent respecter des règles strictes)
Pour moi le <0 ne sert à rien, quant au reste c'est tout simplement la traduction algorithmique de tes conditions pour avoir une année bissextile :
L'année est divisible par 4 (n Mod 4 = 0) donc bissextile UNIQUEMENT si elle n'est pas divisible par 100 (n Mod 100 # 0), SAUF SI elle est divisible par 400 (n Mod 400 = 0)
D'où la condition globale avec OU/ET qui t'a été donnée, bien qu'elle devrait plutôt être écrite dans l'ordre suivant pour optimiser le calcul :
Le problème avec les algorithmes c'est que chacun met la syntaxe qu'il veut et qu'il y a autant de façon d'écrire un algo qu'il n'y a de personnes (contrairement aux langages de programmation qui doivent respecter des règles strictes)
Pour moi le <0 ne sert à rien, quant au reste c'est tout simplement la traduction algorithmique de tes conditions pour avoir une année bissextile :
L'année est divisible par 4 (n Mod 4 = 0) donc bissextile UNIQUEMENT si elle n'est pas divisible par 100 (n Mod 100 # 0), SAUF SI elle est divisible par 400 (n Mod 400 = 0)
D'où la condition globale avec OU/ET qui t'a été donnée, bien qu'elle devrait plutôt être écrite dans l'ordre suivant pour optimiser le calcul :
Si (n Mod 4 = 0) ET ((n Mod 100 # 0) OU (n Mod 400 = 0))
" Si (n Mod 4 = 0) ET ((n Mod 100 # 0) OU (n Mod 400 = 0))"
Autrement, ça nous donne:
Si ((n Mod 4 = 0) Et (n Mod 100 # 0)) OU ((n Mod 4 = 0) Et (n Mod 400 = 0))
Au niveau de 2ème instruction : si n Mod 400 = 0 ça nous donne automatiquement n Mod 4 =0,non ? donc, si c'est vrai à quoi sert de répéter ? peut-on mettre seulement
(n Mod 400 = 0) ?
Mais d'un point de vue informatique, il faut savoir que l'on a généralement des coupes-circuit lors des conditions booléennes. C'est à dire que si on a un ET et que la veur de gauche est FAUX alors on ne va même pas essayer de calculer la valeur de droite car on sait que de toute façon FAUX ET autre chose, ce sera toujours FAUX. De même si on a VRAI OU quelque chose, ça donnera toujours vrai.
En faisant on a 3 chances sur 4 d'avoir faux pour (n Mod 4 = 0), donc on ne calculera le reste que dans un cas sur 4. Puis on va regarder (n Mod 100 # 0), qui sera vrai dans 99 cas sur 100, donc on ne calculera (n Mod 400 = 0) que dans 1 cas sur 100.
Alors qu'en faisant qui était proposé dans le corrigé, on évaluera (n Mod 400 = 0) qui sera faux dans 399 cas sur 400, forçant le programme à évaluer (n Mod 100 # 0) qui sera vrai dans 99 cas sur 100, donc au calculera (n Mod 4 = 0) c'est à dire qu'on aura fait dans la plupart des cas les 3 calculs, alors qu'en choisissant un ordre plus malin on aurait pu n'en faire que 1 ou 2.
En moyenne le nombre de calculs seront donc :