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 لنضع داخل عبارة أن العملية غير معروفة ونحفظها بالمتحول كومينت نفسه

بعد الخروج من بلوك الاحتمالات نقوم بمسح الشاشة وإظهار التعليق الذي حفظناه

جربوا البرنامج مع إدخال عدة عمليات و كذلك بإدخال رموز غير العمليات الأربع

الواجب :

إضافة احتمال خامس لإيجاد النسبة المئوية للعدد الأصغر من الأكبر

بمعنى أن يكون أحد الرموز المعرفة هو % بحيث عندما يدخل إلى البلوك الخاص به يفحص أيهما أصغر فيقسمه على الأكبر ويظهر النتيجة كنسبة مئوية

وأدعكم بحفظ الله