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,

Scambia due Numbers

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;

Scambia utilizzando l'equazione aritmetica

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 0001011111101000

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.

Rappresentazione dei numeri interi
Rappresentazione di numeri interi in un sistema a 32 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.