الفصل الخامس : اتخاذ القرار تعرضنا حتى الآن لبرامج متتالية الأوامر، حيث ينفذ الكمبيوتر العبارات
الموجودة في البرنامج بالترتيب الذي وردت به .
ولكن في الحياة العملية نحتاج لاتخاذ بعض القرارات تبعا لشروط معينة، ومن
هنا ظهرت الحاجة لوجود طرق لجعل البرنامج قادرا على تغيير تسلسل تنفيذ
التعليمات تبعا للشروط المطلوبة.
وسنتعرض هنا لطرق اتخاذ القرار في لغة الC وكيفية تغيير تسلسل التنفيذ تبعا
للشروط الموضوعة.
العبارة الشرطية البسيطة ( if statement):
تكوين العبارة الشرطية البسيطة كما هو موضح بالشكل
CODE |
if ( condition ) statement; |
حيث ( condition ) هو الشرط و ( statement ) هو القرار المراد اتخاذه عند
تحقق الشرط المعطى.
وعندما ترغب في تنفيذ أكثر من عبارة بتحقق الشرط نستبدل العبارة التي تمثل
القرار المراد اتخاذه ببلوك به العبارات المراد تنفيذها.
ولتوضيح استخدام العبارة الشرطية البسيطة أنظر البرنامج التالي
CODE |
#include main() { float sum; printf(“\n Enter the Sum : “); scanf(“%f”,sum); if (sum >50) printf (“\n The student had passed”); } |
وفي هذا البرنامج يطبع الكمبيوتر رسالة ليسأل المستخدم عن مجموع الطالب
وبعد ذلك يقوم بمقارنتها بالشرط اللازم للتأكد من النجاح ( وهو تجاوز
المجموع 50 )فإذا تحقق الشرط يطبع الكمبيوتر رسالة للمستخدم يعلمه أن
الطالب ناجح،
العبارة الشرطية الكاملة ( if ……. else statement)
إن اتخاذ القرارات في الحياة العملية ليست بالسهولة التي ذكرت في البرنامج
السابق، إذ نحتاج في معظم الأحيان لاتخاذ اجراء تبعا لشرط معين، واتخاذ
إجراء آخر إذا لم يتحقق هذا الشرط.
لو نظرنا للبرنامج السابق لوجدنا سؤالا ملحا : ماذا لو كان مجموع الطالب
أقل من 50 ؟؟
الاجابة على هذا السؤال هي أن الطالب يكون راسبا. ولكن البرنامج لا يتضمن
أمرا بإعطاء حالة الرسوب، لأننا استخدمنا عبارة الشرط البسيطة والتي تستجيب
لشرط واحد.
وسنتعرض الآن لعبارة مركبة كما في البرنامج التالي:
CODE |
#include main() { float sum; printf(“\n Enter the Sum : “); scanf(“%f”,sum); if (sum >50) printf (“\n The student had passed”); else printf(“\n The student had failed”); } |
وفي هذا البرنامج استخدمنا العبارة الشرطية الكاملة والتي تأتي على الصورة
الموضحة بالشكل التالي
CODE |
if ( condition) statement-1; else statement-2; |
حيث أن ( condition ) هو الشرط
و ( statement -1 ) هي عبارة النتيجة الأصلية.
و (statement -2 ) هي عبارة النتيجة البديلة.
ومنطق اتخاذ القرار هنا هو : " لو تحقق الشرط يقوم الكمبيوتر بتنفيذ عبارة
النتيجة الأصلية أما لو لم يتحقق الشرط فيقوم الكمبيوتر بتنفيذ عبارة
النتيجة البديلة"
وهكذا -باستخدام العبارة الشرطية الكاملة - تمكننا من اتخاذ القرار لحالتين
متضادتين ، والآن ماذا لو كانت النتيجة الأصلية و النتيجة البديلة تتضمنان
أكثر من أمر للكمبيوتر؟
في هذه الحالة نحتاج إلى احتواء عبارات النتيجة الأصلية بين قوسين من أقواس
البلوكات، وهو الموضح بالشكل
CODE |
if ( condition) { statement 1; statement 2; . . statement n; } else { statement 1; statement 2; . . statement m; } |
نلاحظ أن عبارة النتيجة تم استبدالها ببلوك النتيجة، والمثال التالي هو
البرنامج السابق بعد تعديل عبارات النتائج لتصبح بلوكات، وذلك ليتمكن
البرنامج من إعطاء تقرير بالنجاح أو الرسوب متضمنا النسبة المئوية باعتبار
المجموع الكلي 1000 في حالة النجاح أو رسالة تفيد بأنه لا يمكن احتساب
النسبة المئوية لطالب راسب.
CODE |
#include main() { float sum; printf(“\n Enter the Sum : “); scanf(“%f”,sum); if (sum >50) { printf (“\n The student had passed”); printf(“\n The percentage is : %f”,(sum/1000)*100) } else { printf(“\n The student had failed”); printf(“\ There is no percentage for failed student !”); } } |
لو افترضنا انه قد طلب منك - كمبرمج - عمل برنامج يمكنه احتساب التقديرات
اعتمادا على مجموع الطالب، في هذه الحالة نستخدم عبارة شرطية أيضا ولكن بها
عدد من الشروط وعدد مناظر من النتائج. أو ما يطلق علية العبارة الشرطية
المتدرجة.
والشكل التالي يوضح التكوين العام للعبارة الشرطية المتدرجة
CODE |
if ( condition –1) statement –1; else if ( condition-2) statement-2; else if( condition-3) statement-3; ……….. else statement-n; |