Intercambiar dos números sin variable

En muchos casos, los programadores deben intercambiar valores de dos variables. Aquí, aprenderemos cómo intercambiar valores de dos variables enteras, que pueden conducir a intercambiar valores de cualquier tipo. Los valores entre variables se pueden intercambiar de dos formas:

  • Con ayuda de una tercera variable (temp)
  • Sin usar ninguna variable temporal

Ya hemos aprendido el primer método . Aquí aprenderemos el segundo método. Aunque parece una magia, es solo un pequeño truco. Imagina que ahora tenemos dos números 1 y 2 almacenados en ayb respectivamente -

  • Si sumamos ayb (1 + 2) y lo almacenamos en a, a se convertirá en 3 y b seguirá siendo 2.

  • Ahora restamos b (2) del nuevo valor de a (3) y lo almacenamos en b, entonces a sigue siendo 3 y b se convierte en 1. Observe que 1 era antes mantenido por a.

  • Ahora restamos b, que tiene un nuevo valor (1) de a (3) y lo almacenamos en b (a = 3 - 1), luego a tiene el valor 2 que antes tenía b.

  • Conclusión: los valores se intercambian.

Algoritmo

Ahora definiremos el procedimiento mencionado anteriormente de manera algorítmica paso a paso:

START
   Var1, Var2
   Step 1 → Add Var1 and Var2 and store to Var1
   Step 2 → Subtract Var2 from Var1 and store to Var2
   Step 3 → Subtract Var2 from Var1 and store to Var1
STOP

Pseudocódigo

A partir del algoritmo anterior, podemos dibujar un pseudocódigo para este programa:

procedure swap(a, b)

   a ← a + b    // a holds the sum of both
   b ← a - b    // b now holds the value of a
   a ← a - b    // a now holds value of b

end procedure

Implementación

La implementación en C del algoritmo anterior debería verse así:

#include <stdio.h>

int main() {
   int a, b;

   a = 11;
   b = 99;

   printf("Values before swapping - \n a = %d, b = %d \n\n", a, b);

   a = a + b;  // ( 11 + 99 = 110)
   b = a - b;  // ( 110 - 99 = 11)
   a = a - b;  // ( 110 - 11 = 99)

   printf("Values after swapping - \n a = %d, b = %d \n", a, b);
}

Salida

La salida de este programa debe ser:

Values before swapping -
 a = 11, b = 99                                         
 
Values after swapping -
 a = 99, b = 11