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

ملخص

يحوّل البرنامج المدخلات إلى مخرجات، وهذا الدرس يدرس طرفَي هذا التحويل وما قد يفشل بينهما. فهو يعلّم الكتابة بالدالتين std::print وstd::println، مع العناصر النائبة ومواصفات التنسيق التي تحدّد العرض والمحاذاة والمنازل العشرية؛ وقراءة الأعداد بـstd::cin؛ وتوقّع ما يحدث حين يكتب المستخدم شيئًا غير المطلوب، وهو أمر لا ينتج عنه، في نظام إدخال كنظام C++، تحذير، بل مجرى في حالة خطأ ومتغير يحمل صفرًا؛ وتصنيف أخطاء البرنامج في أربعة أنواع بحسب اللحظة التي تظهر فيها: أخطاء الترجمة، والربط، والتنفيذ، والأخطاء المنطقية. ويختم بالقراءة المنهجية لرسائل المترجم.

أهداف التعلم

  1. كتابة برامج تقرأ البيانات بـstd::cin وتكتب النتائج بـstd::println، مع استعمال مواصفات التنسيق للعرض والمنازل العشرية.
  2. توقّع المخرجات الدقيقة لبرنامج فيه عدة استدعاءات لـstd::print وstd::println، بما فيها فواصل الأسطر.
  3. وصف ما يحدث حين لا تكون المدخلات على الهيئة المتوقعة (حروف بدل عدد)، والتحقق من حالة القراءة.
  4. تصنيف الخطأ بوصفه خطأ ترجمة أو ربط أو تنفيذ أو خطأً منطقيًا، وتحديد موضعه انطلاقًا من طريقة ظهوره.

البرنامج وحدّه

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

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