الاختيار والتكرار
| English | العربية |
|---|---|
| selection/sɪˈlekʃn/ | اختيار |
| iteration/ˌɪtəˈreɪʃn/ | التكرار |
| trace table/treɪs ˈteɪbl/ | جدول التتبع |
| nested/ˈnestɪd/ | متداخل |
| logic error/ˈlɒdʒɪk ˈerə/ | خطأ منطق |
| count-controlled loop/kaʊnt kənˈtrəʊld luːp/ | حلقة محكومة بعدد العدادات |
| array/əˈreɪ/ | المصفوفة (array) |
| pre-condition loop/priː kənˈdɪʃn luːp/ | حلقة الشرط المسبق |
| post-condition loop/pəʊst kənˈdɪʃn luːp/ | حلقة الشرط اللاحق |
| dry run/draɪ rʌn/ | التشغيل الجاف |
سطر إضافي واحد
- في عام 2014، أطلقت Apple تحديث أمان بسبب سطر واحد مكرر. داخل الكود الذي يفحص شهادة موقع ويب، ظهر
goto fail;مرتين متتاليتين. - النسخة الثانية كانت خارج
IFالخاص بها، لذا كانت تعمل في كل مرة، ولم يتم التحقق الذي يليها أبداً. لأشهر، كان بإمكان أي مهاجم التظاهر بأنه أي موقع ويب. - الاختيار والتكرار هما البناءان اللذان يقرران ما يتم تشغيله وكم مرة. أخطئ في سطر واحد منهما ولا يزال البرنامج يعمل، لكن بشكل خاطئ.
- هذه الدرس是关于 IF، CASE والحلقات الثلاث، وجدول التتبع الذي يكشف الخطأ قبل أن يفعل الامتحان ذلك.
الاختيار
IF age >= 18 THEN … ELSE … ENDIF
- الـ
ELSEاختياري، أما الـENDIFفهو إلزامي. يجب إغلاق كلIF. - الشرط هو أي تعبير منطقي: مقارنة، أو مقارنات مُربوطة بواسطة
AND،ORوNOT.

IF … ELSE يختبر مرة واحدة، ثم يشغل فرعاً واحداً بالضبط
IF المتداخلة والحدود
- الـ IF المتداخل هو IF داخل فرع من IF آخر، وكل واحد يحتاج إلى
ENDIFخاص به. - الحدود هي النقاط التي تُخسَر فيها العلامات. "علامة تساوي 50 أو أكثر تعني النجاح" هي
Mark >= 50، وليستMark > 50. - المقارنة الخاطئة هي خطأ منطقي: البرنامج يعمل ويعطي إجابة خاطئة لبعض المدخلات. تتبع مع القيمة الحدية، أي 50 نفسها، هو كيف تكتشفه.
"درجة 50 أو أكثر تمر" تُكتب كـ IF Mark ____ 50 THEN.
"أو أكثر" تشمل 50 نفسها، لذا المقارنة هي أكبر من أو يساوي. > ستفشل طالباً بدرجة 50 بالضبط.
حالة
CASE OF Grade … ENDCASEيختبر قيمة واحدة مقابل عدة خيارات وهي أنظف من سلسلة من IF المتداخلة.- يمكن أن يكون الحارس قيمة مفردة
"A":، أو قائمة1, 2, 3:، أو نطاق1 TO 5:. الفرع الأخير لـ "أي شيء آخر" هوOTHERWISE، وليس شرطًا مثل> 200. - يتم اختبار الحواجز بترتيب. مع
1 TO 50:يليها40 TO 60:، فإن القيمة 45 تأخذ الفرع الأول، لذا قد لا يتم تنفيذ تعيين في الفرع الثاني أبدًا. إذا غطت الفروع السابقة كل القيم الممكنة، فلن يتم تنفيذOTHERWISEأيضًا.

يُنفذ CASE الفرع الأول الذي يتطابق معه الحارس
عبارة CASE أنظف من IF المتداخلة عندما تكون:
CASE تطابق قيمة واحدة مع احتمالات عديدة؛ تتداخل IF العميق يصبح صعب القراءة.
أي مما يلي يعتبر حراساً صالحاً في عبارة Cambridge CASE؟ حدد جميع الخيارات الصحيحة.
قيمة مفردة، قائمة قيم، نطاق و OTHERWISE. المقارنة مثل > 200 ليست حارساً؛ أي شيء غير مغطى يذهب إلى Otherwise.
مثال محلول: إعادة كتابة CASE بدون استخدام CASE
CASE OF MySwitchمع1: ThisChar ← 'a'،2: ThisChar ← 'y'،3: ThisChar ← '7'،OTHERWISE: ThisChar ← '*'.- تصبح كل قيمة فرعًا واحدًا من سلسلة IF، وتصبح
OTHERWISEهيELSEالنهائية.
IF MySwitch = 1 THEN
ThisChar <- 'a'
ELSE
IF MySwitch = 2 THEN
ThisChar <- 'y'
ELSE
IF MySwitch = 3 THEN
ThisChar <- '7'
ELSE
ThisChar <- '*'
ENDIF
ENDIF
ENDIF
- ثلاثة IFs وثلاثة ENDIFs. بالذهاب في الاتجاه الآخر، فئتا CASE اللتان تعينان نفس القيمة تتحدان في حارس واحد بقائمة قيم،
1, 2:.
الحلقات الثلاثة
- التكرار يعيد كتلة، differing الحلقات الثلاثة في مكان اختبار الشرط.
- حلقة مควบคุม بعدد،
FOR i ← 1 TO 10 … NEXT i، تعمل عددًا معروفًا من المرات؛STEP -1يعد تنازليًا. استخدمها لعدد ثابت أو لكل عنصر في مصفوفة. - حلقة precondition،
WHILE … DO … ENDWHILE، تختبر قبل كل دورة، لذا قد تعمل صفر مرة. حلقة postcondition،REPEAT … UNTIL، تختبر بعد كل دورة، لذا تعمل دائمًا مرة واحدة على الأقل.

مكان الشرط يحدد عدد مرات تشغيل الجسم
طابق كل حلقة تكرار بالوقت المناسب لاستخدامها.
FOR = محكوم بالعد; WHILE = شرط يُختبر قبل (0+ دورات); REPEAT = شرط يُختبر بعد (1+ دورات).
REPEAT...UNTIL يختبر شرطه AFTER الجسم، لذا الجسم يعمل دائماً مرة على الأقل.
هذا الاختبار اللاحق هو الفرق عن WHILE، الذي يمكن أن يعمل أصفار مرات.
اختيار الحلقة: إجابة بدرجتين
- درجة واحدة للاسم، ودرجة للسبب، بكلمات المخطط.
- م.constructed بعدد، لأن عدد التكرارات معروف قبل بدء الحلقة. post-condition، لأن جسم الحلقة يجب أن يُنفذ مرة واحدة على الأقل. pre-condition، لأن الحلقة قد لا تحتاج إلى التنفيذ على الإطلاق.
- حلقة تمر على العناصر الأربعة لمصفوفة مكتوبة كـ
WHILEعداد هي "ليست الأنسب"؛ حلقة FOR هي الأنسب، لأن العدد معروف.
سؤال يطلب منك "تحديد حلقة أكثر ملاءمة وتبرير اختيارك" مقابل 2 علامة. ما الذي يكسب العلامتين?
درجة واحدة للحلقة، واحدة للسبب: العد معروف، الجسم يجب أن يعمل مرة واحدة، أو الحلقة قد لا تعمل على الإطلاق.
مثال محلول: أي حلقة تناسب كل مهمة؟
- طباع جدول الضرب 12: العدد معروف مسبقًا، لذا حلقة FOR.
- الاستمرار في قراءة الأرقام حتى يدخل المستخدم 0: العدد غير معروف والإدخال الأول قد يكون 0 بالفعل، لذا يجب أن يأتي الاختبار قبل الجسم: حلقة WHILE.
- طلب كلمة مرور حتى تكون صحيحة: يجب طرح السؤال على المستخدم مرة واحدة على الأقل، لذا حلقة REPEAT … UNTIL.
- اسأل سؤالين: كم مرة، وما إذا كان يجب تنفيذ الجسم قبل الاختبار الأول؟
"استمر في طلب كلمة مرور حتى تكون صحيحة، لكن اطلبها دائماً مرة واحدة على الأقل." أي حلقة تكرار تناسب ذلك؟
يجب أن تطلب مرة واحدة على الأقل، لذا REPEAT...UNTIL اللاحق هو الخيار الطبيعي.
جداول التتبع
- جدول التتبع يسجل قيمة كل متغير أثناء تشغيل الجاف خوارزمية يدويًا. إنه كيفية اختبار حلقة على الورق وسؤال بست درجات في معظم ورقتي 2.
- عمود لكل متغير، بالإضافة إلى عمود لأي إخراج. اكتب صفًا جديدًا فقط عندما تتغير قيمة، وقم بتقييم شرط الحلقة في اللحظة التي تصل إليها الحلقة.
- استمر حتى ينتهي الشرط الحلقة، ثم سجل الإخراج النهائي.
تتبع حلقة تكرار، دورة بدورة
جدول التتبع يسجل كل متغير بعد كل دورة من الحلقة. شاهد العداد i يتصاعد بينما يتجمع المجموع الجاري — تماماً ما يطلبه سؤال تتبع الامتحان ملؤه.
بعد total = 0; FOR i = 1 TO 5: total = total + i، ما هي قيمة total؟
إضافة 1+2+3+4+5 = 15 — تماماً ما يبنيه جدول التتبع دورة بدورة.
مثال محلول: جدول تتبع ممتلئ
Count <- 1
Total <- 0
WHILE Total < 10 DO
Total <- Total + Count
Count <- Count + 1
ENDWHILE
OUTPUT Count
- صفوف من (Count, Total): (1, 0) → (2, 1) → (3, 3) → (4, 6) → (5, 10).
- عند Total = 10، الشرط
Total < 10غير صحيح، تنتهي الحلقة، والإخراج هو 5. - الصف الأخير هو الأكثر خطأً في الغالب: تحقق من الشرط مرة أخرى قبل كتابة الإخراج.
في تتبع مثال، تنتهي الحلقة بـ Total = 10 و Count = 5، لذا المخرج هو 5.
بعد الدورة الرابعة يصل Total إلى 10، يصبح الشرط Total < 10 كاذباً، وتم زيادة Count إلى 5.
علامات ضائعة
>=و>إجابات مختلفة. اختبر القيمة الحدية في ذهنك قبل كتابة المقارنة.OTHERWISEمفتاح، وليس شرطًا. وكلIF،CASE،WHILEوFORينتهي بـENDIF،ENDCASE،ENDWHILEأوNEXT.- يمكن لـ
WHILEأن يعمل صفر مرة؛ لا يمكن لـREPEATذلك. اختر بناءً على ما إذا كان الجسم يجب أن يعمل مرة واحدة قبل الاختبار الأول. - في جدول التتبع، القيمة التي لا تتغير لا تُعاد كتابتها، والإخراج يُكتب فقط عندما يعمل خط
OUTPUT.
لقد فهمت الأمر
- IF … ELSE … ENDIF للاختيار؛ nested IFs كل منها مغلق؛ CASE لقيمة واحدة مقابل حواجز متعددة، مختبرة بترتيب،
OTHERWISEأخيرًا - FOR عدد معروف · WHILE يختبر قبل، قد تعمل صفر مرة · REPEAT … UNTIL يختبر بعد، تعمل مرة واحدة على الأقل
- تبرير حلقة باسمها وسببها: عدد معروف، قد لا تعمل، يجب أن تعمل مرة واحدة
- جدول تتبع يشغل الجاف خوارزمية صف واحد لكل تغيير؛ تحقق من الشرط مرة أخرى قبل الإخراج النهائي