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