انتقل إلى المحتوى
Topos Uranos

ملخص

يفتتح هذا الدرس الوحدة الثامنة والأخيرة من الدورة، وهي مخصّصة للبرامج الأكبر. ويشرح غايتها: تنظيم البرامج التي لم تعد تتّسع لملف واحد ولا للذهن، والتحقق من صحتها، وتصحيح أخطائها؛ ويقدّم دروسها الثلاثة والخيط الذي يجمعها، وهو خيط يُغلق الدائرة التي فُتحت في أول درس من الدورة (التوصيف، والبناء، والتحقق)؛ ويذكّر بما تفترض الوحدة أنه معلوم، وهو الدورة كلها؛ ويصوغ المسألة التي تحلّها الوحدة، وهي مسألة برنامج من ملف واحد يعمل مع البيانات التي اختُبر بها ويسكت عن خطأ عند حدّ مواصفاته؛ ويستبق الفرق بين الاختبار والبرهان؛ ويبيّن إلى أين تقود، في المشروع النهائي وفي دورة البرمجة بلغة C++ II.

أهداف التعلم

  1. وصف تسلسل محتويات الوحدة وشرح ما يقدّمه كل درس للدرس الذي يليه.
  2. التذكير، بمثال، بالفرق بين التصريح بدالة وتعريفها، وبالعقد الذي يحدّد مواصفاتها، وبالمرحلتين (الترجمة والربط) اللتين تحوّلان عدة ملفات إلى برنامج.
  3. استباق الفرق، بمثال، بين اختبار برنامج ببعض الحالات والبرهنة على أنه صحيح لجميع الحالات المقبولة.
  4. التعرّف على ما يُنتظر إتقانه عند إنهاء الوحدة والدورة، وتمييزه ممّا سيُتعلَّم في دورة البرمجة بلغة C++ II.

تقييم الدخول

قبل اجتياز الوحدة يحسن قياس نقطة البداية. وهذا التقييم لا تُمنح عليه درجة: إنما يوجّه الدراسة. وتتناول الأسئلة السبعة الأولى ما تفترض الوحدة أنه معلوم (التصريح والتعريف، والشرط المسبق، وعقد دالة من الوحدة 6، ورسائل الرابط، وحالات البحث الثنائي، وجدول التتبع، والقراءة خارج متجه)؛ وتتناول الأسئلة الثلاثة التي تليها، بترتيب الدروس، الأفكار المحورية في الوحدة، وفيها يكون «لا أعرف بعدُ» جوابًا صادقًا. وكل جواب يشرح المسألة ويسمّي الدرس الذي يعالجها؛ وتُقاس المهارات نفسها مرة أخرى في درس الخلاصة.

تقييم الدخول

قبل أن تبدأ الوحدة، قِس نقطة انطلاقك. إنه تقييم ذاتي قصير: لا يُمنح عليه درجة، وتُحفظ نتيجته في متصفحك فقط.

  1. السؤال 1من وحدات سابقةماذا يفعل السطر int gcd(int a, int b); المكتوب قبل main؟

  2. السؤال 2من وحدات سابقةللدالة toBase(n, base) الشرط المسبق «n >= 0 و2 <= base <= 10». من الذي يجب أن يضمنه؟

  3. السؤال 3من وحدات سابقةالدالة binarySearch(values, target) من الدرس 6.4 تعيد موضعًا لـtarget أو values.size() إن لم يكن موجودًا. ما شرطها المسبق؟

  4. السؤال 4من وحدات سابقةبرنامج يُترجَم دون أخطاء، وعند بناء الملف التنفيذي يظهر undefined reference to `tetrahedral(int)'. أي مرحلة فشلت؟

  5. السؤال 5من وحدات سابقةأي هذه المجموعات من الحالات يختبر البحث الثنائي على أفضل وجه؟

  6. السؤال 6من وحدات سابقةما قيمتا a وb بعد int a{0}; int b{1}; for (int i{0}; i < 4; ++i) { const int t{a + b}; a = b; b = t; }؟

  7. السؤال 7من وحدات سابقةلماذا يتوقف std::vector<int> v{1, 2}; std::println("{}", v[2]); مع خيارات الدورة، ويمكن، إذا تُرجم بـ-O2 وحده ودون الكاشفات، أن يكتب أي عدد كان؟

  8. السؤال 8ملف ترويسة ذو حرّاس تضمين يعرّف (لا يصرّح فقط) double scale(double x)، دون inline، ويضمّنه main.cpp وreport.cpp. ماذا يحدث عند بناء البرنامج؟

  9. السؤال 9دالة تجتاز خمسمئة اختبار آلي اختيرت بعناية. ماذا يمكن أن يُقال؟

  10. السؤال 10نقطة توقف موضوعة في السطر total += k;، داخل حلقة، والبرنامج يتوقف عندها للمرة الثالثة. ماذا يدلّ عليه السطر المظلَّل؟