Closed lbeeckmans closed 10 years ago
La solution donnée par Frédéric est correcte :
module max3Nombres()
n1, n2, n3, max : réels
lire n1, n2, n3
selon que
n1 > n2 ET n1 > n3 : afficher n1
n2 ≥ n1 ET n2 ≥ n3 : afficher n2 // n1 n'est pas strictement le max, donc n2 ou n3 est max
autres : afficher n3 // on mettre autre dans cette partie
fin selon
Evidemment, ce n'est pas si simple de montrer ou de comprendre que les différentes conditions ne se chevauchent pas. On touche ici à une matière du cours de math (qui ne sera vue que d'ici quelques semaines) concernant les domaines de vérité des conditions. Et encore, les conditions étudiées en math n'ont en général qu'une seule variable ce qui permet de visualiser facilement les différentes zones sur une axe réel. Avec 2 variables, il faudrait regarder si les différentes zones d'un plan sont couvertes, et ici avec 3 variables n1, n2, n3, il faudrait travailler en 3 dimensions... Je conseillerais d'utiliser le selon que avec condition dans des cas très clairs (style a>b, a=b, a<b), sinon de recourir au plus classique si - sinon - finsi.
Voila un exemple typique (ex. 5 des solutions d'Amine)
module signeNombre() n1: réel lire n1 selon que n1 > 0 : afficher n1, " est positif " n1 = 0 : afficher n1, " est nul " autre: afficher n1, " est négatif " // idem que n1 < 0 fin selon que fin module
Personnellement, je mettrais dans ce cas la 3ème condition plutôt que autres :
module signeNombre() n1: réel lire n1 selon que n1 > 0 : afficher n1, " est positif " n1 = 0 : afficher n1, " est nul " n1 < 0 : afficher n1, " est négatif " fin selon que fin module
c'est clair, on voit au 1er coup d'oeil que tous les cas sont couverts, et il ne faut pas réfléchir à la signification de "autre" en lisant le code.
Autres rmq pour les solutions :
Ex.7 : la 3ème condition est évidemment delta < 0
Ex.8 : on peut racourcir le code ainsi (avec une petite application des modulo)
module plusUneMinute() heure, minute : entiers lire heure, minute minute <-- (minute + 1) MOD 60 si minute = 0 alors heure <-- (heure + 1) MOD 24 finsi afficher heure, " h ", minute, " m " fin module
Ex.13 : attention, le MOD ne donne jamais 7, mais 0 dans ce cas. Il faut mettre dans la liste des conditions du selon que :
0 : afficher "jeudi"
Même problème dans l'ex.14.
La version avec énumération est-elle correcte? Je métonne de afficher Jour(laPosition)... cela fonctionne-t-il comme un tableau?!?
Ex.15 : au vu de la première solution, je pense qu'on devra reformuler la question ainsi :
Écrire un algorithme qui pour un entier n donné, affiche la valeur de cos(n * π/2), mais sans utiliser la fonction cosinus!
Ex. 16 : trop compliqué! On ne doit travailler qu'avec le jour (pas mois ni année).
Les étudiants ont proposé à mon cours les solutions de HAL et SRV avec des >= dès le premier cas. Nous avons discuté les différences. Pour le signe, nous verrons au prochain cours. C'est leur devoir. J'apprécie la seconde solution de LBE car elle est AMHA la plus facile à comprendre.
Pas trop de remarques à faire à tes solutions. Par rapport à ce qui a été dit, j'ajouterais juste :
La solution que je préfère, de loin car la plus simple et la plis élégante, pas de variable à devoir déclarer, est afficher (((année MOD 4 = 0) ET (année MOD 100 ≠ 0)) OU (année MOD 400 = 0) )
Je rajoute les parenthèses (parfois non obligatoires) pour que tout soit clair du premier coup d'oeil (KISS)
Voilà, je désire soumettre à votre critique constructive mes solutions du chapitre 4. Comme vous le savez j'ai 3 groupes cette année et j'ai opté pour faire un suivis individuel de chaque étudiant en demandant de faire tous les exercices et me les soumettre. Donc sur mon eDistri il y a la liste des étudiants, l'état d'avancement dans les exercices pour chaque étudiant et le point obtenu à la mini-interro. C'est très fatiguant mais j'aimerai voir si ça apporte ses fruits. Je ne fait pas de solution au tableau mais je note plutôt les choses à ne pas faire ( instructions bizarres inventées par les étudiants), des exemples pour comprendre l'énoncé et son objectif .... Une fois que je m'assure que tout les étudiants ont fini ou quasi je parcours en ~ 10 minutes mes solutions afin de montrer les diverses manières de faire avant de passer au chapitre suivant.
J'aimerai donc vous soumettre mes solutions du chapitre 4. Dites moi se que vous pensez des solutions proposées et de la démarche que j'entreprends, si erreurs (typo ou autres) merci de me le signaler.
Question : pour le module max3Nombre, j'ai un doute sur ça réalisation avec un selon que, étant donné qu'on dit dans le cours que les possibilités doivent être différentes donc pas de chevauchement non plus :
je pense donc que l'usage de opérateur ≥ ne doit pas être mis dans tous les choix. Comment faire alors ? pour l'exemple : 5,5,5 toutes les branches sont à vrai ! !
module max3Nombres()
n1, n2, n3, max : réels
lire n1, n2, n3
selon que
fin selon que
fin module