Week 6 · Unit 1 Topic 2: a number converter project with VB.NET: window, controls, properties and code · 3 lessons
3
دوال التحويل الجاهزة: الاختبار بإجابات معروفة
ICT Secondary 3 Term 1, Unit 1, Topic 2: pp. 27–36
الهدفاستعمل Convert.ToInt32 وConvert.ToString، واختبر المحوّل بإجابات تستطيع التحقق منها يدويًا، وسمِّ المدخلات التي توقفه.
كلمات جديدة
دالة جاهزة (ready function) · دالة تأتي مع اللغة فلا نكتب خطواتها بأنفسناحالة اختبار (test case) · مدخل مع الإجابة التي نتوقعهااستثناء (exception) · خطأ يوقف البرنامج حين يحدث ما لم يكن متوقعًاTry … Catch · كتلة تجرّب كودًا، وإذا وقع استثناء نفّذت رسالة آمنة بدلًا منه
الشرح
تؤدي دالتان جاهزتان العمل كله. الدالة Convert.ToInt32(text, base) تقرأ نصًا مكتوبًا بالأساس 2 أو 10 أو 16 وتعطي عددًا صحيحًا. والدالة Convert.ToString(number, base) تكتب عددًا بأساس ما. ويخرج النظام السداسي عشر بأحرف صغيرة، فيصير 255 إلى ff؛ وإضافة .ToUpper() تعطي FF كما كتبناه يدويًا في الأسبوعين الرابع والخامس. كيف نعرف أن البرنامج صحيح؟ نختبره بإجابات معروفة حوّلناها يدويًا، وحالة الاختبار مدخل مع الإجابة المتوقعة. ثم نختبر المدخلات الخاطئة أيضًا: مربعًا فارغًا، أو رمزًا غير صالح مثل 2 في عدد ثنائي، أو علامة سالب في عدد ثنائي أو سداسي عشري، أو عددًا عشريًا يزيد على ٢٬١٤٧٬٤٨٣٬٦٤٧. وكل واحد منها يوقف البرنامج باستثناء. وإذا وضعنا السطرين داخل Try … Catch أظهر البرنامج رسالة مهذبة بدلًا من التوقف.
الدالة
مثال
تعطي
Convert.ToInt32(text, base)
Convert.ToInt32("3C", 16)
60 (عدد)
Convert.ToString(number, base)
Convert.ToString(60, 16)
3c (نص، والسداسي عشر بأحرف صغيرة)
أمثلة محلولة
المكتوب
من
إلى
الرسالة
مع .ToUpper()
111100
ثنائي
عشري
60
60
60
عشري
سداسي عشري
3c
3C
3C
سداسي عشري
ثنائي
111100
111100
255
عشري
سداسي عشري
ff
FF
أربعة اختبارات بإجابات نستطيع التحقق منها يدويًا. وهي مترابطة: العدد 60 يساوي 111100 بالثنائي و3C بالسداسي عشر.
المكتوب
من
ماذا يحدث
(مربع فارغ)
أي نظام
يتوقف البرنامج
12
ثنائي
يتوقف البرنامج: الرمز 2 ليس رمزًا ثنائيًا
-101
ثنائي
يتوقف البرنامج: لا تُقبل علامة السالب إلا في العشري
3000000000
عشري
يتوقف البرنامج: أكبر من أن يُحفظ في عدد صحيح من هذا النوع
FFFFFFFF
سداسي عشري
لا يظهر خطأ، لكن الرسالة -1، وهي نتيجة غريبة
شُغّلت هذه المدخلات الخاطئة على المعالج العادي.
Vb
1Try
2 number = Convert.ToInt32(typed, fromBase)
3 MessageBox.Show(Convert.ToString(number, toBase).ToUpper())
4Catch ex As Exception
5 MessageBox.Show("Please type a valid number for the system you chose.")
6End Try
Output
D
Please type a valid number for the system you chose.
السطران نفسهما داخل Try … Catch مع الأحرف الكبيرة. في التجربة الأولى كُتب 1101 من ثنائي إلى سداسي عشري، وفي الثانية كُتب 12 من ثنائي إلى عشري.
نشاط الفصل
اصنع على الورق جدول اختبار من خمسة صفوف للمحوّل. في كل صف نص مكتوب ونظام «من» ونظام «إلى» والإجابة التي تتوقعها بالتحويل اليدوي. ويجب أن يكون صف واحد على الأقل مدخلًا خاطئًا؛ وبيّن الرسالة التي ينبغي أن تظهر له في نسخة Try … Catch.
تدرّب
1
ماذا تعطي Convert.ToString(255, 16)؟
ff بأحرف صغيرة؛ و.ToUpper() تحوّلها إلى FF.
2
يستلم المعالج العادي النص 12 مع تحديد «ثنائي» في «من». ماذا يحدث؟
يتوقف بخطأ لأن الرمز 2 ليس رمزًا ثنائيًا.
3
لماذا يستعمل جدول الاختبار إجابات حُسبت يدويًا؟
لأنها إجابة مستقلة نقارن بها رسالة البرنامج.
4
اذكر مدخلين يوقفان المحوّل العادي.
مثلًا مربعًا فارغًا، أو نصًا ثنائيًا فيه الرمز 2، أو عددًا عشريًا يزيد على ٢٬١٤٧٬٤٨٣٬٦٤٧.