مفهوم الشروط في C++
الشروط في السي بلاس بلاس ( conditions ) تستخدم لتحديد طريقة عمل البرنامج نسبةً للمتغيرات التي تطرأ على الكود.
كمثال بسيط, يمكنك بناء برنامج لمشاهدة الأفلام, عند الدخول إليه يطلب من المستخدم في البداية أن يدخل عمره لكي يقوم بعرض أقلام تناسب عمره.
يمكنك وضع العدد الذي تريده من الشروط في البرنامج الواحد, و تستطيع وضع الشروط بداخل بعضها البعض أيضاً.
أنواع جمل الشرط في C++
إسم الجملة | دواعي الإستخدام |
---|---|
if - else - else if statements | نستخدمهم إذا كنا نريد تنفيذ كود معين في حال تحقق الشرط أو مجموعة من الشروط التي وضعناها. شرح جمل الشرط في السي بلاس بلاس |
switch statement | نستخدمها إذا كنا نريد إختبار قيمة متغير معين مع لائحة من الإحتمالات نقوم نحن بوضعها, و إذا تساوت هذه القيمة مع أي إحتمال وضعناه ستتنفذ الأوامر التي وضعناها في هذا الإحتمال فقط. شرح الجملة switch في السي بلاس بلاس |
جمل الشرط في C++
جمل الشرط بشكل عام في C++
الشكل العام لوضع الشروط هو التالي.
{
// إذا كان الشرط صحيحاً نفذ هذا الكود
}
else if ( condition )
{
// إذا كان الشرط صحيحاً نفذ هذا الكود
}
else
{
// نفذ هذا الكود في حال لم يتم التعرف على الكود في أي شرط
}
ملاحظة
لست بحاجة إلى إستخدام الجمل الثلاثة في كل شرط تضعه في البرنامج, و لكنك مجبر على إستخدام جملة الشرط if
مع أي شرط.
تابع كل الدرس حتى تتعرف على جميع طرق وضع الشروط.
جملة الشرط if
في C++
if
في اللغة العربية تعني " إذا ", و هي تستخدم فقط في حال كنت تريد تنفيذ كود معين حسب شرط معين.
المثال الأول
•إذا كانت قيمة المتغير S
أكبر من 5 سيتم طباعة الجملة: S is bigger than 5
.
#include <iostream> using namespace std; int main() { int S = 0; if( S > 5 ) { cout << "S is bigger than 5"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
•هنا سأل نفسه التالي: هل قيمة المتغير S
أكبر من 5؟
فكان جواب الشرط كلا ( false
) , لذلك لم ينفذ أمر الطباعة الموجود في جملة الشرط.
المثال الثاني
•إذا كانت قيمة المتغير S
أكبر من 5 سيتم طباعة الجملة: S is bigger than 5
.
#include <iostream> using namespace std; int main() { int S = 30; if( S > 5 ) { cout << "S is bigger than 5"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
S is bigger than 5
•هنا سأل نفسه التالي: هل قيمة المتغير S
أكبر من 5؟
فكان جواب الشرط نعم (true
), لذلك نفذ أمر الطباعة الموجود في جملة الشرط.
جملة الشرط else
في C++
else
في اللغة العربية تعني " أي شيء آخر ", و هي تستخدم فقط في حال كنا نريد تنفيذ كود معين في حال كانت نتيجة جميع الشروط التي قبلها تساوي false
.
يجب وضعها دائماً في الأخير, لأنها تستخدم في حال لم يتم تنفيذ أي جملة شرطية قبلها.
إذاً, إذا نفذ البرنامج الجملة if
أو else if
فإنه سيتجاهل الجملة else
.
و إذا لم ينفذ أي جملة من الجمل if
و else if
فإنه سينفذ الجملة else
.
المثال الأول
•إذا كانت قيمة المتغير S
تساوي 5 سيتم طباعة الجملة: S is equal 5
.
•إذا كانت قيمة المتغير S
لا تساوي 5 سيتم طباعة الجملة: S is not equal 5
.
#include <iostream> using namespace std; int main() { int S = 5; if( S == 5 ) { cout << "S is equal 5"; } else { cout << "S is not equal 5"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
S is equal 5
•هنا سأل نفسه التالي: هل قيمة المتغير S
تساوي 5؟
فكان جواب الشرط نعم ( true
) , لذلك نفذ أمر الطباعة الموجود في الجملة if
.
المثال الثاني
•إذا كانت قيمة المتغير S
تساوي 5 سيتم طباعة الجملة: S is equal 5
.
•إذا كانت قيمة المتغير S
لا تساوي 5 سيتم طباعة الجملة: S is not equal 5
.
#include <iostream> using namespace std; int main() { int S = 20; if( S == 5 ) { cout << "S is equal 5"; } else { cout << "S is not equal 5"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
S is not equal 5
•هنا سأل نفسه التالي: هل قيمة المتغير S
تساوي 5؟
فكان جواب الشرط كلا ( false
) , لذلك نفذ أمر الطباعة الموجود في الجملة else
.
جملة الشرط else if
في C++
جملة else if
تستخدم إذا كنت تريد وضع أكثر من إحتمال ( أي أكثر من شرط ).
جملة أو جمل الـ else if
يوضعون في الوسط, أي بين الجملتين if
و else
.
مثال
•إذا كانت قيمة المتغير number
تساوي 1 سيتم طباعة الكلمة: one
.
•إذا كانت قيمة المتغير number
تساوي 2 سيتم طباعة الكلمة: two
.
•إذا كانت قيمة المتغير number
تساوي 3 سيتم طباعة الكلمة: three
.
•إذا كانت قيمة المتغير number
أكبر أو تساوي 4 سيتم طباعة الجملة: four or greater
.
•إذا كانت قيمة المتغير number
أصغر من 0 سيتم طباعة الجملة: negative number
.
#include <iostream> using namespace std; int main() { int number = 3; if( number == 1 ) { cout << "one"; } else if( number == 2 ) { cout << "two"; } else if( number == 3 ) { cout << "three"; } else if( number >= 4 ) { cout << "four or greater"; } else { cout << "negative number"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
three
•هنا سأل نفسه التالي: هل قيمة المتغير number
تساوي 1؟
فكان جواب الشرط كلا ( false
) , فانتقل إلى الشرط الذي يليه.
•ثم سأل نفسه التالي: هل قيمة المتغير number
تساوي 2؟
فكان جواب الشرط كلا ( false
) , فانتقل إلى الشرط الذي يليه.
•ثم سأل نفسه التالي: هل قيمة المتغير number
تساوي 3؟
فكان جواب الشرط هذه المرة نعم ( true
) , فقام بتنفيذ أمر الطباعة الموجود في جملة الشرط الثالثة, ثم تجاوز جميع جمل الشرط التي أتت بعده.
الجملة switch
في C++
تعريف الجملة switch
في C++
switch
نستخدمها إذا كنا نريد إختبار قيمة متغير معين مع لائحة من الإحتمالات نقوم نحن بوضعها, و إذا تساوت هذه القيمة مع أي إحتمال وضعناه ستتنفذ الأوامر التي وضعناها في هذا الإحتمال فقط.
كل إحتمال نضعه يسمى case.
أنواع المتغيرات التي يمكن إختبار قيمتها باستخدام هذه الجملة هي:
int
- byte
- short
- char
- enum
.
طريقة تعريف الجملة switch
في C++
يمكننا تعريفها بعدة أشكال, الشكل الأساسي هو التالي:
case value:
// Statements
break;
case value:
// Statements
break;
default:
// Statements
break;
}
switch تعني إختبر قيمة المتغير الموضوع بين قوسين.
expression هنا يقصد بها المتغير الذي نريد إختبار قيمته.
نوع المتغير الذي يسمح لنا بإختباره:int
-byte
-short
-char
-String
-enum
.case تعني حالة, value تعني قيمة, و Statements تعني أوامر.
و يقصد من هذا كله, أنه في حال كانت قيمة الـ expression تساوي هذه القيمة سيقوم بتنفيذ الأوامر الموضوعة بعد النقطتين:
.
الآن بعد تنفيذ جميع الأوامر الموضوعة بعد النقطتين, يجب وضعbreak
لكي يخرج من الجملةswitch
مباشرةً بدل أن ينتقل للـcase
التالية الموجودة في الجملةswitch
.
نستطيع وضع العدد الذي نريده من الـcase
بداخل الجملةswitch
.
إنتبه: الـ expression و الـ value يجب أن يكونا من نفس النوع.default
تعني إفتراضياً و هي نفس فكرة الجملةelse
, و يمكننا أن لا نضعها أيضاً.
هذه الجملة تنفذ فقط في حال لم تنفذ أيcase
موجودة في الجملةswitch
و لذلك نضعها بالآخر.
ملاحظة
لا حاجة لوضع break
للحالة الأخيرة لأن البرنامج سيخرج من الجملة switch
في جميع الأحوال.
ستفهم فكرة الجملة switch
من خلال الأمثلة و سنريك كيف يمكنك أن تنفذ نفس الأوامر لأكثر من حالة, من خلال الأمثلة.
المثال الأول
•سنقوم باختبار قيمة المتغير x
و الذي نوعه int
.
•سنضع عدة حالات و كل حالة تطبع شيء معين.
#include <iostream> using namespace std; int main() { int x = 2; switch( x ) // x إختبر قيمة المتغير { case 1: // في حال كانت تساوي 1 سيتم تنفيذ أمر الطباعة الموضوع فيها cout << "x contain 1"; break; case 2: // في حال كانت تساوي 2 سيتم تنفيذ أمر الطباعة الموضوع فيها cout << "x contain 2"; break; case 3: // في حال كانت تساوي 3 سيتم تنفيذ أمر الطباعة الموضوع فيها cout << "x contain 3"; break; default: // في حال كانت لا تساوي أي قيمة من القيم الموضوعة سيتم تنفيذ أمر الطباعة الموضوع فيها cout << "x contain a different value"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
x contain 2
•نلاحظ أنه تم تنفيذ أمر الطباعة الموجود في الحالة الثانية لأن قيمة المتغير x
تساوي 2.
•هنا سأل نفسه التالي: هل قيمة المتغير x
تساوي 1؟
فكان جواب الشرط كلا ( false
) , فانتقل إلى الحالة التي تليه.
•ثم سأل نفسه التالي: هل قيمة المتغير x
تساوي 2؟
فكان جواب الشرط نعم ( true
) , فقام بتنفيذ أمر الطباعة الموجود في هذه الحالة, و بعدها خرج من جملة الـ switch
بأكملها بسبب الجملة break
.
المثال الثاني
•سنقوم باختبار قيمة المتغير x
و الذي نوعه int
.
•سنضع عدة حالات و كل حالة تطبع شيء معين.
#include <iostream> using namespace std; int main() { int x = 5; switch( x ) // x إختبر قيمة المتغير { case 1: // في حال كانت تساوي 1 سيتم تنفيذ أمر الطباعة الموضوع فيها cout << "x contain 1"; break; case 2: // في حال كانت تساوي 2 سيتم تنفيذ أمر الطباعة الموضوع فيها cout << "x contain 2"; break; case 3: // في حال كانت تساوي 3 سيتم تنفيذ أمر الطباعة الموضوع فيها cout << "x contain 3"; break; default: // في حال كانت لا تساوي أي قيمة من القيم الموضوعة سيتم تنفيذ أمر الطباعة الموضوع فيها cout << "x contain a different value"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
x contain a different value
•نلاحظ أن تم تنفيذ أمر الطباعة الموجود في الحالة الإفتراضية لأن قيمة المتغير x
لا تساوي أي قيمة من القيم الموضوعة في الحالات.
•هنا سأل نفسه التالي: هل قيمة المتغير x
تساوي 1؟
فكان جواب الشرط كلا ( false
) , فانتقل إلى الحالة التي تليه.
•ثم سأل نفسه التالي: هل قيمة المتغير x
تساوي 2؟
فكان جواب الشرط كلا ( false
) , فانتقل إلى الحالة التي تليه.
•ثم سأل نفسه التالي: هل قيمة المتغير x
تساوي 3؟
فكان جواب الشرط كلا ( false
) , فانتقل إلى الحالة التي تليه.
•بما أنه لم يجد أي حالة تساوت فيها القيمة مع قيمة المتغير الذي يتم اختباره, قام بتنفيذ الأوامر الموجودة في الحالة الإفتراضية default
, وعندما إنتهى من تنفيذ الأوامر خرج من جملة الـ switch
بأكملها.
وضع نفس الأوامر لأكثر من حالة
إذا أردت وضع نفس الأوامر لأكثر من حالة, عليك وضع الحالات تحت بعضها, ثم كتابة الأوامر, ثم وضع break
.
مثال
•سنقوم باختبار قيمة المتغير x
و الذي نوعه int
.
•سنضع ثلاث حالات ينفذون نفس الأوامر.
#include <iostream> using namespace std; int main() { int x = 3; switch( x ) // x إختبر قيمة المتغير { case 1: // في حال كانت تساوي 1 أو 2 أو 3 سيتم تنفيذ أمر الطباعة case 2: case 3: cout << "x contain 1 or 2 or 3"; break; default: // في حال كانت لا تساوي أي قيمة من القيم الموضوعة سيتم تنفيذ أمر الطباعة الموضوع فيها cout << "x contain a different value"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
x contain 1 or 2 or 3
•نلاحظ أنه تم تنفيذ أمر الطباعة الموضوع للحالات الثلاث الأولى لأن قيمة x
تساوي 3.
•هنا سأل نفسه التالي: هل قيمة المتغير x
تساوي 1 أو 2 أو 3؟
فكان جواب الشرط نعم ( true
) , فقام بتنفيذ أمر الطباعة الموضوع لهذه الحالات الثلاث, و بعدها خرج من جملة الـ switch
بأكملها بسبب الجملة break
.
أفكار و أساليب أخرى لوضع الشروط في C++
طرق وضع الشروط عديدة و متنوعة, و يمكننا وضع شروط بداخل بعضها و يسمى ذلك Nested Conditional.
كما يمكننا وضع أكثر من شرط بداخل جمل الشرط if
أو else if
باستخدام العوامل المنطقية.
هنا وضعنا أمثلة تعلمك طريقة وضع أكثر من شرط في الجملة if
أو else if
باستخدام الـ Relational Operators.
طريقة وضع أكثر من شرط في الجملة if أو else if
هنا وضعنا مثال يعلمك طريقة وضع الشروط بداخل بعضها.
وضع أكثر من شرط في الجملة if
في C++
بإمكانك أن تضع أكثر من شرط بداخل جملة الشرط باستخدام العامل &&
أو ||
.
العامل &&
يستخدم في حال كنت تريد تنفيذ كود معين إذا كان جواب جميع الشروط الموضوعة يساوي true
.
العامل ||
يستخدم في حال كنت تريد تنفيذ كود معين إذا كان جواب شرط واحد على الأقل يساوي true
.
المثال الأول
•إذا كانت قيمة المتغير a
بين 0 و 20 إطبع الجملة: acceptable number
.
#include <iostream> using namespace std; int main() { int a = 14; if( a >= 0 && a <=20 ) { cout << "acceptable number"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
acceptable number
•نلاحظ أنه قد تم تنفيذ أمر الطباعة لأن قيمة المتغير a
بين 0 و 20
•هنا سأل نفسه سؤالين.
•السؤال الأول: هل قيمة المتغير a
أكبر أو تساوي 0؟
فكان جواب الشرط الأول true
.
•السؤال الثاني: هل قيمة المتغير a
أصغر أو تساوي 20؟
فكان جواب الشرط الثاني أيضاً true
.
•بما أن كلا الجوابين كانا true
قام بتنفيذ أمر الطباعة.
المثال الثاني
•إذا كانت قيمة المتغير a
بين 0 و 20 إطبع الجملة: acceptable number
.
#include <iostream> using namespace std; int main() { int a = 26; if( a >= 0 && a <=20 ) { cout << "acceptable number"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
•نلاحظ أنه لم يتم تنفيذ أمر الطباعة لأن قيمة المتغير a
ليست بين 0 و 20
•هنا سأل نفسه سؤالين.
•السؤال الأول: هل قيمة المتغير a
أكبر أو تساوي 0؟
فكان جواب الشرط الأول true
.
•السؤال الثاني: هل قيمة المتغير a
أصغر أو تساوي 20؟
فكان جواب الشرط الثاني false
.
•بما أن واحداً من الجوابين لم يكن true
لم ينفذ دالة الطباعة.
المثال الثالث
•إذا كانت قيمة المتغير a
تساوي 1 أو 2 أو 3 إطبع الجملة: you choose a valid number
.
#include <iostream> using namespace std; int main() { int a = 2; if( a == 1 || a == 2 || a == 3 ) { cout << "'a' is a valid number"; } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
'a' is a valid number
•نلاحظ أنه قام بتنفيذ أمر الطباعة لأن قيمة المتغير a
تساوي 2
•هنا كان سيسأسل نفسه ثلاثة أسئلة لأنه يوجد ثلاث شروط, لكنه سأل نفسه سؤالين فقط.
•السؤال الأول: هل قيمة المتغير a
تساوي 1؟
فكان جواب الشرط الأول false
فانتقل للشرط الذي يليه.
•السؤال الثاني: هل قيمة المتغير a
تساوي 2؟
فكان جواب الشرط الثاني true
.
•بما أن واحداً من الأجوبة كان true
نفذ مباشرةً أمر الطباعة و لم ينظر حتى للشرط الأخير.
كيفية وضع شرط بداخل شرط آخر في C++
وضع شرط بداخل شرط في C++
نستطيع وضع الشروط بداخل بعضها, و يمكننا وضع العدد الذي نريده من الشروط.
في البرامج الفعلية يقوم المبرمج بوضع العديد من الشروط بداخل بعضها, و ذلك حسب الفكرة التي يريد تنفيذها في برنامجه.
كمثال بسيط, لنفترض أننا نريد تحويل هذه الصورة إلى برنامج.
مثال
•هنا قمنا بتجهيز متغير يمثل نوع الجنس إسمه isMale
و قلنا إذا كانت قيمته true
فهذا يعني أن الشخص هو ذكر.
و إذا كانت تساوي false
فهذا يعني أن الشخص هو أنثى.
• بالإضافة لمتغير يمثل العمر إسمه age
.
#include <iostream> using namespace std; int main() { bool isMale = false; int age = 14; if( isMale == true ) { cout << "Gender: male"; if( age <= 21 ) { cout << "\nHe is a young boy"; } } else { cout << "Gender: female"; if( age <= 21 ) { cout << "\nShe is a young girl"; } } return 0; }
•سنحصل على النتيجة التالية عند التشغيل.
Gender: female She is a young girl
•هنا سأل نفسه التالي: هل قيمة المتغير isMale
تساوي true
؟
فكان جواب الشرط false
, فانتقل إلى جملة الشرط الإفتراضية else
لينفذ ما بداخلها.
•أولاً, قام بتنفيذ دالة الطباعة الموجودة فيها, فطبع الجملة Gender: female
.
•ثم وجد شرطاً آخر بداخل الشرط الإفتراضي, فسأل نفسه التالي: هل قيمة المتغير age
أصغر أو تساوي 21؟
فكان جواب الشرط true
, فقام بتنفيذ دالة الطباعة الموجودة فيها, فطبع الجملة She is a young girl
.