Aller au contenu

Programmer des scripts complets avec Scratch

Troisième · Maths · Algorithmique et programmation

Algorithmique et programmation

Lire et écrire un script Scratch

En algorithmique, on ne te demande pas d'être développeur : on te demande de lire un script et de dire ce qu'il fait, de le compléter ou de corriger une erreur. Au brevet, l'exercice de programmation est presque toujours là, et il est très rentable : la logique compte plus que la technique.

La scène : un repère comme en maths

La scène de Scratch est un repère orthogonal, exactement comme celui du cours sur les coordonnées. Le lutin y a toujours une position (x ; y) et une orientation en degrés. Attention : l'orientation de Scratch n'est pas celle du cercle trigonométrique ! Ce repère sert à la même chose qu'en cours de maths : repérer précisément un point du plan par deux nombres, sans avoir à le décrire avec des mots. Le signe de x et de y indique de quel côté du centre on se trouve : un x négatif signifie qu'on est à gauche de l'axe vertical central, un y négatif qu'on est en dessous de l'axe horizontal. Il ne faut pas confondre orientation et position : deux lutins peuvent occuper le même endroit, avec le même x et le même y, tout en regardant dans des directions différentes, car l'orientation est une information à part, indépendante des coordonnées.

ÉlémentValeurs possiblesCe qu'il faut retenir
Abscisse xde -240 (bord gauche) à 240 (bord droit)x augmente vers la droite
Ordonnée yde -180 (bas) à 180 (haut)y augmente vers le haut
Centre de la scènex = 0 et y = 0c'est la position de départ par défaut
s'orienter à 90vers la droiteorientation de départ du lutin
s'orienter à 0vers le haut0 c'est le haut, pas la droite !
s'orienter à 180 / -90vers le bas / vers la gaucheles angles négatifs pointent à gauche

Se déplacer : deux familles d'instructions

On choisit entre les deux familles selon ce qu'on connaît : un déplacement absolu convient quand on sait exactement où le lutin doit se trouver, par exemple pour le remettre à son point de départ. Un déplacement relatif convient quand on veut faire évoluer sa position petit à petit, par exemple pour l'animer pas après pas. Confondre les deux est l'erreur la plus fréquente des scripts de brevet : « aller à x: 30 » impose x = 30 quelle que soit la position de départ, alors que « ajouter 30 à x » part de la valeur actuelle et l'augmente de 30 ; les deux ne donnent le même résultat que si le lutin partait déjà de x = 0.

  • Déplacement absolu : « aller à x: … y: … » place le lutin exactement à cette position, quelle que soit celle d'avant.
  • Déplacement relatif : « ajouter … à x », « ajouter … à y », « avancer de … pas » modifient la position à partir de la position actuelle.
  • « avancer de … pas » suit l'orientation du lutin : s'il regarde vers le bas, il descend !
  • « tourner ↻ de … degrés » (droite) et « tourner ↺ de … degrés » (gauche) changent uniquement l'orientation, jamais la position.

Algorithmique et programmation

Boucles, variables et blocs personnalisés

Un script complet mélange trois ingrédients : des boucles (pour répéter), des tests (pour choisir), et des variables (pour mémoriser). Quand ces trois-là sont clairs, tu peux lire n'importe quel script du brevet. Une boucle répète des instructions un certain nombre de fois, une variable mémorise une valeur qui peut changer au fil du script, un test choisit entre deux suites d'instructions selon qu'une condition est vraie ou fausse : la plupart des scripts du brevet combinent les trois.

Les boucles et les polygones réguliers

On choisit la boucle selon ce qu'on sait à l'avance. Si le nombre de répétitions est connu — dessiner un polygone à 6 côtés, par exemple — répéter n fois est le bon choix. Si l'arrêt dépend d'un résultat qu'on ne connaît pas encore au moment d'écrire le script — attendre qu'un score dépasse 100 — on utilise répéter jusqu'à ce que. Répéter indéfiniment sert aux scripts qui ne doivent jamais s'arrêter seuls, comme l'animation d'un décor.

Pourquoi 360/n ? Pour tracer un polygone fermé, le lutin doit faire un tour complet, donc tourner de 360° au total, répartis en n rotations égales entre les côtés. Cette formule ne fonctionne que pour un polygone régulier (tous les côtés et tous les angles égaux) : pour un polygone quelconque, chaque angle de rotation serait différent et il faudrait les calculer un par un.

Polygone régulierNombre de côtés nAngle de rotation 360/n
Triangle équilatéral3120°
Carré490°
Pentagone572°
Hexagone660°
Octogone845°
Décagone1036°

Variables et instructions conditionnelles

  • mettre [S] à 0 : on impose une valeur à la variable (on écrase l'ancienne).
  • ajouter 3 à [S] : on augmente la valeur actuelle de 3.
  • mettre [S] à (S × 2) : on calcule à partir de l'ancienne valeur, puis on la remplace.
  • Une variable garde sa valeur jusqu'à ce qu'une instruction la change : elle n'est pas remise à zéro toute seule.
  • si (condition) alors : n'exécute son contenu que si la condition est vraie ; sinon, il ne se passe rien.
  • si (condition) alors … sinon … : exécute toujours exactement une des deux parties, jamais les deux.
  • Conditions courantes : les comparaisons (inférieur, supérieur, égal) et le test « … modulo 2 = 0 », qui reconnaît un nombre pair.

Une variable ne garde sa valeur que tant qu'aucune instruction ne la modifie : oublier de l'initialiser avec « mettre à 0 » au début du script est l'erreur la plus fréquente, car le compteur repart alors de sa valeur du lancement précédent, faussant tout le calcul. Le test « si … alors … sinon » est utile dès qu'il existe deux cas qui s'excluent l'un l'autre, comme reçu ou non reçu à un examen ; avec seulement « si … alors » sans « sinon », rien ne se passerait dans le cas contraire, au lieu d'afficher le message attendu.

On crée un bloc personnalisé dès qu'une même suite d'instructions doit être utilisée plusieurs fois avec des valeurs différentes. Plutôt que de copier-coller le script pour chaque polygone, on l'écrit une seule fois avec des paramètres, et on l'appelle ensuite avec les valeurs voulues : polygone (3, 60) pour un triangle, polygone (6, 60) pour un hexagone, sans jamais retoucher le script d'origine.

Exemple mené jusqu'au bout : mettre i à 0 ; mettre S à 0 ; répéter 6 fois [ ajouter 1 à i ; si (i modulo 2 = 0) alors [ ajouter i à S ] ]. À chaque tour, i augmente de 1 : il prend successivement les valeurs 1, 2, 3, 4, 5, 6. Le test i modulo 2 = 0 n'est vrai que pour i pair, donc on ajoute à S les valeurs 2, puis 4, puis 6, et jamais les valeurs impaires. À la fin, S = 2 + 4 + 6 = 12.

Exercices corrigés

  1. Pour dessiner un hexagone régulier avec une boucle, de combien de degrés le lutin doit-il tourner à chaque tour de boucle ?

    • A.60 degrésBonne réponse
    • B.120 degrés
    • C.6 degrés
    • D.45 degrés

    Réponse : A — 60 degrés

    Le lutin doit faire un tour complet, soit 360 degrés, répartis sur les 6 côtés : 360/6 = 60 degrés. 120 degrés correspondrait à un triangle équilatéral (360/3) et 45 degrés à un octogone (360/8). Ne confonds pas non plus avec l'angle intérieur de l'hexagone, qui vaut 180 - 60 = 120 degrés.

  2. Le lutin se trouve en (10 ; 20). On exécute l'instruction « aller à x: -30 y: 50 ». Quelle est sa position finale ?

    • A.(-20 ; 70)
    • B.(-30 ; 50)Bonne réponse
    • C.(-40 ; 30)
    • D.(10 ; 20)

    Réponse : B — (-30 ; 50)

    « aller à » est un déplacement absolu : il impose la position, sans tenir compte de celle d'avant. Le lutin se retrouve donc exactement en (-30 ; 50). Si l'instruction avait été « ajouter -30 à x » et « ajouter 50 à y », on aurait obtenu (10 - 30 ; 20 + 50) = (-20 ; 70) : c'est le piège de la première réponse.

  3. Le lutin est en (5 ; -10). Il exécute « ajouter 20 à x » puis « ajouter 15 à y ». Quelle est sa position finale ?

    • A.(20 ; 15)
    • B.(25 ; -25)
    • C.(25 ; 5)Bonne réponse
    • D.(-15 ; 5)

    Réponse : C — (25 ; 5)

    « ajouter à » est relatif : on part de la position actuelle. Pour x : 5 + 20 = 25. Pour y : -10 + 15 = 5. La position finale est donc (25 ; 5). L'erreur classique est de soustraire au lieu d'ajouter pour y, parce que -10 est négatif : -10 + 15 = 5, pas -25.

  4. Le script « répéter 3 fois [ avancer de 60 pas ; tourner ↻ de 120 degrés ] » trace un triangle équilatéral. Combien mesure un angle intérieur de ce triangle ?

    • A.120°
    • B.360°
    • C.60°Bonne réponse
    • D.30°

    Réponse : C — 60°

    Les 120 degrés du script sont l'angle dont le lutin pivote entre deux côtés (l'angle extérieur), pas l'angle du triangle. L'angle intérieur est son supplémentaire : 180 - 120 = 60 degrés. Et c'est cohérent, puisqu'un triangle équilatéral a trois angles de 60 degrés (3 × 60 = 180).

  5. Le lutin part du centre (0 ; 0), orienté vers la droite. Il exécute : avancer de 100 pas ; tourner ↻ de 90 degrés ; avancer de 50 pas. Quelle est sa position finale ?

    • A.(100 ; 50)
    • B.(150 ; 0)
    • C.(50 ; 100)
    • D.(100 ; -50)Bonne réponse

    Réponse : D — (100 ; -50)

    Le lutin regarde vers la droite : les 100 premiers pas l'amènent en (100 ; 0). Puis il tourne de 90 degrés vers la droite : il regarde maintenant vers le bas. Les 50 pas suivants font donc diminuer y de 50 : (100 ; 0 - 50) = (100 ; -50). L'erreur classique est d'oublier la rotation et d'avancer encore vers la droite (150 ; 0), ou de croire que « tourner à droite » fait monter.

  6. Quel bloc permet de lancer un script quand on clique sur le drapeau vert ?

    • A.quand ce lutin est cliqué
    • B.quand le drapeau vert est cliquéBonne réponse
    • C.quand la touche espace est pressée
    • D.répéter indéfiniment

    Réponse : B — quand le drapeau vert est cliqué

    Les blocs de démarrage s'appellent des événements. « quand le drapeau vert est cliqué » se place tout en haut du script : c'est lui qui déclenche l'exécution au clic sur le drapeau. Les deux autres événements proposés existent aussi, mais réagissent à un clic sur le lutin ou à une touche du clavier. « répéter indéfiniment » n'est pas un événement, c'est une boucle.

  7. Sur la scène de Scratch, quelles sont les coordonnées du centre ?

    • A.(0 ; 0)Bonne réponse
    • B.(240 ; 180)
    • C.(1 ; 1)
    • D.(-240 ; -180)

    Réponse : A — (0 ; 0)

    La scène est un repère dont l'origine est le centre : le centre a donc pour coordonnées (0 ; 0). Le point (240 ; 180) est le coin en haut à droite et (-240 ; -180) le coin en bas à gauche, puisque x va de -240 à 240 et y de -180 à 180.

  8. Le lutin part du centre, orienté vers la droite. Il exécute : répéter 4 fois [ avancer de 50 pas ; tourner ↻ de 90 degrés ]. Quelle figure trace-t-il ?

    • A.Un triangle équilatéral
    • B.Un cercle
    • C.Un carré de côté 50 pasBonne réponse
    • D.Une ligne droite de 200 pas

    Réponse : C — Un carré de côté 50 pas

    Quatre segments de même longueur séparés par quatre rotations de 90 degrés : c'est un carré de côté 50 pas. Vérifie le total des rotations : 4 × 90 = 360, le lutin fait bien un tour complet et revient à son point de départ. Si le lutin ne tournait pas, on aurait effectivement une ligne droite de 200 pas — mais ici il tourne à chaque tour de boucle.

  9. La variable score vaut 7. On exécute l'instruction « ajouter 1 à score ». Que vaut score ensuite ?

    • A.8Bonne réponse
    • B.1
    • C.7
    • D.71

    Réponse : A — 8

    « ajouter 1 à score » augmente la valeur actuelle de 1 : 7 + 1 = 8. Attention à ne pas confondre avec « mettre score à 1 », qui écraserait la valeur et donnerait 1. Et « ajouter » est bien une addition, pas une mise bout à bout de chiffres.

  10. Quel bloc permet de n'exécuter certaines instructions que lorsqu'une condition est vraie ?

    • A.répéter 10 fois
    • B.si … alorsBonne réponse
    • C.mettre x à 0
    • D.avancer de 10 pas

    Réponse : B — si … alors

    « si … alors » est l'instruction conditionnelle : elle teste une condition et n'exécute son contenu que si cette condition est vraie. « répéter 10 fois » est une boucle (elle répète, elle ne teste pas), « mettre x à 0 » agit sur une variable et « avancer de 10 pas » déplace le lutin.

  11. Que fait le bloc « répéter indéfiniment » ?

    • A.Il exécute les instructions une seule fois
    • B.Il répète les instructions exactement 10 fois
    • C.Il arrête le script à la fin de la boucle
    • D.Il répète les instructions en boucle, sans jamais s'arrêter tout seulBonne réponse

    Réponse : D — Il répète les instructions en boucle, sans jamais s'arrêter tout seul

    « répéter indéfiniment » relance sans fin les instructions qu'il contient, tant que le programme tourne (on l'arrête avec le bouton stop). Contrairement à « répéter n fois », le nombre de tours n'est pas fixé à l'avance, et contrairement à « répéter jusqu'à ce que », aucune condition ne vient l'interrompre.

  12. On exécute : mettre S à 0 ; répéter 5 fois [ ajouter 3 à S ]. Que vaut S à la fin ?

    • A.3
    • B.5
    • C.8
    • D.15Bonne réponse

    Réponse : D — 15

    S part de 0, puis on lui ajoute 3 à chaque tour de boucle : 0 → 3 → 6 → 9 → 12 → 15. Après 5 tours, S = 5 × 3 = 15. Si le script avait dit « mettre S à 3 » au lieu de « ajouter 3 à S », S vaudrait 3 : c'est toute la différence entre écraser et cumuler.

S'entraîner sur ce chapitre

Ce chapitre compte 35 exercices corrigés dans l'application, avec le suivi de ta progression.

Commencer les exercices