Trocando Dois Números Sem Variável

Em muitos casos, os programadores são obrigados a trocar os valores de duas variáveis. Aqui, aprenderemos como trocar valores de duas variáveis ​​inteiras, o que pode levar à troca de valores de qualquer tipo. Os valores entre as variáveis ​​podem ser trocados de duas maneiras -

  • Com a ajuda de uma terceira variável (temp)
  • Sem usar qualquer variável temporária

Já aprendemos o primeiro método . Aqui aprenderemos o segundo método. Embora pareça uma mágica, mas é apenas um pequeno truque. Imagine que agora temos dois números 1 e 2 armazenados em aeb, respectivamente -

  • Se adicionarmos a e b (1 + 2) e armazená-los em a, a se tornará 3 e b ainda será 2.

  • Agora subtraímos b (2) do novo valor de a (3) e o armazenamos em b, então a ainda é 3 eb torna-se 1. Observe que 1 foi anteriormente sustentado por a.

  • Agora subtraímos b, que tem o novo valor (1) de a (3) e o armazenamos em b (a = 3 - 1), então a mantém o valor 2, anteriormente mantido por b.

  • Conclusão - os valores são trocados.

Algoritmo

Devemos agora definir o procedimento acima mencionado de maneira algorítmica passo a passo -

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

Pseudo-código

A partir do algoritmo acima, podemos desenhar um 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

Implementação

A implementação em C do algoritmo acima deve se parecer com isto -

#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);
}

Resultado

A saída deste programa deve ser -

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