Échanger deux variables sans en créer une troisième
Exercice de TD · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 2 — Variables, types et affectations · Affectation et séquence d'instructions
Énoncé
On dispose de a = 3 et b = 8. On veut échanger leurs contenus sans utiliser a, b = b, a et sans créer de variable auxiliaire.
- Exécuter à la main la séquence suivante et vérifier qu'elle échange bien les valeurs.
- Expliquer pourquoi elle fonctionne.
- Sur quel type de données cette astuce échouerait-elle ?
a = a + b
b = a - b
a = a - bCorrigé
1. Départ : , .
| ligne | a | b |
|---|---|---|
a = a + b | 11 | 8 |
b = a - b | 11 | 3 |
a = a - b | 8 | 3 |
Les valeurs sont bien échangées.
2. Notons et les valeurs initiales. Après la première ligne, a contient : cette somme retient à elle seule les deux informations. La deuxième ligne en retire , ce qui laisse dans b. La troisième en retire ce nouveau b, c'est-à-dire , ce qui laisse dans a.
3. L'astuce repose sur l'addition et la soustraction : elle échoue sur les chaînes de caractères, où + concatène mais où - n'existe pas (TypeError). Elle est aussi risquée sur les flottants, où les arrondis peuvent faire perdre des décimales. C'est pourquoi on préfère en pratique a, b = b, a, qui fonctionne sur n'importe quel type.
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.