ملخص
يفتتح هذا الدرس الوحدة الرابعة من الدورة، المخصّصة للتحكم في التدفق. ويشرح الغاية من الوحدة: أن تعلّم التحكم في الترتيب الذي تُنفَّذ به تعليمات البرنامج، بالقرارات وبالحلقات، والاستدلال على صحتها، أي ضمان أن تُعالَج كل حالة، وأن تفعل كل حلقة ما يجب عليها، وأن تتوقف؛ ويعرض دروسها الأربعة والخيط الذي يجمعها؛ ويذكّر بما تفترض الوحدة أنه معلوم، ولا سيما الشروط المركّبة في الوحدة 3؛ ويصوغ المسألة التي تحلّها الوحدة، مسألة برنامج يحسب القاسم المشترك الأكبر بعدد ثابت من الخطوات، فيجيب خطأً أو يتوقف عند قسمة على الصفر بحسب المعطيات؛ ويمهّد للامتغير بوصفه الأداة التي ستعلّل بها الوحدة حلقاتها؛ ويبيّن إلى أين تقود، في الوحدات اللاحقة وفي دورة البرمجة بلغة C++ II.
أهداف التعلم
- وصف تسلسل محتويات الوحدة، وشرح ما يقدّمه كل درس للدرس الذي يليه.
- تذكّر الشروط المركّبة في الوحدة 3 (الروابط المنطقية، والحساب المختصر، والنفي بقوانين دي مورغان)، ومراجعتها إن لزم الأمر.
- التمهيد، بمثال، للامتغير بوصفه أداة للاستدلال: علاقة بين المتغيرات تحفظها عملية التكرار، وتعطي النتيجة عند انتهائها.
- تمييز ما يُنتظر إتقانه في نهاية الوحدة، وفصله عمّا سيُتعلَّم في الوحدات اللاحقة.
تقييم الدخول
قبل اجتياز الوحدة يحسن قياس نقطة البداية. وهذا التقييم تقييم ذاتي: لا تُمنح عليه درجة، وغايته الوحيدة توجيه الدراسة. وتتناول الأسئلة الأربعة الأولى ما تفترض الوحدة أنه معلوم: نفي شرط مركّب، والحساب المختصر، وتتبّع تكرار من الدرس 1.1، وحدّ النوع int. وتتناول الأسئلة السبعة التي تليها، بترتيب الدروس، الأفكار المحورية في الوحدة، وينطلق عدد منها من الرياضيات المدرسية: القاسم المشترك الأكبر، ورمز المجموع، وتوقف إجراء ما. ولا أحد ملزم بالإصابة فيها بعدُ، وفي بعضها يكون «لا أعرف بعدُ» جوابًا صادقًا: فكل جواب، صائبًا كان أو خاطئًا، يشرح المسألة ويسمّي الدرس الذي يعالجها. وتُقاس المهارات نفسها مرة أخرى في النهاية، في درس الخلاصة.
قبل أن تبدأ الوحدة، قِس نقطة انطلاقك. إنه تقييم ذاتي قصير: لا يُمنح عليه درجة، وتُحفظ نتيجته في متصفحك فقط.
السؤال 1من وحدات سابقةما نفي الشرط
1 <= n && n <= 10؟ينفي كل جزء، لكنه يُبقي الوصل: ينسى دي مورغان. ثم إنه لا يوجد عدد أصغر من 1 وأكبر من 10 معًا، فهذا الشرط خاطئ دائمًا.يغيّر الرابط تغييرًا صحيحًا، لكنه ينفي العلاقتين نفيًا خاطئًا: يستبعد زيادةً الحدّين 1 و10، وهما يحقّقان الشرط الأصلي.ينفي الجزء الأول فقط.بحسب دي مورغان، نفي الوصل هو فصل النفيين، ونفي1 <= nهوn < 1، لاn <= 1. وتحتاج إليه الوحدة في كل قرار متسلسل، لأن الفرعelseيعالج بالضبط نفي الشروط التي قبله، وفي كل حلقة، لأن نفي شرطها يصحّ عند الخروج منها.راجِع: العلاقات والمنطق
السؤال 2من وحدات سابقةمع
int d{0};وint n{5};، ماذا يحدث عند حسابd != 0 && n / d > 2؟يتجاهل الحساب المختصر: القسمة لا تُحسب أبدًا.لا سبيل إلى أن يكون وصلٌ فيه معامَل خاطئ صحيحًا.التعبير صحيح؛ والمترجم لا يعرف قيمةdعند التنفيذ.المعامَل الأول خاطئ، والحساب المختصر لا يحسب الثاني: الحارس على اليسار يحمي القسمة. وتحوّل الوحدة هذا الحارس إلى قرارات صريحة وإلى شروط حلقات تحمي جسمها.راجِع: العلاقات والمنطق
السؤال 3من وحدات سابقةتبدأ القسمة بالطرح المتتالي في الدرس 1.1 بـ و، وتكرّر «ما دام ، اطرح من وأضف 1 إلى ». مع و، كم مرة يُنفَّذ جسم التكرار؟
يعدّ مرات حساب الشرط، وهي تزيد على الجولات بواحدة.يوقف التكرار عند : يقرأ على أنها .يخلط بين عدد الجولات والقيمة الابتدائية لـ .يعطي التتبّع : يُنفَّذ الجسم أربع مرات، ويُحسب الشرط خمس مرات، لأن الحساب الأخير هو الذي يُخفق. ويكتب الدرس 4.2 هذا التكرار بلغة C++ ويحوّل التتبّع إلى جدول.راجِع: من المسألة إلى الخوارزمية
السؤال 4من وحدات سابقةمع
intمن 32 بتًّا، ماذا يضمن المعيار عن قيمة46341 * 46341؟يتجاهل مدى النوع: هذا العدد لا يتّسع لهint.يظنّ أن الفيضان يتوقف عند الحدّ؛ والمعيار لا يعد بشيء.نوع النتيجة تحدّده المعامَلات، وهي من النوعint، لا قيمة النتيجة.القيمة العظمى هي . وتصادف الوحدة هذا الجداء في موضع لا يُبحث عنه فيه: الشرطd * d <= nفي حلقة تجرّب القواسم، وهو يفيض تحديدًا حين تكون قريبة من القيمة العظمى.راجِع: الأعداد الصحيحة وتمثيلها
السؤال 5يحتوي برنامج على سلسلة القرارات:
if (score >= 50)، الذي يكتب «ناجح»؛ وelse if (score >= 90)، الذي يكتب «ممتاز»؛ وelse، الذي يكتب «راسب». ماذا يكتب حين تكون قيمةscoreهي 95؟يظنّ أن الغلبة للشرط الأشدّ؛ والغلبة لأول شرط يتحقق.يظنّ أن كل الفروع الصحيحة تُنفَّذ؛ وفي السلسلة يُنفَّذ فرع واحد فقط.هذا جواب صادق: الدرس 4.1 يشرحه، وتقييم الخروج سيعود إلى حدود السلسلة.في السلسلة يُنفَّذ أول فرع يكون شرطه صحيحًا، و. أما الفرع «ممتاز» فلا يُنفَّذ أبدًا: حالته الفعلية هي و، وهي فارغة. ويعلّم الدرس 4.1 قراءة الحالة الفعلية لكل فرع وترتيب الشروط.راجِع: القرارات
السؤال 6أيّ التعابير الآتية يدلّ على المجموع ؟
يجمع مرة العدد ، أي : يخلط بين الحدّ العام والحدّ الأعلى.يجمع : يزيح الحدّين ويفقد الحدّ الأخير، وهو خطأ الفرق بواحد في الحلقات.لا يمكن أن يكون الحدّ الأعلى هو الدليل نفسه: لا معنى للتعبير.الدليل يمرّ على الأعداد الصحيحة من 1 إلى ، وكل حدّ هو نفسه. والحلقةforالتي تجمع هي الترجمة المباشرة لهذا الترميز: متغير التحكم هو الدليل، وحدّاه هما حدّا المجموع، والجسم يضيف الحدّ.راجِع: الحلقات
السؤال 7مع
int total{0};، ماذا يكتبstd::println("{}", total);بعدfor (int i{0}; i < 5; ++i) { total += i; }؟يظنّ أنiيبلغ 5: يقرأ<على أنه<=.يخلط بين المجمِّع والعدّاد: خمسة هي عدد الجولات، لا المجموع.هذا جواب صادق: الدرس 4.2 يعلّم شكلforوكيف تُعدّ جولاته.يأخذ المتغيرiالقيم 0 و1 و2 و3 و4، و؛ وحين تكون قيمةiهي 5 يُخفق الشرط ولا يُنفَّذ الجسم. إنه مجموع السؤال الذي قبله بالحدّين 0 و4.راجِع: الحلقات
السؤال 8في القسمة بالطرح المتتالي (، ؛ ما دام ، تصير إلى و إلى )، أيّ علاقة بين المتغيرات تصحّ كلما حُسب الشرط؟
تصحّ عند الخروج فقط: ما دام التكرار جاريًا، يضمن الشرط عكسها.تصحّ عند الانتهاء فقط؛ وقبله تكون أصغر من خارج القسمة.هذا جواب صادق: الدرس 4.3 يعلّم إيجاد هذه العلاقة والتحقق منها، وتقييم الخروج سيسأل عنها مرة أخرى.تصحّ في البداية، لأن ؛ وإذا صحّت قبل جولة صحّت بعدها، لأن . وعند الخروج ينضاف نفي الشرط، ، ومنهما معًا تخرج النتيجة. وتسمّى علاقة كهذه لامتغيرًا، ويجعلها الدرس 4.3 منهجًا لتصميم الحلقات وتعليلها.راجِع: تصميم حلقات صحيحة
السؤال 9ينطلق إجراء من عدد صحيح أيًّا كان (موجبًا أو صفرًا أو سالبًا) ويكرّر «ما دام ، اطرح 2 من ». هل يتوقف لكل ؟
هذا ما يحدث مع الشرط ؛ أما مع فيتوقف التكرار حالما تصير قيمة هي 0 أو .مع سالب يكون الشرط خاطئًا منذ البداية، ولا يُنفَّذ الجسم.الاستنتاج صحيح، لكن العلّة ليست كذلك: لا يكفي أن يكون العدد صحيحًا؛ بل يلزم أن تكون الكمية طبيعية ما دام التكرار جاريًا وأن تتناقص.الكمية عدد طبيعي ما دام التكرار جاريًا (يضمن ذلك الشرط) وتتناقص تناقصًا تامًّا: إنها متغاير، أداة الدرس 1.1 التي يستعملها الدرس 4.3 في كل حلقة. ومع «ما دام » يتغيّر الجواب: فقيمة فردية لـ تتخطى الصفر.راجِع: تصميم حلقات صحيحة
السؤال 10ما القاسم المشترك الأكبر للعددين 84 و36؟
إنه قاسم مشترك، لكنه ليس الأكبر.إنه قاسم مشترك، لكنه ليس الأكبر: ينقصه العامل 3، وهو مشترك بينهما أيضًا.إنه المضاعف المشترك الأصغر، لا القاسم المشترك الأكبر.القواسم المشتركة هي 1 و2 و3 و4 و6 و12. وتحصل عليه خوارزمية إقليدس دون البحث عن القواسم: و، ومن ثمّ . ويكتبها الدرس 4.4 في صورة حلقة ويبرهن لماذا تعمل.راجِع: الخوارزميات العددية
السؤال 11لتقرير ما إذا كان 101 عددًا أوليًّا بتجربة القواسم، إلى أيّ قاسم يكفي الوصول؟
يستعمل النصف: هذا صحيح، لكنه أطول مما يلزم بخمس مرات.يجرّب كل المرشّحين: هذا صحيح، لكنه لا يستفيد من أن القواسم تأتي أزواجًا.هذا جواب صادق: الدرس 4.4 يبرهنه.لو كان للعدد 101 قاسم مع ، لكان قاسمًا أيضًا، ولكان أحدهما على الأكثر . فيكفي أن نجرّب من 2 إلى 10: لا يقسم أيٌّ منها 101، فهو أولي. ويبرهن الدرس 4.4 القاعدة ويكتبها دون جذور ولا جداءات تفيض.راجِع: الخوارزميات العددية
جارٍ تحميل المحتوى…