25 - سلسلة تبسيط البرمجة – برنامج قالب الاحتمالات المتعددة
السلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم
عودة على المثال في نهاية الدرس السابع لدينا :
أفهمته أني سأذكر رقمين متتالين ثم العملية وأن تعيد لي ناتج تطبيق العملية على العددين
فبدلا من الصيغة المطولة أصبحت تقول له
خمسة سبعة جمع فيجيب اثنا عشر أي
5 7 + => 12
8 2 - => 6
3 5 * => 15
9 3 / => 3
ونريد أن نحول هذه العملية إلى برنامج بحيث يستقبل مدخلين أرقام و رمز للعملية فيعطينا ناتج تطبيق العملية على الأرقام لذا سنكتب البرنامج التالي :
Module Module1
Sub Main()
Dim FirstNumber, SecondNumber As Integer
Dim Operation As Char
Dim Result As Double
Dim Comment As String
Console.Clear()
Console.WriteLine("Type the first number ?")
FirstNumber = Console.ReadLine()
Console.Clear()
Console.WriteLine("Type the second number ?")
SecondNumber = Console.ReadLine()
Console.Clear()
Console.WriteLine("Type the operation ?")
Console.WriteLine("+ for addition")
Console.WriteLine("- for subtraction")
Console.WriteLine("* for multiplication")
Console.WriteLine("/ for division")
Console.WriteLine()
Operation = Console.ReadLine(0) ' استقبال أول رمز في حال إدخال أكثر من رمز
Select Case Operation
Case "+" ' العملية جمع
Result = FirstNumber + SecondNumber
Comment = FirstNumber & " + " & SecondNumber & " = " & Result
Case "-" ' العملية طرح
Result = FirstNumber - SecondNumber
Comment = FirstNumber & " - " & SecondNumber & " = " & Result
Case "*" ' العملية ضرب
Result = FirstNumber * SecondNumber
Comment = FirstNumber & " * " & SecondNumber & " = " & Result
Case "/" 'العملية قسمة
Result = FirstNumber / SecondNumber
Comment = FirstNumber & " / " & SecondNumber & " = " & Result
Case Else ' العملية غير معروفة
Comment = "Operation is unknown."
End Select
Console.Clear()
Console.WriteLine(Comment)
Console.Read()
End Sub
End Module
ابتدأنا البرنامج بتعريف المتحولات التي ستلزمنا خلال البرنامج
أولها تعريف متغيرين من النوع رقم صحيح ونلاحظ هنا أننا أسميناها أسماء تعبر عن وظيفتها بدلا من أن نكتبها كرموز مبهمة
وذلك لكي نعود أنفسنا أن نتعامل مع أسماء معبرة بحيث تسهل فهم البرنامج بالنسبة لنا عند مراجعته أو بالنسبة للآخرين سيما عندما تكبر البرامج
يليه تعريف متغير من النوع رمز Char والرمز هو رمز مفرد يعبر عن أحد رموز الأسكي وحجمه بايت واحد
ويختلف عن السلسلة الرمزية String أن الأخير هو سلسلة من الأول أي مصفوفة منه
لذا يمكن أن يحتوي أي عدد من الرموز المتسلسلة والتي تعبر عن النصوص
المتغير الثالث هو من النوع العدد الكسري Double و وظيفته حفظ النتيجة وقد احتجنا لهذا النوع لأن ناتج القسمة قد لا يكون صحيحا أي عددا عشريا
المتحول الآخير هو من النوع نص أو سلسلة رموز لأننا نريد أن يحتوي النص الذي سنخرجه على الشاشة بالنسبة لكل عملية
نلاحظ أننا استخدمنا إجراء جديد تابع لصنف Console و هو الإجراء Clear() و من اسمه يتبين أنه يقوم بعملية مسح أو تنظيف وفعلا وظيفته أن يمسح كل شيء ظاهر على الشاشة ليعيدها كما لو أنها فتحت أول مرة
والغاية هي أن يتم التركيز على الإدخال الجديد بعد أن ننتهي من الإدخال السابق
ثم يلي ذلك طلب إدخال العدد الأول وحفظه في المتحول المخصص له
ثم نمسح الشاشة وندخل العدد الثاني
ثم نمسح ونطلب إدخال رمز العملية ونظهر الخيارات كتوضيح للمستخدم
بعد إدخال العملية نأخذ الرمز الأول فقط ولهذا وضعنا صفر بين قوسي الإجراء لكي يتجاهل بقية النص في حال أدخل بعد الرمز فراغ أو شيء آخر
كما نلاحظ أننا أضفنا كتابة بالعربي ويظهر لونها أخضر ضمن محرر الكود
وهذا يسمى بالبرمجة التعليقات Comments ووظيفته إضافة تعليقات وشروحات ولا يعني للكود شيئا أي أنه عند الترجمة يتجاهل المترجم كل التعليقات
لأن التعليقات عملها فقط أثناء الكود
والتعليق يتم بكتابة رمز الفاصلة العلوية ' ثم ما يليه كله يعتبر تعليق ولهذا يجب أن لا يأتي أي تعليمة بعده لأن المحرر سيحوله لتعليق
والتعليق مهم جدا لعمليات التوثيق وذلك من أجل تسهيل مراجعة وتصحيح وتطوير الكود فيما بعد وخاصة عندما يكون هناك فريق عمل أو يتسلم الأمر مبرمج آخر
بعد أن أنهينا الإدخالات يأتي قسم الاحتمالات المتعددة وهي قالب تعليمة Select Case
و وظيفته أن يفحص قيمة المتغير الذي نريد أن يحدد سير التنفيذ
وفي مثالنا هو العملية Operation حيث لدينا عدة احتمالات إما أن يكون أحد العمليات الأربع وإما أن يكون احتمال غيرها
تأتي ضمنا الخيارات Case يليها الاحتمالات
وأثناء تنفيذ البرنامج ينتقل التنفيذ إلى البلوك الذي يطابق الرمز أو القيمة التي يحتويها المتغير Operation
وبعد أن نضع كل الاحتمالات يكون آخر شيء الاحتمال الاحتياطي أو الاضطراري Case Else وهو يعني أنه في حال كانت قيمة المتغير لا تطابق أي من الاحتمالات السابقة ينتقل التنفيذ إلى هنا
نلاحظ أننا داخل بلوك كل احتمال قمنا بحساب الناتج عن تطبيق العملية المختارة على الرقمين ووضعها في المتغير Result
وكذلك وضعنا النص المناسب والذي نريد إظهاره للتعبير عن النتيجة وحفظناه في المتغير Comment وهو من النوع String
لكي نظهره بعد الانتقال من بلوك Select Case كاملا
أنوه أن مجرد دخول التنفيذ إلى أحد البلوكات ضمن Select فإنه ينفذ ما بداخله ثم يخرج مباشرة إلى التعليمة التي تلي End Select و ذلك لأنه لن يكون للمتغير أكثر من احتمال واحد في نفس اللحظة أي مثلا يستحيل أن يكون الرمز المدخل جمع و ضرب بنفس اللحظة لأنه رمز وحيد
وحتى في حال عدم مطابقة الرمز المدخل للاحتمالات كلها فإنه سينتقل إجباريا إلى الاحتمال الآخير وهو Case Else لنضع داخل عبارة أن العملية غير معروفة ونحفظها بالمتحول كومينت نفسه
بعد الخروج من بلوك الاحتمالات نقوم بمسح الشاشة وإظهار التعليق الذي حفظناه
جربوا البرنامج مع إدخال عدة عمليات و كذلك بإدخال رموز غير العمليات الأربع
الواجب :
إضافة احتمال خامس لإيجاد النسبة المئوية للعدد الأصغر من الأكبر
بمعنى أن يكون أحد الرموز المعرفة هو % بحيث عندما يدخل إلى البلوك الخاص به يفحص أيهما أصغر فيقسمه على الأكبر ويظهر النتيجة كنسبة مئوية
وأدعكم بحفظ الله
التعليقات