Aller au contenu principal
5e

Scratch : boucles et conditions — Exercices d'application

1. Rappel : boucles et variables

↩ Revoir le cours

Exercice 1 — ⭐

  1. Que fait le bloc répéter 6 fois placé au-dessus d’un bloc avancer de 40 et tourner de 60 degrés ?
  2. Quelle est la différence entre mettre score à 0 et changer score de 1 ?
Voir le corrigé
  1. Il fait avancer le lutin de 4040 puis tourner de 60°60°, et ce 6 fois de suite : cela trace un hexagone régulier de côté 4040.
  2. mettre score à 0 donne à score la valeur 00, en effaçant l’ancienne valeur. changer score de 1 ajoute 11 à la valeur actuelle de score, sans l’effacer.

2. L’instruction conditionnelle « si… alors »

↩ Revoir le cours

Exercice 2 — ⭐⭐

On donne le script suivant :

quand [drapeau vert] cliqué
répéter jusqu'à ce que faux
avancer de 5
si <touche le bord ?> alors
    tourner de 180 degrés
  1. Que se passe-t-il si le lutin ne touche jamais le bord ?
  2. Que se passe-t-il dès que le lutin touche le bord ?
  3. Pourquoi le bloc si...alors est-il adapté ici, plutôt qu’un si...alors...sinon ?
Voir le corrigé
  1. Il continue simplement d’avancer de 55 à chaque tour, sans jamais tourner.
  2. La condition touche le bord ? devient vraie : le lutin tourne de 180°180°, c’est-à-dire qu’il fait demi-tour.
  3. Il n’y a rien de particulier à faire quand le lutin ne touche pas le bord (il doit juste continuer à avancer, ce qui est déjà fait par le bloc avancer placé avant le si...alors) : un sinon serait donc inutile ici.

3. « si… alors… sinon »

↩ Revoir le cours

Exercice 3 — ⭐⭐

Un jeu de quiz pose la question « Combien font 6 x 7 ? ».

  1. Écris le script utilisant si...alors...sinon qui affiche « Bravo ! » et ajoute 1 point au score si la réponse donnée vaut 42, et qui affiche « Perdu » sinon.
  2. Que se passe-t-il si l’élève répond 41 ?
  3. Que se passe-t-il si l’élève répond 42 ?
Voir le corrigé
  1. demander [Combien font 6 x 7 ?] et attendre
    si <réponse = 42> alors
        dire [Bravo !] pendant 2 secondes
        changer score de 1
    sinon
        dire [Perdu] pendant 2 secondes
  2. La condition réponse = 42 est fausse (puisque la réponse vaut 4141) : c’est la branche sinon qui s’exécute, donc le message « Perdu » s’affiche, et le score n’est pas modifié.
  3. La condition réponse = 42 est vraie : la branche du alors s’exécute, donc « Bravo ! » s’affiche et le score augmente de 11.

4. Les opérateurs de comparaison

↩ Revoir le cours

Exercice 4 — ⭐⭐⭐

Une variable vies commence à 33 et diminue de 11 à chaque erreur.

  1. Écris la condition, avec un opérateur de comparaison, qui devient vraie quand le joueur n’a plus de vies (vies vaut 00 ou moins).
  2. Écris la condition qui devient vraie tant que le joueur a strictement plus de 1 vie.
  3. Quelle différence y a-t-il entre les blocs vies < 1 et vies = 0 dans ce contexte ?
Voir le corrigé
  1. vies < 1 (strictement inférieur à 11, donc 00 ou une valeur négative).
  2. vies > 1.
  3. Si vies ne peut jamais devenir négatif (elle s’arrête toujours pile à 00), les deux conditions sont équivalentes dans ce cas précis. Mais vies < 1 reste vraie même si vies devenait négative par erreur (par exemple −1-1), alors que vies = 0 ne serait plus vraie dans ce cas : vies < 1 est donc une condition plus prudente pour détecter « il n’y a plus de vies ».

5. La boucle « répéter jusqu’à »

↩ Revoir le cours

Exercice 5 — ⭐⭐⭐

  1. Quelle est la différence entre répéter 10 fois et répéter jusqu'à ce que <...> ?
  2. Écris un script qui fait avancer un lutin de 33 tant qu’il ne touche pas le pointeur de la souris, puis affiche « Trouvé ! » une fois arrivé.
  3. Un élève a écrit répéter jusqu'à ce que <vies = 10>, alors que vies commence à 33 et ne peut que diminuer. Que va-t-il se passer ? Comment corriger le script ?
Voir le corrigé
  1. répéter 10 fois s’arrête après un nombre de tours fixé à l’avance (ici 10). répéter jusqu'à ce que <...> s’arrête dès qu’une condition devient vraie, sans que l’on connaisse forcément à l’avance le nombre de tours nécessaires.
  2. quand [drapeau vert] cliqué
    répéter jusqu'à ce que <touche [pointeur de la souris] ?>
        avancer de 3
    dire [Trouvé !] pendant 2 secondes
  3. Puisque vies ne fait que diminuer à partir de 33, elle n’atteindra jamais 1010 : la condition vies = 10 ne devient jamais vraie, donc la boucle ne s’arrête jamais (elle est infinie par erreur). Pour corriger le script, il faudrait utiliser une condition cohérente avec l’évolution réelle de vies, par exemple vies < 1 pour arrêter la boucle quand il n’y a plus de vies.