Sixième, programme français à Montréal • Exercices corrigés
Exercices corrigés : algorithmique et programmation (Sixième)
Ces quinze exercices corrigés couvrent l'algorithmique et la programmation avec Scratch en sixième : se repérer sur un quadrillage par un couple de coordonnées, suivre un script pas à pas, la boucle répéter et la boucle répéter jusqu'à, les variables avec les blocs mettre à et ajouter à, et l'instruction conditionnelle si alors sinon. Ils s'adressent aux élèves du Lycée Marie de France et du Collège Stanislas à Montréal.
À la fin de la série, vous savez lire les coordonnées d'un point (exercice 1), donner la position du lutin après chaque instruction (exercice 2), tracer un carré ou un triangle avec la boucle répéter (exercice 3), dire quand l'ordre des instructions change le résultat (exercice 4), suivre la valeur d'une variable (exercices 5 et 9), compter les tours d'une boucle répéter jusqu'à (exercice 13), choisir la bonne branche d'un test si alors sinon (exercice 10) et remonter un programme de calcul (exercice 11).
Les situations sont celles d'un jeu ou d'une machine : un robot qui nettoie une pièce, le compteur de points d'un jeu, la borne de tarif d'un musée, un déplacement codé par des flèches, un distributeur qui rend la monnaie et le jeu du plus ou moins.
Le fil de la série : la machine exécute CE QUI EST ÉCRIT, pas ce qu'on voulait écrire. Toute question sur un script se répond en avançant ligne par ligne et en tenant à jour trois informations, la position du lutin, sa direction et la valeur de chaque variable. Lire un script « en gros » ne marche jamais. Trois pièges reviennent et le corrigé les désigne à chaque fois : le bloc alleraˋ donne une position alors que avancer donne un déplacement ; tourner change la direction sans bouger le lutin d'une case ; et mettrescoreaˋscore+4 n'est pas une égalité mathématique mais un rangement en mémoire (exercices 5 et 8).
Série autocorrigéeTape tes réponses et vérifie-les question par question : la page te dit juste ou faux avant d'ouvrir la correction. Avec un compte, chaque bonne réponse du premier coup rapporte des points, et tes réponses justes restent remplies quand tu reviens.
•Un script s'exécute de haut en bas, une instruction après l'autre.
•Sur un quadrillage, un point se repère par un COUPLE de nombres : d'abord le déplacement horizontal, ensuite le vertical.
•alleraˋx:ay:b place le lutin au point (a;b), quelle que soit sa position d'avant : c'est une position, pas un déplacement.
•ajouter3aˋy est au contraire un déplacement : la nouvelle ordonnée est l'ancienne augmentée de 3.
•avancerdencases déplace le lutin DANS SA DIRECTION ACTUELLE ; tourner le fait pivoter sur place, sans le déplacer.
•reˊpeˊternfois exécute n fois de suite le bloc placé à l'intérieur.
•Pour fermer un polygone régulier à n côtés, le lutin tourne à chaque sommet de n360∘ : 90∘ pour le carré, 120∘ pour le triangle équilatéral.
•Une variable est une case mémoire. mettrevaˋ… efface l'ancienne valeur, ajouter…aˋv la conserve et la modifie.
•si…alors…sinon… n'exécute qu'UNE des deux branches, jamais les deux.
•Deux scripts formés des mêmes blocs dans un ordre différent ne donnent pas forcément le même résultat.
Partie A : les bases (/50)
Exercice 1 : Se repérer sur un quadrillage
La scène d'un jeu est un quadrillage. Chaque point y est désigné par un COUPLE de deux nombres (x;y) : le premier se lit sur l'axe horizontal, le second sur l'axe vertical. L'ordre des deux nombres n'est jamais interchangeable.
1) Donner les coordonnées des points A, B, C et D.
2) Que représente le premier nombre du couple ? Et le second ?
3) Où se trouve le point de coordonnées (0;0) ? Comment s'appelle-t-il ?
4) Un lutin se trouve au point (6;0). Décrire sa position sur la scène.
5) On place un point E de coordonnées (3;5). Est-il à gauche ou à droite de C ? Plus haut ou plus bas que B ?
6) Deux des quatre points ont la même abscisse. Lesquels ? Que peut-on dire du segment qui les joint ?
Voir la correction
Réponses
1)A(2 ; 6), B(2 ; 3), C(8 ; 7), D(5 ; 1)
2)Abscisse, puis ordonnée
3)L'origine
4)Sur l'axe horizontal
5)À gauche de C ; plus haut que B
6)A et B : segment vertical de 3
1)
On lit chaque point en descendant vers l'axe horizontal, puis en allant vers l'axe vertical : A(2;6), B(2;3), C(8;7) et D(5;1). On écrit toujours les deux nombres entre parenthèses, séparés par un point-virgule, dans l'ordre horizontal puis vertical.
2)
Le premier nombre, appelé ABSCISSE, indique de combien de cases on se déplace vers la droite en partant de l'origine. Le second, appelé ORDONNÉE, indique de combien de cases on monte ensuite. Inverser les deux donne un autre point : (2;6) et (6;2) ne sont pas au même endroit, ce qui se voit immédiatement sur le quadrillage.
3)
Le point (0;0) est le coin en bas à gauche, là où les deux axes se croisent. On l'appelle l'ORIGINE du repère : c'est le point à partir duquel tous les autres sont décrits, et ses deux coordonnées sont nulles parce qu'on ne se déplace ni horizontalement ni verticalement pour l'atteindre.
4)
Le point (6;0) a une ordonnée nulle : le lutin ne monte pas du tout, il se trouve donc SUR l'axe horizontal, à 6 cases à droite de l'origine. De la même façon, tous les points de la forme (0;y) sont sur l'axe vertical.
5)
Le point E(3;5) a pour abscisse 3, plus petite que celle de C qui vaut 8 : il est donc à GAUCHE de C. Son ordonnée vaut 5, plus grande que celle de B qui vaut 3 : il est donc PLUS HAUT que B. La position horizontale se juge sur la première coordonnée, la position verticale sur la seconde, et jamais les deux en même temps.
6)
Les points A(2;6) et B(2;3) ont la même abscisse, 2. Ils sont donc sur la même colonne du quadrillage, et le segment [AB] est VERTICAL. Sa longueur se lit sur la différence des ordonnées : 6−3=3 cases. Deux points de même ordonnée donneraient au contraire un segment horizontal.
Coche ici les exercices faits ou à revoir : un compte gratuit, sans mot de passe, retient tes coches et tes réponses justes d'une visite à l'autre, te dit quel chapitre attaquer ensuite et te permet de demander l'exercice qui te manque. Crée ton espace, un courriel suffit.
Exercice 2 : Suivre un script pas à pas
Le lutin part du point marqué sur le quadrillage. Le script s'exécute de haut en bas, et la seule méthode fiable consiste à noter la position du lutin APRÈS chaque instruction, sans jamais sauter de ligne.
Scratch
quand le drapeau vert est cliqué
aller à x: 1 y: 1
s'orienter vers la droite
avancer de 4 cases
ajouter 3 à y
avancer de 2 cases
1) Quelles sont les coordonnées du lutin juste après le bloc alleraˋx:1y:1 ?
2) Et juste après avancerde4cases ?
3) Et juste après ajouter3aˋy ?
4) Quelles sont les coordonnées d'arrivée ?
5) On échange les deux dernières instructions. Le point d'arrivée change-t-il ? Justifier.
6) On remplace s′orienterversladroite par s′orienterverslehaut. Quelles sont alors les coordonnées d'arrivée ?
Voir la correction
Réponses
1)(1 ; 1)
2)(5 ; 1)
3)(5 ; 4)
4)(7 ; 4)
5)Non : déplacements indépendants
6)(1 ; 10)
1)
Le lutin est en (1;1). Le bloc alleraˋ ne déplace pas le lutin d'une certaine quantité : il le place directement au point indiqué, quelle que soit sa position précédente. C'est une POSITION, à ne pas confondre avec un déplacement.
2)
Le lutin regarde vers la droite : avancer augmente son abscisse et laisse son ordonnée inchangée. Il passe de (1;1) à (1+4;1), c'est-à-dire (5;1).
3)
Le bloc ajouter3aˋy ne touche qu'à l'ordonnée : 1+3=4. Le lutin est donc en (5;4). Ce bloc est un déplacement vertical, et il ne modifie pas la direction dans laquelle le lutin regarde.
4)
Le lutin regarde toujours vers la droite, car aucun bloc tourner n'est intervenu. Il avance donc horizontalement de 2 cases et arrive en (5+2;4), c'est-à-dire (7;4). Le tableau complet est : (1;1), puis (5;1), puis (5;4), puis (7;4).
5)
NON, le point d'arrivée ne change pas. En échangeant, on obtient (5;1), puis (7;1) après avancerde2cases, puis (7;4) après ajouter3aˋy : c'est bien le même point. La raison est que ces deux instructions sont deux déplacements indépendants, l'un horizontal, l'autre vertical, et que l'ordre de deux additions ne change pas la somme. Attention, cette conclusion ne vaut QUE parce que la direction du lutin reste la même entre les deux.
6)
Le lutin regarde vers le haut, donc avancer modifie maintenant l'ordonnée. Départ (1;1) ; après avancerde4cases il est en (1;5) ; après ajouter3aˋy il est en (1;8) ; après avancerde2cases il est en (1;10), tout en haut du quadrillage. Une seule instruction a changé et le point d'arrivée passe de (7;4) à (1;10) : la direction du lutin est donc une information à tenir à jour au même titre que sa position.
Exercice 3 : La boucle répéter et le tracé du carré
Le bloc reˊpeˊter évite de recopier plusieurs fois les mêmes instructions. Dans le script ci-dessous, le lutin laisse une trace derrière lui et part orienté vers la droite.
Scratch
quand le drapeau vert est cliqué
stylo en position d'écriture
répéter 4 fois
avancer de 5 cases
tourner de 90 degrés vers la droite
1) Combien d'instructions le lutin exécute-t-il à l'intérieur de la boucle, en tout ?
2) Quelle figure trace-t-il ? Donner ses dimensions.
3) Où se trouve le lutin à la fin, et dans quelle direction regarde-t-il ?
4) Quelle est la longueur totale du trait tracé ?
5) On remplace reˊpeˊter4fois par reˊpeˊter3fois et 90 par 120. Quelle figure obtient-on ?
6) On garde reˊpeˊter4fois mais on met 60 degrés. La figure se referme-t-elle ?
Voir la correction
Réponses
1)8 instructions
2)Carré de 5 cases
3)Au départ, vers la droite
4)20 cases
5)Triangle équilatéral
6)Non : 240° ; il faut 6 répétitions
1)
La boucle contient deux instructions et elle est répétée 4 fois : le lutin exécute donc 4×2=8 instructions. Le bloc reˊpeˊter ne fait rien d'autre que recopier ces deux lignes quatre fois de suite ; le script serait identique, mais quatre fois plus long à écrire.
2)
Il trace un CARRÉ de 5 cases de côté. À chaque tour, le lutin trace un côté de 5 cases puis pivote d'un quart de tour : quatre côtés égaux et quatre angles droits, c'est bien la définition du carré. Attention à ne pas confondre le nombre de répétitions, 4, avec la longueur du côté, 5 : ce sont deux nombres qui jouent des rôles différents.
3)
Le lutin revient exactement à son point de départ et regarde de nouveau vers la droite. En effet, il a tourné quatre fois de 90∘, soit 4×90=360∘ : un tour complet le ramène à sa direction initiale. C'est ce retour au point de départ qui prouve que la figure est bien fermée.
4)
Le lutin trace 4 côtés de 5 cases, soit 4×5=20 cases de trait. C'est le PÉRIMÈTRE du carré. Le nombre de cases situées à l'intérieur, lui, serait 5×5=25 : périmètre et aire ne se confondent pas.
5)
Avec 3 répétitions et un pivot de 120∘, le lutin trace trois côtés égaux et tourne en tout de 3×120=360∘ : la figure se referme, c'est un TRIANGLE ÉQUILATÉRAL de 5 cases de côté. La règle générale est que, pour un polygone régulier à n côtés, l'angle de rotation vaut 360÷n degrés.
6)
NON, la figure ne se referme pas. Le lutin ne tourne que de 4×60=240∘, ce qui est moins qu'un tour complet : il termine son parcours loin de son point de départ, avec une ligne brisée ouverte de quatre segments. Pour refermer avec des pivots de 60∘, il faudrait 6 répétitions, puisque 6×60=360, et l'on obtiendrait un hexagone régulier.
Exercice 4 : L'ordre des instructions change le résultat
Les deux scripts ci-dessous contiennent exactement les mêmes blocs, mais rangés dans un ordre différent. Dans les deux cas, le lutin part du point (1;1) et regarde vers la droite.
Scratch
SCRIPT A SCRIPT B
avancer de 3 cases avancer de 2 cases
tourner de 90 vers tourner de 90 vers
la gauche la gauche
avancer de 2 cases avancer de 3 cases
1) Quel est le point d'arrivée du script A ?
2) Quel est le point d'arrivée du script B ?
3) Les deux scripts contiennent les mêmes blocs. Pourquoi les résultats sont-ils différents ?
4) On remplace les déplacements par ajouter3aˋx et ajouter2aˋy. Leur ordre change-t-il le point d'arrivée ?
5) Formuler la règle qui se dégage des questions 3 et 4.
6) À la fin du script A, on ajoute tournerde90versladroite. Le point d'arrivée change-t-il ?
Voir la correction
Réponses
1)(4 ; 3)
2)(3 ; 4)
3)Le pivot sépare les déplacements
4)Non
5)Instructions indépendantes échangeables
6)Non : il pivote sur place
1)
Le lutin part de (1;1) vers la droite. Il avance de 3 cases et arrive en (4;1). Il tourne alors vers la gauche : il regarde désormais vers le haut. Il avance de 2 cases, ce qui augmente cette fois son ordonnée : il arrive en (4;3).
2)
Le lutin avance d'abord de 2 cases vers la droite et arrive en (3;1). Il tourne vers la gauche, donc vers le haut, puis avance de 3 cases : il arrive en (3;4). Les deux scripts se terminent donc à des endroits différents, (4;3) pour A et (3;4) pour B.
3)
Parce que le bloc tourner est placé ENTRE les deux déplacements. Le déplacement effectué avant le pivot est horizontal, celui effectué après est vertical. Échanger les deux nombres revient donc à échanger ce qui va à l'horizontale et ce qui va à la verticale, ce qui donne un autre point. Le résultat d'un script ne dépend pas seulement des blocs utilisés, mais de leur ordre.
4)
NON, l'ordre n'a alors aucune importance. Avec ajouter3aˋx puis ajouter2aˋy, on passe de (1;1) à (4;1) puis à (4;3). Dans l'autre ordre, on passe de (1;1) à (1;3) puis à (4;3) : c'est le même point d'arrivée. Ces deux blocs agissent en effet sur des coordonnées différentes, et aucun des deux ne modifie ce que fait l'autre.
5)
Deux instructions peuvent être échangées sans conséquence lorsqu'elles sont INDÉPENDANTES, c'est-à-dire lorsque aucune des deux ne change ce dont l'autre a besoin. Dès qu'une instruction modifie la DIRECTION du lutin, elle change le sens de tous les avancer qui la suivent : elle n'est plus indépendante, et son ordre devient décisif.
6)
NON, le point d'arrivée reste (4;3). Le bloc tourner fait pivoter le lutin sur place : il change sa direction, pas sa position. Ce pivot final n'aurait d'effet que sur les instructions SUIVANTES, et il n'y en a aucune. C'est la raison pour laquelle il faut suivre deux informations différentes, la position et la direction : une instruction peut modifier l'une sans toucher à l'autre.
Exercice 5 : Les variables : mettre à et ajouter à
Une variable est une case mémoire qui porte un nom et contient une valeur à la fois. Deux blocs la modifient : mettre…aˋ, qui efface l'ancienne valeur, et ajouter…aˋ, qui la conserve et la modifie.
Scratch
quand le drapeau vert est cliqué
mettre score à 0
ajouter 5 à score
ajouter 5 à score
mettre score à 20
ajouter 3 à score
1) Donner la valeur de score après chacune des cinq instructions.
2) Quelle est la différence entre mettrescoreaˋ20 et ajouter20aˋscore ?
3) On ajoute à la fin le bloc mettrescoreaˋscore+4. Que vaut alors score ?
4) Cette dernière ligne est-elle une équation ? Que signifierait-elle en mathématiques ?
5) On échange les deux dernières instructions du script initial. Quelle est la valeur finale ?
6) On remplace tout le script par mettrescoreaˋ0 suivi de reˊpeˊter6fois:ajouter5aˋscore. Quelle est la valeur finale ?
Voir la correction
Réponses
1)0, 5, 10, 20, 23
2)Mettre efface, ajouter conserve
3)27
4)Non : un rangement
5)20
6)30
1)
On suit le script ligne par ligne : après mettrescoreaˋ0, la variable vaut 0 ; après le premier ajouter5, elle vaut 5 ; après le second, 10 ; après mettrescoreaˋ20, elle vaut 20, car cette instruction EFFACE tout ce qui précède ; après ajouter3, elle vaut 23. La valeur finale est donc 23.
2)
mettrescoreaˋ20 range 20 dans la case, quelle que soit la valeur qui s'y trouvait : le passé est perdu. ajouter20aˋscore conserve la valeur présente et lui ajoute 20. Ici, à partir de 10, le premier bloc donne 20 et le second donnerait 30. Confondre les deux est l'erreur la plus fréquente sur les variables.
3)
Le bloc se lit de DROITE À GAUCHE : on calcule d'abord score+4 avec la valeur actuelle, soit 23+4=27, puis on range ce résultat dans score. La variable vaut donc 27.
4)
NON, ce n'est pas une équation. En mathématiques, l'égalité « s=s+4 » n'a aucune solution, puisqu'un nombre ne peut pas être égal à lui-même augmenté de 4. En programmation, le symbole ne signifie pas « est égal à » mais « reçoit la valeur de » : il désigne une ACTION, un rangement en mémoire, et non une affirmation. C'est le même mot d'apparence pour deux idées très différentes.
5)
Le script devient : mettreaˋ0, ajouter5, ajouter5, ajouter3, mettreaˋ20. Les valeurs successives sont 0, 5, 10, 13, puis 20. La valeur finale est 20 au lieu de 23 : les trois premiers ajouts ont été effacés par le mettreaˋ final, et tout le travail du début a été perdu.
6)
La boucle ajoute 5 à six reprises en partant de 0 : la valeur finale est 6×5=30. On peut suivre les valeurs une à une, 5, 10, 15, 20, 25, 30, ou bien reconnaître qu'ajouter 6 fois le même nombre revient à le multiplier par 6. La boucle transforme ainsi une répétition d'additions en une multiplication, et c'est exactement ce qu'un ordinateur fait de mieux : répéter sans se lasser.
Partie B : problèmes et raisonnement (/50)
Exercice 6 : Problème : tracer un rectangle, puis un escalier
Le lutin part orienté vers la droite, stylo baissé. Le script ci-dessous répète deux fois un groupe de quatre instructions.
Scratch
quand le drapeau vert est cliqué
stylo en position d'écriture
répéter 2 fois
avancer de 6 cases
tourner de 90 degrés vers la droite
avancer de 3 cases
tourner de 90 degrés vers la droite
1) Quelle figure le lutin trace-t-il ? Donner ses dimensions.
2) Combien d'instructions exécute-t-il à l'intérieur de la boucle ?
3) Quelle est la longueur totale du trait tracé ?
4) Combien de cases la figure entoure-t-elle ? Comparer avec la réponse précédente et commenter.
5) Écrire un script qui trace un escalier de 4 marches, chaque marche mesurant 2 cases en largeur et 2 cases en hauteur.
6) Quelle est la longueur totale du trait tracé pour cet escalier ?
Voir la correction
Réponses
1)Rectangle de 6 sur 3
2)8 instructions
3)18 cases
4)18 cases : coïncidence
5)Avancer 2, gauche, avancer 2, droite
6)16 cases
1)
Le lutin trace un RECTANGLE de 6 cases de longueur et 3 cases de largeur. À chaque tour de boucle, il trace un côté long, pivote, trace un côté court, pivote encore : deux tours suffisent donc à faire les quatre côtés. Après les quatre pivots de 90∘, soit 360∘ en tout, il retrouve sa direction de départ.
2)
La boucle contient 4 instructions et elle est répétée 2 fois : le lutin exécute 2×4=8 instructions. Le script écrit sans boucle compterait ces mêmes huit lignes : la boucle ne réduit pas le travail de la machine, seulement celui de la personne qui écrit.
3)
Le trait suit le contour, c'est-à-dire le PÉRIMÈTRE : 6+3+6+3=18 cases, ou plus rapidement 2×(6+3)=18 cases.
4)
La figure entoure 6×3=18 cases, ce qui est son AIRE. Les deux nombres valent 18, et c'est une coïncidence : ils ne mesurent pas la même chose et ne s'expriment pas dans la même unité, l'un en cases de trait, l'autre en cases de surface. Un rectangle de 8 sur 2 le montre bien : son périmètre vaut 20 et son aire 16.
5)
Chaque marche est un déplacement vers la droite suivi d'un déplacement vers le haut, ce qui demande deux pivots opposés : reˊpeˊter4fois contenant avancerde2cases, tournerde90verslagauche, avancerde2cases, tournerde90versladroite. Les deux pivots sont indispensables et vont en sens contraire : sans le second, le lutin continuerait à tourner dans le même sens et dessinerait un carré au lieu de monter en escalier.
6)
Chaque marche trace 2+2=4 cases de trait, et il y a 4 marches : le trait total mesure 4×4=16 cases. On remarque que le lutin arrive en 8 cases à droite et 8 cases au-dessus de son point de départ : le trajet réel est plus long que le déplacement en ligne droite, ce qui est toujours le cas dès qu'on ne va pas tout droit.
Exercice 7 : Problème : le robot qui nettoie la pièce
Un robot nettoie une pièce rectangulaire de 8 cases sur 5. Il part de la case du coin en bas à gauche, nettoie la case où il se trouve, avance en ligne droite jusqu'au bord, monte d'une case, repart en sens inverse, et ainsi de suite jusqu'en haut.
1) Combien de cases la pièce compte-t-elle ?
2) Combien de cases le robot nettoie-t-il sur une ligne ? Combien de lignes doit-il parcourir ?
3) Combien de déplacements d'une case le robot effectue-t-il en tout ?
4) Il met 3 secondes pour nettoyer une case. Combien de temps dure le nettoyage complet ?
5) Sa batterie faiblit et il ne nettoie plus qu'une ligne sur deux, en commençant par la première. Quelle part de la pièce est nettoyée ?
6) Quelle instruction faut-il répéter, et combien de fois, pour que le robot parcoure une ligne entière ?
Voir la correction
Réponses
1)40 cases
2)8 cases, 5 lignes
3)39 déplacements
4)120 s = 2 min
5)24 cases : 53
6)Répéter 7 fois
1)
La pièce est un rectangle de 8 cases sur 5 : elle compte 8×5=40 cases. On multiplie le nombre de colonnes par le nombre de lignes, exactement comme pour une aire en cases.
2)
Une ligne compte 8 cases, et il y a 5 lignes à parcourir. Le robot nettoie donc 5 fois 8 cases, soit bien les 40 cases de la question 1 : les deux façons de compter doivent coïncider.
3)
Sur une ligne, le robot nettoie 8 cases mais ne se déplace que 7 fois, car la première case est celle où il commence. Cela fait 5×7=35 déplacements horizontaux. À cela s'ajoutent les montées d'une ligne à la suivante : il y en a 4, et non 5, puisqu'il n'a pas à monter après la dernière ligne. Le total est 35+4=39 déplacements. Ce décalage de un, entre le nombre de cases et le nombre de déplacements, est le piège classique de tous les problèmes de parcours.
4)
Il nettoie 40 cases à raison de 3 secondes chacune, soit 40×3=120 secondes. Comme 120=2×60, cela fait exactement 2 minutes. On convertit toujours le résultat dans une unité parlante : 120 secondes est correct, mais 2 minutes se comprend mieux.
5)
En commençant par la première ligne et en sautant une ligne sur deux, il nettoie les lignes 1, 3 et 5, c'est-à-dire 3 lignes sur 5. Cela représente 3×8=24 cases sur 40, soit une part de 4024=53, autrement dit 60 pour cent de la pièce. Attention à ne pas répondre « la moitié » : une ligne sur deux ne fait pas la moitié des lignes quand leur nombre est impair.
6)
Il faut répéter l'instruction avancerde1case, et la répéter 7 fois, pas 8. On écrit donc reˊpeˊter7fois:avancerde1case. C'est la même différence qu'à la question 3 : la boucle compte les DÉPLACEMENTS, alors que l'énoncé parle des CASES, et il y a toujours une case de plus que de déplacements sur une ligne.
Exercice 8 : Cinq affirmations à corriger
Chacune des cinq affirmations suivantes est FAUSSE. Dites pourquoi et donnez l'énoncé correct.
1) « Le bloc alleraˋx:4y:2 déplace le lutin de 4 cases vers la droite et de 2 cases vers le haut. »
2) « Le bloc tournerde90degreˊs déplace le lutin d'un quart de case. »
3) « mettrescoreaˋscore+4 est une égalité impossible, donc le bloc provoque une erreur. »
4) « reˊpeˊter4fois(avancerde5,tournerde90) trace un carré de 4 cases de côté. »
5) « Deux scripts formés exactement des mêmes blocs donnent toujours le même résultat. »
Voir la correction
Réponses
1)Une position, pas un déplacement
2)Pivot sur place
3)Aucune erreur : score augmente de 4
4)Carré de 5 cases
5)L'ordre compte
1)
FAUX. Le bloc alleraˋ donne une POSITION absolue : il place le lutin au point (4;2), quel que soit l'endroit d'où il vient. Le bloc qui déplace de 4 cases vers la droite est ajouter4aˋx. Énoncé correct : « le bloc alleraˋx:4y:2 place le lutin au point (4;2) ». Position et déplacement sont deux idées différentes, et c'est la distinction la plus importante du chapitre.
2)
FAUX. tourner fait pivoter le lutin SUR PLACE : sa direction change, sa position ne bouge pas d'un millimètre. Énoncé correct : « le bloc tournerde90degreˊs fait pivoter le lutin d'un quart de tour sans le déplacer ». Ce pivot n'a d'effet que sur les blocs avancer qui viennent après lui.
3)
FAUX. En programmation, ce bloc ne prétend rien : il ORDONNE de calculer score+4 avec la valeur actuelle, puis de ranger le résultat dans score. Si score valait 23, il vaut ensuite 27, et aucune erreur ne se produit. Énoncé correct : « ce bloc augmente la valeur de score de 4 ». Ce qui est impossible, c'est l'équation mathématique s=s+4, et c'est justement pourquoi le langage utilise un mot d'action, mettre à.
4)
FAUX, les deux nombres ont été échangés. Le 4 est le nombre de RÉPÉTITIONS, c'est-à-dire le nombre de côtés, et le 5 est la longueur de chaque côté. Énoncé correct : « ce script trace un carré de 5 cases de côté ». Un carré de 4 cases de côté s'obtiendrait avec avancerde4, en gardant 4 répétitions et des pivots de 90∘.
5)
FAUX. Contre-exemple vu à l'exercice 4 : en partant de (1;1) vers la droite, avancer de 3 puis tourner puis avancer de 2 mène en (4;3), alors que les mêmes blocs dans l'ordre 2, tourner, 3 mènent en (3;4). Énoncé correct : « deux scripts formés des mêmes blocs peuvent donner des résultats différents si l'ordre change ». L'ordre n'est indifférent que pour des instructions indépendantes, comme deux déplacements sur des axes différents.
Exercice 9 : Problème : le compteur de points d'un jeu
Dans un jeu, le score démarre à 0 et chaque étoile ramassée rapporte 15 points. La variable score garde en mémoire le total en cours.
Scratch
quand le drapeau vert est cliqué
mettre score à 0
répéter 4 fois
ajouter 15 à score
1) Donner la valeur de score après chaque tour de boucle.
2) Quelle opération unique donne directement le score final ?
4) Dans un autre niveau, chaque étoile vaut 12 points. Combien faut-il d'étoiles pour dépasser 100 points ?
5) Un joueur ramasse 7 étoiles à 15 points et reçoit un bonus de fin de niveau de 25 points. Quel est son score ?
6) Un joueur peut-il atteindre exactement 100 points en ne ramassant que des étoiles à 15 points ? Justifier.
Voir la correction
Réponses
1)15, 30, 45, 60
2)4×15=60
3)8 étoiles
4)9 étoiles
5)130 points
6)Non : 100 n'est pas multiple de 15
1)
Le score part de 0, puis vaut 15 après le premier tour, 30 après le deuxième, 45 après le troisième et 60 après le quatrième. Chaque tour ajoute la même quantité, ce qui donne la table de 15.
2)
Ajouter quatre fois 15 revient à calculer 4×15=60. Une boucle qui répète la même addition est donc exactement une multiplication : c'est ce qui permet de prévoir le résultat sans dérouler le script tour par tour, ce qui deviendrait impossible avec 500 répétitions.
3)
On cherche le nombre d'étoiles n tel que 15×n=120, c'est-à-dire n=120÷15=8. Il faut ramasser 8 étoiles. Vérification : 15×8=120.
4)
On teste : 12×8=96, ce qui ne dépasse pas encore 100, et 12×9=108, qui dépasse. Il faut donc 9 étoiles. Attention au mot DÉPASSER : avec 8 étoiles le joueur est à 96, tout près du but mais en dessous, et la réponse 8 serait fausse.
5)
Les étoiles rapportent 7×15=105 points, auxquels s'ajoute le bonus : 105+25=130 points. On effectue la multiplication avant l'addition, car le bonus n'est versé qu'une fois et non à chaque étoile : dans une expression comme 7×15+25, c'est bien la multiplication qui est prioritaire.
6)
NON. Tous les scores possibles sont des multiples de 15 : 0, 15, 30, 45, 60, 75, 90, 105... Or 100 n'est pas un multiple de 15, puisque 100=15×6+10 : le reste n'est pas nul. Le joueur passe donc de 90 à 105 sans jamais s'arrêter sur 100. C'est une question de divisibilité, et elle montre qu'un programme ne peut produire que les valeurs autorisées par ses règles.
Exercice 10 : Problème : un test si alors sinon
Une borne calcule le tarif d'entrée d'un musée à partir de l'âge du visiteur. Le bloc si…alors…sinon n'exécute qu'UNE des deux branches : celle du haut si la condition est vraie, celle du bas sinon.
Scratch
demander "Quel est ton age ?" et attendre
si reponse < 12 alors
dire "tarif enfant : 6 dollars"
sinon
dire "tarif adulte : 10 dollars"
1) Que répond la borne à un visiteur de 9 ans ?
2) Que répond-elle à un visiteur de 12 ans ? Ce résultat est-il conforme à ce qu'on attendait ?
3) Comment modifier la condition pour qu'un visiteur de 12 ans paie le tarif enfant ?
4) Avec le script d'origine, combien paie une famille de deux parents et de trois enfants âgés de 8, 11 et 14 ans ?
5) Pour un visiteur donné, combien de branches du test sont exécutées ?
6) Le musée ajoute un tarif de 4 dollars pour les 65 ans et plus. Où placer ce nouveau test, et quelle erreur faut-il éviter ?
Voir la correction
Réponses
1)Tarif enfant : 6 dollars
2)Tarif adulte : 10 dollars
3)reponse < 13
4)42 dollars
5)Une seule
6)Dans le sinon, avant adulte
1)
La condition demande si l'âge est strictement inférieur à 12. Comme 9<12 est vrai, la borne exécute la branche du haut et répond « tarif enfant : 6 dollars ». La branche du bas n'est pas lue du tout.
2)
Elle répond « tarif adulte : 10 dollars », car la condition 12<12 est FAUSSE : 12 n'est pas strictement inférieur à lui-même. Ce n'est probablement pas ce que voulait le musée, mais c'est bien ce que le script demande. Les conditions au bord, comme ici l'âge exactement égal à 12, sont l'endroit où se cachent la plupart des erreurs de programmation.
3)
Il suffit d'écrire sireponse<13, ou de façon équivalente sireponse≤12. Les deux conditions décrivent le même ensemble d'âges entiers, et le choix entre les deux est affaire de lisibilité : la seconde dit littéralement « jusqu'à 12 ans inclus ».
4)
Avec le script d'origine, les enfants de 8 et 11 ans paient le tarif enfant, soit 2×6=12 dollars. Les deux parents et l'enfant de 14 ans paient le tarif adulte, soit 3×10=30 dollars. Le total est 12+30=42 dollars. Il faut bien compter TROIS personnes au tarif adulte : l'adolescent de 14 ans en fait partie d'après la règle écrite, même si le mot adulte semble mal choisi.
5)
Une seule. Le bloc si…alors…sinon garantit que l'une des deux branches est exécutée, et que ce n'est jamais les deux. C'est d'ailleurs pour cela que la borne ne peut pas annoncer deux tarifs différents à la même personne.
6)
Le nouveau test doit venir APRÈS le test des enfants et AVANT la conclusion adulte : sireponse<12, alors enfant ; sinon, sireponse≥65, alors senior ; sinon, adulte. L'erreur à éviter est de conclure « adulte » dès que l'âge atteint 12 ans : la branche du bas serait alors terminée, le test des 65 ans ne serait jamais atteint et aucun visiteur ne paierait le tarif senior. Dans une suite de tests, l'ordre décide de ce qui est encore examinable, exactement comme l'ordre des instructions décide du trajet du lutin.
Partie C : les classiques (/50)
Exercice 11 : Remonter un programme de calcul
Le script ci-dessous demande un nombre, lui applique trois opérations et affiche le résultat. On le suit ligne par ligne, en notant la valeur de reˊsultat après chaque instruction.
Scratch
demander "Choisis un nombre" et attendre
mettre résultat à réponse
mettre résultat à résultat × 3
ajouter 5 à résultat
mettre résultat à résultat × 2
dire résultat
1) Quel résultat le script affiche-t-il si l'on choisit 4 ?
2) Et si l'on choisit 0 ?
3) Et si l'on choisit 2,5 ?
4) Le script affiche 58. Quel nombre avait-on choisi ?
5) Un élève échange les lignes « ajouter 5 à résultat » et « mettre résultat à résultat × 2 ». Quel résultat son script affiche-t-il pour 4 ?
Voir la correction
Réponses
1)34
2)10
3)25
4)8
5)29
1)
reˊsultat vaut 4, puis 4×3=12, puis 12+5=17, puis 17×2=34. Le script affiche 34.
2)
0, puis 0×3=0, puis 0+5=5, puis 5×2=10. Le script affiche 10 : même en partant de 0, le résultat n'est pas nul, à cause de l'ajout de 5.
3)
2,5, puis 2,5×3=7,5, puis 7,5+5=12,5, puis 12,5×2=25.
4)
On remonte le script à l'envers, en faisant l'opération CONTRAIRE à chaque étape, de la dernière à la première. Avant ×2 : 58÷2=29. Avant +5 : 29−5=24. Avant ×3 : 24÷3=8. On avait choisi 8. Contrôle : 8×3=24, 24+5=29, 29×2=58.
5)
4, puis 4×3=12, puis 12×2=24, puis 24+5=29. Il affiche 29 au lieu de 34 : dans le script d'origine, le 5 ajouté est lui aussi doublé, ce qui n'arrive plus quand on ajoute après avoir doublé.
Exercice 12 : Coder un déplacement avec des flèches
Un robot se déplace case par case sur un quadrillage. Il comprend quatre flèches : H, une case vers le haut ; B, une case vers le bas ; G, une case vers la gauche ; D, une case vers la droite. Contrairement au lutin de Scratch, il n'a pas de direction : chaque flèche est un déplacement fixe, quelle que soit la flèche précédente.
Le robot part de la case (2;1) : le premier nombre est l'abscisse, le second l'ordonnée.
1) Où arrive le robot avec le code « D D H H H G » ?
2) Où arrive-t-il avec le code « H D H D H D » ?
3) On veut aller de (2;1) à (6;3). Combien de flèches compte le code le plus court possible ?
4) Un code de 10 flèches mène aussi de (2;1) à (6;3). Combien de ses flèches ne servent à rien ?
5) Où arrive le robot avec le code « répéter 3 fois (D H) » suivi de « G » ?
Voir la correction
Réponses
1)(3 ; 4)
2)(5 ; 4)
3)6 flèches
4)4 flèches
5)(4 ; 4)
1)
Deux D : 2+2=4. Trois H : 1+3=4. Un G : 4−1=3. Le robot arrive en (3;4). L'ordre des flèches ne change rien ici, puisque chaque flèche est un déplacement fixe : seuls comptent les nombres de H, B, G et D.
2)
Trois D et trois H : il arrive en (2+3;1+3)=(5;4). Le trajet en zigzag mène au même point que « D D D H H H ».
3)
Il faut avancer de 6−2=4 cases vers la droite et de 3−1=2 cases vers le haut. Le code le plus court compte 4+2=6 flèches, par exemple « D D D D H H ». Aucune flèche G ou B ne doit y figurer, elle obligerait à revenir.
4)
Le plus court en utilise 6, donc 10−6=4 flèches sont inutiles. Elles vont forcément par paires qui s'annulent, un H avec un B ou un G avec un D : ce code contient deux allers-retours.
5)
Trois fois D et H : trois D et trois H, soit (2+3;1+3)=(5;4). Puis G : (4;4). Le robot arrive en (4;4).
Exercice 13 : La boucle répéter jusqu'à
Le bloc reˊpeˊterjusqu′aˋceque recommence son contenu TANT QUE la condition est fausse. Il vérifie la condition avant chaque tour, et s'arrête dès qu'elle devient vraie.
Scratch
mettre total à 0
mettre tours à 0
répéter jusqu'à ce que total > 50
ajouter 7 à total
ajouter 1 à tours
dire total
dire tours
1) Quelle est la valeur de total après chacun des trois premiers tours ?
2) Combien de tours la boucle fait-elle ?
3) Quelles sont les deux valeurs dites à la fin ?
4) On remplace total>50 par total>49. Qu'est-ce qui change ?
5) On revient à total>50, mais on remplace ajouter7 par ajouter10. Combien de tours la boucle fait-elle, et quelle valeur de total est dite ?
Voir la correction
Réponses
1)7, 14, 21
2)8 tours
3)56 et 8
4)Rien
5)6 tours, 60
1)
total vaut 7 après le premier tour, 14 après le deuxième, 21 après le troisième : la table de 7.
2)
La boucle continue tant que total ne dépasse pas 50. Après 7 tours, total=49, qui ne dépasse pas 50 : on continue. Après 8 tours, total=56>50 : on s'arrête. La boucle fait 8 tours.
3)
Le lutin dit 56, puis 8.
4)
Rien ne change. Après 7 tours, 49>49 est FAUX : un nombre n'est pas strictement plus grand que lui-même. La boucle fait encore un tour et s'arrête à 56, après 8 tours. Il faudrait écrire total>48 pour s'arrêter à 49.
5)
total vaut 10, 20, 30, 40, 50 : à 50, la condition 50>50 est fausse, on continue. Au sixième tour, 60>50 : arrêt. La boucle fait 6 tours et le lutin dit 60.
Exercice 14 : Problème : le distributeur qui rend la monnaie
Un distributeur rend une somme entière avec des pièces de 5, 2 et 1 dollars, en utilisant le moins de pièces possible. Il suit le script ci-dessous, où somme est la somme à rendre.
Scratch
mettre reste à somme
répéter jusqu'à ce que reste < 5
donner une pièce de 5
ajouter -5 à reste
répéter jusqu'à ce que reste < 2
donner une pièce de 2
ajouter -2 à reste
si reste = 1 alors
donner une pièce de 1
1) Quelles pièces le distributeur rend-il pour une somme de 13 dollars ?
2) Et pour une somme de 24 dollars ?
3) Pour 13 dollars, la première boucle donne un certain nombre de pièces de 5 et laisse un reste. Quelle division euclidienne a-t-elle effectuée ?
4) Pourquoi le dernier bloc n'a-t-il jamais besoin de donner deux pièces de 1 ?
5) Combien de pièces le distributeur rend-il en tout pour 38 dollars ?
Voir la correction
Réponses
1)5 + 5 + 2 + 1
2)5 + 5 + 5 + 5 + 2 + 2
3)13=5×2+3
4)Reste 0 ou 1
5)9 pièces
1)
Première boucle : 13, puis 8, puis 3, qui est plus petit que 5 : deux pièces de 5. Deuxième boucle : 3, puis 1, plus petit que 2 : une pièce de 2. Le reste vaut 1 : une pièce de 1. En tout 2+1+1=4 pièces, et 2×5+2+1=13.
2)
Quatre pièces de 5 : 24, 19, 14, 9, puis 4, plus petit que 5. Deux pièces de 2 : 4, 2, puis 0. Aucune pièce de 1. En tout 6 pièces.
3)
Retirer 5 tant que c'est possible, c'est chercher combien de fois 5 tient dans 13 : 13=5×2+3. Le quotient 2 est le nombre de pièces de 5, le reste 3 ce qui reste à rendre.
4)
La deuxième boucle ne s'arrête que quand le reste est plus petit que 2 : il vaut alors 0 ou 1. Il n'y a donc jamais plus d'une pièce de 1 à rendre, et un simple si suffit.
5)
38=5×7+3 : 7 pièces de 5, reste 3. Puis 3=2×1+1 : une pièce de 2, reste 1, une pièce de 1. En tout 7+1+1=9 pièces.
Exercice 15 : Problème : le jeu du plus ou moins
Léa pense à un nombre entier compris entre 1 et 100. Tom propose un nombre, et Léa répond « plus grand », « plus petit » ou « gagné ».
Tom suit toujours la même méthode : il propose le nombre situé au milieu des possibilités qui restent, c'est-à-dire la moitié de la somme de la plus petite et de la plus grande, arrondie à l'unité inférieure.
1) Quel nombre Tom propose-t-il en premier ?
2) Léa répond « plus grand ». Combien de nombres restent possibles ? Quel nombre Tom propose-t-il ensuite ?
3) Léa pense à 62. Écrivez toutes les propositions de Tom jusqu'à ce qu'il gagne. Combien en fait-il ?
4) Après chaque réponse « plus grand » ou « plus petit », que devient à peu près le nombre de possibilités ?
5) Quel que soit le nombre choisi par Léa, combien de propositions faut-il au plus à Tom pour gagner ?
Voir la correction
Réponses
1)50
2)50 nombres ; 75
3)50, 75, 62 : 3 propositions
4)Divisé par deux
5)7 propositions
1)
(1+100)÷2=50,5, arrondi à l'unité inférieure : Tom propose 50.
2)
Le nombre est entre 51 et 100 : il reste 100−51+1=50 possibilités. Tom propose (51+100)÷2=75,5, soit 75.
3)
50 : « plus grand », il reste 51 à 100. 75 : « plus petit », il reste 51 à 74. (51+74)÷2=62,5, Tom propose 62 : « gagné ». Il a fait 3 propositions.
4)
Il est à peu près divisé par deux : la proposition coupe les possibilités en deux moitiés, et la réponse en élimine une. C'est ce qui rend la méthode si rapide.
5)
Dans le pire des cas, il reste au plus 50 possibilités après la première proposition, puis 25, puis 12, puis 6, puis 3, puis 1 : la septième proposition est forcément la bonne. Il faut au plus 7 propositions, alors qu'essayer 1, 2, 3... pourrait en demander 100.
Il manque quelque chose dans cette série ?Un type d'exercice que ton prof donne, un énoncé qui te bloque, une erreur repérée : dis-le-moi, je lis chaque demande.
L'envoi passe par ton espace gratuit : c'est ce qui me permet de te répondre et de te prévenir quand l'exercice est ajouté. Un courriel suffit, pas de mot de passe. Crée ton espace.
Pas envie de créer un compte ? Écris-moi directement.
Contactez-moi pour une première séance. L'algorithmique de sixième apprend une chose qui sert partout ensuite : suivre un enchaînement d'étapes sans en sauter aucune, et vérifier au fur et à mesure. C'est la même rigueur qui fait réussir une démonstration en troisième.