Zamień dwie liczby bez użycia trzeciej zmiennej: C, Python Program
W programowaniu zamiana języka oznacza zamianę wartości dwóch zmiennych. Zmienna może zawierać liczbę, ciąg znaków, listę lub tablicę, obiekt itp. Ogólnym sposobem zamiany jest użycie zmiennej tymczasowej do przechowywania wartości. Na przykład,
Ogólne kroki zamiany dwóch liczb są następujące:
- Zadeklarowana zmienna tymczasowa C
- Przypisz wartość A do C, czyli C = A. Teraz C = 20
- Przypisz wartość B do A, więc A = 30
- Przypisz wartość C do B, więc B = 20, ponieważ C ma wartość 20.
Tak odbywa się zamiana za pomocą zmiennej tymczasowej. Ta metoda będzie działać zarówno dla liczb całkowitych, jak i liczb zmiennoprzecinkowych.
Zamień za pomocą równania arytmetycznego
Jak wiemy, zamiana oznacza zamianę zawartości dwóch obiektów, pól lub zmiennych. Zamiana za pomocą operacji arytmetycznej oznacza wykonanie operacji zamiany za pomocą równania matematycznego, tj. dodawania i odejmowania.
Jeśli mamy podane dwie liczby i poproszono nas o zamianę ich bez użycia zmiennej tymczasowej, możemy zamienić je za pomocą trzech równań arytmetycznych.
Pseudokod do zamiany liczb za pomocą operacji arytmetycznej:
A = A + B B = A - B A = A - B
Załóżmy, że mamy dwie liczby: A = 20 i B = 30.
Warunek 1: A = A+B
Zatem bieżąca wartość A wynosi 20+30 = 50
Warunek 2: B = AB
Teraz B = 50-30 = 20
Widzimy, że otrzymaliśmy wartość A w B
Warunek 3: A = AB
Wreszcie A = 50-20 = 30
A ma początkową wartość B.
Więc po prostu zamieniliśmy numery.
Oto program do zamiany dwóch liczb w 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); }
Wyjście:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Zaprogramuj 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))
Wyjście:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Teraz w Python, nie musimy nawet wykonywać operacji arytmetycznych. Możemy użyć:
a, b = b, a
Oto demonstracja, w której a=20, b=30;
Zamiana przy użyciu Bitwise XOR OperaTor
Ta metoda jest również znana jako zamiana XOR. XOR oznacza wyłączne OR. Bierzemy dwa bity jako dane wejściowe do XOR w tej operacji bitowej. Aby uzyskać jedno wyjście z XOR, tylko jedno wejście musi być 1. W przeciwnym razie wyjście będzie 0. Poniższa tabela pokazuje dane wyjściowe dla wszystkich kombinacji danych wejściowych A B.
Musimy wiedzieć, jak działa operacja XOR, aby zamienić dwie liczby za pomocą operacji bitowej. Oto tabela dla XOR, gdzie A i B to wartości wejściowe.
A | B | XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Jeśli dwa dane wejściowe mają tę samą wartość, operacja XOR daje 0; w przeciwnym wypadku 1. W tym przykładzie użyjemy operacji 3 XOR. W większości języków programowania XOR jest oznaczane jako „^”.
Załóżmy, że A=4 (binarnie = 0100) i B=7 (binarnie, 0111)
Warunek 1: A = ZA ^ B
A | 0 | 1 | 0 | 0 |
B | 0 | 1 | 1 | 1 |
A^B | 0 | 0 | 1 | 1 |
Teraz A = 0011 (w formacie binarnym).
Warunek 2: B = A^B
A | 0 | 0 | 1 | 1 |
B | 0 | 1 | 1 | 1 |
A^B | 0 | 1 | 0 | 0 |
Zatem B = 0100, co było początkową wartością binarną A.
Warunek 3: A = A^B
A | 0 | 0 | 1 | 1 |
B | 0 | 1 | 0 | 0 |
A^B | 0 | 1 | 1 | 1 |
Wreszcie A = 0111, co było równoważną wartością binarną B.
Programuj w 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); }
Wyjście:
Enter value of A:4 Enter value of B:7 A=4, B=7 Now, A=7, B=4.
Zaprogramuj 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))
Wyjście:
Enter the value of A:10 Enter the value of B:15 A=10 and B=15 Now, A=15,B=10.
Zamiana Numbers używając arytmetyki bitowej
Ta metoda jest taka sama jak metoda arytmetyczna, ale użyjemy operacji bitowych, takich jak AND, OR i Compliment, aby wykonać dodawanie i odejmowanie. Zanim przejdziemy do kroków, szybko przejrzyjmy „Compliment”.
Uzupełnienie 1 oznacza zamianę wszystkich 0 na 1 i 1 na 0. Spójrzmy na przykład.
- Załóżmy, że liczba 23 jest liczbą dziesiętną.
- Konwersja na format binarny daje użycie 10111. Jest tylko 5 bitów, ale komputer przechowuje liczbę w 8,16,32,64… bitach. Dodajmy więc zero przed binarnym. Nie zmieni to pierwotnej wartości liczby. Tak się stanie 00010111.
- Jak wiemy, uzupełnienie do 1 oznacza zamianę wszystkich 0 na 1 i 1 na 0, więc wykonanie uzupełnienia do 1 przez 00010111 daje 11101000
W większości języków programowania uzupełnienie tej jedynki jest reprezentowane przez ten symbol „~”. Umieszczenie tego symbolu przed jakąkolwiek wartością całkowitą lub zmiennoprzecinkową spowoduje uzupełnienie do jedynki.
A uzupełnienie do 2 oznacza dodanie binarnej „1” do uzupełnienia do 1. Jeśli uzupełnimy dwójkę do powyższej liczby:
- Binarny = 00010111
- Komplement 1 = 11101000
- Komplement 2:
11101000
+ 1
11101001
Zatem uzupełnienie 2 to 11101001. To jest binarny dla -23.
Podsumowując, wykonanie uzupełnienia liczby A do 2 będzie wyglądać następująco:
Dopełnienie 2 A = (~A) + 1
Załóżmy teraz, że A=8 (binarnie 00001000), B=10(00001010)
Warunek 1: A = (A i B) + (A | B)
Jest to równoważne A = A + B.
A i B = 00001000 i 00001010 = 00001000
| B = 00001000 | 00001010 = 00001010
Teraz 00001000 + 00001010 = 00010010 (dziesiętne 18)
Zatem A = 18
Warunek 2: B = A + (~B) + 1
Jest to odpowiednik B = AB
Tutaj B = A – B
Z powyższego omówienia wynika, że jeśli musimy wykonać odejmowanie, wykonujemy uzupełnienie 2 do liczby ujemnej, a następnie ją dodajemy.
Zatem -B = ~B + 1
Teraz B = 00010010 + (11110101) + 1 = 00001000
Wartość B jest równa liczbie dziesiętnej 8, która była wartością początkową.
Warunek 3: A = A + (~B) + 1
Jest to odpowiednik A = AB
Teraz A = 00010010 + 11110111 + 1
A = 00001010 (odpowiednik liczby dziesiętnej 10)
Ostatecznie A otrzymało wartość B. W ten sposób zamiana została zakończona.
Programuj w 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); }
Wyjście:
Enter the value of A: 8 Enter the value of B:10 A=8, B=10 Now, A=10, B=8
Zaprogramuj 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))
Wyjście:
Enter the value of A: 25 Enter the value of B: 25 A = 25 and B = 25 Now, A = 25 and B = 25
Co to jest przepełnienie arytmetyczne?
Termin przepełnienie oznacza przekroczenie limitu. Przepełnienie arytmetyczne oznacza, że wynik dowolnej operacji arytmetycznej przekracza zakres lub limit reprezentacji liczbowej architektury komputerowej. Na przykład, jeśli liczba zostanie podzielona przez zero, staje się nieskończona, a system liczbowy komputera nie może jej pomieścić w 32 lub 64 bitach.
Konsekwencją przepełnienia arytmetycznego może być:
- Dodanie dwóch dodatnich liczb staje się ujemne. Ponieważ bit znaku może stać się 1, co oznacza liczbę ujemną.
- Dodanie dwóch liczb ujemnych staje się liczbą dodatnią. Ponieważ bit znaku może stać się 0, co oznacza liczbę dodatnią.