Python Πρόγραμμα για ανταλλαγή δύο αριθμών χωρίς τη χρήση τρίτης μεταβλητής
⚡ Έξυπνη Σύνοψη
ανταλλαγήςping Δύο αριθμοί χωρίς τρίτη μεταβλητή ανταλλάσσουν τις τιμές τους χρησιμοποιώντας αριθμητική πρόσθεση και υποδιαίρεση.tracση, ο τελεστής XOR κατά bit, ή αριθμητικά κόλπα κατά bit. Python μπορεί επίσης να ανταλλάξει απευθείας με αποσυσκευασία πλειάδων.

Οι παρακάτω ενότητες καλύπτουν τέσσερις τρόπους εναλλαγής χωρίς προσωρινή μεταβλητή, καθώς και αριθμητική υπερχείλιση.
Στις γλώσσες προγραμματισμού, η ανταλλαγήping σημαίνει την ανταλλαγή τιμών δύο μεταβλητών. Η μεταβλητή μπορεί να περιέχει έναν αριθμό, μια συμβολοσειρά, μια λίστα ή έναν πίνακα, ένα αντικείμενο κ.λπ. Ο γενικός τρόπος ανταλλαγήςping είναι η χρήση μιας προσωρινής μεταβλητής για τη διατήρηση τιμών. Για παράδειγμα,
Τα γενικά βήματα της ανταλλαγήςping δύο αριθμοί είναι:
- Δηλώστε μια προσωρινή μεταβλητή C
- Εκχωρήστε την τιμή του A στο C, που σημαίνει C = A. Τώρα C = 20
- Εκχωρήστε την τιμή του B στο A, οπότε A = 30
- Εκχωρήστε την τιμή του C στο B, οπότε B = 20, καθώς το C έχει την τιμή 20.
Έτσι είναι η ανταλλαγήping γίνεται με τη βοήθεια μιας προσωρινής μεταβλητής και λειτουργεί τόσο για ακέραιους όσο και για αριθμούς κινητής υποδιαστολής.
Ανταλλαγή χρησιμοποιώντας την Αριθμητική Εξίσωση
Όπως γνωρίζουμε, η ανταλλαγήping σημαίνει ανταλλαγή του περιεχομένου δύο αντικειμένων ή πεδίων ή μεταβλητών. Η ανταλλαγή χρησιμοποιώντας μια αριθμητική πράξη σημαίνει εκτέλεση της ανταλλαγής χρησιμοποιώντας μια μαθηματική εξίσωση, δηλαδή πρόσθεση και αφαίρεση.tracσία.
Αν μας δοθούν δύο αριθμοί και μας ζητηθεί να τους ανταλλάξουμε χωρίς να χρησιμοποιήσουμε μια προσωρινή μεταβλητή, τότε χρησιμοποιώντας τρεις αριθμητικές εξισώσεις, μπορούμε να ανταλλάξουμε τους αριθμούς.
Ψευδοκώδικας για ανταλλαγήping αριθμοί χρησιμοποιώντας μια αριθμητική πράξη:
A = A + B B = A - B A = A - B
Ας υποθέσουμε ότι έχουμε δύο αριθμούς, A = 20 και B = 30.
Συνθήκη 1: Α = Α+Β
Έτσι, η τρέχουσα τιμή του A είναι 20+30 = 50
Συνθήκη 2: Β = ΑΒ
Τώρα, Β = 50-30 = 20
Μπορούμε να δούμε ότι πήραμε την τιμή του Α στο Β.
Συνθήκη 3: Α = ΑΒ
Τέλος, Α = 50-20 = 30
Το Α έχει την αρχική τιμή του Β.
Έτσι, απλώς ανταλλάξαμε τους αριθμούς.
Εδώ είναι το πρόγραμμα για την ανταλλαγή δύο αριθμών σε 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); }
Παραγωγή:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Πρόγραμμα στο 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))
Παραγωγή:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Τώρα σε Python, δεν χρειάζεται καν να εκτελέσουμε αριθμητικές πράξεις. Μπορούμε να χρησιμοποιήσουμε:
α,β = β,α
Ακολουθεί μια επίδειξη όπου a=20, b=30;
Εναλλάξτε χρησιμοποιώντας Bitwise XOR OperaTor
Αυτή η μέθοδος είναι επίσης γνωστή ως ανταλλαγή XOR. XOR σημαίνει αποκλειστικό OR. Λαμβάνουμε δύο bit ως εισόδους στο XOR σε αυτήν την λειτουργία ανά bit. Για να λάβουμε μία έξοδο από το XOR, μόνο μία είσοδος πρέπει να είναι 1. Διαφορετικά, η έξοδος θα είναι 0. Ο παρακάτω πίνακας δείχνει την έξοδο για όλους τους συνδυασμούς εισόδου A και B.
Πρέπει να γνωρίζουμε πώς λειτουργεί η λειτουργία XOR για την ανταλλαγή δύο αριθμών χρησιμοποιώντας τη λειτουργία bitwise. Ακολουθεί ένας πίνακας για το XOR όπου A και B είναι οι τιμές εισόδου.
| A | B | A XOR B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Αν δύο είσοδοι έχουν την ίδια τιμή, τότε η λειτουργία XOR δίνει 0. Διαφορετικά, 1. Για αυτό το παράδειγμα, θα χρησιμοποιήσουμε μια λειτουργία XOR 3. Στις περισσότερες γλώσσες προγραμματισμού, το XOR συμβολίζεται ως "^".
Ας υποθέσουμε A=4 (σε Δυαδικό = 0100) και B=7 (σε Δυαδικό, 0111)
Συνθήκη 1: Α = Α ^ Β
| A | 0 | 1 | 0 | 0 |
| B | 0 | 1 | 1 | 1 |
| Α ^ Β | 0 | 0 | 1 | 1 |
Τώρα, A = 0011 (σε δυαδικό).
Συνθήκη 2: Β = Α^Β
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 1 | 1 |
| Α ^ Β | 0 | 1 | 0 | 0 |
Άρα B = 0100, που ήταν η αρχική δυαδική τιμή του A.
Συνθήκη 3: Α = Α^Β
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 0 | 0 |
| Α ^ Β | 0 | 1 | 1 | 1 |
Τέλος, A = 0111, που ήταν η ισοδύναμη δυαδική τιμή του B.
Πρόγραμμα σε 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); }
Παραγωγή:
Enter value of A:4 Enter value of B:7 A=4, B=7 Now, A=7, B=4.
Πρόγραμμα στο 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))
Παραγωγή:
Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.
ανταλλαγής Numbers χρησιμοποιώντας Bitwise-Arithmetic
Αυτή η μέθοδος είναι η ίδια με την αριθμητική μέθοδο, αλλά θα χρησιμοποιήσουμε πράξεις bit όπως AND, OR και συμπλήρωμα για να εκτελέσουμε πρόσθεση και υποδιαίρεση.tracση. Πριν προχωρήσουμε στα βήματα, ας δούμε γρήγορα το «συμπλήρωμα».
Το συμπλήρωμα ως προς 1 σημαίνει ότι αλλάζουμε όλα τα 0 σε 1 και το 1 σε 0. Ας πάρουμε ένα παράδειγμα.
- Ας υποθέσουμε ότι ο αριθμός 23 είναι ένας δεκαδικός αριθμός.
- Η μετατροπή σε δυαδικό μας δίνει 10111. Υπάρχουν μόνο 5 bit, αλλά ο υπολογιστής αποθηκεύει αριθμούς σε 8, 16, 32, 64 … bit. Ας προσθέσουμε λοιπόν μηδέν μπροστά από το δυαδικό. Δεν θα αλλάξει η αρχική τιμή του αριθμού. Έτσι θα γίνει 00010111.
- Όπως γνωρίζουμε, το συμπλήρωμα ως προς το 1 σημαίνει αλλαγή όλων των 0 σε 1 και του 1 σε 0, επομένως η εκτέλεση του συμπληρώματος ως προς το 1 πάνω από 00010111 δίνει 11101000.
Αυτό το συμπλήρωμα ως προς το 1 αναπαρίσταται με το σύμβολο "~" στις περισσότερες γλώσσες προγραμματισμού. Η τοποθέτηση αυτού του συμβόλου πριν από οποιεσδήποτε ακέραιες τιμές ή τιμές κινητής υποδιαστολής θα δώσει το συμπλήρωμα ως προς το 1.
Και το συμπλήρωμα του 2 σημαίνει την προσθήκη δυαδικού "1" στο συμπλήρωμα του 1. Αν κάνουμε συμπλήρωμα 2 στον παραπάνω αριθμό:
- Δυαδικό = 00010111
- Συμπλήρωμα ως προς 1 = 11101000
- Συμπλήρωμα ως προς 2:
11101000
+ 1
11101001
Άρα, το συμπλήρωμα του 2 είναι 11101001. Αυτό είναι το Δυαδικό για -23.
Συνοπτικά, για την εκτέλεση του συμπληρώματος 2 ενός αριθμού Α, θα μοιάζει με:
Συμπλήρωμα 2 του A = (~A) + 1
Τώρα ας υποθέσουμε A=8 (δυαδικό 00001000), B=10 (00001010)
Συνθήκη 1: A = (A & B) + (A | B)
Είναι ισοδύναμο με A = A + B.
A & B = 00001000 & 00001010 = 00001000
A | B = 00001000 | 00001010 = 00001010
Τώρα, 00001000 + 00001010 = 00010010 (δεκαδικός αριθμός 18)
Άρα, Α = 18
Συνθήκη 2: B = A + (~B) + 1
Είναι ισοδύναμο με B = AB
Εδώ, Β = Α – Β
Από την παραπάνω συζήτηση, αν χρειαστεί να εκτελέσουμε υπο-tracση, εκτελούμε συμπλήρωμα ως προς 2 στον αρνητικό αριθμό και στη συνέχεια τον προσθέτουμε.
Άρα, -B = ~B + 1
Τώρα, Β = 00010010 + (11110101) + 1 = 00001000
Η τιμή του B είναι ισοδύναμη με το δεκαδικό 8, που ήταν η αρχική τιμή.
Συνθήκη 3: A = A + (~B) + 1
Είναι ισοδύναμο με A = AB
Τώρα, A = 00010010 + 11110111 + 1
A = 00001010 (ισοδύναμο με δεκαδικό 10)
Τελικά, ο Α πήρε την τιμή του Β. Έτσι, η ανταλλαγήping ολοκληρώθηκε.
Πρόγραμμα σε 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); }
Παραγωγή:
Enter the value of A: 8 Enter the value of B:10 A=8, B=10 Now, A=10, B=8
Πρόγραμμα στο 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))
Παραγωγή:
Enter the value of A: 25 Enter the value of B: 25 A = 25 and B = 25 Now, A = 25 and B = 25
Τι είναι η Αριθμητική Υπερχείλιση;
Ο όρος υπερχείλιση σημαίνει υπέρβαση του ορίου. Αριθμητική υπερχείλιση σημαίνει ότι το αποτέλεσμα οποιασδήποτε αριθμητικής πράξης υπερβαίνει το εύρος ή το όριο της αριθμητικής αναπαράστασης της αρχιτεκτονικής του υπολογιστή. Για παράδειγμα, εάν ένας αριθμός διαιρεθεί με το μηδέν, γίνεται άπειρος και το αριθμητικό σύστημα του υπολογιστή δεν μπορεί να τον χωρέσει σε 32 ή 64 bit.
Αναπαράσταση ακέραιου αριθμού σε σύστημα 32 bit
Η συνέπεια της αριθμητικής υπερχείλισης μπορεί να είναι:
- Η πρόσθεση δύο θετικών αριθμών γίνεται αρνητική, επειδή το bit πρόσημου μπορεί να γίνει 1, που σημαίνει αρνητικός αριθμός.
- Η πρόσθεση δύο αρνητικών αριθμών γίνεται θετική, επειδή το bit πρόσημου μπορεί να γίνει 0, που σημαίνει θετικός αριθμός.



