Un échange que deux instructions ne suffisent pas à faire
Exercice d'entraînement · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 2 — Variables, types et affectations · Affectation et séquence d'instructions
Énoncé
On part de a = 6, b = 2 et l'on veut arriver à a = 3, b = 8. On remarque que et : les deux valeurs voulues se calculent bien à partir des valeurs de départ.
- Essayer d'y parvenir avec deux instructions successives
a = ...puisb = ...(ou l'inverse). Que constate-t-on ? - Proposer une écriture correcte.
Corrigé
1. Aucun des deux ordres ne fonctionne, et c'est tout l'intérêt de l'exercice.
- En commençant par
a = a // b,avaut — mais est perdu, etb = a + bdonnerait , pas . - En commençant par
b = a + b,bvaut — mais est perdu, eta = a // bdonnerait , pas .
Chaque instruction a besoin des deux valeurs de départ, or la première des deux en détruit une.
2. Deux solutions. Sauvegarder la valeur menacée dans une variable auxiliaire :
ancien_b = b
b = a + b
a = a // ancien_b # 3
ou, mieux, utiliser l'affectation simultanée :
a, b = a // b, a + b # a = 3, b = 8
Le membre de droite est entièrement calculé avant que la moindre affectation ait lieu : les deux calculs voient donc tous les deux les valeurs initiales. C'est exactement le mécanisme qui rend a, b = b, a correct.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.