جود ثيمز

الأربعاء، 14 أغسطس 2013

جملة If Then في فيجوال بيسك .نت

هذا الدرس يتطلب ان تكون لديك خلفية ولو بسيطة في المنطق الرياضي , أو انتقل عبر هذا الرابط إلى درس المنطق الرياضي .
أيضاً يجب ان تكون ملماً بالمعاملات الرياضية والمنطقية في فيجوال بيسك .نت , أو انتقل عبر هذا الرابط إلى درس المعاملات الرياضية والمنطقية في فيجوال بيسك .نت .

تساعدك الجمل الشرطية في بناء برامج ذكية ومرنة ويمكنك تسييرها كيفما شئت , وأول الجمل الشرطية التي سنتناولها هي جملة If Then , والقاعدة العامة لكتابتها كالتالي :
If اختباره تريد الذي الشرط Then
'الشرط تحقق اذا تنفيذها تريد التي الاوامر
ElseIf اختباره تريد الذي الآخر الشرط Then
'الشرط تحقق اذا تنفيذها تريد التي الاوامر
ElseIf اختباره تريد الذي الآخر الشرط Then
'الشرط تحقق اذا تنفيذها تريد التي الاوامر
......
......
Else
'خاطئة أعلاه الشروط جميع كانت اذا تنفيذها تريد التي الاوامر
End If
كما ترى يجب ان تنتهي عبارة if الشرطية بالكلمة End If وهو يدل على نهاية التركيب الخاص بالجملة If .

تقوم الجملة If Then باختبار الشرط الذي تريده مرة واحدة فقط فإذا كان صحيحاً ستنفذ الأوامر التي تسندها إليها وإذا كان خاطئاً لا تنفذ الاوامر وتتجاوز مباشرة إلى مابعدها .
الجزء الأساسي في عبارة If Then هو الجزء (If) حيث لابد من كتابته , أما الجزئين (ElseIf) و (Else) فهما اختياريان ويمكنك الاستغناء عنهما او كتابتهما وهذا حسب احتياجك في البرنامج .
سنتعرف الآن على أمثلة تطبيقية متنوعة وحالات مختلفة لاستخدام الجملة If :
المثال الأول :
برنامج يطلب من المستخدم ادخال أي رقم فإذا كان الرقم يساوي 5 فإن البرنامج يخبره ان الرقم هو 5 , وإذا كان أكبر من 5 أو أصغر من 5 لا يقوم البرنامج بفعل أي شئ ويتم الخروج من البرنامج .
الحل :
ما سنحتاجه أولاً هو متغير يمثل الرقم الذي سيدخله المستخدم وسنسميه "number" و سيكون من النوع Double .
قد تسأل لماذا اخترت النوع Double ؟ لماذا لم تختر النوع Integer ؟
لأن النوع Double يشمل الأعداد الكسرية أما Integer فيشمل الأعداد الصحيحة فقط , لنفرض أن المستخدم أدخل العدد 5.3 (وهو أكبر من 5) فإذا جعلت المتغير من النوع Integer فإن العدد الذي أدخله المستخدم سيتحول من 5.3 إلى 5 وبالتالي سيعتبره البرنامج مساوياً لـ 5 , وهذا خطأ كبير فالعدد 5.3 أكبر من 5 وليس مساوياً له , لهذا استخدمت النوع Double .
ثانياً يجب ان نقارن الرقم الذي سيدخله المستخدم مع العدد 5 لهذا سنحتاج إلى جملة If وسنستخدم معامل المقارنة (=) لنفحص هل الرقم مساوي لـ 5 أم لا .
كود البرنامج :
Module Module1
    Sub main()
        Dim number As Double
        Console.WriteLine("Enter a number: ")
        number = Console.ReadLine() 'الرقم ليدخل المستخدم انتظار
        If number = 5 Then '5 يساوي الرقم هل
            Console.WriteLine("The number is = 5")
            Console.ReadKey()
        End If
        'البرنامج من الخروج سيتم 5 يساوي الرقم يكن لم اذا
    End Sub
End Module

المثال الثاني :
برنامج يطلب من المستخدم ادخال رقم , فإذا كان الرقم أكبر من "5" فإن البرنامج يخبره أن الرقم أكبر من "5", بالمثل اذا كان أصغر من "5" يخبره البرنامج أن الرقم أقل من "5" , ايضاً اذا كان الرقم يساوي "5" فإن البرنامج سيخبره أن الرقم يساوي "5" .
الحل :
أول ماسنفعله أننا سنحجز متغيراً في الذاكرة من النوع Double وهذا المتغير سيمثل الرقم الذي سنطلب من المستخدم ادخاله وسنقوم بمقارنته مع العدد "5" , وسنسميه بالاسم "number" .
ثانياً المطلوب منا هو أن نقارن المتغير بالعدد "5" فإذا كان أكبر من "5" (يعني number>5) نطبع للمستخدم رسالة ان هذا الرقم أكبر من "5" , نفس الشئ اذا كان أصغر من "5" واذا كان يساوي "5" ...

لا تقلق اذا لم تفهم الأمر بعد , فمع كتابتك للكود بنفسك سوف تفهم كل ما قلته :
Module Module1
    Sub main()
        Dim number As Double
        Console.WriteLine("Enter a number: ")
        number = Console.ReadLine()
        If number > 5 Then
            Console.WriteLine("The number is greater than 5")
            Console.ReadKey()
        ElseIf number < 5 Then
            Console.WriteLine("The number is less than 5")
            Console.ReadKey()
        Else
            Console.WriteLine("The number is = 5")
            Console.ReadKey()
        End If
    End Sub
End Module
المثال الثالث :
برنامج يطلب من المستخدم ادخال رقم ثم يقوم بإخباره هل الرقم الذي أدخله سالب (negative) أم موجب (positive) .
الحل :
كيف نعرف أن الرقم سالب أو موجب؟ يكون الرقم موجب إذا كان أكبر من الصفر ويكون سالب إذا كان أصغر من الصفر , إذن فأول ماسنفعله بالتأكيد هو حجز متغير في الذاكرة من النوع Double يمثل الرقم الذي سيدخله المستخدم وسنسميه "testNumber" .
ثانياً سنقارن المتغير testNumber مع العدد "صفر" فإذا كان أكبر من الصفر (testNumber > 0) فإنه موجب وإذا كان أصغر من الصفر فإنه سالب .
كود البرنامج :
Module Module1
    Sub main()
        Dim testNumber As Double
        Console.WriteLine("Enter a number: ")
        testNumber = Console.ReadLine()
        If testNumber > 0 Then
            Console.WriteLine("The number is positive")
            Console.ReadKey()
        ElseIf testNumber < 0 Then
            Console.WriteLine("The number is negative.")
            Console.ReadKey()
        Else
            Console.WriteLine("The number is = 0")
            Console.ReadKey()
        End If
    End Sub
End Module

المثال الرابع :
برنامج يطلب من المستخدم ادخال رقم ثم يخبره أن هذا الرقم زوجي (Even) أو فردي (Odd) .
الحل :
كيف نعرف أن الرقم زوجي أو فردي؟ الرقم الزوجي يقبل القسمة على 2 بدون باقي (يعني باقي القسمة يساوي صفر) , أما الرقم الفردي فلا يقبل القسمة على 2 (يعني يكون للقسمة باقي) , مثلاً العدد 10 يقبل القسمة على 2 لأن 10÷2=5 والباقي "صفر" اذن فهو عدد زوجي , ولكن 13 لا يقبل القسمة على 2 لأن 13÷2=6 والباقي 1 اذن فهو عدد فردي .
لن أقول لك ماذا سنحتاج لبناء البرنامج , فأنت بالتأكيد تعرف ماذا سنحتاج ^_^
كود البرنامج :
في هذا المثال لن نحتاج للعبارة ElseIf لأنه لا حاجة لفحص شروط اضافية فالرقم اذا لم يكن زوجي إذن فهو فردي , لهذا لا حاجة لشروط اضافية .
Module Module1
    Sub main()
        Dim number As Double
        Console.WriteLine("Enter a number: ")
        number = Console.ReadLine()
        If (number Mod 2) = 0 Then
            Console.WriteLine("The number is even")
            Console.ReadKey()
        Else  'فردي فهو إذن زوجي الرقم يكن لم إذا
            Console.WriteLine("The number is odd.")
            Console.ReadKey()
        End If
    End Sub
End Module

الأوامر التي تنفذها جملة If Then لا تقتصر على الطباعة فقط بل يمكنك القيام بأي امر تريد تنفيذه إذا تحقق الشرط , انظر للمثال التالي ..
المثال الخامس :
للوهلة الأولى قد يبدو هذا المثال معقداً وهذا طبيعي , لكن لا عليك فقط اقرأ المثال عدة مرات ثم جهز المتطلبات بنفسك أما انا فسازودك مباشرة بكود البرنامج .
المثال هو : برنامج يطلب من المستخدم ادخال رقمين , فإذا كان الرقم الأول اكبر من الثاني فإنه يقوم بإيجاد الفرق بين الرقمين (يعني ناتج الطرح) , أما اذا كان الرقم الأول اصغر من الثاني فإن البرنامج يقوم بإيجاد ناتج الجمع لهذين الرقمين , أما اذا كان الرقمان متساويان فلا يقوم البرنامج بأي شئ ويتم الخروج من البرنامج .
الحل :
Module Module1
    Sub main()
        Dim number1, number2, result As Double
        Console.WriteLine("Enter the first number:")
        number1 = Console.ReadLine()
        Console.WriteLine("Enter the second number:")
        number2 = Console.ReadLine()
        If number1 > number2 Then
            result = number1 - number2
            Console.WriteLine("resul = " & result)
            Console.ReadKey()
        ElseIf number1 < number2 Then
            result = number1 + number2
            Console.WriteLine("resul = " & result)
            Console.ReadKey()
        End If
        'البرنامج من الخروج سيتم الثاني الرقم يساوي الاول الرقم كان إذا
    End Sub
End Module

تداخل الجمل الشرطية :

لا تخف من العنوان فما أقصده هو أن نضع جملة شرطية بداخل جملة شرطية اخرى (يعني جملة If Then داخل جملة If Then أخرى) , انظر للمثال التالي :
المثال السادس :
برنامج يطلب من المستخدم ادخال رقم فإذا كان الرقم موجب فإن البرنامج يتحقق أيضاً ان الرقم زوجي ثم يطبع البرنامج رسالة "أن الرقم موجب وزوجي" , أما اذا كان غير ذلك فإن البرنامج يطبع رسالة "أن الرقم غير موجب أو غير زوجي"
الحل :
انت تعرف كيف نفرق بين الرقم السالب والموجب , أيضاً تعرف كيف نفرق بين الرقم الزوجي و الفردي , إذن لنبدأ العمل ...
كود البرنامج :
Module Module1
    Sub main()
        Dim number As Double
        Console.WriteLine("Enter a number:")
        number = Console.ReadLine()
        If number > 0 Then
            If (number Mod 2) = 0 Then
                Console.WriteLine("The number is positive and even")
                Console.ReadKey()
            Else
                Console.WriteLine("The number is not positive or not even")
                Console.ReadKey()
            End If
        Else
            Console.WriteLine("The number is not positive or not even")
            Console.ReadKey()
        End If
    End Sub
End Module
إذا أحسست أن الأمر معقد بعض الشئ فانظر إلى الصورة التالية وستفهم الأمر (انقر عليها لتكبيرها) :


استخدام الروابط المنطقية مع الجمل الشرطية :

الروابط المنطقية في لغة فيجوال بيسك .نت هي And , و Or , و XOR .
تفيدنا الروابط المنطقية في جملة If Then بأنها تمكننا من فحص اكثر من شرط في وقت واحد وهذا سيوفر علينا كتابة المزيد من السطور البرمجية ومزيد من الجمل الشرطية , انظر للأمثلة :
المثال السابع :
في هذا المثال سنتناول نفس المثال السادس ولكن سنعدل على الكود الخاص به :
Module Module1
    Sub main()
        Dim number As Double
        Console.WriteLine("Enter a number:")
        number = Console.ReadLine()
        If number > 0 And (number Mod 2) = 0 Then
            Console.WriteLine("The number is positive and even")
            Console.ReadKey()
        Else
            Console.WriteLine("The number is not positive or not even")
            Console.ReadKey()
        End If
    End Sub
End Module
كما ترى استخدمنا الرابط And لكي نفحص اذا كان الرقم الذي أدخله المستخدم زوجي وموجب في نفس الوقت , يعني لن يكون الشرط صحيحاً إلا اذا كان الرقم زوجي وموجب في نفس الوقت وفي الحالات الأخرى سيكون الشرط خاطئاً .

المثال الثامن :
برنامج يطلب من المستخدم ادخال رقم , فإذا كان موجب وزوجي في آن واحد يطبع البرنامج رسالة أن الرقم موجب وزوجي , وإذا كان إما موجب أو زوجي يطبع البرنامج رسالة أن الرقم موجب او زوجي , أما إذا لم يكن موجب ولا زوجي يخبره البرنامج بذلك .
الحل :
Module Module1
    Sub main()
        Dim number As Double
        Console.WriteLine("Enter a number:")
        number = Console.ReadLine()
        If number > 0 And (number Mod 2) = 0 Then
            Console.WriteLine("The number is positive AND even")
            Console.ReadKey()
        ElseIf number > 0 Or (number Mod 2) = 0 Then
            Console.WriteLine("The number is positive OR even")
            Console.ReadKey()
        Else
            Console.WriteLine("The number is not positive and not even")
            Console.ReadKey()
        End If
    End Sub
End Module

هكذا نكون اتممنا درس جملة If Then وتذكر أن هذا من أهم الدروس فلا يكاد يخلو برنامج من الجمل الشرطية سواء جملة  If Then أو غيرها .
تدرب جيداً و قم بالتعديل في الأمثلة السابقة واستخدم معاملات رياضية ومنطقية اخرى فكل هذا كفيل بجعلك تفهم جيداً كيفية عمل الجمل الشرطية .