Matières › 📐 Mathématiques › Collège › Algorithmes et programmation
💻

Algorithmes et programmation

Variables, boucles, conditions, pseudo-code et Scratch

Voici une ligne que tu vas croiser dans tous les programmes du monde :

x←x+1x \leftarrow x + 1
Lis-la comme une égalité mathématique et elle est absurde. Aucun nombre ne vérifie x=x+1x = x + 1 : en retirant xx des deux côtés, il resterait 0=10 = 1. Pourtant cette ligne est parfaitement correcte en programmation, et elle s'exécute des milliards de fois par seconde dans les machines autour de toi.

Comment une chose impossible peut-elle être juste ?

Parce que la flèche ne dit pas « est égal à ». Elle dit « reçoit ». La machine lit l'ancienne valeur de xx, lui ajoute 11, puis range le résultat dans xx, écrasant ce qu'il y avait. Si xx valait 77 avant la ligne, il vaut 88 après. Rien n'est affirmé : quelque chose est fait, et le temps est passé entre les deux côtés de la flèche.

Tout le chapitre tient dans ce basculement. En mathématiques, xx désigne un nombre fixe qu'on cherche à connaître. En algorithmique, xx désigne une case mémoire dont le contenu change au fil de l'exécution. Confondre les deux, c'est ne plus rien comprendre à un programme dès la troisième ligne.

Un algorithme est une suite finie et non ambiguë d'instructions permettant de résoudre un problème. Les trois structures fondamentales — séquence, condition, boucle — suffisent à exprimer n'importe quel calcul, du plus simple au moteur de recherche.

Pour déboguer un algorithme, une seule technique vaut vraiment : tracer son exécution ligne par ligne dans un tableau de valeurs — une colonne par variable, une ligne par étape. On y voit chaque affectation faire son effet, et l'erreur saute aux yeux.

Deux types de boucles : la boucle bornée (pour\mathtt{pour}) avec un nombre fixé de tours ; la boucle non bornée (tant que\mathtt{tant\ que}) qui continue tant qu'une condition reste vraie.

📖 Vocabulaire clé

Algorithme : Suite finie et non ambiguë d'instructions qui résout un problème donné. Chaque étape doit être suffisamment précise pour être exécutée mécaniquement.
Variable : Espace mémoire nommé qui stocke une valeur. Une variable peut contenir un nombre, du texte, etc. Sa valeur peut changer au cours de l'exécution.
Affectation : Instruction x←valeurx \leftarrow \text{valeur} qui donne une nouvelle valeur à la variable xx. Attention : x←x+1x \leftarrow x + 1 n'est pas une équation, c'est une mise à jour.
Boucle : Structure qui répète un bloc d'instructions. La boucle bornée (pour\mathtt{pour}) a un nombre fixé de tours ; la boucle non bornée (tant que\mathtt{tant\ que}) continue jusqu'à ce qu'une condition devienne fausse.
Et en Scratch ? : Le pseudo-code du cours se traduit bloc par bloc dans Scratch, le langage du brevet.

x←0x \leftarrow 0 est le bloc « mettre x à 0 » ; x←x+1x \leftarrow x + 1 est « ajouter 1 à x ».

pour  i  de  1  aˋ  10\mathtt{pour}\; i\; \mathtt{de}\; 1\; \mathtt{à}\; 10 est « répéter 10 fois ».

tant que\mathtt{tant\ que} (condition) est « répéter jusqu'à » — attention, la condition y est contraire : « tant que n>1n > 1 » devient « répéter jusqu'à n<2n < 2 » pour un entier nn.

si…alors…sinon\mathtt{si} \ldots \mathtt{alors} \ldots \mathtt{sinon} est le bloc « si … alors … sinon ».

📋 Les trois structures de base

  1. 1 Séquence : les instructions s'exécutent dans l'ordre, l'une après l'autre. C'est la structure la plus simple.
  2. 2 Condition : si\mathtt{si} (condition) alors\mathtt{alors} (bloc A) sinon\mathtt{sinon} (bloc B). Exécution conditionnelle — un seul des deux blocs s'exécute.
  3. 3 Boucle bornée : pour  i  de  1  aˋ  n  faire\mathtt{pour}\; i\; \mathtt{de}\; 1\; \mathtt{à}\; n\; \mathtt{faire} — nombre de tours fixé à l'avance.
    Boucle non bornée : tant que\mathtt{tant\ que} (condition) — continue jusqu'à ce que la condition devienne fausse.

✅ Exemple résolu

Énoncé : Tracer l'exécution de l'algorithme suivant :
S←0S \leftarrow 0
pour  i  de  1  aˋ  3  faire\mathtt{pour}\; i\; \mathtt{de}\; 1\; \mathtt{à}\; 3\; \mathtt{faire}
S←S+i2\quad S \leftarrow S + i^2
fin pour\mathtt{fin\ pour}
Démarche :
  1. Initialisation : S=0S = 0.
  2. Tour i=1i = 1 : S←0+12=1S \leftarrow 0 + 1^2 = 1.
    Tour i=2i = 2 : S←1+22=1+4=5S \leftarrow 1 + 2^2 = 1 + 4 = 5.
    Tour i=3i = 3 : S←5+32=5+9=14S \leftarrow 5 + 3^2 = 5 + 9 = 14.
  3. La boucle est terminée (ii a atteint 33). La valeur finale de SS est 14=12+22+3214 = 1^2 + 2^2 + 3^2.
Réponse : S=14S = 14. L'algorithme calcule la somme des carrés de 11 à 33 : 1+4+9=141 + 4 + 9 = 14.

📐 Formules clés

Affectation : x←5x \leftarrow 5 (la variable xx prend la valeur 55)
Boucle bornée : pour  i  de  1  aˋ  n  faire  …\mathtt{pour}\; i\; \mathtt{de}\; 1\; \mathtt{à}\; n\; \mathtt{faire}\; \ldots
Test : si  (x>0)  alors  …  sinon  …\mathtt{si}\; (x > 0)\; \mathtt{alors}\; \ldots\; \mathtt{sinon}\; \ldots

🎨 Illustrations

Algorigramme
Une boucle bornée pas à pas : calculer S = 1² + 2² + 3²

Le même algorithme que dans l'exemple du cours, sous forme d'organigramme normalisé : rectangles pour les actions, losange pour le test de la boucle, terminaux arrondis pour le début et la fin.

Algorigramme de la boucle bornée Organigramme : debut, S recoit 0, i recoit 1, puis tant que i est inferieur ou egal a 3 on execute S recoit S plus i au carre et i recoit i plus 1 en bouclant sur le test, sinon on affiche S et on termine. Le deroulement donne S egal a 14. Début S ← 0 i ← 1 i ≤ 3 ? Oui S ← S + i² i ← i + 1 Non Afficher S Fin
  • 1 Initialisation : S ← 0 puis i ← 1, avant d'entrer dans la boucle.
  • 2 Tant que i ≤ 3 (branche « Oui ») : on exécute S ← S + i² puis i ← i + 1, et on revient tester la condition.
  • 3 Dès que i ≤ 3 devient faux, c'est-à-dire à i = 4 (branche « Non ») : on sort de la boucle et on affiche S.
Ce qu'il faut lire : Suis la boucle « Oui » qui revient sur le losange tant que i ≤ 3 ; dès qu'elle devient fausse, la branche « Non » mène à l'affichage du résultat.
Algorigramme de l'exemple du cours : S←0S \leftarrow 0, pour i de 1 aˋ 3\mathtt{pour}\ i\ \mathtt{de}\ 1\ \mathtt{à}\ 3, S←S+i2S \leftarrow S + i^2, ce qui donne S=12+22+32=14S = 1^2+2^2+3^2 = 14.
Piège
Une affectation n'est pas une équation

x=x+1x = x + 1 est impossible en mathématiques, et pourtant x←x+1x \leftarrow x + 1 s'écrit tous les jours en algorithmique. La raison tient en une image : la flèche ne compare pas deux choses, elle remplace l'ancienne valeur par la nouvelle. Voici les valeurs, ligne à ligne, pendant l'exécution de l'exemple du cours.

Table des valeurs successives pendant la boucle Un tableau de suivi donne les valeurs des deux variables apres chaque instruction de l'algorithme du cours. Au depart, la somme vaut zero et le compteur vaut un. Apres la premiere addition la somme vaut un, puis le compteur passe a deux. Apres la deuxieme addition la somme vaut cinq, puis le compteur passe a trois. Apres la troisieme addition la somme vaut quatorze, puis le compteur passe a quatre. Comme quatre est superieur a trois, la boucle s'arrete et la somme finale vaut quatorze, ce qui est bien un plus quatre plus neuf. A chaque ligne, la nouvelle valeur d'une variable remplace l'ancienne au lieu de s'y ajouter comme le ferait une equation. instruction exécutée somme compteur au départ 0 1 la somme reçoit somme plus 1 au carré 1 1 le compteur reçoit compteur plus 1 1 2 la somme reçoit somme plus 2 au carré 5 2 le compteur reçoit compteur plus 1 5 3 la somme reçoit somme plus 3 au carré 14 3 le compteur reçoit compteur plus 1 14 4 4 dépasse 3, la boucle s'arrête 14 4 la valeur en gras vient de remplacer celle de la ligne au-dessus
  • 1 Lis une ligne à la fois. À chaque ligne, une seule des deux variables change : celle que l'instruction nomme à gauche de la flèche. L'autre garde sa valeur.
  • 2 Regarde la ligne « le compteur reçoit compteur plus 11 » quand le compteur vaut 11 : il passe à 22. Il n'y a aucune contradiction, parce que le 11 de droite est l'ancienne valeur et le 22 de gauche la nouvelle.
  • 3 C'est pour cela que l'ordre des instructions compte en algorithmique alors qu'il ne compte pas dans un système d'équations. Intervertir deux lignes change le résultat.
  • 4 La somme suit le même mécanisme : 00, puis 11, puis 55, puis 1414. Chaque valeur est l'ancienne plus le nouveau carré, et elle écrase l'ancienne.
  • 5 On retrouve bien 14=1+4+914 = 1 + 4 + 9, le résultat annoncé par l'algorigramme. Une table de ce genre est le moyen le plus sûr de vérifier un algorithme dont tu doutes.
Ce qu'il faut lire : Une table de suivi se remplit de haut en bas, une instruction par ligne, sans jamais sauter d'étape. La colonne qui change est celle de la variable nommée avant la flèche.
Table de suivi de l'algorithme du cours : valeurs de la somme et du compteur après chaque instruction, jusqu'au résultat 1414.

❌ Une erreur, une suggestion

❌ L'erreur fréquente

l'affectation x←x+1x \leftarrow x + 1 signifie « prendre la valeur actuelle de xx, y ajouter 11, et stocker le résultat dans xx ».

✅ La suggestion

Ce n'est pas une équation : x=x+1x = x + 1 est impossible en maths, mais parfaitement valide en algorithmique.

💡 À retenir

  • Les trois structures fondamentales sont la séquence, la condition (si/sinon\mathtt{si/sinon}) et la boucle (pour\mathtt{pour} ou tant que\mathtt{tant\ que}).
  • L'affectation x←x+1x \leftarrow x + 1 n'est PAS une équation : c'est une mise à jour qui lit l'ancienne valeur, calcule, et stocke le résultat.
  • Tracer l'exécution dans un tableau (une ligne par étape, une colonne par variable) est la méthode la plus sûre pour comprendre et déboguer.
  • Une boucle bornée (pour\mathtt{pour}) a un nombre de tours fixé à l'avance ; une boucle non bornée (tant que\mathtt{tant\ que}) peut tourner indéfiniment si la condition ne devient jamais fausse.