Zamijenite dva broja bez korištenja treće varijable: C, Python program
U programiranju, zamjena jezika znači zamjenu vrijednosti dviju varijabli. Varijabla može sadržavati broj, niz, popis ili polje, objekt itd. Opći način zamjene je korištenje privremene varijable za čuvanje vrijednosti. Na primjer,
Opći koraci zamjene dva broja su:
- Deklarirana je privremena varijabla C
- Dodijelite vrijednost A do C, što znači C = A. Sada je C = 20
- Dodijelite vrijednost B A, tako da je A = 30
- Dodijelite vrijednost C B-u, tako da je B = 20, jer C ima vrijednost 20.
Tako se vrši zamjena uz pomoć privremene varijable. Ova metoda će raditi i za cijele brojeve i za brojeve s pomičnim zarezom.
Zamijenite pomoću aritmetičke jednadžbe
Kao što znamo, zamjena znači izmjenu sadržaja dvaju objekata ili polja ili varijabli. Zamjena pomoću aritmetičke operacije znači izvođenje operacije zamjene pomoću matematičke jednadžbe, tj. zbrajanja i oduzimanja.
Ako su nam dana dva broja i zamoljena da ih zamijenimo bez korištenja privremene varijable, tada pomoću tri aritmetičke jednadžbe možemo zamijeniti brojeve.
Pseudokod za zamjenu brojeva pomoću aritmetičke operacije:
A = A + B B = A - B A = A - B
Pretpostavimo da imamo dva broja, A = 20 i B = 30.
Uvjet 1: A = A+B
Dakle, trenutna vrijednost A je 20+30 = 50
Uvjet 2: B = AB
Sada, B = 50-30 = 20
Vidimo da smo dobili vrijednost A u B
Uvjet 3: A = AB
Konačno, A = 50-20 = 30
A ima početnu vrijednost B.
Dakle, samo smo zamijenili brojeve.
Evo programa za zamjenu dva broja u 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); }
Izlaz:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Programirajte u 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))
Izlaz:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
sada u Python, ne moramo čak ni izvoditi aritmetičke operacije. Možemo koristiti:
a,b = b,a
Evo demonstracije gdje je a=20, b=30;
Zamijenite koristeći bitwise XOR Operahumka
Ova metoda je također poznata kao XOR swap. XOR znači isključivo ILI. Uzimamo dva bita kao ulaze za XOR u ovoj bitovnoj operaciji. Da biste dobili jedan izlaz od XOR, samo jedan ulaz mora biti 1. U suprotnom, izlaz će biti 0. Sljedeća tablica prikazuje izlaz za sve kombinacije ulaza A B.
Moramo znati kako radi operacija XOR da bismo zamijenili dva broja korištenjem bitovne operacije. Evo tablice za XOR gdje su A i B ulazne vrijednosti.
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Ako dva ulaza imaju istu vrijednost, tada operacija XOR daje 0; inače, 1. Za ovaj primjer koristit ćemo operaciju 3 XOR. U većini programskih jezika XOR se označava kao “^”.
Pretpostavimo da je A=4 (u binarnom sistemu = 0100) i B=7 (u binarnom sistemu, 0111)
Uvjet 1: A = A ^ B
A | 0 | 1 | 0 | 0 |
B | 0 | 1 | 1 | 1 |
A ^ B | 0 | 0 | 1 | 1 |
Sada, A = 0011 (u binarnom obliku).
Uvjet 2: B = A^B
A | 0 | 0 | 1 | 1 |
B | 0 | 1 | 1 | 1 |
A ^ B | 0 | 1 | 0 | 0 |
Dakle, B = 0100, što je bila početna binarna vrijednost A.
Uvjet 3: A = A^B
A | 0 | 0 | 1 | 1 |
B | 0 | 1 | 0 | 0 |
A ^ B | 0 | 1 | 1 | 1 |
Konačno, A = 0111, što je bila ekvivalentna binarna vrijednost B.
Program u 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); }
Izlaz:
Enter value of A:4 Enter value of B:7 A=4, B=7 Now, A=7, B=4.
Programirajte u 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))
Izlaz:
Enter the value of A:10 Enter the value of B:15 A=10 and B=15 Now, A=15,B=10.
Razmijeniti Numbers koristeći Bitwise-Aritmetic
Ova metoda je ista kao aritmetička metoda, ali koristit ćemo bitwise operacije kao što su AND, OR i Compliment za izvođenje zbrajanja i oduzimanja. Prije nego što pređemo na korake, pogledajmo na brzinu “Kompliment”.
Komplement 1 znači promijeniti sve 0 u 1 i 1 u 0. Uzmimo primjer.
- Pretpostavimo broj 23, decimalni broj.
- Pretvaranje u binarni daje korištenje 10111. Postoji samo 5 bitova, ali računalo pohranjuje broj u 8,16,32,64 .. bita. Dakle, dodajmo nulu ispred binarnog. Neće promijeniti izvornu vrijednost broja. Tako će i postati 00010111.
- Kao što znamo, komplement 1 znači promijeniti sve 0 u 1 i 1 u 0, tako da izvođenje komplementa 1 preko 00010111 daje 11101000
Ovaj komplement 1 predstavljen je s “~” ovim simbolom u većini programskih jezika. Stavljanjem ovog simbola ispred bilo koje vrijednosti cijelog broja ili vrijednosti s pomičnim zarezom dobit ćete komplement 1.
A komplement 2 znači dodavanje binarne “1” komplementu 1. Ako napravimo komplement 2 na gornji broj:
- Binarno = 00010111
- Kompliment 1 = 11101000
- kompliment 2:
11101000
+ 1
11101001
Dakle, komplement broja 2 je 11101001. Ovo je binarni broj za -23.
Ukratko, za izvođenje komplementa 2 broja A, izgledat će ovako:
2 komplement od A = (~A) + 1
Sada pretpostavimo A=8 (binarno 00001000), B=10(00001010)
Uvjet 1: A = (A & B) + (A | B)
To je ekvivalentno A = A + B.
A & B = 00001000 & 00001010 = 00001000
A | B = 00001000 | 00001010 = 00001010
Sada, 00001000 + 00001010 = 00010010 (decimalno 18)
Dakle, A = 18
Uvjet 2: B = A + (~B) + 1
Njegov ekvivalent B = AB
Ovdje je B = A – B
Iz gornje rasprave, ako trebamo izvršiti oduzimanje, izvodimo komplement 2 s negativnim brojem i zatim ga zbrajamo.
Dakle, -B = ~B + 1
Sada, B = 00010010 + (11110101) + 1 = 00001000
B-ova vrijednost je ekvivalentna decimalnom broju 8, što je bila početna vrijednost.
Uvjet 3: A = A + (~B) + 1
Njegov ekvivalent A = AB
Sada, A = 00010010 + 11110111 + 1
A = 00001010 (ekvivalent decimalnom broju 10)
Konačno je A dobio vrijednost B. Time je zamjena završena.
Program u 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); }
Izlaz:
Enter the value of A: 8 Enter the value of B:10 A=8, B=10 Now, A=10, B=8
Programirajte u 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))
Izlaz:
Enter the value of A: 25 Enter the value of B: 25 A = 25 and B = 25 Now, A = 25 and B = 25
Što je aritmetičko prekoračenje?
Izraz prekoračenje znači prekoračenje ograničenja. Aritmetičko prekoračenje znači da rezultat bilo koje aritmetičke operacije premašuje raspon ili ograničenje prikaza brojeva računalne arhitekture. Na primjer, ako se broj podijeli s nulom, on postaje beskonačan, a računalni brojevni sustav ga ne može zadržati u 32 ili 64 bita.
Posljedica aritmetičkog preljeva može biti:
- Zbrajanje dvaju pozitivnih brojeva postaje negativno. Budući da bit predznaka može postati 1, što znači negativan broj.
- Zbrajanje dvaju negativnih brojeva postaje pozitivno. Budući da bit predznaka može postati 0, što znači pozitivan broj.