Scambio di due numeri senza variabile

In molti casi, ai programmatori è richiesto di scambiare i valori di due variabili. Qui impareremo come scambiare i valori di due variabili intere, il che può portare allo scambio di valori di qualsiasi tipo. I valori tra le variabili possono essere scambiati in due modi:

  • Con l'aiuto di una terza variabile (temp)
  • Senza utilizzare alcuna variabile temporanea

Abbiamo già imparato il primo metodo . Qui impareremo il secondo metodo. Anche se sembra una magia, ma è solo un piccolo trucco. Immagina di avere due numeri 1 e 2 memorizzati rispettivamente in a e b ora -

  • Se aggiungiamo aeb (1 + 2) e lo memorizziamo in a, a diventerà 3 eb è ancora 2.

  • Ora sottraiamo b (2) dal nuovo valore di a (3) e lo memorizziamo in b, quindi a è ancora 3 e b diventa 1. Nota che 1 era precedentemente mantenuto da a.

  • Ora sottraiamo b che ha un nuovo valore (1) da a (3) e lo memorizziamo in b (a = 3 - 1), quindi a mantiene il valore 2 che prima era detenuto da b.

  • Conclusione: i valori vengono scambiati.

Algoritmo

Definiremo ora la procedura sopra menzionata in modo algoritmico passo dopo 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

Pseudocodice

Dall'algoritmo di cui sopra, possiamo disegnare lo pseudocodice per questo programma -

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

Implementazione

L'implementazione C dell'algoritmo di cui sopra dovrebbe essere simile a questa:

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

Produzione

Il risultato di questo programma dovrebbe essere:

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