Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteProchaine révisionLes deux révisions suivantes | ||
kturtle:kturtle-activites-11 [2020/01/07 19:10] – [Inducteur : analyse de code] crust | kturtle:kturtle-activites-11 [2020/01/09 15:02] – [Situation problème : périmètre ou aire] cyrille | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== La boucle if ====== | ====== La boucle if ====== | ||
- | + | Je suis parti de l' | |
- | A taper mais on est parti de l' | + | |
Ligne 28: | Ligne 27: | ||
}</ | }</ | ||
+ | ==== Premier temps ==== | ||
+ | Après 5 à 6 minutes de réflexion, phase de bilan, de mise au point. Globalement le second code est compris. | ||
+ | Et les retours sont du style "On demande à l' | ||
+ | |||
+ | Le mot SI est donc mis en évidence, on le note au tableau. Et on écris l' | ||
+ | |||
+ | Par contre, le premier code, on tâtonne mais le résultat n'est pas réellement compris. | ||
+ | |||
+ | ==== Second temps ==== | ||
+ | Donc pour le premier code, direction PC, les élèves le tapent et le testent plusieurs avec des valeurs différentes. | ||
+ | |||
+ | C'est plus simple pour eux pour déterminer la finalité de ce code. | ||
+ | |||
+ | On retourne à une phase collectif qui reprend le code ligne par ligne et on réalise ensemble un algorithme de fonctionnement. | ||
+ | |||
+ | ===== Jouons avec les couleurs ===== | ||
+ | |||
+ | //** | ||
+ | Inducteur : Demander de poser la question " | ||
+ | | {{ : | ||
+ | |||
+ | L' | ||
+ | * Tester si la valeur vaut " | ||
+ | * Tester si la valeur vaut " | ||
+ | * Tester si la valeur vaut " | ||
+ | * Tester si la valeur ne correspond ni à " | ||
+ | |||
+ | Proposition de code | ||
+ | <code bash> | ||
+ | |||
+ | $couleur = ask "Rouge (r), Vert (v) ou Bleu (b) ?" | ||
+ | |||
+ | # Test du Rouge | ||
+ | if ($couleur == " | ||
+ | pencolor 255,0,0 | ||
+ | } | ||
+ | |||
+ | # Test du Vert | ||
+ | if ($couleur == " | ||
+ | pencolor 0,255,0 | ||
+ | } | ||
+ | |||
+ | # Test du Bleu | ||
+ | if ($couleur == " | ||
+ | pencolor 0,0,255 | ||
+ | } | ||
+ | |||
+ | repeat 4 { | ||
+ | forward 40 | ||
+ | turnright 90 | ||
+ | }</ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Attention le contenu des variables est sensible à la casse. C'est à dire que " | ||
+ | Il faudra donc tester les deux si l'on veut que le programme est une batterie de tests exhaustive. | ||
+ | </ | ||
+ | |||
+ | ===== L' | ||
+ | Rebondissons sur ce qui a été dit en dernier : pour le rouge, on va tester non seulement le " | ||
+ | |||
+ | L' | ||
+ | |||
+ | <code bash># Test du Rouge minuscule | ||
+ | if ($couleur == " | ||
+ | pencolor 255,0,0 | ||
+ | } | ||
+ | # Test du Rouge majuscule | ||
+ | if ($couleur == " | ||
+ | pencolor 255,0,0 | ||
+ | }</ | ||
+ | |||
+ | Faire réfléchir les élèves à un moyen de proposer un code plus simple, moins chargé, optimisé. | ||
+ | Style "// | ||
+ | |||
+ | On présente alors l' | ||
+ | |||
+ | Ce qui donne | ||
+ | |||
+ | <code bash># Test du Rouge | ||
+ | if ($couleur == " | ||
+ | pencolor 255,0,0 | ||
+ | }</ | ||
+ | |||
+ | Et les deux séquences de test se retrouve inscrites en une seule séquence. | ||
+ | |||
+ | Donc le programme final | ||
+ | <code bash> | ||
+ | reset | ||
+ | |||
+ | $couleur = ask " | ||
+ | |||
+ | # Test du Rouge | ||
+ | if ($couleur == " | ||
+ | pencolor 255,0,0 | ||
+ | } | ||
+ | |||
+ | # Test du Vert | ||
+ | if ($couleur == " | ||
+ | pencolor 0,255,0 | ||
+ | } | ||
+ | |||
+ | # Test du Bleu | ||
+ | if ($couleur == " | ||
+ | pencolor 0,0,255 | ||
+ | } | ||
+ | |||
+ | repeat 4 { | ||
+ | forward 40 | ||
+ | turnright 90 | ||
+ | } | ||
+ | </ | ||
+ | ===== Allez plus loin ===== | ||
+ | |||
+ | * Allez plus loin, en demandant de tester aussi avec les mots " | ||
+ | |||
+ | * Varier le programme avec une gamme de couleur plus importante | ||
+ | |||
+ | ===== Et le else ??? ===== | ||
+ | |||
+ | // | ||
+ | |||
+ | * Si figure est un carré -> on trace un carré | ||
+ | |||
+ | * Si figure est un triangle -> on trace un carré | ||
+ | |||
+ | * Si figure est un rectangle -> on trace un carré | ||
+ | |||
+ | * SI figure est un losange -> on trace un losange | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Les programmes s' | ||
+ | </ | ||
+ | |||
+ | Vu le bagage qu'il possède, cela ne devrait pas représenter de réels soucis de codage. Sans doute quelques erreurs de syntaxe. | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | L' | ||
+ | <code bash>{ ... | ||
+ | bloc d' | ||
+ | # TEST | ||
+ | { | ||
+ | .... | ||
+ | bloc d' | ||
+ | .... | ||
+ | } | ||
+ | }</ | ||
+ | </ | ||
+ | |||
+ | |||
+ | Proposition de code | ||
+ | <code bash> | ||
+ | |||
+ | $figure = ask " | ||
+ | |||
+ | # Test du carré | ||
+ | if ($figure == " | ||
+ | repeat 4 { | ||
+ | forward 40 | ||
+ | turnright 90 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | # Test du triangle | ||
+ | if ($figure == " | ||
+ | repeat 3 { | ||
+ | forward 40 | ||
+ | turnright 120 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | # Test du losange | ||
+ | if ($figure == " | ||
+ | repeat 6 { | ||
+ | forward 40 | ||
+ | turnright 60 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | # Test du rectangle | ||
+ | if ($figure == " | ||
+ | repeat 4 { | ||
+ | forward 40 | ||
+ | turnright 90 | ||
+ | forward 80 | ||
+ | turnright 90 | ||
+ | } | ||
+ | }</ | ||
+ | |||
+ | Bien sûr lors de l' | ||
+ | |||
+ | Dans ce cas, la variante ne passera pas les tests et le programme ne fera rien. | ||
+ | Sous doute l' | ||
+ | |||
+ | | {{ : | ||
+ | |||
+ | Le programme va donc devoir être amélioré avec quelques lignes basiques de **gestion de l' | ||
+ | |||
+ | Donc, on va réaliser les tests nécessaires et gérer tout ce qui ne correspond pas à ces tests. | ||
+ | |||
+ | **Si** (test) **ALORS** (instruction) | ||
+ | **Si** (autre test) **ALORS** (autre instruction) | ||
+ | ... | ||
+ | **Si** (autre test) **ALORS** (autre instruction) | ||
+ | |||
+ | Et enfin | ||
+ | |||
+ | **__SINON__** **ALORS** (instruction) | ||
+ | |||
+ | On introduit alors le mot clef, l' | ||
+ | |||
+ | |{{ : | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | ====== Situation problème : périmètre ou aire ====== | ||
+ | |||
+ | On va réinvestir le tout dans une situation de recherche simple. | ||
+ | |||
+ | Demander de coder un petit script permettant de calculer soit l'aire soit le périmètre d'un carré. | ||
+ | |||
+ | Faire le point avec les élèves sur les étapes à réaliser | ||
+ | |||
+ | * ** Poser la question : périmètre ? aire ?** | ||
+ | * ** Tester la réponse** | ||
+ | * ** En fonction de la réponse, appliquer la formule de l'aire ou du périmètre** | ||
+ | * ** Afficher la réponse dans la bonne unité** | ||
+ | * ** Éventuellement, | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Il est recommander avant cette séance de raviver les connaissances nécessaires à la compréhension de cette problématique. | ||
+ | Rappeler ce qu'est un **périmètre** et une **aire** (compétence de géométrie de cycle 3) et **les unités associées**. | ||
+ | Au besoin, retravailler sur des feuilles 5 X 5 et faisant surligner le périmètre et colorier les aires. Puis avec des carrés de dimensions différentes avec lesquels on recouvre des parties de la classe : le bureau, le tableau (parfois en utilisant un encadrement si ces recouvrements ne tombent pas justes). | ||
+ | </ | ||
+ | |||
+ | Proposition de code | ||
+ | <code bash> | ||
+ | spritehide | ||
+ | |||
+ | $var = ask "Taper ' | ||
+ | $cote = ask " | ||
+ | |||
+ | # Si p , on calcule le périmètre | ||
+ | if ($var == " | ||
+ | $reponse = 4 * $cote | ||
+ | $message = "Le périmètre est de " + $reponse + " cm." | ||
+ | # Sinon l'aire | ||
+ | } else { | ||
+ | $reponse = $cote * $cote | ||
+ | $message = "Le périmètre est de " + $reponse + " cm2." | ||
+ | } | ||
+ | |||
+ | # On affiche la réponse | ||
+ | go 25,100 | ||
+ | print $message | ||
+ | |||
+ | |||
+ | # On dessine le carré | ||
+ | go 50,350 | ||
+ | repeat 4 { | ||
+ | forward $cote | ||
+ | turnright 90 | ||
+ | }</ | ||
===== Navigation ===== | ===== Navigation ===== | ||
^ page précédente | ^ page précédente | ||
- | | [[kturtle: | + | | [[kturtle: |