Scambia due numeri senza usare una terza variabile: C, Python Programma
Nella programmazione, lo scambio di lingua significa scambiare il valore di due variabili. La variabile potrebbe contenere un numero, una stringa, un elenco o un array, un oggetto, ecc. Il modo generale di scambiare è utilizzare una variabile temporanea per contenere valori. Per esempio,
I passaggi generali per scambiare due numeri sono:
- Dichiarata una variabile temporanea C
- Assegna il valore di A a C, ovvero C = A. Ora C = 20
- Assegna il valore di B ad A, quindi A = 30
- Assegna il valore di C a B, quindi B = 20, poiché C ha il valore 20.
È così che viene eseguito lo scambio con l'aiuto di una variabile temporanea. Questo metodo funzionerà sia per i numeri interi che per i numeri float.
Scambia utilizzando l'equazione aritmetica
Come sappiamo, scambiare significa scambiare il contenuto di due oggetti o campi o variabili. Scambiare utilizzando un'operazione aritmetica significa eseguire l'operazione di scambio utilizzando l'equazione matematica, ovvero addizione e sottrazione.
Se ci vengono dati due numeri e ci viene chiesto di scambiarli senza utilizzare una variabile temporanea, quindi utilizzando tre equazioni aritmetiche, possiamo scambiare i numeri.
Pseudocodice per scambiare numeri utilizzando operazioni aritmetiche:
A = A + B B = A - B A = A - B
Supponiamo di avere due numeri, A = 20 e B = 30.
Condizione 1: A = A+B
Quindi, il valore attuale di A è 20+30 = 50
Condizione 2: B = AB
Ora, B = 50-30 = 20
Possiamo vedere che abbiamo ottenuto il valore di A in B
Condizione 3: A = AB
Infine, A = 50-20 = 30
A ha il valore iniziale di B.
Quindi abbiamo semplicemente scambiato i numeri.
Ecco il programma per scambiare due numeri in C/C++:
#include<stdio.h> int main() { int a, b; printf("Enter value of A: "); scanf("%d", & a); printf("Enter value of B: "); scanf("%d", & b); printf("A = %d, B = %d", a, b); a = a + b; b = a - b; a = a - b; printf("\nNow, A = %d, B = %d", a, b); }
Produzione:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Programma in Python:
a = int(input("Enter value of A: ")) b = int(input("Enter value of B: ")) print("A = {} and B = {}".format(a, b)) a = a + b b = a - b a = a - b print("Now, A = {} and B = {}".format(a, b))
Produzione:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Ora in Python, non abbiamo nemmeno bisogno di eseguire operazioni aritmetiche. Possiamo usare:
a,b = b,a
Ecco una dimostrazione in cui a=20, b=30;
Scambio tramite XOR bit a bit Operator
Questo metodo è noto anche come scambio XOR. XOR significa OR esclusivo. Prendiamo due bit come input per lo XOR in questa operazione bit a bit. Per ottenere un output da XOR, solo un input deve essere 1. Altrimenti, l'output sarà 0. La tabella seguente mostra l'output per tutte le combinazioni di input A B.
Dobbiamo sapere come funziona l'operazione XOR per scambiare due numeri utilizzando l'operazione bit a bit. Ecco una tabella per XOR dove A e B sono valori di input.
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Se due input hanno lo stesso valore, l'operazione XOR restituisce 0; altrimenti, 1. Per questo esempio utilizzeremo un'operazione 3 XOR. Nella maggior parte dei linguaggi di programmazione, XOR è indicato come "^".
Supponiamo A=4 (in binario = 0100) e B=7(in binario, 0111)
Condizione 1: A = A^B
A | 0 | 1 | 0 | 0 |
B | 0 | 1 | 1 | 1 |
A^B | 0 | 0 | 1 | 1 |
Ora, A = 0011 (in binario).
Condizione 2: B = A^B
A | 0 | 0 | 1 | 1 |
B | 0 | 1 | 1 | 1 |
A^B | 0 | 1 | 0 | 0 |
Quindi B = 0100, che era il valore binario iniziale di A.
Condizione 3: A = A^B
A | 0 | 0 | 1 | 1 |
B | 0 | 1 | 0 | 0 |
A^B | 0 | 1 | 1 | 1 |
Infine, A = 0111, che era il valore binario equivalente di B.
Programma in C/C++:
#include<stdio.h> int main() { int a, b; printf("Enter value of A: "); scanf("%d", & a); printf("Enter value of B: "); scanf("%d", & b); printf("A = %d, B = %d", a, b); a = a ^ b; b = a ^ b; a = a ^ b; printf("\nNow, A = %d, B = %d", a, b); }
Produzione:
Enter value of A:4 Enter value of B:7 A=4, B=7 Now, A=7, B=4.
Programma in Python:
a = int(input("Enter value of A: ")) b = int(input("Enter value of B: ")) print("A = {} and B = {}".format(a, b)) a = a ^ b b = a ^ b a = a ^ b print("Now, A = {} and B = {}".format(a, b))
Produzione:
Enter the value of A:10 Enter the value of B:15 A=10 and B=15 Now, A=15,B=10.
scambiare Numbers utilizzando l'aritmetica bit a bit
Questo metodo è uguale al metodo aritmetico, ma utilizzeremo operazioni bit a bit come AND, OR e Complimento per eseguire addizioni e sottrazioni. Prima di passare ai passaggi, esaminiamo rapidamente "Complimento".
Complemento a 1 significa cambiare tutti gli 0 in 1 e 1 in 0. Facciamo un esempio.
- Assumiamo un numero 23, un numero decimale.
- La conversione in binario dà l'uso di 10111. Ci sono solo 5 bit, ma il computer memorizza il numero in 8,16,32,64... bit. Quindi aggiungiamo zero davanti al binario. Non cambierà il valore originale del numero. Così diventerà 00010111.
- Come sappiamo, il complemento a 1 significa cambiare tutti gli 0 in 1 e 1 in 0, quindi eseguire il complemento a 1 su 00010111 dà 11101000
Il complemento di questo 1 è rappresentato con "~" questo simbolo nella maggior parte dei linguaggi di programmazione. Mettendo questo simbolo prima di qualsiasi valore intero o valore in virgola mobile si otterrà il complemento di 1.
E complemento a 2 significa aggiungere “1” binario al complemento a 1. Se facciamo il complemento a 2 al numero sopra:
- Binario = 00010111
- Complimento di 1 = 11101000
- Complimento di 2:
11101000
+1
11101001
Quindi, il complemento a 2 è 11101001. Questo è il binario per -23.
In sintesi, per eseguire il complemento a 2 di un numero A, sarà simile a:
Complemento a 2 di A = (~A) + 1
Ora supponiamo A=8 (binario 00001000), B=10(00001010)
Condizione 1: A = (A e B) + (A | B)
È equivalente a A = A + B.
A e B = 00001000 e 00001010 = 00001000
A | B = 00001000 | 00001010 = 00001010
Ora, 00001000 + 00001010 = 00010010 (decimale 18)
Quindi A = 18
Condizione 2: B = LA + (~B) + 1
È equivalente a B = AB
Qui, B = A – B
Dalla discussione precedente, se dobbiamo eseguire una sottrazione, eseguiamo il complemento a 2 al numero negativo e poi lo aggiungiamo.
Quindi, -B = ~B + 1
Ora, B = 00010010 + (11110101) + 1 = 00001000
Il valore di B è equivalente al decimale 8, che era il valore iniziale.
Condizione 3: LA = LA + (~B) + 1
È equivalente a A = AB
Ora, A = 00010010 + 11110111 + 1
A = 00001010 (equivalente a 10 decimale)
Alla fine, A ha ottenuto il valore di B. Lo scambio è stato quindi completato.
Programma in C/C++:
#include<stdio.h> int main() { int a, b; printf("Enter value of A: "); scanf("%d", & a); printf("Enter value of B: "); scanf("%d", & b); printf("A = %d, B = %d", a, b); a = (a & b) + (a | b); b = a + ~b + 1; a = a + ~b + 1; printf("\nNow, A = %d, B = %d", a, b); }
Produzione:
Enter the value of A: 8 Enter the value of B:10 A=8, B=10 Now, A=10, B=8
Programma in Python:
a = int(input("Enter value of A: ")) b = int(input("Enter value of B: ")) print("A = {} and B = {}".format(a, b)) a = (a & b) + (a | b) b = a + ~b + 1 a = a + ~b + 1 print("Now, A = {} and B = {}".format(a, b))
Produzione:
Enter the value of A: 25 Enter the value of B: 25 A = 25 and B = 25 Now, A = 25 and B = 25
Che cos'è l'overflow aritmetico?
Il termine overflow significa superare il limite. Overflow aritmetico significa che il risultato di qualsiasi operazione aritmetica supera l'intervallo o il limite della rappresentazione numerica dell'architettura del computer. Ad esempio, se un numero viene diviso per zero, diventa infinito e il sistema numerico del computer non può mantenerlo in 32 o 64 bit.
La conseguenza dell'overflow aritmetico può essere:
- La somma di due numeri positivi diventa negativa. Perché il bit del segno potrebbe diventare 1, ovvero un numero negativo.
- La somma di due numeri negativi diventa positiva. Perché il bit del segno potrebbe diventare 0, ovvero un numero positivo.