عبارات إتخاذ القرار أو العبارات الشرطية conditional statement
أولا : عبارات إتخاذ القرار باستخدام if
1- عبارة if
تستخدم عبارة if فى تنفيذ "عبارة شرط" . أى أنها عبارة " إتخاذ قرار" decision إستنادا على النتيجة المنطقية ( true=1 أو false=0 ) لاختبار شرط هذه العبارة .
الصيغة العامة
كود:
if (condition) statement;
or
if (condition) { block commands};
فى لغة السى , أى عدد "غير الصفر" يعتبر "حقيقى" أو صواب true . هذا يعنى أن الشرط فى لغة السى يعتبر "غير حقيقى " أو خطأ false فقط عندما تكون نتيجة تقييمه (عائده) بصفر (0) . أى قيمة أخرى , حتى لو كانت سالبة تعتبر "حقيقى" true أو غير صفر .
فى عبارة if , إذا كان الشرط (condition)حقيقى (غير صفرى) true (non-zero)فسوف يتم تنفيذ العبارة statement أو مجموعة (بلوك) الأوامر { block commands}, وأن لم يكن , إى عندما تكون نتيجة تقييم الشرط بصفر false (0 zero) فسوف يتم تجاهل العبارة .
مثال :
يتم تخصيص القيمة 10 عشرى للمتغير "a" بالنوع char (char a = 10) , هذه القيمة تختلف عن الصفر أى أن a=true . بالتالى عند الوصول إلى الأمر if (a) b --; يتم تقييم الشرط (a) فإن كانت النتيجة صواب true , وهو بالفعل صواب , يتم تنفيذ العبارة b – (تناقص المتغير b بواحد ) .
كود:
void main ()
{
char a = 10;
char b = 0;
if (a) b --;
}
2- عبارة if – else :
يمكنك تنفيذ عبارة آخرى أو مجموعة (بلوك) من العبارات إذا كانت نتيجة تقييم الشرط بصفر false باستخدام عبارة if – else .
الصيغة :
كود:
if (expression)
command 1
else
Command 2
مثال
كود:
if (x> 5)
z = 10;
else
z = 20;
العبارة if (x> 5) مهمتها "إختبار" : "هل نتيجة تقييم الشرط (x> 5) (وهو عبارة مقارنة ) تكون صواب true أم غير صواب false ؟ " .
إذا كان الجواب (النتيجة) صواب true عندئذ يتم تنفيذ السطر z = 10 .
وإذا كان الجواب (النتيجة) غير صواب false ,أى كانت "x" أقل من أو تساوى 5 ,عندئذ يتم تنفيذ سطر الخيار البديل z = 20 .
يمكن تضمين جميع عوامل operators لغة السى فى شرط الاختبار , تعبيرات لغة السى الصالحة هى التى تولد نتيجة منطقية للشرط . التعبيرات الأتية صالحة ونتيجتها سوف تعتمد على قيمة متغيراتها :
كود:
if (a> b) b = a; /* if the expression a> b is true, the variable "b" assumes the value of "a"*/
if (b <a) b = 10; /* if the expression a <b is true, the variable "b" assumes the value 10*/
if (a != b) b = 55; /* if the expression a != b (differ) is true, the variable "b" assumes the value 55 */
if ((a + b)> (b + d)) b ++; /* if the expression (a + b)> (b + d) is true, the variable "b" is incremented by one.*/
ملاحظات هامة :- عامل التخصيص فى لغة السى هو علامة التساوى (=) .
- بينما عامل "مقارنة التساوى" وهو (==) يختلف عن عامل التخصيص .
لاختبار شرط لمتغير معطى نستخدم عامل مقارنة التساوى (==) كما يلى :
if (a == b) c = 10;
وهذا يختلف عن :
if (a = b) c = 10;
فى عبارة if الأولى : اختبار الشرط (a == b) يقوم بعمل مقارنة بين متغيريين , إذا كان الشرط صواب يتم تنفيذ c=10 .
فى عبارة if الثانية : يوجد تعبير تخصيص بالتساوى (a = b) . عندما يقوم المترجم بترجمة هذا الأمر فأنه فى البداية يخصص للمتغير a القيمة الموجودة بالمتغير b وبعد ذلك يختبر الشرط فإن كانت النتيجة صواب (وهو بالقطع سوف يكون صواب بعد التخصيص ) يتم تنفيذ c = 10 .
لإضافة بلوكات من البرامج فى عبارة if من الضرورى إستخدام قوس الفتح (البداية) ({) وقوس الغلق(النهاية) (}) .
مثال :
كود:
if (PORTB == PORTC)
{ // Command block
a ++;
portb.f0 = 1;
d = c + e;
}
3- عبارات if المتداخلة if, else, if
يمكننا إنشاء عبارات ifمتداخلة Nested If statements من خلال بناء عبارات if, else, if .
يتم إنشاء العبارات ببساطة عن طريق وضع عبارة if متداخلة مع عبارة if أخرى .
الصيغة :
كود:
if (condition1) statement 1; else
if (condition2) statement 2; else
if (condition3) statement 3; else
if (condition4) statement 4;
مثال :
كود:
void main () {
int count = 10;
int signal = 5;
if (count> signal) signal ++; else
if (count <signal) signal--; else
if (count == signal) signal = 0;
}
يمكننا أيضا تنفيذ بلوكات باستخدام الأقواس ({and}) .
مثال :
كود:
void main () {
int count = 10;
int signal = 5;
if (count> signal)
{ // Use command blocks in if-else-if
signal ++;
count = 20;
}
else
if (count <signal)
{
signal--;
count = 15;
}
else
if (count == signal) signal = 0;
}
بناء جملة if هو الأفضل لاتخاذ قرارات منطقية , وسوف نستخدمه فى العديد من البرامج لاحقا . عبارات if المتداخلة تتطلب مزيدا من الاهتمام .