بسم الله الرحمن الرحيم
سوف نتناول في هذه المحاضرة الموضوعات التالي :
1- مقدمة لعبارات التحكم.
2- الخوارزميات algorithms.
3- شبه الكود pseudocode.
4- هياكل التحكم.
بسم الله وبه نستعين
المقدمة
عندما نقوم بتنفيذ مهمة أو حل مشكلة برمجية , يجب أولا أن يكون لدينا فهم جيد لها , وذلك لكي نستخدم قطع البناء ذات التقنيات المناسبة لها , بطريقة وتخطيط نستخلص
من خلالهما كود واضح ذات أداء وكفائة عاليين.في هذا الفصل والذي يليه سوف نتعرف على عبارات التحكم في تحضير النظريات ومبادىء البرمجة الهيكلية ( المركبة ).
في هذا الفصل ( المحاضرة القادمة ) نقدم عبارات التحكم ( while , if , if... else ), ثلاث من قطع البناء التي تسمح للمبرمج ان يحدد المنطق المطلوب لدوال
الأعضاء لتؤدي مهامها. نحن نكرس جزء من هذا الفصل ( والفصلين 5 , 7 ) لتطوير أبعد للصنف GradeBook, حيث نقوم بإضافة دالة عضو للصنف حيث يستخدم
بها إحدى عبارات التحكم أو كلاهما لحساب معدل مجموع درجات الطالب, وأيضا هناك وسائل اضافية لضم عبارات لحل مشاكل مشابهه.
الخوارزميات algorithms
أي مسألة أو مهمه قابلة للتنفيذ, تكون منفذه بإتباع سلسلة من الإجراءات في ترتيب معين. ويركز هذا الترتيب على ناحيتين:
1- إجراءات التنفيذ نفسها. 2- الترتيب الي نفذت به.
وهذا ما يسمى بالخوارزم algorithm. ولكي نوضح هذا المصطلح , نأخذ المثال التالي, " خوازم النهوض إلى العمل " لموظف صغير, عندما ينهض من السرير ليذهب
إلى العمل :
1- يغادر السرير.
2- يخلع البجامة.
3- يستحم.
4- يرتدي ثوبة.
5- يتناول فطوره.
6- يقود سيارته للعمل.
هذه المهمة منفذه على شكل خطوات مرتبه بطريقة معينه, عندما يختل هذا الترتيب فإننا سوف نفقد
التحكم والسيطره, وبالتالي تزداد المهمة صعوبة. على سبيل المثال, لو إختلف الترتيب وفق التالي :
1- يغادر السرير.
2- يخلع بجامته.
3- يرتدي ثوبه.
4- يستحم.
5- يتناول فطوره.
6- يقود سيارته للعمل.
بهذه الطريقة سوف يذهب للعمل مبولا. تحديد الترتيب في عبارات ( إجراءات ) تنفذ في برنامج كمبيوتر تسمى " تحكم البرنامج ".
في هذا الفصل سوف نأخذ عبارات التحكم لنرى كيف يسير تحكم برنامج.
شبه الكود pseudocode
شبه الكود لغة غير رسمية مبتكره تساعد المبرمجين بأن يطورو الخوارزميات بدون أن يقلقوا حول التفاصيل الدقيقة لنص لغة الـ C++, بعد
تحضير شبه الكود يتم تحويله إلى أجزاء مركبه ( مهيكلة ) من برامج الـ ++C, وهو ليس برمجة فعليه, شكله يشبه اللغة الإنجليزية اليوميه
, بحيث يكون سهل القراءة والفهم .
يساعد شبه الكود المبرمجين في التفكير في البرنامج قبل محاولة كتابته بأي لغة برمجة , وسوف نعرض في هذا الفصل عدة امثله نستخدم فيها شبه
الكود في تطوير برامجنا. يمكن كتابة شبه الكود في أي محرر للنصوص يتم تجهيزها لحين الطلب. عند القاء نضره على شبه الكود نلاحظ أن
الإعلانات ( تلك التي لا تحتوي عمليات اسناد قيم اوليه للمتغيرات ولا تحتوي على بواني ) لا يتم كتابتها , على سبيل المثالك :
;int i
نلاحظ في هذه الإجراء لا يوجد تنفيذ ( على سبيل المثال : ادخال , إخراج , حساب , اسناد قيمة ) , هذا يحدث في معظم الحالات.
سوف نعطي فيما يلي مثالا بسيط لتوضيح ماسبق شرحه, ناخذ برنامج و نمثل خوارزميه له هي عبارة عن شبه كود.
البرنامج :
1
// Fig. 2.5: fig02_05.cpp
2 // Addition program that displays the sum of two numbers.
3 #include <iostream> // allows program to perform input and output
4
5 // function main begins program execution
6 int main()
7 {
8 // variable declarations
9 int number1; // first integer to add
10 int number2; // second integer to add
11 int sum; // sum of number1 and number2
12
13 std::cout << "Enter first integer: "; // prompt user for data
14 std::cin >> number1; // read first integer from user into number1
15
16 std::cout << "Enter second integer: "; // prompt user for data
17 std::cin >> number2; // read second integer from user into number2
18
19 sum = number1 + number2; // add the numbers; store result in sum
20
21 std::cout << "Sum is " << sum << std::end1; // display sum; end line
22
23 return 0; // indicate that program ended successfully
24
25 } // end function mainخوارزم البرنامج السابق :
1 Prompt the user to enter the first integer 2 Input the first integer 3 4 Prompt the user to enter the second integer 5 Input the second integer 6 7 Add first integer and second integer, store result 8 Display result
الخوارزم يمثل إدخال عددين صحيحي من المستخدم , ثم يجمع هذين العددين ويعرض الناتج.
السطور ( 1,2 ) من الخوارزم تمثل السطور ( 13,14 ) من البرنامج. وهكذا .
يستخدم شبه الكود لتمثيل العبارات في الدالة الرئيسية فقط ( main ) , وليس لكامل البرنامج.
هياكل التحكم
عادة ً العبارات في البرنامج تنفذ الواحدة تلو الأخرى في الترتيب الذي هي كتبت فيه , هذا الترتيب للتنفيذ يسمى التنفيذ المتسلسل sequential execution. سوف
نشرح فيما يلي خروج تقييد التنفيذ بالتسلسل عن الترتيب المتسلسل ( اي انه ليس من المشترط أن تنفذ العبارة القادمة ) .. وهذا يسمى نقل التحكم transfer of control.
خلال الستينات إتضح أن الإستخدام الجزافي في نقل التحكم سببه عبارة عبارة goto, التي تسمح للمبرمج أن ينقل التحكم إلى أي منطقه يريد من البرنامج, بحيث اصبحت
الكثير من البرنامج شبيهه بمعكرونه الإسبقتي.
أبحاث Bohm وَ Jacopini اثبتت أن البرامج يجب أن تكتب بدون عبارات goto, واصبح هذا تحدي المبرمجين في ذلك العصر. ولم يتسنى ذلك حتى السبعينات ,
حيث تم نشر فكرة البرمجة الهيكيلة ( المركبة ) ولكن لم تأخذ الجدية في تطبيقها. فيما بعد تم إتخاذ جدية أكثر في تطبيقها وأعطت النتائج انخفاض في وقت التطوير وسرعة
في تسليم الأنظمه والمشاريع البرمجية. وتبين للجميع أن المفتاح هو إعتماد البرمجة الهيكلية بشكل تام وعلى مدى أوسع , إلى حد الإستغناء تماما عن عبارة goto.
خرجت أعمال Bohm وَ Jacopini بأنه يجب الإستغناء عن عبارة goto بثلاث هياكل تحكم , تحقق سرعة وأداء عاليين , وهما , الهيكل المتسلسل , وهيكل
الإختيار , وهيكل التكرار. وسوف نشير إليهم في لغتنا هذه بعبارات التحكم ( control statments ).
نأخذ هذا الشكل , وذلك لتوضيح مادتنا القادمة :
شكل 1-5 :
الهيكل المتسلسل في الـ ++C:
هو عبارة عن سلسلة بناء , يكون ترتيب التنفيذ بها متسلسل وفق ترتيب العبارات , سطر تلو الآخر, مالم ينتقل التحكم في أحدى العبارات ليكسر تسلسل الترتيب.
الشكل السابق هو عباراه عن نموذج UML لمخطط حركة . وهو يمثل عمليتين حسبابيتين منفذ بشكل متسلسل.
في هذا الشكل , العبارتين تقومان بجمع الدرجة لمتغير المجموع وجمع القيمة ( 1 ) لمتغير العداد. سوف نستخدم هذه العبارات للحصول على معدل درجات
عدة طلاب بحيث يتم قسمة مجموع الدرجات على عددها. سوف نرى هذا في برنامج لاحظ , وسوف يكون مثال بسيط لتوضيح الفكره التي سوف نمارسها
بشكل مكثف ومتطور في التمارين.
مخططات الحركة تكون جزء من نماذج الـ UML لمخطط الحركة لسير عمل البرنامج. مخطط الحركة يتكون من رموز لها دلالات بحيث تصف حالة
الإجراء وتسمى action state symbols ( المعينات والدوائر الصغير المربوطه بسهام نقل تمثل سير الحركه ).
هذا الرسم حاله حال شبه الكود , فهو يسهل للمبرمجين تطوير وتمثيل خوارزمياتهم بحيث تعرض كيفية عمل هياكل التحكم, بالرغم من أن الكثير يفضلوا شبه
لأكواد في عمل ذلك.
يحتوي مخطط حركة الهيكل المتسلسل في الشكل السابق على إجراءات ( عبارات ) يتم تنفيذها في البرنامج. الأسهم في الشكل تسمى أسهم انتقال, هذه الأسهم تمثل
انتقالات التنفيذ ( أولا , جمع الدرجة للمجموع. ثانيا , زيادة العداد بواحد ).
الدائرة المصمته في قمة المخطط تمثل أعداد قيمة أولية. في آخر الرسم يوجد دائرة مصمته محاطه بدائرة جوفاء وهي تمثل نهاية التنفيذ.
في رسم الـ UML في الشكل السابق , تلاحظون المستطيلات المطوية الزاوية , تسمى ( ملاحظات ), وهي ما تمثل تعليقات توضيحية تصف رموز المخطط.
هذه الملاحظات تستخدم الكود المرتبط في كل حدث اجرائي في مخطط الحركة
عبارات الإختيار في الـ ++C :
في لغة الـ ++C لدينا ثلاث عبارات إختيار وهي : if , if .. else , switch
if : إذا تحقق الشرط ( يكون صحيح ) ينفذ الإجراء , واذا لم يتحقق يتجاوزه .. فقط. وتسمى عبارة إختيار مفردة ( لانها تنفذ إجراء واحد فقط اذا تحقق الشرط ).
else .. if : في حالة تحقق الشرط , تودي إجراء معين , واذا لم يتحقق تنفذ إجراء آخر. وتسمى عبارة اختيار مزدوجة ( لأنها تنفذ إجرائين , عندما تكون صحيحة وعندما تكون خاطئة ).
switch : تحتوي على عدة شروط , كل شرط له إجراء خاص يتم تنفيذه إذا تحقق. وتسمى عبارة اختيار متعددة لأنها إجراءات متعدده , لك إجراء شرط خاص تبنى عليه.
عبارات التكرار في الـ ++C :
في لغة الـ ++C لدينا ثلاث عبارات تكرار وتسمى ايضا حلقات تكرار loops , وهي : for , while , do .. while.
تؤدي هذه العبارات إجراء معين بشكل متكرر كل ما تحقق الشرط , عدد هذه التكرارات تكون من الصفر إلى أن يفشل الشرط , ما عدى العبارة do .. while , فيكون من الـواحد إلى أن يفشل
الشرط , لأنه هذه العبارة يجب تنفذ الإجراء مره واحدة على الأقل.
كل الكلمات ( for , do , while , else , if , switch) كلمات مفتاحية ( keywords) في الـ ++C هذه الكلمات محجوزة في الـ ++C لتطبيق تقنيات معينة.
فيما يلي قائمة بالمفتاحيات في الـ ++C:
شكل 2-5 :
خطأ برمجي شائع :
إستخدام المفتاحية كمعرف يولد خطأ نصي ( syntax error ).
خطأ برمجي شائع :
حروف المفتاحية مع أي حرف كبير يولد خطأ نصي. كل مفتاحيات الـ ++C تحتوي حروف صغيره فقط.
خلاصة عبارات التحكم :
من كلامنا السابق , نستفيد أنه يوجد لدينا ثلاث أنواع من عبارات التحكم ( تسلسل , اختيار , تكرار ).
لو نظرنا لكل كود ( أو دالة عضو ) لرأينا أنها تتكون من إحدى هذه الأنواع , او خليط منها يمثل الخوارزم الذي يطبقه هذا البرنامج.
نستطيع أن نقوم بعمل نموذج لكل عبارة تحكم , وذلك بعمل مخطط حركة لوصف سلوكها بشكل رسومي. دائما ما يحتوي مخطط الحركة activity diagram على
حدث أولي وحدث أخير ( نقطة دخول ونقطة خروج ) بشكل متعاقب يتخللها الإجراءات وفق ترتيبها وتسلسلها. وتسمى هذه الطريقة ( التسلسل ) بالترزيم ( stacking) ,
أي عمل العبارات بشكل رزمة , كما في نموذجنا السابق (1-5) الذي يمثل كودنا السابق.
وهناك أيضا طريقة اخرى لإتصال ( ترابط ) عبارات التحكم , تسمى هذه الطريقة بالتداخل ( nesting). وهي الطريقة التي تكون فيها عبارات التحكم الواحدة داخل الإخرى.
خلاصة : يتكون كود الـ C++ من ثلاث أنواع من عبارات التحكم , تكون مرتبة بطريقتين , التداخل والترزيم ( nesting & stacking).
ومن الممكن أن يحتوي البرنامج على عبارات التحكم السبعة جميعها ( المتسلسلة , if , if .. else , switch, for, while , do .. while ).
انتهت المحاضرة .





