Exercice 1 : Échanger deux variables
Une affectation n'est pas une égalité : le calcul écrit à droite est effectué avec les valeurs actuelles, puis le résultat ÉCRASE l'ancien contenu de la variable.
Le script ci-dessous n'utilise que deux variables, et pourtant il produit un effet que l'on croit souvent impossible sans une troisième.
quand le drapeau vert est cliqué
mettre a à 12
mettre b à 5
mettre a à a + b
mettre b à a - b
mettre a à a - b
dire a- 1) Recopiez et complétez un tableau donnant et après chacune des cinq affectations.
- 2) Que dit le lutin ? Que vaut alors ?
- 3) Que fait ce script, en une phrase ?
- 4) Démontrez-le en appelant la valeur initiale de et celle de .
- 5) Un élève propose de remplacer les trois dernières affectations par puis . Que produit sa version ?
- 6) Écrivez une version correcte utilisant une troisième variable .
Voir la correction
Réponses
- 1) , , puis
- 2) 5 ;
- 3) Échange des deux variables
- 4) et
- 5) et : 12 perdu
- 6) temp ← a ; a ← b ; b ← temp
1) On suit ligne par ligne. Après : . Après : , . Après : et . Après : , et vaut toujours . Après : . Le tableau final donne donc et .
2) Le lutin dit , et vaut . Autrement dit, chaque variable contient maintenant la valeur que l'autre contenait au départ.
3) Ce script ÉCHANGE le contenu des deux variables, sans utiliser de variable supplémentaire. C'est un procédé classique en programmation, où la mémoire disponible peut être limitée.
4) Au départ et . Après la première affectation, et . Après la deuxième, , et vaut encore . Après la troisième, . On obtient donc et pour TOUTES les valeurs de départ, et pas seulement pour et : c'est bien un échange. Le calcul littéral fait ici exactement ce que l'essai numérique ne peut pas faire, démontrer au lieu de constater.
5) Sa version détruit une information. Après , la variable vaut et l'ancienne valeur n'existe plus nulle part. La deuxième instruction recopie alors dans : on obtient et . Les deux variables portent la même valeur, et est définitivement perdu. C'est l'erreur la plus courante sur les affectations, et elle vient de lire comme l'égalité , qui, elle, serait symétrique.
6) , puis , puis . La variable conserve la valeur de avant qu'elle ne soit écrasée, ce qui permet de la restituer ensuite. Contrôle avec et : , puis , puis ✓, le même résultat qu'à la question 2. Cette version est plus lisible et fonctionne aussi sur des textes, alors que la version de l'énoncé exige des nombres, puisqu'elle additionne et soustrait.