هذا الدرس يتطلب ان تكون لديك خلفية ولو بسيطة في المنطق الرياضي , أو انتقل عبر هذا الرابط إلى درس المنطق الرياضي .
أيضاً يجب ان تكون ملماً بالمعاملات الرياضية والمنطقية في فيجوال بيسك .نت , أو انتقل عبر هذا الرابط إلى درس المعاملات الرياضية والمنطقية في فيجوال بيسك .نت .
تساعدك الجمل الشرطية في بناء برامج ذكية ومرنة ويمكنك تسييرها كيفما شئت , وأول الجمل الشرطية التي سنتناولها هي جملة If Then , والقاعدة العامة لكتابتها كالتالي :
تقوم الجملة 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 أم لا .
كود البرنامج :
المثال الثاني :
برنامج يطلب من المستخدم ادخال رقم , فإذا كان الرقم أكبر من "5" فإن البرنامج يخبره أن الرقم أكبر من "5", بالمثل اذا كان أصغر من "5" يخبره البرنامج أن الرقم أقل من "5" , ايضاً اذا كان الرقم يساوي "5" فإن البرنامج سيخبره أن الرقم يساوي "5" .
الحل :
أول ماسنفعله أننا سنحجز متغيراً في الذاكرة من النوع Double وهذا المتغير سيمثل الرقم الذي سنطلب من المستخدم ادخاله وسنقوم بمقارنته مع العدد "5" , وسنسميه بالاسم "number" .
ثانياً المطلوب منا هو أن نقارن المتغير بالعدد "5" فإذا كان أكبر من "5" (يعني number>5) نطبع للمستخدم رسالة ان هذا الرقم أكبر من "5" , نفس الشئ اذا كان أصغر من "5" واذا كان يساوي "5" ...
لا تقلق اذا لم تفهم الأمر بعد , فمع كتابتك للكود بنفسك سوف تفهم كل ما قلته :
برنامج يطلب من المستخدم ادخال رقم ثم يقوم بإخباره هل الرقم الذي أدخله سالب (negative) أم موجب (positive) .
الحل :
كيف نعرف أن الرقم سالب أو موجب؟ يكون الرقم موجب إذا كان أكبر من الصفر ويكون سالب إذا كان أصغر من الصفر , إذن فأول ماسنفعله بالتأكيد هو حجز متغير في الذاكرة من النوع Double يمثل الرقم الذي سيدخله المستخدم وسنسميه "testNumber" .
ثانياً سنقارن المتغير testNumber مع العدد "صفر" فإذا كان أكبر من الصفر (testNumber > 0) فإنه موجب وإذا كان أصغر من الصفر فإنه سالب .
كود البرنامج :
المثال الرابع :
برنامج يطلب من المستخدم ادخال رقم ثم يخبره أن هذا الرقم زوجي (Even) أو فردي (Odd) .
الحل :
كيف نعرف أن الرقم زوجي أو فردي؟ الرقم الزوجي يقبل القسمة على 2 بدون باقي (يعني باقي القسمة يساوي صفر) , أما الرقم الفردي فلا يقبل القسمة على 2 (يعني يكون للقسمة باقي) , مثلاً العدد 10 يقبل القسمة على 2 لأن 10÷2=5 والباقي "صفر" اذن فهو عدد زوجي , ولكن 13 لا يقبل القسمة على 2 لأن 13÷2=6 والباقي 1 اذن فهو عدد فردي .
لن أقول لك ماذا سنحتاج لبناء البرنامج , فأنت بالتأكيد تعرف ماذا سنحتاج ^_^
كود البرنامج :
في هذا المثال لن نحتاج للعبارة ElseIf لأنه لا حاجة لفحص شروط اضافية فالرقم اذا لم يكن زوجي إذن فهو فردي , لهذا لا حاجة لشروط اضافية .
الأوامر التي تنفذها جملة If Then لا تقتصر على الطباعة فقط بل يمكنك القيام بأي امر تريد تنفيذه إذا تحقق الشرط , انظر للمثال التالي ..
المثال الخامس :
للوهلة الأولى قد يبدو هذا المثال معقداً وهذا طبيعي , لكن لا عليك فقط اقرأ المثال عدة مرات ثم جهز المتطلبات بنفسك أما انا فسازودك مباشرة بكود البرنامج .
المثال هو : برنامج يطلب من المستخدم ادخال رقمين , فإذا كان الرقم الأول اكبر من الثاني فإنه يقوم بإيجاد الفرق بين الرقمين (يعني ناتج الطرح) , أما اذا كان الرقم الأول اصغر من الثاني فإن البرنامج يقوم بإيجاد ناتج الجمع لهذين الرقمين , أما اذا كان الرقمان متساويان فلا يقوم البرنامج بأي شئ ويتم الخروج من البرنامج .
الحل :
المثال السادس :
برنامج يطلب من المستخدم ادخال رقم فإذا كان الرقم موجب فإن البرنامج يتحقق أيضاً ان الرقم زوجي ثم يطبع البرنامج رسالة "أن الرقم موجب وزوجي" , أما اذا كان غير ذلك فإن البرنامج يطبع رسالة "أن الرقم غير موجب أو غير زوجي"
الحل :
انت تعرف كيف نفرق بين الرقم السالب والموجب , أيضاً تعرف كيف نفرق بين الرقم الزوجي و الفردي , إذن لنبدأ العمل ...
كود البرنامج :
تفيدنا الروابط المنطقية في جملة If Then بأنها تمكننا من فحص اكثر من شرط في وقت واحد وهذا سيوفر علينا كتابة المزيد من السطور البرمجية ومزيد من الجمل الشرطية , انظر للأمثلة :
المثال السابع :
في هذا المثال سنتناول نفس المثال السادس ولكن سنعدل على الكود الخاص به :
المثال الثامن :
برنامج يطلب من المستخدم ادخال رقم , فإذا كان موجب وزوجي في آن واحد يطبع البرنامج رسالة أن الرقم موجب وزوجي , وإذا كان إما موجب أو زوجي يطبع البرنامج رسالة أن الرقم موجب او زوجي , أما إذا لم يكن موجب ولا زوجي يخبره البرنامج بذلك .
الحل :
هكذا نكون اتممنا درس جملة If Then وتذكر أن هذا من أهم الدروس فلا يكاد يخلو برنامج من الجمل الشرطية سواء جملة 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 أو غيرها .
تدرب جيداً و قم بالتعديل في الأمثلة السابقة واستخدم معاملات رياضية ومنطقية اخرى فكل هذا كفيل بجعلك تفهم جيداً كيفية عمل الجمل الشرطية .