الجمل الشرطية في لغة سي
الشروط ( conditions ) تعتبر من أهم العناصر التي يجب توفرها في أي لغة برمجة سواء أن كانت في لغة البرمجة c أو c++ أو أي لغة غيرهم. فهي تلعب دوراً رئيسياً في كل لغة برمجة, بمثل مواد البناء في حال أردت أن أصمم منزل.
في الدرس السابق تحدثنا بأن المؤثرات العلائقية إذا كانت هنالك شرط تعتمد على المقارنة بين قيمة و قيمة أخرى، حيث النتيجة إما صحيحة(true) أو خاطئة (false), الآن سوف نستعملها في هذا الدرس.
بنية الجملة الشرطية conditions
تتكون الجملة الشرطية من قسمين الأول هو الشرط و الثاني الأوامر عند تنفيذ الشرط, و العبارات الشرطية هي if و switch.
If(condition){ Statment ; }
العبارة الشرطية if في لغة سي
تستخدم عبارة if لتنفيذ جملة أو اكثر حسب شرط معين بصورة عامة, فيما يلي سوف نرفق عدة أمثلة في جملة الشرط if statement.
مثال 1
اكتب برنامج يختبر العدد إذا كان أقل من 5 يطبع جملة Saja.
#include<stdio.h> main() { int cs; printf("enter number "); scanf("%d", &cs); if(cs <5) printf("Saja \n"); }
نلاحظ قمت بتعريف المتغير الذي إسمه cs من نوع int و بعدها قمت بأمر طباعة بإستخدام دالة printf و هي قمت في إدخال عدد و بعدها إستخدمت دالة الإدخال و هي scanf. أي نقول للمستخدم قم بإدخال العدد الذي تريده, و قمت بإستخدام جملة شرطية إذا كان الرقم الذي ادخلته اصغر من 5 قم بطباعة كلمة Saja و إذا كان الرقم الذي تم إدخاله اكبر من 5 لن يطبع شي.
مثال 2
اكتب برنامج يختبر العدد إذا كان أقل من 5 يطبع جملة Database و إذا كان اكبر من 5 يطبع كلمة Saja.
#include<stdio.h> main() { int cs; printf("enter number "); scanf("%d", &cs); if(cs < 5) printf("Database \n"); if(cs >5) printf("Saja \n"); }
النتيجه الأولى في حال قام المستخدم بإدخال رقم 1 سيطبع لنا كلمة Database.
enter number 1 Database
النتيجه الثانية في حال قام المستخدم بإدخال الرقم 10 سيطبع لنا كلمة Saja.
enter number 10 Saja
إستخدام الجمل الشرطية if و else في لغة سي C
بدل من ذلك يمكننا إستخدام شيئ يدعى else و تعني إذا كان إذا لم يتحقق الخيار الأول قم بتنفيذ الخيار الثاني.
بنية العبارة الشرطية if و else في السي
if(condition) statement; else statement;
تستخدم عبارة else في حال أردنا تنفيذ عبارة أو مجموعة من العبارات و شرط if خاطئ, يجب أن تسبق عبارة else عبارة if حيث لا يمكن بداية الإختبار بعبارة else لوحدها
مثال 3
اكتب برنامج يختبر العدد إذا كان أقل من 5 يطبع لنا جملة Saja و إذا كان العدد غير العدد 5 إطبع Database.
#include<stdio.h> main() { int cs; printf("enter number "); scanf("%d", &cs); if(cs <5) printf("Saja \n"); else printf("Database \n"); }
عند تنفيذ هذا الكود و طلب من المستخدم أن يدخل رقم, فإذا قام المستخدم بإدخال الرقم 4 سوف يطبع لنا كلمة Saja و إذا كان العدد الذي أدخله 8 سوف يطبع Database.
الجملة الشرطية else if في لغة سي C
يمكن كتابة العبارة else if إذا أردنا إختبار آخر داخل العبارة else لانه لا يمكن وجود عبارة else مرتين لعبارة if واحدة.
مثال 4
اكتب برنامج يختبر العدد إذا كان أقل من 5 يطبع لنا كلمة Kaissar و إذا كان يساوي 5 يطبع cs و إذا كان غير ذلك database.
#include<stdio.h> main() { int doha; printf("enter number "); scanf("%d" , &doha); if(doha <5) printf("AMVIIP \n"); else if (doha == 5) printf("cs \n"); else printf("Database \n"); }
عند تشغيل البرنامج سوف يطلب من المستخدم أن يدخل رقم, إذا أدخل المستخدم أرقام من 1 حتى 4 سوف يطبع لنا كلمة AMVIIP و إذا قام بإدخال الرقم 5 سوف يطبع لنا cs و في حال أدخل أرقام من 6 وما فوق سوف يطبع Database.
مثال 5
أكتب برنامج يختبر العدد المدخل إذا كان زوجي يطبع Saja و إذا كان غير ذلك يطبع Database.
#include<stdio.h> main() { int doha; printf ("enter number "); scanf("%d", &doha); if(doha%2==0) printf("Saja \n"); else printf("Database \n"); }
عند تشغيل هذا الكود سيكون مثلما تم ذكره في نص السؤال إذا كان العدد المدخل زوجي يعني 2 أو 4 أو 6 أو غيره من الأعداد الزوجية سوف يقوم بطباعة Saja و إذا كان العدد فردي يعني مثل 1 و 3 و 5 و غيره من الأعداد الفردية سوف يطبع Database.
الجملة الشرطية switch في لغة سي
تستخدم switch لإختبار قيمة متغيرة مع قيمة ثابتة صحيحة, حيث كل قيمة ثابتة تعتبر كشرط أو مقارنة, و القرار switch مشابه للقرارات if ، if else مع بعض الإختلافات, و تحتوي على مجموعة من الحالات (case) وكل حالة تنتهي بالعبارة break.
حيث يمكن إستبدال جملة if بها في بعض الأحيان كما أنها تُعَد اكثر ترتيباً من جملة if التي تحتوي على العديد من جمل else, if. تقوُم جملة switch بأخذ مُتَغَير عددي واحد ثم تقوم بمقارنته بعدد من الحالات Casses التي قام المبرمج بوضعها و إن تحققت يتم تنفيذ جملة معينة. جملة switch تُستخدَم لمقارنة قيم من متغير عدد واحد من القيم التي يُحتمَل أن يأخذها.
الشكل العام لجملة switch في لغة سي
switch (var) { case 1: statement1; statement2; break; case 5: statement1; break; default: statement1; }
نقوم بكتابة switch ثم نضَع بين القوسين مُتغير او قيمة عددية ثم نفتَح الأقواس المجعدة. و لكل حالة نُريدها نقوم بكتابة العبارة case اي الحالة متبوعة بالقيمة المشروطة التي تُمَثِل الحالة ثم نقطتين و وضعنا case1 أي إذا كانت قيمة var تُساوي 1 ثم نقطتين. و قم بتطبيق الحالة التالية مثلاً statement1 و statement2 سيتم تنفيذ أي اكواد عند case1 إذا كانت var تُساوي 1 ثم نضع break لإنهاء هذا السطر. و نُلاحظ عند كتابة case1 لا نَضَع اقواس مجعدة, و جملة switch يمكن أن تحتوي على عدد لا نهائي من الحالات في حال كانت مثلاً case5 نفس الأمر في case1. و اخيراً نقوم بإنهاء جملة switch في حالة عامة default يتم تنفيذها في حال لم تنطبِق أي من الحالات الأُخرى في الأعلى أي أنها شبيهة بمبدأ else تماماً في جملة if الشرطية. هُنا نفتَرِض أن var تُساوي 2 سوف يَمُر اولاً و يقول هل 2 تساوي 1 عند case1 و هو لا و سوف يَمُر بنفس الأمر على case5 فيكون لا ثم في النهاية يُنَفِذ الحالة default.
مثال 6
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> int main(int argc, char** argv) { int cost = 2; if (cost == 2) { printf("السعر رخيص\n"); } else if(cost == 3) { printf("السعر عادي"); } else if(cost == 4) { printf("السعر غالي"); } else { printf("يرجى مراجعة المحاسبة"); } switch (cost) { case 2: printf("السعر رخيص\n"); break; case 3: printf("السعر عادي"); break; case 4: printf("السعر غالي"); break; default: printf("يرجى مراجعة المحاسبة"); } return 0; }
في بداية المثال السابق إستخدمنا جمل if الشرطية و else ثم أتينا لشرط switch الذي هو موضوع درسنا الحالي و قلنا له case 2 أي إذا كانت القيمة 2 قُم بطباعة السعر رخيص. ثم قُم بإيقاف الحلقة عبر break. ثم وضعنا إحتمال آخر و هو case 3 بأن يطبع لنا السعر طبيعي بحال تم تحقق الشرط و ايضاً إحتمال case 4 بأن يطبع أن السعر غالي. و في حال لم يتم تحقق أي من الشروط في الأعلى يقوم بتنفيذ الحالة الإفتراضية default بأن يتم مراجعة المحاسبة.
تشغيل البرنامج سنحصل على النتيجة أن السعر رخيص مرتين. نلاحظ أنه طبع لنا أن السعر رخيص مرتين و هما الأول عند عبارات if الشرطية لقد تحقق الشرط و الثانية ايضاً تحقق شرط عبارة switch الأولى. في حال عدم كتابة جملة break في أحد حالات جملة switch فإن ذلك سوف يؤدي إلى القفز إلى الحالة التي تليها حتى و إن لم ينطبق شرطها. و على سبيل المثال لمثالنا السابق في حال كانت قيمة var هي 1 فسيتم تنفيذ الشرط في case 1 و بعدها سيتم القفز إلى الحالة التي تليها بدلاً من إنهاء جملة switch ككل لذا يجب أن نضع break في كل حالات جملة switch بإستثناء حالة default التي لا يأتي بعدها حالات أخرى إلا إن كان المبرمج قاصداً لذلك أن يحدث.
مثال 7
#include<stdio.h> main(){ int n1,n2 ; char b; printf("enter equation "); scanf("%d %c %d", &n1,&b,&n2); switch(b) { case '+':printf("sum= %d \n",n1+n2); break; case '-':printf("sub= %d \n",n1-n2); break; case '*':printf("mult= %d \n",n1*n2); break; case '/':printf("div= %d \n",n1/n2); break; case '%':printf("div= %d \n",n1%n2); break; default : printf("error entering \n "); break; } }
لفهم هذا المثال أكثر قم بمشاهدة الفيديو الآتي .