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

ملخص

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

أهداف التعلم

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

تقييم الدخول

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

تقييم الدخول

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

  1. السؤال 1من وحدات سابقةينبغي للمقطع int largest{0}; int t{}; while (std::cin >> t) { if (t > largest) { largest = t; } } أن يترك في largest أكبر درجات الحرارة المقروءة. مع أيّ مدخلات يخفق؟

  2. السؤال 2من وحدات سابقةدالة تحسب عدد حروف العلة في نص من مليون محرف، محفوظ في std::string، ولا تعدّله. كيف يحسن التصريح بوسيطها؟

  3. السؤال 3من وحدات سابقةكم مرة تُنفَّذ ++count في for (int i{0}; i < 6; ++i) { for (int j{0}; j < i; ++j) { ++count; } }؟

  4. السؤال 4من وحدات سابقةماذا تكتب std::println("{}", 0u - 1); في نظام يكون فيه unsigned int بطول 32 بتًا؟

  5. السؤال 5في تسلسل من nn عنصرًا مرقّمة كما في C++، أيّ الفهارس ii تعيّن عنصرًا؟

  6. السؤال 6ماذا يحوي v بعد std::vector<int> v(3, 7);؟

  7. السؤال 7كم جولة تدور for (int m{1024}; m > 1; m /= 2) { ... }؟

  8. السؤال 8في دفتر هاتف مليون اسم مرتّبة ترتيبًا أبجديًا. للعثور على أحدها يُفتح الدفتر من المنتصف، ويُستبعد النصف الذي لا يمكن أن يكون الاسم فيه، ويُكرَّر ذلك مع النصف الآخر. كم مرة، على الأكثر، يجب فتحه؟

  9. السؤال 9مع std::vector<std::vector<int>> t{{1, 2, 3}, {4, 5, 6}};، كم تساوي t[1][0] وt.size()؟

  10. السؤال 10يحفظ برنامج أسماء أفراد مجموعة في متجه وعلاماتهم في متجه آخر، بحيث تكون العلامة grades[i] علامة names[i]. إذا رتّب متجه العلامات وحده، فماذا يحدث؟