Année bissextile
Résolu/Fermé
A voir également:
- Année bissextile
- Convertir trimestre en année - Forum Excel
- Excel convertir nombre en années, mois, jours ✓ - Forum Excel
- Cette photo n’a pas été prise cette année. trouvez la date, l'heure et avec quel modèle d'appareil photo elle a été prise. ✓ - Forum Graphisme
- Chanteur anglais annee 80 - Forum Musique / Radio / Clip
- Chanson i love you année 70 ✓ - Forum Musique / Radio / Clip
1 réponse
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
19 nov. 2016 à 11:58
19 nov. 2016 à 11:58
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))
19 nov. 2016 à 15:19
" 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) ?
19 nov. 2016 à 15:46
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 :
20 nov. 2016 à 12:31