Adloun

É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.

  1. Exécuter à la main la séquence suivante et vérifier qu'elle échange bien les valeurs.
  2. Expliquer pourquoi elle fonctionne.
  3. Sur quel type de données cette astuce échouerait-elle ?
a = a + b
b = a - b
a = a - b

Corrigé

1. Départ : , .

ligneab
a = a + b118
b = a - b113
a = a - b83

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.