Mathématiques · 4ᵉ · Algorithmique et programmation

Algorithmique et programmation

Tu passes en 3ᵉ ?Revois l'essentiel de la 4ᵉ avant l'année du brevet.

Algorithmes et instructions : la séquence

Un ordinateur n'invente rien. Il suit des ordres qu'on lui donne, un par un, dans l'ordre exact où ils sont écrits.

DÉFINITION

Un algorithme est une suite finie d'instructions précises et non ambiguës, destinées à accomplir une tâche. Quand un algorithme est traduit en blocs Scratch (ou dans un autre langage), on obtient un programme. Les instructions s'exécutent dans l'ordre, de haut en bas : c'est ce qu'on appelle la séquence.

Dans Scratch, chaque instruction est un bloc coloré que l'on empile. Le lutin lit les blocs de haut en bas et obéit à chacun, l'un après l'autre.

Exemple 1. Pour faire dessiner un côté d'un carré au lutin :

stylo en position d'écriture
avancer de 100 pas
tourner de 90 degrés

Le lutin pose le stylo, trace un trait de 100 pas, puis pivote d'un quart de tour. Ce sont trois instructions exécutées dans cet ordre précis.

Exemple 2. Pour tracer un carré complet à la main (sans boucle encore), on enchaîne les mêmes gestes quatre fois :

stylo en position d'écriture
avancer de 100 pas
tourner de 90 degrés
avancer de 100 pas
tourner de 90 degrés
avancer de 100 pas
tourner de 90 degrés
avancer de 100 pas
tourner de 90 degrés

Quatre fois le même geste : le lutin trace un carré et revient à son point de départ, orienté dans la même direction qu'au début (car 4×90°=360°, un tour complet).

Séquence de blocs Scratch traçant un carré À gauche, une pile de 9 blocs d'instructions en séquence (stylo, avancer 100, tourner 90°, répété 4 fois). À droite, le carré de 100 pas tracé par le lutin. Séquence d'instructions stylo en position d'écriture avancer de 100 pas tourner de 90 degrés avancer de 100 pas tourner de 90 degrés avancer de 100 pas tourner de 90 degrés avancer de 100 pas tourner de 90 degrés Résultat : le carré tracé 100 pas 100 100 pas 100 90° 4 × (avancer + tourner) = carré fermé
Séquence de 8 blocs traçant un carré et le résultat sur la scène

Méthode (exécution pas à pas). Pour comprendre ce que fait un programme, joue toi-même le rôle du lutin : lis les instructions une par une, de haut en bas, et applique chacune strictement. C'est la trace d'exécution. Ne jamais sauter d'étape, ne jamais anticiper.

Le piège de l'ordre

Karim pense que « du moment qu'on met les bonnes instructions, peu importe l'ordre ». Faux. Un programme est une séquence : changer l'ordre change le résultat.

Compare :

avancer de 100 pas
tourner de 90 degrés

versus :

tourner de 90 degrés
avancer de 100 pas

Dans le premier cas, le lutin avance puis tourne. Dans le second, il tourne d'abord, et avance ensuite dans une direction différente. Mêmes blocs, ordre différent, tracé différent.

À RETENIR

Un programme est une séquence : les instructions s'exécutent dans l'ordre exact, de haut en bas. Changer l'ordre peut changer le résultat. Pour vérifier un programme, exécute-le mentalement pas à pas.

Les variables

Pour compter les carrés du motif de zellige, le programme doit retenir un nombre qui change au fil du temps. Les variables sont faites pour ça.

DÉFINITION

Une variable est une boîte désignée par un nom, qui contient une valeur pouvant changer pendant l'exécution du programme. On lui donne un nom significatif (par exemple compteur, score, cote). La valeur stockée dans la variable peut être modifiée à tout moment.

On manipule une variable en trois opérations fondamentales.

Méthode (les trois opérations sur une variable).

  • Créer : déclarer la variable en lui donnant un nom dans Scratch (menu « Variables »).
  • Initialiser : fixer sa valeur de départ avant de l'utiliser. En Scratch : « mettre [compteur] à 0 ». Ne jamais utiliser une variable avant de l'initialiser.
  • Modifier : changer sa valeur en cours d'exécution. En Scratch : « mettre [compteur] à 5 » (affectation directe) ou « ajouter 1 à [compteur] » (incrémentation).

Exemple 1. Un compteur qui compte jusqu'à 3 :

mettre [compteur] à 0
ajouter 1 à [compteur]
ajouter 1 à [compteur]
ajouter 1 à [compteur]

Trace d'exécution : après la ligne 1, compteur vaut 0. Après la ligne 2, il vaut 1. Après la ligne 3, il vaut 2. Après la ligne 4, il vaut 3.

Exemple 2. Stocker la longueur d'un côté, puis la doubler :

mettre [cote] à 50
mettre [cote] à (cote) × 2

Après la ligne 1, cote vaut 50. Après la ligne 2, cote vaut 100. La variable a été remplacée par sa nouvelle valeur.

Affectation ≠ égalité mathématique

Salma lit l'instruction « mettre [x] à (x) + 1 » et dit : « Mais x=x+1, c'est impossible en maths ! ». Elle confond deux choses très différentes.

En mathématiques, x=x+1 est une équation qui n'a pas de solution.

En programmation, « mettre [x] à (x) + 1 » est une affectation : on lit l'ancienne valeur de x, on lui ajoute 1, et on range le résultat dans x. C'est une opération sur une boîte, pas une égalité entre deux expressions. Après cette instruction, la boîte contient une valeur d'une unité de plus qu'avant.

À RETENIR

Une variable retient une valeur qui peut changer. On l'initialise avant de l'utiliser. L'instruction « mettre [x] à (x) + 1 » signifie « ajouter 1 à la valeur actuelle de x » : c'est une affectation, pas une équation mathématique.

Les boucles

Dans l'exemple du carré, les mêmes deux instructions sont répétées quatre fois. Réécrire quatre fois la même paire de blocs est long et source d'erreurs. Les boucles permettent d'éviter cette répétition.

DÉFINITION

Une boucle est une structure qui répète un groupe d'instructions plusieurs fois. Il en existe deux types principaux.

  • Boucle « répéter n fois » : le groupe d'instructions est exécuté exactement n fois.
  • Boucle « tant que » : le groupe d'instructions est exécuté tant qu'une condition est vraie ; on s'arrête dès que la condition devient fausse.

La boucle « répéter n fois »

C'est la plus simple. On sait à l'avance combien de fois on veut répéter.

Exemple 1. Le carré avec une boucle :

stylo en position d'écriture
répéter 4 fois :
  avancer de 100 pas
  tourner de 90 degrés

Ces 4 lignes font exactement la même chose que les 9 lignes de la séquence précédente. La boucle les remplace de façon plus concise et plus lisible.

Exemple 2. Un hexagone régulier (6 côtés, angle extérieur 60°) :

répéter 6 fois :
  avancer de 80 pas
  tourner de 60 degrés

Pour changer de polygone, on ne modifie que le nombre de répétitions et l'angle — le reste du code ne change pas.

Organigramme de la boucle répéter 4 fois À gauche, un organigramme montrant la boucle : début, compteur à 0, losange de test compteur inférieur à 4, bloc d'instructions, incrément, retour. À droite, le carré résultant. Début compteur ← 0 compteur < 4 ? oui avancer de 100 pas tourner de 90° compteur ← compteur + 1 retour non Fin Résultat 90° 4 répétitions répéter 4 fois avancer de 100 pas tourner de 90 degrés
Organigramme de la boucle « répéter 4 fois » avec le carré dessiné à côté

La boucle « tant que »

On ne sait pas toujours à l'avance combien de répétitions il faudra. La boucle « tant que » s'adapte.

DÉFINITION

La boucle « répéter jusqu'à ce que » (ou « tant que ») exécute le groupe d'instructions encore et encore, et s'arrête dès qu'une condition devient vraie (en Scratch : « répéter jusqu'à ce que »).

Exemple 3. Le lutin avance jusqu'à toucher le bord :

répéter jusqu'à ce que (le lutin touche le bord) :
  avancer de 10 pas

On ne sait pas à l'avance combien de pas il faudra pour toucher le bord : ça dépend de la position initiale. La boucle « tant que » gère cette incertitude.

Exemple 4. Compter en s'arrêtant quand compteur atteint 5 :

mettre [compteur] à 0
répéter jusqu'à ce que (compteur) = 5 :
  ajouter 1 à [compteur]

Trace d'exécution : compteur vaut 0, puis 1, 2, 3, 4, et au début du 5ᵉ tour la condition « compteur = 5 » est fausse (car compteur vaut 4), donc on entre encore dans la boucle, on ajoute 1 : compteur vaut 5. Au début du tour suivant, la condition est vraie, on sort. Résultat final : compteur vaut 5.

Le piège de l'erreur de un (off-by-one)

Amine veut dessiner un carré. Il écrit « répéter 3 fois » au lieu de « répéter 4 fois ». Le lutin trace seulement 3 côtés : la figure reste ouverte. Ce type d'erreur — se tromper de 1 dans le nombre de répétitions — est si courant qu'il a un nom : l'erreur de un (en anglais : off-by-one). Avant de lancer, demande-toi : combien de fois le geste complet doit-il se produire ?

À RETENIR

La boucle « répéter n fois » exécute exactement n fois un groupe d'instructions. La boucle « tant que » s'arrête dès qu'une condition devient vraie. Les deux évitent la répétition fastidieuse dans le code. Vérifie toujours le nombre de répétitions (erreur de un).

Les instructions conditionnelles

Jusqu'ici, le lutin exécute toujours les mêmes blocs. Mais un programme intelligent doit réagir selon la situation : afficher « gagné » si le score est suffisant, rebondir si le bord est touché, changer de couleur si le compteur est impair. C'est le rôle des conditions.

DÉFINITION

Une instruction conditionnelle est une structure qui n'exécute certaines instructions que si une condition est vérifiée. Une condition est une expression qui est soit vraie, soit fausse — jamais les deux à la fois.

En Scratch, la forme de base est :

si (condition) alors :
  [instructions A]

et la forme complète avec alternative est :

si (condition) alors :
  [instructions A]
sinon :
  [instructions B]

Dans la forme « si… alors… sinon », si la condition est vraie, le programme exécute A ; si elle est fausse, il exécute B. Les instructions A et B s'excluent mutuellement.

Exemple 1. Faire rebondir le lutin sur le bord :

si (le lutin touche le bord) alors :
  tourner de 180 degrés

Tant que le lutin ne touche pas le bord, rien ne se passe. Dès qu'il le touche, la condition est vraie et il fait demi-tour.

Exemple 2. Afficher le résultat d'un score :

si (score) > 10 alors :
  dire « Bien joué »
sinon :
  dire « Continue d'essayer »

Exemple 3. Combiner boucle et condition — le lutin avance en rebondissant :

répéter 20 fois :
  avancer de 15 pas
  si (le lutin touche le bord) alors :
    tourner de 180 degrés

La boucle répète 20 fois le geste (avancer, puis éventuellement rebondir). C'est la combinaison boucle + condition qui donne vie aux comportements complexes.

Organigramme d'une instruction conditionnelle si … alors … sinon … Un losange de test au centre, branche gauche « oui » vers instructions A (bloc terracotta), branche droite « non » vers instructions B (bloc violet), les deux branches rejoignent un nœud de fusion en bas, puis une flèche vers la suite. Début condition vraie ? oui Instructions A (si vrai) non Instructions B (si faux) Suite du programme Structure si … alors … sinon …
Organigramme d'une instruction conditionnelle si … alors … sinon …

Combiner les conditions : les comparaisons

Une condition peut utiliser des comparaisons (=, >, <, , , ) ou des opérateurs logiques (« et », « ou », « non »).

Exemple 4. Tester si une valeur est entre deux bornes :

si (x) > 0 et (x) < 10 alors :
  dire « x est entre 0 et 10 »

Le piège : la condition n'est pas l'action

Karim confond la condition (le test, ce qu'on évalue) et l'action (ce qu'on exécute si c'est vrai). La structure est toujours : on teste d'abord (vrai ou faux ?), puis on agit selon le résultat. La condition « le lutin touche le bord » est un test ; « tourner de 180 degrés » est l'action. Les deux sont des choses distinctes.

À RETENIR

« si (condition) alors (instructions A) sinon (instructions B) » exécute A si la condition est vraie, B sinon. Une condition vaut vrai ou faux : ne la confonds pas avec l'action qu'elle déclenche. Boucle et condition se combinent pour créer des comportements complexes.

Pièges classiques

  1. Croire que l'ordre des instructions n'a pas d'importance. Un programme est une séquence : « avancer de 100 puis tourner de 90° » ne trace pas la même chose que « tourner de 90° puis avancer de 100 ». L'ordre est fondamental.

  2. Confondre affectation et égalité mathématique. « Mettre [x] à (x) + 1 » n'est pas l'équation x=x+1 : c'est une opération sur une boîte. On lit l'ancienne valeur, on lui ajoute 1, et on range le résultat. L'affectation remplace la valeur précédente.

  3. Oublier d'initialiser une variable. Une variable ne part pas de 0 toute seule. Tant qu'on n'a pas écrit « mettre [compteur] à 0 », sa valeur de départ est inconnue. Toujours initialiser avant d'utiliser.

  4. Erreur de un dans une boucle (off-by-one). « Répéter 3 fois » au lieu de « répéter 4 fois » laisse le carré ouvert. Compte le nombre exact de fois que le geste complet doit se produire.

  5. Confondre la condition et l'action dans un « si ». La condition est un test (vrai ou faux) ; l'action est l'instruction exécutée si ce test est vrai. Ce sont deux rôles distincts dans la structure conditionnelle.

  6. Croire qu'une boucle « tant que » s'exécute toujours au moins une fois. Si la condition est déjà vraie avant d'entrer dans la boucle, on n'exécute pas le corps une seule fois : on sort immédiatement (en Scratch, « répéter jusqu'à ce que » fonctionne ainsi). Toujours vérifier la valeur initiale avant la boucle.

Application concrète

Yasmine veut programmer un motif de zellige sur Scratch : le lutin doit dessiner plusieurs carrés de taille décroissante, compter le nombre de carrés tracés, et s'arrêter automatiquement quand il en a dessiné 4.

Étape 1 — Initialiser les variables.

Yasmine crée deux variables : compteur (pour compter les carrés) et cote (pour la longueur du côté). Elle les initialise avant tout dessin :

mettre [compteur] à 0
mettre [cote] à 100

Étape 2 — La boucle principale (« tant que »).

Elle veut dessiner des carrés tant que compteur est inférieur à 4 :

répéter jusqu'à ce que (compteur) = 4 :
  [dessiner un carré de côté (cote)]
  ajouter 1 à [compteur]
  mettre [cote] à (cote) - 20

À chaque tour, elle dessine un carré, incrémente le compteur, et réduit le côté de 20 pas.

Étape 3 — La sous-boucle : dessiner un carré (boucle « répéter 4 fois »).

Le bloc « dessiner un carré » est lui-même une boucle :

stylo en position d'écriture
répéter 4 fois :
  avancer de (cote) pas
  tourner de 90 degrés
relever le stylo

La boucle imbriquée s'exécute 4 fois à l'intérieur de chaque tour de la boucle principale.

Étape 4 — Condition de fin avec message.

À la sortie de la boucle principale :

si (compteur) = 4 alors :
  dire « Motif terminé ! »

Étape 5 — Trace d'exécution complète.

Tour de boucle compteur en entrée cote en entrée Carré tracé compteur en sortie cote en sortie
1 0 100 côté 100 1 80
2 1 80 côté 80 2 60
3 2 60 côté 60 3 40
4 3 40 côté 40 4 20

Au début du 5ᵉ tour, compteur vaut 4 : la condition « compteur = 4 » est vraie, on sort de la boucle. La condition finale est vraie, le lutin dit « Motif terminé ! ».

Erreur de Karim corrigée. Karim avait oublié d'écrire « mettre [compteur] à 0 » au début. Résultat : la valeur initiale de compteur était inconnue, et la boucle « tant que » pouvait s'arrêter immédiatement ou ne jamais s'arrêter. Avec l'initialisation, tout est prévisible.

Conclusion. Avec ces quatre briques — séquence, variable, boucle, condition — Yasmine a construit un programme non trivial : boucle imbriquée, variable qui évolue, condition de sortie. Ces structures ne sont pas propres à Scratch : en 2nde, tu les retrouveras mot pour mot en Python, sous une syntaxe différente mais une logique identique. Programmer, c'est apprendre à décomposer une intention en instructions claires ; cette compétence se transfère à tous les langages.

À retenir

À RETENIR

Un algorithme est une suite finie d'instructions précises. Un programme est sa traduction en blocs Scratch (ou dans un autre langage). Les instructions s'exécutent en séquence : dans l'ordre, de haut en bas. Changer l'ordre peut changer le résultat.

À RETENIR

Une variable est une boîte nommée qui retient une valeur pouvant changer. On l'initialise avant de l'utiliser (« mettre [x] à 0 »). L'affectation « mettre [x] à (x) + 1 » n'est pas une équation : c'est une mise à jour de la boîte.

À RETENIR

La boucle « répéter n fois » exécute exactement n fois un groupe d'instructions. La boucle « tant que » s'arrête dès qu'une condition devient vraie. Vérifie toujours le nombre de répétitions (erreur de un fréquente).

À RETENIR

L'instruction conditionnelle « si (condition) alors … sinon … » exécute des instructions différentes selon que la condition est vraie ou fausse. Une condition vaut toujours vrai ou faux. Boucle et condition se combinent pour créer des programmes complexes.

Passe à la pratique
Entraîne-toi avec les exercices corrigés de ce chapitre.
Exercices corrigés →