Prohoďte dvě čísla bez použití třetí proměnné: C, Python Program

V programování znamená záměna jazyka záměnu hodnoty dvou proměnných. Proměnná může obsahovat číslo, řetězec, seznam nebo pole, objekt atd. Obecným způsobem výměny je použití dočasné proměnné k uložení hodnot. Například,

Vyměňte dva Numbers

Obecné kroky prohození dvou čísel jsou:

  • Deklarována dočasná proměnná C
  • Přiřaďte hodnotu A až C, což znamená C = A. Nyní C = 20
  • Přiřaďte hodnotu B k A, takže A = 30
  • Přiřaďte hodnotu C k B, takže B = 20, protože C má hodnotu 20.

Takto se swapování provádí pomocí dočasné proměnné. Tato metoda bude fungovat jak pro celá čísla, tak pro čísla s plovoucí desetinnou čárkou.

Swap pomocí aritmetické rovnice

Jak víme, záměna znamená výměnu obsahu dvou objektů nebo polí nebo proměnných. Swap pomocí aritmetické operace znamená provést operaci swap pomocí matematické rovnice, tj. sčítání a odčítání.

Pokud dostaneme dvě čísla a požádáme o výměnu bez použití dočasné proměnné, pak pomocí tří aritmetických rovnic můžeme čísla prohodit.

Pseudokód pro záměnu čísel pomocí aritmetické operace:

A = A + B
B = A - B
A = A - B

Předpokládejme, že máme dvě čísla, A = 20 a B = 30.

Podmínka 1:    A = A+B

                  Aktuální hodnota A je tedy 20+30 = 50

Podmínka 2:    B = AB

                   Nyní B = 50-30 = 20
                   Vidíme, že jsme dostali hodnotu A v B

Podmínka 3:    A = AB

                   Nakonec A = 50-20 = 30
                   A má počáteční hodnotu B.

Takže jsme si jen vyměnili čísla.

Zde je program pro výměnu dvou čísel v 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);
}

Výstup:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Program v 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))

Výstup:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Nyní v Python, nepotřebujeme ani provádět aritmetické operace. Můžeme použít:

a,b = b,a

Zde je ukázka, kde a=20, b=30;

Swap pomocí aritmetické rovnice

Swap pomocí Bitwise XOR OperaTor

Tato metoda je také známá jako XOR swap. XOR znamená exkluzivní OR. V této bitové operaci vezmeme dva bity jako vstupy do XOR. Chcete-li získat jeden výstup z XOR, pouze jeden vstup musí být 1. V opačném případě bude výstup 0. Následující tabulka ukazuje výstup pro všechny kombinace vstupu A B.

Potřebujeme vědět, jak funguje operace XOR, abychom prohodili dvě čísla pomocí bitové operace. Zde je tabulka pro XOR, kde A a B jsou vstupní hodnoty.

A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

Pokud dva vstupy mají stejnou hodnotu, pak operace XOR dává 0; jinak 1. V tomto příkladu použijeme operaci 3 XOR. Ve většině programovacích jazyků je XOR označován jako „^“.

Předpokládejme A=4 (binárně = 0100) a B=7 (binárně 0111)

Podmínka 1:    A = A ^ B

A 0 1 0 0
B 0 1 1 1
A ^ B 0 0 1 1

Nyní A = 0011 (binárně).

Podmínka 2:    B = A^B

A 0 0 1 1
B 0 1 1 1
A ^ B 0 1 0 0

Takže B = 0100, což byla počáteční binární hodnota A.

Podmínka 3:    A = A^B

A 0 0 1 1
B 0 1 0 0
A ^ B 0 1 1 1

Nakonec A = 0111, což byla ekvivalentní binární hodnota B.

Program v 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);
}

Výstup:

Enter value of A:4
Enter value of B:7
A=4, B=7
Now, A=7, B=4.

Program v 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))

Výstup:

Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.

výměna Numbers pomocí bitové aritmetiky

Tato metoda je stejná jako aritmetická metoda, ale k provádění sčítání a odčítání budeme používat bitové operace, jako je AND, OR a Compliment. Než přejdeme ke krokům, podívejme se rychle na „Poklonu“.

Doplněk 1 znamená změnu všech 0 na 1 a 1 na 0. Uveďme příklad.

  • Předpokládejme číslo 23, desetinné číslo.
  • Převod na binární dává použití 10111. Existuje pouze 5 bitů, ale počítač ukládá číslo v 8,16,32,64 .. bitech. Přidejme tedy nulu před Binární. Nezmění původní hodnotu čísla. Tak se to stane 00010111.
  • Jak víme, kompliment 1 znamená změnit všechny 0 na 1 a 1 na 0, takže provedení doplňku 1 přes 00010111 dává 11101000

Doplněk této 1 je ve většině programovacích jazyků reprezentován symbolem „~“. Umístěním tohoto symbolu před jakékoli celočíselné hodnoty nebo hodnoty s plovoucí desetinnou čárkou získáte doplněk 1.

A doplněk 2 znamená přidání binárního „1“ k doplňku 1. Pokud k výše uvedenému číslu doplníme 2:

  • Binární = 00010111
  • 1 kompliment = 11101000
  • kompliment 2:

          11101000

          + 1

          11101001

Takže doplněk 2 je 11101001. Toto je binární kód pro -23.
Stručně řečeno, pro provedení doplňku 2 k číslu A to bude vypadat takto:

2 je doplněk A = (~A) + 1

Nyní předpokládejme A=8 (binární 00001000), B=10(00001010)

Podmínka 1:    A = (A & B) + (A | B)

                   Je to ekvivalent A = A + B.

                   A & B = 00001000 & 00001010 = 00001000

                   A | B = 00001000 | 00001010 = 00001010

Nyní 00001000 + 00001010 = 00010010 (18 desetinných míst)

Takže A = 18

Podmínka 2: B = A + (~B) + 1

                   Jeho ekvivalent B = AB

Zde B = A – B

Z výše uvedené diskuse, pokud potřebujeme provést odčítání, provedeme doplnění 2 k zápornému číslu a poté jej sečteme.

Takže -B = ~B + 1

Nyní B = 00010010 + (11110101) + 1 = 00001000

Hodnota B je ekvivalentní desetinné 8, což byla počáteční hodnota.

Podmínka 3: A = A + (~B) + 1

                   Jeho ekvivalent A = AB

Nyní A = 00010010 + 11110111 + 1

          A = 00001010 (ekvivalent desetinného čísla 10)

Nakonec A získalo hodnotu B. Tím byla výměna dokončena.

Program v 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);
}

Výstup:

Enter the value of A: 8
Enter the value of B:10
A=8, B=10
Now, A=10, B=8

Program v 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))

Výstup:

Enter the value of A: 25
Enter the value of B: 25
A = 25 and B = 25
Now, A = 25 and B = 25

Co je aritmetický přetečení?

Pod pojmem přetečení se rozumí překročení limitu. Aritmetické přetečení znamená, že výsledek jakékoli aritmetické operace překračuje rozsah nebo limit reprezentace čísel architektury počítače. Například, pokud je číslo děleno nulou, stane se nekonečné a počítačový číselný systém jej nemůže udržet ve 32 nebo 64 bitech.

Reprezentace celých čísel
Reprezentace celočíselných čísel v 32bitovém systému

Důsledkem aritmetického přetečení může být:

  • Sečtení dvou kladných čísel bude záporné. Protože znaménkový bit se může stát 1, což znamená záporné číslo.
  • Sečtení dvou záporných čísel bude kladné. Protože znaménkový bit se může stát 0, což znamená kladné číslo.

Shrňte tento příspěvek takto: