Exercice 1 : Variables et trace d'exécution
On considère le programme suivant. Répondez sans machine : savoir suivre une exécution à la main est exactement ce qui est évalué.
a = 5
b = 3
a = a + b
b = a - b
a = a - b
print(a, b)- a) Dressez le tableau des valeurs successives de a et de b, ligne par ligne, et donnez ce qui est affiché.
- b) Que réalise ce programme, quelles que soient les valeurs initiales ?
- c) Écrivez le programme qui réalise la même chose en utilisant une troisième variable.
- d) Que va afficher le programme suivant : x = 7, puis y = x, puis x = 10, puis print(y) ? Expliquez.
Voir la correction
a) Après les deux premières lignes, a vaut 5 et b vaut 3. La ligne `a = a + b` donne a = 8, b inchangé à 3. La ligne `b = a - b` donne b = 8 - 3 = 5, a inchangé à 8. La ligne `a = a - b` donne a = 8 - 5 = 3. Le programme affiche donc 3 5.
b) Il échange le contenu des deux variables, sans utiliser de variable supplémentaire. On est parti de a = 5 et b = 3, on arrive à a = 3 et b = 5.
c) Avec une variable auxiliaire, on écrit : `c = a` puis `a = b` puis `b = c`. C'est la version que l'on écrit en pratique, car elle fonctionne avec n'importe quel type de données, alors que la version de l'énoncé n'a de sens que pour des nombres.
d) Il affiche 7. Au moment de l'affectation `y = x`, Python range dans y la valeur que x contient alors, c'est-à-dire 7. Modifier x ensuite ne modifie pas y : une affectation copie une valeur, elle ne crée pas de lien permanent entre deux variables.
c = a
a = b
b = c