Adloun

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.

  1. Essayer d'y parvenir avec deux instructions successives a = ... puis b = ... (ou l'inverse). Que constate-t-on ?
  2. Proposer une écriture correcte.

Corrigé

1. Aucun des deux ordres ne fonctionne, et c'est tout l'intérêt de l'exercice.

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.