اختبار في ملف واحد
لبات 0.7.0 · الإصدار الحالي
اجمع مفاهيم الدروس في اختبار حسابي بمراحل موجهة ومحاولات إدخال صارمة.
محتويات الصفحة
ما الذي ستتعلمه
اجمع سجلات الأسئلة وقائمة ذات نوع محدد ودالة مساعدة وإدخالا صارما في اختبار حسابي بملف واحد. ابنه في أربع مراحل صغيرة واشرح سبب نهاية كل تشغيل.
قبل أن تبدأ
اقرأ الحلقات والدوال والإدخال النصي وتحليل الأعداد والسلاسل النصية والقوائم والسجلات والنتائج القابلة للاسترداد. تقود الدروس الأساسية الاثنا عشر إلى هنا؛ ولا يحتاج الاختبار إلى ملفات افتراضية.
كل مصدر أدناه ملف مستقل كامل. افتحه كمسودة جديدة في الرئيسية، ثم اختر تشغيل صراحة. تبقى تعديلاتك السابقة متاحة. لغة القراءة ومفردات المصدر لا تترجمان مسودتك أو ردود الإدخال وقت التشغيل.
المرحلة 1: بيانات الأسئلة ونصوصها
يطبع المصدر الابتدائي 2 + 3?\n وحده، ويعيد الحالة 0 ولا يقرأ إدخالا. يتضمن سجلات سؤال الخمسة كاملة. لكل سجل سؤال_نصي: نص وجواب: ص64؛ وتحفظ قائمة<سؤال> ترتيبها الثابت. الأجوبة المتوقعة 5 و5 و12 و4 و15.
التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
الإدخال: لا يحتاج إلى أسطر إدخال.
سجل سؤال { سؤال_نصي: نص, جواب: ص64 }
دالة ابدأ_الرئيسية() -> ص64 {
دع أسئلة: قائمة<سؤال> = [
سؤال { سؤال_نصي: "2 + 3?", جواب: 5 },
سؤال { سؤال_نصي: "9 - 4?", جواب: 5 },
سؤال { سؤال_نصي: "3 * 4?", جواب: 12 },
سؤال { سؤال_نصي: "12 / 3?", جواب: 4 },
سؤال { سؤال_نصي: "7 + 8?", جواب: 15 }
].
اطبع(أسئلة[0]::سؤال_نصي + "\س").
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "success",
"output": "2 + 3?\n",
"processStatus": 0
},
"native": {
"check": 0,
"status": 0,
"output": "2 + 3?\n"
}
}توقع نصوص الأسئلة الخمسة بالترتيب. استبدل الطباعة الواحدة بحلقة تطبع كل نص. يطبع الحل بالضبط 2 + 3?\n9 - 4?\n3 * 4?\n12 / 3?\n7 + 8?\n، ويعيد 0 دون قراءة إدخال. يعرض البيانات دون فحص الأجوبة أو حساب درجة.
اطبع نصوص الأسئلة الخمسة بترتيبها المورد.
تلميح: ابدأ فهرسا قابلا للتغيير عند 0. طالما هو أصغر من طول(أسئلة)، اطبع أسئلة[فهرس]::سؤال_نصي وسطرا جديدا، ثم أضف 1 إلى فهرس.
اعرض الإجابة المشروحة
يزور الفهرس المواضع من 0 إلى 4. يمنع شرط الأصغر الصارم الوصول خارج الحدود عند 5. يقدم كل سجل نص السؤال، فتقبله اطبع مباشرة. تؤدي زيادة الفهرس إلى انتهاء الحلقة. تعيد دالة الدخول الحالة الطبيعية 0؛ ولم يقرأ أو يحسب أي جواب.
التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
الإدخال: لا يحتاج إلى أسطر إدخال.
سجل سؤال { سؤال_نصي: نص, جواب: ص64 }
دالة ابدأ_الرئيسية() -> ص64 {
دع أسئلة: قائمة<سؤال> = [
سؤال { سؤال_نصي: "2 + 3?", جواب: 5 },
سؤال { سؤال_نصي: "9 - 4?", جواب: 5 },
سؤال { سؤال_نصي: "3 * 4?", جواب: 12 },
سؤال { سؤال_نصي: "12 / 3?", جواب: 4 },
سؤال { سؤال_نصي: "7 + 8?", جواب: 15 }
].
متغير فهرس: ص64 = 0.
طالما (فهرس < طول(أسئلة)) {
اطبع(أسئلة[فهرس]::سؤال_نصي + "\س").
فهرس = فهرس + 1.
}
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "success",
"output": "2 + 3?\n9 - 4?\n3 * 4?\n12 / 3?\n7 + 8?\n",
"processStatus": 0
},
"native": {
"check": 0,
"status": 0,
"output": "2 + 3?\n9 - 4?\n3 * 4?\n12 / 3?\n7 + 8?\n"
}
}المرحلة 2: الدالة المساعدة والتغذية الراجعة
يستدعي المصدر الابتدائي تعليق بالعدد 5 ثم 6 للسؤال الأول. تعيد دالته هل_صحيح عمدا خطأ لكل جواب. يطبع Wrong. Expected 5.\nWrong. Expected 5.\n، ويعيد 0 ولا يقرأ إدخالا. هذا عرض للتغذية الراجعة بمقارنة لم تكتمل بعد.
التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
الإدخال: لا يحتاج إلى أسطر إدخال.
سجل سؤال { سؤال_نصي: نص, جواب: ص64 }
دالة هل_صحيح(السؤال: سؤال, جواب: ص64) -> منطقي {
أرجع خطأ.
}
دالة تعليق(السؤال: سؤال, جواب: ص64) -> وحدة {
إذا (هل_صحيح(السؤال, جواب)) {
اطبع("Correct.\س").
} وإلا {
اطبع("Wrong. Expected " + نسق_ص64(السؤال::جواب) + ".\س").
}
}
دالة ابدأ_الرئيسية() -> ص64 {
دع أسئلة: قائمة<سؤال> = [
سؤال { سؤال_نصي: "2 + 3?", جواب: 5 },
سؤال { سؤال_نصي: "9 - 4?", جواب: 5 },
سؤال { سؤال_نصي: "3 * 4?", جواب: 12 },
سؤال { سؤال_نصي: "12 / 3?", جواب: 4 },
سؤال { سؤال_نصي: "7 + 8?", جواب: 15 }
].
تعليق(أسئلة[0], 5).
تعليق(أسئلة[0], 6).
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "success",
"output": "Wrong. Expected 5.\nWrong. Expected 5.\n",
"processStatus": 0
},
"native": {
"check": 0,
"status": 0,
"output": "Wrong. Expected 5.\nWrong. Expected 5.\n"
}
}تأخذ هل_صحيح(السؤال: سؤال, جواب: ص64) -> منطقي قيمة سؤال وجوابا عدديا، ثم تعيد قيمة منطقية. تعيد تعليق النوع وحدة، لذا يستخدم استدعاؤها كتعليمة. تختار إذا التغذية الراجعة الفورية؛ وينسق فرع الجواب الخاطئ العدد المتوقع من السجل. كل الدوال المساعدة على مستوى الملف نفسه. توقع السطر الذي يتغير حين تعمل المقارنة.
استبدل خطأ الثابتة في الدالة المساعدة بمقارنة مع الجواب المتوقع للسؤال.
تلميح: أعد جواب يطابق السؤال::جواب. أبق فرعي التغذية الراجعة والاستدعاءين بالعددين 5 و6.
اعرض الإجابة المشروحة
يقارن الاستدعاء الأول 5 مع 5 ويطبع Correct. . يقارن الثاني 6 مع 5 ويطبع Wrong. Expected 5. . يعيد الحل الكامل الحالة 0 دون قراءة أو حساب درجة. تعيد الدالة المساعدة قيمة منطقية؛ وهي مستقلة عن حالة العملية الصحيحة التي تعيدها دالة الدخول.
التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
الإدخال: لا يحتاج إلى أسطر إدخال.
سجل سؤال { سؤال_نصي: نص, جواب: ص64 }
دالة هل_صحيح(السؤال: سؤال, جواب: ص64) -> منطقي {
أرجع جواب يطابق السؤال::جواب.
}
دالة تعليق(السؤال: سؤال, جواب: ص64) -> وحدة {
إذا (هل_صحيح(السؤال, جواب)) {
اطبع("Correct.\س").
} وإلا {
اطبع("Wrong. Expected " + نسق_ص64(السؤال::جواب) + ".\س").
}
}
دالة ابدأ_الرئيسية() -> ص64 {
دع أسئلة: قائمة<سؤال> = [
سؤال { سؤال_نصي: "2 + 3?", جواب: 5 },
سؤال { سؤال_نصي: "9 - 4?", جواب: 5 },
سؤال { سؤال_نصي: "3 * 4?", جواب: 12 },
سؤال { سؤال_نصي: "12 / 3?", جواب: 4 },
سؤال { سؤال_نصي: "7 + 8?", جواب: 15 }
].
تعليق(أسئلة[0], 5).
تعليق(أسئلة[0], 6).
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "success",
"output": "Correct.\nWrong. Expected 5.\n",
"processStatus": 0
},
"native": {
"check": 0,
"status": 0,
"output": "Correct.\nWrong. Expected 5.\n"
}
}المرحلة 3: الإدخال والتوقف والتحليل المتحقق
يسأل المصدر الابتدائي السؤال الأول مرة واحدة. يفحص q الصغيرة المطابقة تماما قبل حلل_ص64، ويطبع ملخص توقف مبكر بعدادات صفرية عند q، أو Parsed: 5\n عند 5، أو Invalid: invalid-number\n عند 12x. ثم يعيد 0 حتى بعد إدخال غير صالح. لا يعيد المحاولة ولا يفحص الجواب ولا يحسب درجة بعد. إذا جهزت 12x ثم 5، يستهلك السطر الأول وحده.
التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
أسطر الإدخال: ["12x"]
سجل سؤال { سؤال_نصي: نص, جواب: ص64 }
دالة ابدأ_الرئيسية() -> ص64 {
دع أسئلة: قائمة<سؤال> = [
سؤال { سؤال_نصي: "2 + 3?", جواب: 5 },
سؤال { سؤال_نصي: "9 - 4?", جواب: 5 },
سؤال { سؤال_نصي: "3 * 4?", جواب: 12 },
سؤال { سؤال_نصي: "12 / 3?", جواب: 4 },
سؤال { سؤال_نصي: "7 + 8?", جواب: 15 }
].
اطبع(أسئلة[0]::سؤال_نصي + " ").
دع سطر: نص = اقرأ_سطر().
إذا (سطر يطابق "q") {
اطبع("Stopped early. Correct: 0; answered: 0; total: " + نسق_ص64(طول(أسئلة)) + ".\س").
أرجع 0.
}
دع محلل: نتيجة<ص64> = حلل_ص64(سطر).
إذا (محلل::نجاح) {
اطبع("Parsed: " + نسق_ص64(محلل::قيمة) + "\س").
} وإلا {
اطبع("Invalid: " + محلل::الخطأ::الرمز + "\س").
}
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "success",
"output": "2 + 3? Invalid: invalid-number\n",
"processStatus": 0
},
"native": {
"check": 0,
"status": 0,
"output": "2 + 3? Invalid: invalid-number\n"
}
}أضف حلقة بعلم منطقي معلق حول فروع الإدخال الموردة. يجعل نجاح التحليل وحده العلم خطأ. توقع نص السؤال بعد 12x. يكرر الحل 2 + 3? ، ويطبع Parsed: 5\n بعد الرد التالي 5، ويعيد 0. خرجه الدقيق 2 + 3? Retry: invalid-number\n2 + 3? Parsed: 5\n. يبقى هذا ملف تدريب على تحليل سؤال واحد دون تغذية راجعة أو درجة. تبقى عدادات توقفه المبكر صفرا لأن هذه المرحلة لا تحسب أجوبة.
أعد السؤال الأول نفسه بعد إخفاق التحليل. أنه حلقة التدريب بعد عدد واحد محلل.
تلميح: ابدأ معلق بصواب. أبق q قبل التحليل، واقرأ قيمة عند نجاح فقط، واترك معلق دون تغيير في فرع الخطأ. غير تسمية الخطأ من Invalid إلى Retry.
اعرض الإجابة المشروحة
تحمل نتيجة الإخفاق معلومات خطأ ولا تحمل حمولة عددية قابلة للقراءة. تترك طباعة رمزها معلق صواب، فيطلب السؤال نفسه مجددا. تطبع نتيجة النجاح قيمتها وتجعل معلق خطأ. تعيد q المطابقة تماما من الدالة قبل التحليل. تعيد دالة الدخول 0 بعد عدد أو q، أما EOF فيوقع فخا وإيقاف فيلغي التشغيل. لا يضيف أي جواب عددي درجة في هذه المرحلة.
التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
أسطر الإدخال: ["12x","5"]
سجل سؤال { سؤال_نصي: نص, جواب: ص64 }
دالة ابدأ_الرئيسية() -> ص64 {
دع أسئلة: قائمة<سؤال> = [
سؤال { سؤال_نصي: "2 + 3?", جواب: 5 },
سؤال { سؤال_نصي: "9 - 4?", جواب: 5 },
سؤال { سؤال_نصي: "3 * 4?", جواب: 12 },
سؤال { سؤال_نصي: "12 / 3?", جواب: 4 },
سؤال { سؤال_نصي: "7 + 8?", جواب: 15 }
].
متغير معلق: منطقي = صواب.
طالما (معلق) {
اطبع(أسئلة[0]::سؤال_نصي + " ").
دع سطر: نص = اقرأ_سطر().
إذا (سطر يطابق "q") {
اطبع("Stopped early. Correct: 0; answered: 0; total: " + نسق_ص64(طول(أسئلة)) + ".\س").
أرجع 0.
}
دع محلل: نتيجة<ص64> = حلل_ص64(سطر).
إذا (محلل::نجاح) {
اطبع("Parsed: " + نسق_ص64(محلل::قيمة) + "\س").
معلق = خطأ.
} وإلا {
اطبع("Retry: " + محلل::الخطأ::الرمز + "\س").
}
}
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "success",
"output": "2 + 3? Retry: invalid-number\n2 + 3? Parsed: 5\n",
"processStatus": 0
},
"native": {
"check": 0,
"status": 0,
"output": "2 + 3? Retry: invalid-number\n2 + 3? Parsed: 5\n"
}
}تزيل اقرأ_سطر / read_line نهاية السطر وتحفظ بقية النص. استخدم سطر يطابق "q" / line matches "q" قبل التحليل. لا تحذف المسافات ولا تحول الأرقام إلى صيغة أخرى ولا توحد حالة الأحرف. تقبل حلل_ص64 / parse_i64 علامة ASCII اختيارية + أو -، ثم أرقام ASCII من 0 إلى 9، ضمن مجال ص64. يحلل +05 و005 إلى 5؛ ويحلل -1 إلى جواب خاطئ صالح في الاختبار الكامل. الإدخال الفارغ و12x و5 والرقم العربي الهندي ٥ والعربي الهندي الممتد ۵ والحرف الكبير Q كلها invalid-number. العدد 9223372036854775808 هو number-out-of-range. يعيد الحل المحاولة بعد كلا الإخفاقين دون تغيير النص. راجع جدول النص العددي.
يقرأ فرع النجاح وحده محلل::قيمة / parsed::value؛ ويقرأ فرع الإخفاق وحده محلل::الخطأ::الرمز / parsed::error::code. إخفاق التحليل قابل للاسترداد. يقدم إغلاق الإدخال أثناء الانتظار EOF ويوقع فخ input-exhausted مع إبقاء الخرج السابق. يبلغ إيقاف عن إلغاء ويحفظ الخرج السابق. لا يعد أي منهما بملخص درجة لطيف أو إكمال طبيعي.
المرحلة 4: الدرجة والانتقال والملخص
يسأل المصدر الابتدائي الآن الأسئلة الخمسة، ويعيد محاولة الإدخال غير الصالح، ويفحص الأجوبة وينتقل بعد كل عدد محلل. يزيد عدد_المجاب وفهرس مرة واحدة، لكنه يترك صحيح صفرا عمدا. تطبع خمسة ردود صحيحة خمسة أسطر Correct. ثم Completed. Correct: 0; answered: 5; total: 5.\n. يعرض هذا المصدر درجة لم تكتمل بعد، وليس نتيجة دقيقة. يدعم التوقف المبكر ويعيد 0 عند الإكمال أو q.
التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
أسطر الإدخال: ["5","5","12","4","15"]
سجل سؤال { سؤال_نصي: نص, جواب: ص64 }
دالة هل_صحيح(السؤال: سؤال, جواب: ص64) -> منطقي {
أرجع جواب يطابق السؤال::جواب.
}
دالة ملخص(عنوان: نص, صحيح: ص64, عدد_المجاب: ص64, إجمالي: ص64) -> وحدة {
اطبع(عنوان + ". Correct: " + نسق_ص64(صحيح) + "; answered: " + نسق_ص64(عدد_المجاب) + "; total: " + نسق_ص64(إجمالي) + ".\س").
}
دالة ابدأ_الرئيسية() -> ص64 {
دع أسئلة: قائمة<سؤال> = [
سؤال { سؤال_نصي: "2 + 3?", جواب: 5 },
سؤال { سؤال_نصي: "9 - 4?", جواب: 5 },
سؤال { سؤال_نصي: "3 * 4?", جواب: 12 },
سؤال { سؤال_نصي: "12 / 3?", جواب: 4 },
سؤال { سؤال_نصي: "7 + 8?", جواب: 15 }
].
دع إجمالي: ص64 = طول(أسئلة).
متغير فهرس: ص64 = 0.
متغير عدد_المجاب: ص64 = 0.
متغير صحيح: ص64 = 0.
اطبع("Quiz: " + نسق_ص64(إجمالي) + " questions. Type q to stop.\س").
طالما (فهرس < إجمالي) {
دع السؤال: سؤال = أسئلة[فهرس].
اطبع("Question " + نسق_ص64(فهرس + 1) + "/" + نسق_ص64(إجمالي) + ": " + السؤال::سؤال_نصي + " ").
دع سطر: نص = اقرأ_سطر().
إذا (سطر يطابق "q") {
ملخص("Stopped early", صحيح, عدد_المجاب, إجمالي).
أرجع 0.
}
دع محلل: نتيجة<ص64> = حلل_ص64(سطر).
إذا (محلل::نجاح) {
إذا (هل_صحيح(السؤال, محلل::قيمة)) {
اطبع("Correct.\س").
// أضف واحدا إلى العداد صحيح هنا.
} وإلا {
اطبع("Wrong. Expected " + نسق_ص64(السؤال::جواب) + ".\س").
}
عدد_المجاب = عدد_المجاب + 1.
فهرس = فهرس + 1.
} وإلا {
اطبع("Retry: " + محلل::الخطأ::الرمز + ". Use ASCII digits, for example 5, or q.\س").
}
}
ملخص("Completed", صحيح, عدد_المجاب, إجمالي).
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "success",
"output": "Quiz: 5 questions. Type q to stop.\nQuestion 1/5: 2 + 3? Correct.\nQuestion 2/5: 9 - 4? Correct.\nQuestion 3/5: 3 * 4? Correct.\nQuestion 4/5: 12 / 3? Correct.\nQuestion 5/5: 7 + 8? Correct.\nCompleted. Correct: 0; answered: 5; total: 5.\n",
"processStatus": 0
},
"native": {
"check": 0,
"status": 0,
"output": "Quiz: 5 questions. Type q to stop.\nQuestion 1/5: 2 + 3? Correct.\nQuestion 2/5: 9 - 4? Correct.\nQuestion 3/5: 3 * 4? Correct.\nQuestion 4/5: 12 / 3? Correct.\nQuestion 5/5: 7 + 8? Correct.\nCompleted. Correct: 0; answered: 5; total: 5.\n"
}
}تأتي إجمالي = طول(أسئلة) من القائمة. تبدأ دالة الدخول فهرس وعدد_المجاب وصحيح من الصفر مع كل تشغيل صريح. تفحص الحلقة فهرس < إجمالي قبل اختيار أسئلة[فهرس]. تعرض فهرس + 1 للقارئ بينما يبدأ الفهرس من الصفر. يزيد الجواب العددي الخاطئ عدد_المجاب وينتقل أيضا؛ ولا يزيد صحيح أبدا. لا يغير إخفاق التحليل أيا من هذه المتغيرات الثلاثة. تستدعي q المطابقة تماما ملخص قبل حساب السؤال المعلق.
توقع ملخص 5 و5 و0 ثم q قبل إصلاح الدرجة. يبلغ المصدر الابتدائي عن صفر صحيح وثلاثة أجوبة. أضف التحديث الناقص في فرع الجواب المطابق وحده. يبلغ الحل الكامل عن جوابين صحيحين وثلاثة أجوبة ومجموع خمسة. تنسق ملخص العدادات المطبوعة؛ وتعيد وحدة ولا تحدد حالة العملية. يعيد مسارا الخروج الطبيعي 0 صراحة.
أضف 1 إلى صحيح فقط حين تقول الدالة المساعدة إن العدد المحلل يطابق الجواب. تتبع عدد_المجاب وفهرس عبر رد غير صالح وجواب خاطئ ثم q.
تلميح: استبدل التعليق المورد بعد Correct بالتعليمة صحيح = صحيح + 1. أبق تحديثي عدد_المجاب وفهرس بعد فرعي التغذية الراجعة داخل محلل::نجاح. اترك فرع الإخفاق وإعادة q دون تغيير.
اعرض الإجابة المشروحة
يزيد فرع الجواب المطابق وحده صحيح. يشترك الفرعان العدديان بعد ذلك في زيادة واحدة لكل من عدد_المجاب وفهرس. لا يدخل إخفاق التحليل أيا منهما، فيكرر السؤال المعلق بعدادات ثابتة. يعيد فرع q قبل التحليل أو تلك الزيادات. تنتهي خمسة ردود صحيحة عند صحيح يساوي 5 وعدد_المجاب يساوي 5 وإجمالي يساوي 5. يصبح فهرس بعد الرد الخامس 5، فيكون اختبار الحلقة خطأ ويطبع الملخص دون قراءة إضافية. يعيد الحل الكامل بملف واحد الحالة 0.
التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
أسطر الإدخال: ["5","5","12","4","15"]
سجل سؤال { سؤال_نصي: نص, جواب: ص64 }
دالة هل_صحيح(السؤال: سؤال, جواب: ص64) -> منطقي {
أرجع جواب يطابق السؤال::جواب.
}
دالة ملخص(عنوان: نص, صحيح: ص64, عدد_المجاب: ص64, إجمالي: ص64) -> وحدة {
اطبع(عنوان + ". Correct: " + نسق_ص64(صحيح) + "; answered: " + نسق_ص64(عدد_المجاب) + "; total: " + نسق_ص64(إجمالي) + ".\س").
}
دالة ابدأ_الرئيسية() -> ص64 {
دع أسئلة: قائمة<سؤال> = [
سؤال { سؤال_نصي: "2 + 3?", جواب: 5 },
سؤال { سؤال_نصي: "9 - 4?", جواب: 5 },
سؤال { سؤال_نصي: "3 * 4?", جواب: 12 },
سؤال { سؤال_نصي: "12 / 3?", جواب: 4 },
سؤال { سؤال_نصي: "7 + 8?", جواب: 15 }
].
دع إجمالي: ص64 = طول(أسئلة).
متغير فهرس: ص64 = 0.
متغير عدد_المجاب: ص64 = 0.
متغير صحيح: ص64 = 0.
اطبع("Quiz: " + نسق_ص64(إجمالي) + " questions. Type q to stop.\س").
طالما (فهرس < إجمالي) {
دع السؤال: سؤال = أسئلة[فهرس].
اطبع("Question " + نسق_ص64(فهرس + 1) + "/" + نسق_ص64(إجمالي) + ": " + السؤال::سؤال_نصي + " ").
دع سطر: نص = اقرأ_سطر().
إذا (سطر يطابق "q") {
ملخص("Stopped early", صحيح, عدد_المجاب, إجمالي).
أرجع 0.
}
دع محلل: نتيجة<ص64> = حلل_ص64(سطر).
إذا (محلل::نجاح) {
إذا (هل_صحيح(السؤال, محلل::قيمة)) {
اطبع("Correct.\س").
صحيح = صحيح + 1.
} وإلا {
اطبع("Wrong. Expected " + نسق_ص64(السؤال::جواب) + ".\س").
}
عدد_المجاب = عدد_المجاب + 1.
فهرس = فهرس + 1.
} وإلا {
اطبع("Retry: " + محلل::الخطأ::الرمز + ". Use ASCII digits, for example 5, or q.\س").
}
}
ملخص("Completed", صحيح, عدد_المجاب, إجمالي).
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "success",
"output": "Quiz: 5 questions. Type q to stop.\nQuestion 1/5: 2 + 3? Correct.\nQuestion 2/5: 9 - 4? Correct.\nQuestion 3/5: 3 * 4? Correct.\nQuestion 4/5: 12 / 3? Correct.\nQuestion 5/5: 7 + 8? Correct.\nCompleted. Correct: 5; answered: 5; total: 5.\n",
"processStatus": 0
},
"native": {
"check": 0,
"status": 0,
"output": "Quiz: 5 questions. Type q to stop.\nQuestion 1/5: 2 + 3? Correct.\nQuestion 2/5: 9 - 4? Correct.\nQuestion 3/5: 3 * 4? Correct.\nQuestion 4/5: 12 / 3? Correct.\nQuestion 5/5: 7 + 8? Correct.\nCompleted. Correct: 5; answered: 5; total: 5.\n"
}
}جرب النهايات المختلفة
يحفظ المصدر سلاسل الخرج الإنجليزية في المفردات الموردة كلتيهما، فتطبق هذه الفحوص الدقيقة على صفحتي القراءة. Correct عدد الأجوبة الصحيحة، وعدد_المجاب عدد الردود العددية الصالحة، وإجمالي طول قائمة الأسئلة. الدرجة المطبوعة مستقلة عن حالة العملية الطبيعية. لا توجد عتبة نجاح.
| الردود أو التحكم | سلوك الحل الكامل |
|---|---|
5 و5 و12 و4 و15 |
خمسة أسطر تغذية راجعة صحيحة، ثم Completed. Correct: 5; answered: 5; total: 5. والحالة 0. لا سؤال أو قراءة سادسة. |
12x ثم 6 ثم q |
يعيد السؤال الأول المحاولة مع invalid-number؛ ويطبع 6 الرسالة Wrong. Expected 5. وينتقل للسؤال الثاني؛ وتبلغ q عن Stopped early. Correct: 0; answered: 1; total: 5. بالحالة 0. |
9223372036854775808 ثم q |
يعيد السؤال الأول المحاولة مع number-out-of-range؛ ويبلغ التوقف المبكر عن صفر صحيح وصفر مجاب ومجموع خمسة والحالة 0. |
الرد الأول q |
Stopped early. Correct: 0; answered: 0; total: 5. والحالة 0. |
5 و5 و0 ثم q |
يطبع الرد الثالث Wrong. Expected 12.؛ ويبلغ التوقف المبكر عن جوابين صحيحين وثلاثة أجوبة ومجموع خمسة والحالة 0. |
| إغلاق الإدخال أثناء الانتظار | فخ input-exhausted. تبقى نصوص الأسئلة والتغذية الراجعة السابقة؛ ولا يضمن ملخص لطيف عند EOF. |
| إيقاف أثناء الانتظار | إلغاء. يبقى الخرج السابق؛ وهذه ليست EOF أو إكمالا طبيعيا. |
بعد الإكمال، اختر تشغيل مجددا لتبدأ من السؤال الأول بعدادات صفرية. يحفظ حفظ المسودة الشفرة، ولا يحفظ درجة أو تشغيلا معلقا. لا يستخدم الاختبار وحدات أو مكتبات أصلية أو ملفات درجات أو عشوائية أو مؤقتات.
سؤال سادس اختياري
أضف سؤال { سؤال_نصي: "10 - 3?", جواب: 7 } عنصرا سادسا إلى قائمة الحل الكامل. توقع تغير المجموع قبل التشغيل. أرسل 5 و5 و12 و4 و15 و7؛ وتوقع Question 6/6: 10 - 3? Correct.\n ثم Completed. Correct: 6; answered: 6; total: 6.\n بالحالة 0 ودون قراءة سابعة. توفر طول(أسئلة) المجموع، فتتبع الحلقة ومقامات أرقام الأسئلة والملخصان القائمة. هناك تحد منفصل اختياري هو إعادة بناء الاختبار بملف واحد من مسودة فارغة.
تحقق من فهمك
اشرح لماذا ينتقل الجواب العددي الخاطئ بينما تعيد Q المحاولة، ولماذا لا تحسب q السؤال المعلق، ولماذا لا يمكن لإغلاق الإدخال أن يعد بملخص درجة. تتبع العدادات بعد 12x و6 و5 ثم q. يكون عدد الصحيح صفرا بعد 6، ثم يصبح واحدا مع جوابين حين تنهي q التشغيل. لا تحفظ درجة أو تقدم، ويبقى التنقل مفتوحا. عد إلى مسار التعلم.
اختر إلى أين تتجه بعد ذلك للدروس الأصلية الاختيارية والأدلة العملية.