Python برنامج لتبديل رقمين دون استخدام متغير ثالث
⚡ ملخص ذكي
مبادلةping يتبادل عددان بدون متغير ثالث قيمتيهما في مكانهما باستخدام الجمع والطرح الحسابيين.traction، عامل XOR الثنائي، أو حيل الحساب الثنائي. 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
يمكننا أن نرى أننا حصلنا على قيمة A في B.
الشرط 3: أ = أ ب
وأخيرا، أ = 50-20 = 30
A لها القيمة الأولية لـ 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: 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 Operaتور
تُعرف هذه الطريقة أيضًا باسم تبديل XOR. XOR اختصار لـ "أو الحصرية". في هذه العملية الثنائية، نأخذ بتّين كمدخلات لعملية XOR. للحصول على مخرج واحد من XOR، يجب أن يكون أحد المدخلين فقط 1. وإلا، فسيكون المخرج 0. يوضح الجدول التالي المخرجات لجميع تركيبات المدخلين A وB.
نحتاج إلى معرفة كيفية عمل عملية XOR لتبديل رقمين باستخدام العمليات الثنائية. إليك جدول يوضح عملية XOR حيث A و B هما قيم الإدخال.
| A | B | أ إكس أو آر ب |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
إذا كانت قيمتان المدخلتين متطابقتين، فإن عملية XOR تعطي صفرًا؛ وإلا، تعطي واحدًا. في هذا المثال، سنستخدم عملية XOR ثلاثية. في معظم لغات البرمجة، يُرمز لعملية 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++:
#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 استخدام الحساب الثنائي
هذه الطريقة هي نفسها الطريقة الحسابية، لكننا سنستخدم عمليات على مستوى البت مثل AND وOR والمكمل لإجراء عمليات الجمع والطرح.tracقبل الانتقال إلى الخطوات، دعونا نلقي نظرة سريعة على "المكمل".
المتمم الأحادي يعني تغيير جميع الأصفار إلى واحد والواحد إلى صفر. لنأخذ مثالاً.
- لنفترض أن لدينا العدد 23، وهو عدد عشري.
- التحويل إلى النظام الثنائي يعطينا 10111. يوجد 5 بتات فقط، لكن الحاسوب يخزن الأرقام في 8، 16، 32، 64... بتات. لذا، دعونا نضيف صفرًا أمام الرقم الثنائي. لن يغير ذلك القيمة الأصلية للرقم. سيصبح 00010111.
- كما نعلم، فإنّ المتمم الأحادي يعني تغيير جميع الأصفار إلى واحد والواحد إلى صفر، لذا فإنّ إجراء المتمم الأحادي على 00010111 يعطي 11101000.
يُستخدم الرمز "~" لتمثيل المتمم الأحادي في معظم لغات البرمجة. وضع هذا الرمز قبل أي قيمة عددية صحيحة أو عشرية يُعطي المتمم الأحادي.
ومكمل 2 يعني إضافة الثنائي "1" إلى مكمل 1. إذا قمنا بتكملة الرقم 2 للرقم أعلاه:
- ثنائي = 00010111
- المتمم الأحادي = 11101000
- مكمل العدد 2:
11101000
+ 1
11101001
إذن، مكمل 2 هو 11101001. هذا هو الثنائي لـ -23.
باختصار، لإجراء تكملة 2 للرقم A، سيبدو الأمر كما يلي:
تكملة 2 لـ A = (~A) + 1
والآن لنفترض أن A=8 (ثنائي 00001000)، B=10 (00001010)
الشرط 1: أ = (أ & ب) + (أ | ب)
وهو ما يعادل A = A + B.
أ و ب = 00001000 و 00001010 = 00001000
أ | ب = 00001000 | 00001010 = 00001010
الآن، 00001000 + 00001010 = 00010010 (العلامة العشرية 18)
إذن أ = 18
الشرط 2: ب = أ + (~ب) + 1
وهو ما يعادل B = AB
هنا ب = أ – ب
انطلاقاً من المناقشة السابقة، إذا كنا بحاجة إلى تنفيذ عملية فرعيةtraction، نقوم بإجراء عملية المتمم الثنائي للعدد السالب ثم نضيفه.
لذا، -ب = ~ب + 1
الآن، B = 00010010 + (11110101) + 1 = 00001000
قيمة B تعادل العلامة العشرية 8، والتي كانت القيمة الأولية.
الشرط 3: أ = أ + (~ب) + 1
وهو ما يعادل A = AB
الآن، أ = 00010010 + 11110111 + 1
أ = 00001010 (أي ما يعادل العلامة العشرية 10)
وأخيرًا، حصل A على قيمة B. وهكذا، تمت عملية التبديل.ping اكتمل.
البرنامج في ج/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 بت.
تمثيل عدد صحيح في نظام 32 بت
يمكن أن تكون نتيجة التجاوز الحسابي:
- يصبح جمع عددين موجبين سالباً، لأن بت الإشارة قد يصبح 1، مما يعني عددًا سالبًا.
- يصبح جمع عددين سالبين موجباً، لأن بت الإشارة قد يصبح 0، مما يعني عددًا موجبًا.




