Permuter deux nombres sans variable intermédiaire

Il est courant dans les cours de programmation d’avoir un exercice où l’on demande de permuter deux variables. Bien souvent, on utilise une variable intermédiaire. Mais il est tout à fait possible de s’en passer. Si cela présente peu d’intérêt niveau optimisation, en voici la démonstration en guise de challenge.

Prenons deux variables, disons num1 et num2. Attribuons leurs une valeur.

num1 = 5;
num2 = -6;

Réflêchissons ensuite à comment nous allons procéder. Vous connaissez le principe des compléments ? Faisons un test.

num1 = num1 + num2; // num1 = 5 + (-6) = -1

Nous avons donc additionné num1 et num2 ce qui produit un résultat qui ne nous convient pas. A priori, nous venons de perdre la valeur du premier nombre. Mais est-il possible de la reconstituer ? Voyons cela.

num2 = num1 - num2; // num2 = (-1) - (-6) = 5

num1 = num1 - num2; // num1 = (-1) - 5 = -6

Et hop, nous venons de permuter les deux valeurs.

Alors, comment marche cette manipulation ? Notez la manière dont la première opération est une addition et la deuxième une soustraction. Puisque num1 devient num1 + num2, il suffit de retirer num2 pour récupérer num1. Ensuite, puisque nous avons reconstitué l’une des valeurs il suffit de soustraire celle-ci pour récupérer la deuxième. Et voila notre tour de passe-passe mathématique accompli.

Il est possible de faire une manipulation équivalente avec d’autres opérateurs mathématiques. Ci-dessous la division et multiplication.

num1 = 5;
num2 = -6;

num1=num1*num2; // 5 x (-6) = -30
num2=num1/num2; // -30 / 5 = -6
num1=num1/num2; // -30 / -6 = 5

– James Poulson.