دورة دراسة و تحليل الخوارزميات الجزء الخامس : الجمل الشرطية Switch

دورة دراسة و تحليل الخوارزميات الجزء الخامس : الجمل الشرطية Switch

دورة دراسة و تحليل الخوارزميات الجزء الخامس : الجمل الشرطية Switch

لقد طال غيابنا في تقديم الدورات الخوارزيمة هذه أليس كذلك ؟ لا مشكلة ، لقد عدنا مجددا ، و كان السبب الرئيسي في غيابنا هو أن مقدم الدورة  لم يجد الوقت الكافي لتقديم الدورة لكثرة الأعمال ، فقررت اخيرا ان اتخذ هذا المنصب و أكمل معكم دورة دراسة و تحليل الخوارزميات ، و أتمنى ان اكون في المستوى المطلوب لنكمل معا هذه الدورة حتى النهاية  و نحلل و نجيب أيضا على خوارزميات اخرى من إبداعكم و لما لا . 
سبق و طرحنا في موقعنا 4 مقالات و دورات في مجال الخوارزميات و دراستها ، و هي كالتالي : 
  1. الجزء الأول : دورة دراسة و تحليل الخوارزميات - تمهيد
  2. - دورة دراسة و تحليل الخوارزميات الجزء الثاني : المتغيرات
  3. - دورة دراسة و تحليل الخوارزميات الجزء الثالث : مثال خوازرمية بإستخدام المتغيرات
  4. دورة دراسة و تحليل الخوارزميات الجزء الرابع: جمل التحكم و الدالة الشرطية if

و اليوم سأكمل معكم ما بدأه الأخ مقدم الدورة الأصلية ، لنستهل أول الدروس بالدالة الشرطية Switch و ما هيتها ، و كيف يمكننا إستخدامها و اخيرا مثال للكود بأحدى اللغات  البرمجية

- ما هي الجملة الشرطية Switch : 
إن الجمل الشرطية Switch هي جمل إختيارية يتم إدراجها من أجل الإختيار الواحد ضمن مجموعة خيارات ، يمكن تنفيذ الجملة الشرطة Switch بإستخدام الجمل الشرطية سابقة الذكر If ، لكن سيكون الأمر صعبا جدا في تنفيذ هذا الأمر ناهيك عن طول الكود ، لذلك ، فمن الأسهل و الأبسط في حالات الإختيار المتعدد ان يتم إستخدام الجمل الشرطية Switch و ذلك لسهولتها و سنراجع هذا الأمر جيدا في الكود . 

- بعض حالات إستخدام الجملة الشرطية Switch : 
كما جاز الذكر سابقا فللجمل الشرطية مكانتها في الأكواد البرمجية ، و يجب إستخدامها في أماكن إستخدامها لا غير ، دعني أفرض انك تبرمج برنامجا مثلا و واجهت العائق التالي : " على المبرمج إنجاز قائمة طعام Menu ، و على المستخدم إختيار في الMenu خيار من 1 الى 7 ، ان اختار رقم 1 نقدم له مثلا كأس قهوة ، إن اختار 2 نقدم له عصير ، و إن إختار الرقم 3 نقدم له سلطة و هكذا دواليك " . 
في هذه الحالة ، فإستخدام الIf ممكن و متاح ، لكن سيتوجب عليك إنجازها في العديد من الأسطر ، فكيف يمكننا ان نقوم بالأمر بروية و سهولة ؟ حسنا هذا ما سنشاهده في الفقرة القادمة . 


إقرأ أيضا : كل ما تحتاج معرفته حول اللغة البرمجة Ruby و كيفية كتابة أول كود برمجي لك

-  ما هي الSwitch برمجيا ؟ 
حان ، حان وقت إرضاخ كل المعلومات البسيطة أعلاه لتطبيقها في الكود ، سأقوم هذه المرة بتبسيط الكود و الخوارزمية بلغة الC ، و سنبقى دائما في المثال أعلاه الذي شرحته سابقا و هي المستخدم يطلب طلبا من الMenu ، دعني أولا أستعرض على المستخدم الMenu الخاصة بنا عبر الكود التالي : 

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
#include<stdio.h>
main()
{
puts("Menu : \n 1) Coffe \n 2) Juse \n 3) Water \n 4) Salad \n 5)Pizza \n 6) Soda \n 7) Burger");
}
view raw Menu.c hosted with ❤ by GitHub



عند تشغيل الكود ستظهر لنا الMenu او قائمة الطعام على الشكل التالي : 

حسنا ، الآن جيد ، دعونا نقوم بكتابة كود برمجي يسمح لنا بتطبيق خوارزميتنا الا وهي إظهار النتيجة المتعلقة بكل طلب من الطلبات ، لكن حتى نوضح لكم الفرق أكثر بين إستخدام كل من الIf و الSwitch ، فإني سأكتب الكود أولا بإستخدام If ثم نكتبه مجددا بإستخدام الSwitch لنعرف الفرق بينهما و سهولة الإستخدام في كل واحدة و نترجم الكود سطرا بسطر حينها ، إذن إليك حل الخوارزمية بإستخدام الIf : 

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
#include<stdio.h>
main()
{
// Show the Menu
puts("Menu : \n 1) Coffe \n 2) Juse \n 3) Water \n 4) Salad \n 5) Pizza \n 6) Soda \n 7) Burger \n");
// Get the selected Item :
puts("Please enter your choice number : ");
int choice ;
scanf("%d",&choice);
// Proccess the selection :
if(choice==1) puts("Coffe");
if(choice==2) puts("Juse");
if(choice==3) puts("Water");
if(choice==4) puts("Salad");
if(choice==5) puts("Pizza");
if(choice==6) puts("Soda");
if(choice==7) puts("Burger");
}
view raw Menu2.c hosted with ❤ by GitHub





كما ترى فهذا هو الكود ، لن أشرحه لك كثيرا ، و ننصحك بمراجعة الموضوع السابق الخاص بالIf إن لم تفهم الكود ، ببساطة ، قمت بعمل 7 خيارات ، حين يقوم المستخدم بإختيار احد الأرقام فإنه يعطيه الخيار المقابل لذلك الرقم ، لكن هذا الكود به العديد من المشاكل ، أولا ، لنفترض ان المستخدم قام بإعطاء رقم ليس ضمن القائمة ، مثلا 9 ، فهنا لن يحدث شيئ و سينتهي عمل البرنامج ، فكيف يمكننا صد هذا الأمر ؟ كما أن الكود هذا سيكون بطيئا قليلا أثناء التطبيق ، فإن إخترت الرقم 7 مثلا ، فسيتوجب عليه المرور سطر بسطر ، اي سيراجع السطر الأول و يجده غير مناسب ، ثم السطر الثاني ثم الثالث الى ان يجد المناسب ، و في هذه الحالة فالأمر مزعج و تهيأته سيئة من ناحية البيانات . 
لنجرب الكود مجددا ، لكن هذه المرة بإستخدام الSwitch : 

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
#include<stdio.h>
main()
{
// Show the Menu
puts("Menu : \n 1) Coffe \n 2) Juse \n 3) Water \n 4) Salad \n 5) Pizza \n 6) Soda \n 7) Burger \n");
// Get the selected Item :
puts("Please enter your choice number : ");
int choice ;
scanf("%d",&choice);
// Proccess the selection with Switch :
switch(choice)
{
case 1 : puts("Coffe"); break;
case 2 : puts("Juse"); break;
case 3 : puts("Water"); break;
case 4 : puts("Salad"); break;
case 5 : puts("Pizza"); break;
case 6 : puts("Soda"); break;
case 7 : puts("Burger"); break;
default : puts("Sorry ! choose the correct number from the menu ");
}
}
view raw Menu3.c hosted with ❤ by GitHub


كما ترى فإستخدام الSwitch سهل جدا ، و سنشرح الكود خطوة بخطوة : 
1 ) - في الأول  قمنا بإستدعاء الدالة ()Switch هذه الدالة تقبل Parametre وهو الذي يتم القياس عليه ، في هذه الحالة ، بما اننا نقيس الأمر على الخيار الذي يدخله المستخدم ، هذا الخيار الذي نقوم بتخزينه في متغير choice . 
2 ) - بعدها نقوم بإعطاء الإحتمالات او الخيارات و ذلك عبر كود Case ،هنا نقول له Case 1 اي إن إختار المستخدم الخيار الذي يحمل رقم 1 فأظهر له التالي ، و أمام الكود الStatement او الكود البرمجي الذي نريده ان يظهر للمستخدم أثناء إختياره ، و قد إخترت هنا ان اقوم بإظهار له إسم الطعام الذي إختاره من القائمة . 
3 ) - كود Break ، في الSwitch و في معظم الحالات أيضا ، فإن الكود البرمجي يمر سطر بسطر ، اي انه يقرأ الحالة الأولى ، إن كانت خاطئة لا يظهرها و يمر للسطر التالي ، و إن كانت صحيحة ، فيظهرها أيضا ثم يمر لتكملة الكود البرمجي و هذا ما لا نريده ، فنحن نريده فور ان يجد الإجابة او الخيار الصحيح ان ينهي عمله و يتوقف و ذلك من أجل إختصار الوقت و تسريع الكود ، لذلك ، نستخدم كود Break في آخرة كل سطر برمجي من كل حالة . 
4 ) - لاحظ معي ، انه ليس بالضرورة ان يكون رقما فالCase ، فمثلا يمكنني ان احدد له ان يختار حرفا مثلا A او حتى كلمة او جملة و يمكن ان يتم إستخدام الSwitch بطريقة عادية في أي حالة تتطلب منك إختيار العديد من الحالات بسهولة .
5 ) - كود Default ، و هذا الكود يحدد لنا الرقم الخارج عن النطاق ، فإن إخترت الآن رقم 9 او 12 او -5 و هو ليس ضمن الCase Study اي الحالات التي ذكرناها ، فسيظهر له كود برمجي آخر و الذي إخترت ان يكون رسالة تخبر المستخدم انه إختار خيارا خاطئا ، يمكننا ان نمنح المستخدم فرصة أخرى للإختيار عبر خيار الDo While ، لكن لم نصل لهذا الأمر بعد و سنتجاوزه في الوقت الراهن . 

- تمرين تطبيقي : 
كالعادة في آخر كل شرح و جزء نتركك مع تمرين تطبيقي يمكنك من إستيعاب الدرس جيدا ، في هذا التمرين سنطلب منك صديقي تقديم خوارزيمة تمكن المستخدم من إختيار رقم بين 1 و 7 ، و يظهر لك أيام الأسبوع ، فمثلا ، إن إختار المستخدم رقم 1 يظهر له " الأحد " ، و إن إختثار رقم 4 ، يظهر له " الأربعاء " و هكذا ، يجب  تطبيق الخوارزمية بإستخدام دالة الSwitch و يمكن كتابتها بأي لغة  برمجية تريد . 

الSwitch يمكن تطويرها أكثر بأكواد برمجية وسطها ، و يمكن ان تصير اكثر تطورا و منفعة ، و إن كنت تريد ان تطورها أكثر ، فإليك هذا التمرين الذي سيتوجب عليك من خلاله صناعة آلة حاسبة بإستخدام الSwitch ، يتم ذلك عبر إختيار نوع الحساب ( الجداء او الجمع او الطرح او القسمة ) ثم تعطي للمستخدم خيار إضافة رقمين ، ثم بعدها تظهر له النتيجة . 

بالتوفيق للجميع و نلتقي في الدرس القادم بإذن الله .