يعد تبديل قيم متغيرين عملية مهمة في البرمجة تتيح لك تبديل قيم متغيرين. يبدو أنه يكفي تعيين قيمة المتغير الأول لمتغير مؤقت ، ثم تعيين قيمة المتغير الثاني للمتغير الأول ، ثم تعيين قيمة المتغير المؤقت للمتغير الثاني. ومع ذلك ، إذا قمت بتطبيق هذه الخوارزمية في خطوتين ، فستحصل على نتيجة خاطئة.
النظر في المثال التالي:
دع المتغير أ يكون 5 والمتغير ب يكون 10. إذا تبادلنا قيم المتغيرات في خطوتين ، نحصل على:
الخطوة 1: أ = ب ؛ / / أ يساوي الآن 10
الخطوة 2: ب = أ ؛ / / ب يساوي الآن أيضا 10
وبالتالي ، فإن كلا القيمتين تساوي 10 ، ولم يكن هناك تبادل.
سبب هذا السلوك هو أن تعيين المتغير ب إلى المتغير أ قد تم تنفيذه بالفعل بالقيمة الجديدة لـ أ. نتيجة لذلك ، حصل كلا المتغيرين على نفس القيمة ، وليس قيم بعضهما البعض.
لتبادل قيم متغيرين بشكل صحيح ، من الضروري استخدام خوارزمية باستخدام متغير زمني في خطوة واحدة أو استخدام طرق أخرى ، مثل استخدام عملية شور أو الجمع/الطرح الرياضي.
- لماذا يستحيل تبادل قيم متغيرين في خطوتين أ ب ب أ?
- خطوة واحدة ليست كافية
- سيتم خلط القيم
- لا يمكن حفظ القيمة الأصلية
- أخطاء في التعليمات البرمجية التالية
- الصراع
- من متغيرات التعقيد عند استخدام متغيرات أخرى
- مما يجعل من الصعب قراءة وفهم التعليمات البرمجية
- انتهاك قابلية القراءة
- سؤال وجواب
- لماذا لا يمكن تبادل قيم متغيرين في خطوتين أ ب ب أ?
- لماذا من الضروري استخدام متغير مؤقت ثالث لتبادل قيم متغيرين?
- لماذا تبادل قيم متغيرين في خطوتين يؤدي إلى فقدان القيم الأصلية?
- ما هي المشكلة مع تبادل قيم متغيرين في خطوتين?
- كيف يؤدي تبادل قيم متغيرين في خطوتين إلى فقدان القيم?
لماذا يستحيل تبادل قيم متغيرين في خطوتين أ ب ب أ?
يمكن تبادل قيم متغيرين باستخدام متغير ثالث أو باستخدام عملية تعيين مع عمليات حسابية. ومع ذلك ، إذا حاولت إجراء تبادل من خطوتين باستخدام متغيرين فقط ، فهذا غير ممكن.
النظر في المثال التالي: هناك نوعان من المتغيرات أ و ب مع القيم أ = 5 و ب = 10:
| الخطوة 1 | الخطوة 2 | الخطوة 3 |
|---|---|---|
| أ = ب | ب = أ | أ = ب |
| أ = 10 | ب = 10 | أ = 10 |
| ب = 10 | ب = 5 | ب = 10 |
كما ترى من الجدول ، في الخطوة الأولى ، أ يتم تعيين القيمة ب ، مما يعني أن المتغير أ يصبح مساويا لـ 10 (منذ البداية ب=10). في الخطوة الثانية ، عندما يتم تعيين المتغير ب القيمة أ (5) ، وجد أن المتغير أ لديه بالفعل القيمة 10. لذلك ، في الخطوة الثانية ، لا يمكننا حفظ قيمة المتغير أ. نتيجة لذلك ، لا تعمل خوارزمية تبادل قيم متغيرين في خطوتين.
لتبادل قيم متغيرين بنجاح ، تحتاج إلى استخدام متغير ثالث لتخزين قيمة أحد المتغيرات مؤقتا ، أو استخدام العمليات الحسابية مثل الجمع أو الطرح لإجراء التبادل دون استخدام ذاكرة إضافية. هذا يسمح لك بتجنب فقدان قيمة المتغير أثناء التبادل.
خطوة واحدة ليست كافية
قد يبدو تبادل قيم متغيرين مهمة بسيطة يمكن إكمالها في بضع خطوات. لكن في الواقع ، لا تكفي خطوة واحدة لتبادل قيم متغيرين بالكامل.
لنفترض أن لدينا متغيرين: أ و ب ، مع القيم 1 و 2 على التوالي. إذا أجرينا تبادل القيم في خطوة واحدة على النحو التالي:
- تعيين قيمة إلى ب: أ = ب;
- تعيين ب قيمة أ: ب = أ;
ستكون النتيجة أن كلا المتغيرين سيحصلان على القيمة 2. وبالتالي ، لا يتم تنفيذ تبادل قيم المتغيرين.
لماذا يحدث هذا? الحقيقة هي أن الخطوة الثانية تتبادل قيمة المتغير الجديد أ (الذي يصبح مساويا لـ ب) مع المتغير ب. وبالتالي ، تصبح قيم كلا المتغيرين مساوية لآخر قيمة معينة ، قيمة المتغير ب. هذا النهج غير صحيح ولن يؤدي إلى تبادل كامل لقيم المتغيرين.
بدلا من ذلك ، يجب استخدام متغير مؤقت إضافي لتبادل قيم المتغيرين بشكل صحيح:
- تعيين قيمة لمتغير مؤقت: درجة الحرارة = أ;
- قم بتعيين القيمة ب للمتغير أ: أ = ب;
- تعيين متغير ب قيمة متغير مؤقت: ب = درجة الحرارة;
الآن تم تبديل قيم المتغيرات أ و ب ، وتم الانتهاء من تبادل القيم بنجاح. لا تنس استخدام المتغير الثالث لحفظ القيمة أثناء التبادل ، وإلا فلن يتم إجراء التبادل بشكل صحيح.
سيتم خلط القيم
إذا حاولت تبادل قيم متغيرين في خطوتين ، أي استخدام متغير ثالث لتخزين إحدى القيم مؤقتا ، فقد يحدث موقف غير متوقع. نتيجة لمثل هذا التبادل ، قد يحدث خلط للقيم ، أي أن قيم المتغيرين الأول والثاني قد تغير الأماكن.
، وسنحاول تبادل القيم في خطوتين:
- .
- .
- .
ستكون النتيجة خلط للقيم المتغيرة:
| خطوة | قيمة المتغير أ | قيمة المتغير ب |
|---|---|---|
| القيم الأولية | هي 5 | 10 |
| الخطوة 1 | 5 | 10 |
| الخطوة 2 | 10 | 10 |
| الخطوة 3 | 10 | 5 |
| النتيجة | 10 | 5 |
قاموا بتبديل الأماكن ، لكن هذا ليس ما كان متوقعا.
لذلك ، من أجل تبادل قيم متغيرين ، من الضروري استخدام خوارزمية أكثر تعقيدا لا تؤدي إلى خلط القيم. واحدة من هذه الخوارزميات هو استخدام عملية شور (حصرية أو).
لا يمكن حفظ القيمة الأصلية
تبادل قيم متغيرين في خطوتين - أ ب ب أ-مستحيل بسبب مبدأ تنفيذ التعليمات البرمجية المتسلسلة.
- عند تنفيذ الخطوة الأولى ، سيتم تعيين قيمة المتغير أ للمتغير ب.
- في الخطوة الثانية ، تم بالفعل تغيير قيمة المتغير ب وهي تساوي قيمة المتغير أ في الخطوة الأولى. إذا قمنا بتعيين قيمة المتغير ب إلى المتغير أ ، فسيكون لكلا المتغيرين نفس القيمة ، وستفقد القيمة الأصلية للمتغير أ.
وبالتالي ، من أجل حفظ القيمة الأصلية للمتغير أ وتغييرها في نفس الوقت بقيمة المتغير ب ، من الضروري استخدام متغير مؤقت. يسمح لك المتغير المؤقت بحفظ القيمة الأصلية قبل تغييرها واستخدامها لتعيين متغير آخر. يمكن إجراء مثل هذا التبادل للقيم بين المتغيرات في ثلاث خطوات:
- إنشاء متغير مؤقت وتعيين قيمة المتغير أ.
- تعيين المتغير أ قيمة المتغير ب.
- تعيين متغير ب قيمة متغير مؤقت.
الآن يتم تخزين قيمة المتغير أ في متغير مؤقت ومن الممكن تعيين القيمة الأصلية للمتغير أ إلى المتغير ب دون فقدان البيانات.
أخطاء في التعليمات البرمجية التالية
بعد إجراء عملية تبادل قيم متغيرين في خطوتين أ ب ب أ ، قد تحتوي التعليمات البرمجية الإضافية على أخطاء إذا لم يتم أخذ التغييرات التي حدثت في المتغيرات في الاعتبار.
فيما يلي أمثلة للأخطاء التي قد تحدث في التعليمات البرمجية التالية:
- قيم متغيرة غير متوقعة: إذا افترض رمز آخر استخدام المتغيرات أ و ب ، فقد يكون لديهم قيم غير متوقعة بعد عملية التبادل. هذا يمكن أن يؤدي إلى سلوك البرنامج لا يمكن التنبؤ بها والأخطاء في العملية.
- أخطاء في الحسابات: إذا تم استخدام حسابات أخرى تستند إلى قيم المتغيرات أ و ب في الكود ، فبعد عملية تبادل القيمة ، قد تكون نتائج الحساب غير صحيحة. هذا يمكن أن يؤدي إلى نتائج وأخطاء غير صحيحة في تشغيل البرنامج.
- شروط غير صحيحة: إذا استخدم رمز آخر عوامل تشغيل مشروطة تتحقق من قيم المتغيرات أ و ب ، ثم بعد عملية تبادل القيمة ، قد تصبح الشروط غير صحيحة. هذا يمكن أن يؤدي إلى تنفيذ غير صحيح من كتل التعليمات البرمجية والأخطاء في البرنامج.
لتجنب الأخطاء في الكود الإضافي ، من الضروري مراعاة التغييرات التي حدثت في المتغيرات بعد عملية تبادل القيمة. يوصى باستخدام نهج أكثر موثوقية وأمانا لتبادل قيم متغيرين من أجل تجنب المشاكل المحتملة في مزيد من التعليمات البرمجية.
الصراع المتغير
عند تبادل قيم متغيرين أ و ب باستخدام متغير إضافي ، يمكن استخدام النهج التالي:
- قم بإنشاء درجة حرارة متغيرة مؤقتة وقم بتعيين قيمة المتغير أ: درجة الحرارة = أ;
- تعيين المتغير أ قيمة المتغير ب: أ = ب;
- تعيين المتغير ب قيمة المتغير المؤقت المؤقت: ب = درجة الحرارة;
ومع ذلك ، فإن تبادل قيم متغيرين أ و ب في خطوتين ، على سبيل المثال ، على النحو التالي: ب = أ ؛ أ = ب ؛ ، لن يعمل بشكل صحيح ، لأن التخصيص الثاني سيستخدم القيمة المتغيرة بالفعل للمتغير ب ، مما سيؤدي إلى نتيجة غير صحيحة.
على سبيل المثال ، إذا كان المتغير أ يحتوي في البداية على القيمة 2 ، والمتغير ب يحتوي على القيمة 3 ، ثم بعد إجراء العمليات ب = أ ؛ أ = ب ؛ المتغير أ سيحتوي أيضا على القيمة 3 ، والمتغير ب سيحتوي على القيمة 3.
هذا لأنه يتم تعيين القيم بالتتابع والتخصيص الثاني هو أ = ب; يستخدم القيمة التي كان للمتغير ب بعد التخصيص الأول لـ ب = أ؛.
لذلك ، من أجل تبادل قيم متغيرين بشكل صحيح ، من الضروري استخدام متغير مؤقت لحفظ قيمة متغير واحد قبل تعيين قيمة جديدة.
الصعوبات عند استخدام المتغيرات الأخرى
عندما نريد تبادل قيم متغيرين ، غالبا ما تنشأ الفكرة لاستخدام متغير ثالث لتخزين إحدى القيم مؤقتا. ولكن لماذا من الضروري إجراء التبادل في خطوة واحدة, وليس في اثنين?
والحقيقة هي أنه إذا استخدمنا المتغير الثالث ، فعند إجراء تبادل في خطوتين ، ستكون هناك مشكلة في فقدان قيمة أحد المتغيرات. بعد الخطوة الأولى من التبادل ، سيتم الكتابة فوق قيمة المتغير الأول في المتغير الثالث ، وستفقد القيمة الأصلية. لذلك ، عند إجراء التبادل في خطوتين ، ستبقى قيمة المتغير الثاني فقط ، والتي يمكننا تعيينها للمتغير الأول ، ولكن سيتم فقد القيمة الأصلية للمتغير الأول.
لإثبات ذلك ، ضع في اعتبارك مثالا:
دع أ = 5;
دع ب = 10;
دع درجة الحرارة = أ ؛ / / حفظ قيمة المتغير الأول في متغير مؤقت
أ = ب ؛ / / تعيين قيمة المتغير الثاني للمتغير الأول
ب = درجة الحرارة ؛ / / تعيين للمتغير الثاني القيمة المحفوظة للمتغير الأول
وحدة التحكم.السجل (أ) ؛ / / 10
وحدة التحكم.سجل (ب) ؛ / / 5 (يتم فقدان القيمة الأصلية للمتغير الأول)
لذلك ، من أجل تبادل قيم متغيرين بنجاح ، من الضروري استخدام قيمهما الأصلية فقط وإجراء التبادل في خطوة واحدة:
دع أ = 5;
دع ب = 10;
أ = أ + ب ؛ / / يتم تخزين مجموع القيم في المتغير الأول
ب = أ-ب; // في المتغير الثاني ، يتم الحفاظ على الفرق بين المتغير الأول والمتغير الثاني (القيمة الأولية للمتغير الأول)
أ = أ-ب ؛ / / يتم طرح قيمة المتغير الثاني من المتغير الأول (القيمة الأولية للمتغير الثاني)
وحدة التحكم.السجل (أ) ؛ / / 10
وحدة التحكم.السجل (ب) ؛ / / 5
تتيح لك عملية التبادل هذه دون استخدام متغير ثالث حفظ القيم الأصلية لكلا المتغيرين وتبديلها بنجاح. في الوقت نفسه ، يتم التبادل في خطوة واحدة ، وهي طريقة أكثر كفاءة وأمانا.
مما يجعل من الصعب قراءة وفهم التعليمات البرمجية
محاولة تبادل قيم متغيرين في خطوتين (أ = ب ؛ ب = أ) يمكن أن تجعل من الصعب قراءة الكود وفهمه. هذا النهج يخلق الارتباك ويمكن أن يؤدي إلى أخطاء في عملية تطوير وتصحيح رمز البرنامج.
بادئ ذي بدء ، تبادل من خطوتين لقيم متغيرين (أ = ب; ب = أ) يمكن أن يربك المبرمج ، مما يجعل الكود أقل وضوحا وفهما للوهلة الأولى. بدلا من تبادل بسيط ومفهوم للقيم المتغيرة ، يصبح الرمز أكثر إرباكا ويتطلب جهودا إضافية لفهمه.
بالإضافة إلى ذلك ، يمكن أن يؤدي التبادل المكون من خطوتين إلى حدوث أخطاء في الكود. إذا كان الرمز يحتوي على تبعيات أخرى أو تغييرات في قيم المتغيرات الأخرى ، فإن تغيير الترتيب الذي يتم به تنفيذ هذه العمليات يمكن أن يؤدي إلى نتائج غير متوقعة. قد يكون من الصعب اكتشاف مثل هذه الأخطاء وإصلاحها ، خاصة في مشاريع البرامج الكبيرة.
بدلا من ذلك ، يوصى باستخدام نهج أبسط وأكثر قابلية للفهم لتبادل قيم متغيرين — باستخدام متغير مؤقت ثالث. على سبيل المثال:
دع درجة الحرارة = أ;
أ = ب;
ب = درجة الحرارة;
يعبر هذا النهج عن النية بشكل أكثر وضوحا ووضوحا-لتبادل قيم المتغيرات. يصبح الرمز أسهل في الفهم والتصحيح ، ويتم تقليل مخاطر الأخطاء.
نتيجة لذلك ، من المهم اتباع مبدأ البساطة والوضوح في الكود من أجل تسهيل القراءة والفهم والتصحيح. يساهم استخدام نهج أبسط وأكثر وضوحا لتبادل القيم المتغيرة في ذلك ، على عكس النهج الأكثر تعقيدا وإرباكا المكون من خطوتين.
انتهاك قابلية القراءة
يعد انتهاك قابلية القراءة مشكلة يمكن مواجهتها في البرمجة. يحدث هذا عندما يبدو الرمز مربكا ويصعب قراءته للمطورين الآخرين. يمكن أن يؤدي انتهاك قابلية القراءة إلى حدوث أخطاء ويجعل من الصعب الحفاظ على الكود.
أحد انتهاكات قابلية القراءة هو محاولة لتبادل قيم متغيرين في خطوتين أ ب ب أ. عندما يتم كتابة الكود بهذه الطريقة ، يصبح هيكله معقدا ويصعب فهمه.
يبدو الرمز ، حيث يتم تنفيذ تبادل قيم متغيرين في خطوتين ، كما يلي:
- إنشاء متغير مؤقت لتخزين قيمة المتغير الأول.
- تعيين قيمة المتغير الأول للمتغير الثاني.
- تعيين متغير مؤقت لمتغير ثان.
يخلق هذا النهج تعقيدا غير ضروري ويمكن أن يكون مربكا للمطورين الآخرين ، خاصة عند العمل مع عدد كبير من المتغيرات. بالإضافة إلى ذلك ، فإنه يجعل من الصعب فهم نوايا مؤلف الكود ويجعل من الصعب تصحيحه وتعديله.
لتبادل قيم متغيرين ، من الأفضل استخدام نهج أبسط وأكثر قابلية للفهم ، مثل استخدام متغير ثالث أو استخدام عملية تعيين على سطر واحد. يتيح ذلك أن تكون الشفرة أكثر وضوحا وفهما لجميع المشاركين في المشروع.
إيلاء الاهتمام لقراءة التعليمات البرمجية الخاصة بك ، واختيار طرق بسيطة ومفهومة لحل المشاكل ، وسوف التعليمات البرمجية الخاصة بك تصبح أكثر سهولة للمطورين الآخرين.
سؤال وجواب
لماذا لا يمكن تبادل قيم متغيرين في خطوتين أ ب ب أ?
لا يمكن إجراء تبادل قيم متغيرين في خطوتين أ ب ب أ ، لأن هذا سيؤدي إلى فقدان القيم الأصلية للمتغيرات. إذا أجرينا مثل هذا الاستبدال ، فسيحصل المتغير الثاني على قيمة المتغير الأول ، وسنفقد القيمة الأصلية للمتغير الثاني. من أجل التبادل الصحيح لقيم المتغيرات ، من الضروري استخدام متغير مؤقت ثالث.
لماذا من الضروري استخدام متغير مؤقت ثالث لتبادل قيم متغيرين?
لتبادل قيم متغيرين ، من الضروري استخدام متغير مؤقت ثالث ، وإلا فإننا سنفقد القيم الأصلية للمتغيرات. إذا أجرينا التبادل في خطوتين ، مع تعيين قيم متغير إلى آخر ، فسيحصل المتغير الثاني على قيمة الأول ، وستفقد القيمة الأصلية للثاني. لتجنب هذه الخسارة ، يجب أن نستخدم متغيرا ثالثا ، نخزن فيه قيمة متغير واحد قبل التبادل ، ثم نعين هذه القيمة لمتغير آخر.
لماذا تبادل قيم متغيرين في خطوتين يؤدي إلى فقدان القيم الأصلية?
يؤدي تبادل قيم متغيرين في خطوتين إلى فقدان القيم الأصلية ، لأنه في مثل هذا التبادل نقوم بتعيين متغير واحد قيمة الآخر. سيتم فقدان القيمة الأصلية للمتغير الثاني ، وسوف تحصل على قيمة المتغير الأول. نتيجة لذلك ، سيحتوي المتغير الأول على القيمة الأصلية للثاني ، وسيحتوي المتغير الثاني على قيمة الأول. إذا احتجنا إلى الاحتفاظ بالقيم الأصلية للمتغيرات ، فيجب علينا استخدام متغير مؤقت ثالث للتبادل.
ما هي المشكلة مع تبادل قيم متغيرين في خطوتين?
مشكلة تبادل قيم متغيرين في خطوتين هي أن هذا يؤدي إلى فقدان القيم الأصلية للمتغيرات. إذا أجرينا مثل هذا التبادل عن طريق تعيين قيم متغير إلى آخر ، فسوف نفقد القيمة الأصلية للمتغير الثاني. لتجنب فقدان القيم ، من الضروري استخدام متغير مؤقت ثالث لحفظ إحدى القيم قبل التبادل.
كيف يؤدي تبادل قيم متغيرين في خطوتين إلى فقدان القيم?
يؤدي تبادل قيم متغيرين في خطوتين إلى فقدان القيم ، حيث نقوم بتعيين متغير واحد قيمة الآخر. هذا يعني أنه سيتم فقد القيم الأصلية للمتغيرات. يحصل المتغير الثاني على قيمة المتغير الأول ، وستفقد القيمة الأصلية للمتغير الثاني. لحفظ قيم المتغيرات ، يجب عليك استخدام متغير مؤقت ثالث للتبادل.