Ipg101 CHP2
Ipg101 CHP2
IPG101
Introduction To Programming
الفصل الثاني
تصميم البرمجيات
Programs Design
1
الكلمات المفتاحية
خوارزمية ،برنامج ،خوارزمية حسابية ،خوارزمية غير حسابية ،خوارزمية تسلسلية ،خوارزمية غير تسلسلية ،قرار،
تكرار ،مخطط تدفقي ،شبه الشيفرة.
ملخص الفصل
يتضمن هذا الفصل مدخالً إلى البرمجة ،حيث يركز على مهارات التفكير البرمجي من خالل شرح منهجية تصميم
البرامج عبر تحديد مدخالتها ومخرجاتها وعملياتها وتصميم خوارزميات الحل لها ،ومن ثم يقدم تعريفاً بالخوارزميات
وأنواعها وطرق التعبير عنها حيث يركز على أسلوب المخططات التدفقية وأسلوب شبه الشيفرة.
أهداف الفصل
بنهاية هذا الفصل سيكون الطالب قادراً على:
▪ وصف منهجية حل المسائل باستخدام مفاهيم هندسة البرمجيات.
▪ معرفة مفهوم الخوارزمية.
▪ معرفة أنواع الخوارزميات.
▪ التعبير عن الخوارزميات بطرق مختلفة.
▪ رسم المخطط التدفقي المعبر عن خوارزمية حل مسألة ما.
▪ تصميم خوارزمية الحل لمسألة ما.
محتويات الفصل
.1مقدمة.
.2منهجية تطوير البرمجيات.
.3مدخل إلى الخوارزميات.
.4أنواع الخوارزميات.
.5طرق التعبير عن الخوارزميات.
.6التحكم بمسار التنفيذ.
.7تمارين وأنشطة.
2
-1مقدمة
تعتبر مهارة االنتقال من المسألة المطروحة إلى تصميم الحل الالزم لها واحدة من أهم المهارات التي يجب على
المبرمج أن يمتلكها وهذه المهارة تدعى مهارة التفكير البرمجي وتقوم على فهم وتحليل المسألة واستخراج مكوناتها
األساسية وتصميم خوارزمية الحل.
إن مفهوم الخوارزمية Algorithmمفهوم قديم يعود إلى مطلع القرن التاسع الميالدي يعود إلى العالم العربي محمد بنن
موسنى الخنوارزمي الننذي بننرز فني علننوم الرياكننيات والفلننو وكنان أول مننن وكننع مبننادا علنم الجبننر ،إال أن هننذا المفهننوم
ازداد شيوعاً وتعزز به كثي اًر فني المندة األخينرة .ومننذ ههنور الحواسنيب ،شناع اسنتخدامها وتركينز االهتمنام علنى مبادئهنا
في الكتب واألبحاث وميادين متعددة من النشاطات العلمية والتطبيقية.
يعتبر الحاسوب أداة مذهلة في حل طيف واسع من المسائل .لجعل الحاسوب يقوم بأي شي (حل أي مسألة) ،البد من
كتابة برنامج حاسوبي ، computer programتقوم في هذا البرنامج بإخبار الحاسوب ،خطوة خطوة بما ترغب منه
أن يقوم به بدقة .يقوم الحاسوب عندئذ بتنفيذ البرنامج متتبعاً كل خطوة إلنجاز الهدف النهائي.
يعرف هذا التتالي من الخطوات الواجب تنفيذها بالترتيب لحل المسألة من قبل الحاسوب باسم الخوارزمية .algorithm
أما المخطط التدفقي flowchartفهو عبارة عن تمثيل رسومي أو ترميزي للخوارزمية .إنه التمثيل المخططاتي للحل
المعطى للمسألة خطوة خطوة .في حين يتألف تصميم البرنامج program designمن الخطوات الواجب على
المبرمج تنفيذها قبل البدء بكتابة شيفرة البرنامج بلغة البرمجة المرغوبة .إن التصميم المالئم للبرنامج يساعد المبرمجين
اآلخرين على صيانة وتعديل البرنامج الحقاً.
تعتمد هندسة البرمجيات طرائق أساسية محددة للحصول على حلول برمجية للمسائل .وعلى الرغم من أن المسائل بحد
ذاتها تتنوع وأن لغات البرمجة المستخدمة في الحل تتنوع كذلو ،إال أن هناك عدة مراحل مشتركة في عملية تطوير
وبناء البرمجيات:
-1مرحلة التصميم :designوفيها يتم تحليل المسألة وتصميم الحل ،وينتج عنها خوارزمية algorithmلحل
المسألة.
-2مرحلة كتابة الشيفرة :codingيتم كتابة الحل وفق قواعد لغة عالية المستوى (مثل )C#فينتج برنامج.
-3مرحلة االختبار ،التنفيذ والتنقيح :testing, execution and debuggingوفيها يتم اختبار البرنامج
وفق قواعد صارمة وإزالة أي أخطاء.
-4مرحلة الصيانة :maintenanceوفيها يتم تحديث وتعديل البرنامج ،بحسب الحاجة ،لتلبية المتطلبات
المستجدة للمستخدمين.
تتعدد المنهجيات ال معتمدة في تنفيذ المرحلة األولى (أي تصميم الحل) إال أننا سنعتمد منهجية التصميم المتمركز على
األغراض ،Object-Centered Designحيث تتألف هذه المنهجية في أبسط أشكالها من المراحل التالية:
3
-1مرحلة توصيف السلوك Behaviorحيث يتم تحديد كيف نرغب من برنامجنا أن يتصرف بأكبر قدر ممكن
من الدقة.
-2مرحلة تحديد األغراض Objectsحيث يتم تحديد أغراض العالم الحقيقي في المسألة وتصنيفها وتوصيفها.
-3مرحلة تحديد العمليات Operationsحيث يتم تحديد العمليات الالزمة لحل المسألة وتوصيفها.
-4مرحلة كتابة الخوارزمية Algorithmحيث يتم ترتيب األغراض والعميات الموصفة وفق ترتيب يؤدي إلى
حل المسألة بما يحقق السلوك الموصوف للبرنامج.
يتم حل أي مسألة برمجية وكع خطة للحل ندعوها الخوارزمية ،Algorithmحيث يمكن تعريف الخوارزمية على أنها
مجموعة متتالية ومنتهية من الخطوات التي تعبر عن حل مسألة ما.
تتضمن الخوارزمية إذا خطوات حل مسألة عبر تحديد:
-1األفعال الواجب تنفيذها.
-2الترتيب الواجب إتباعه من أجل تنفيذ األفعال السابقة.
يجب أن تكون األفعال وترتيب التنفيذ موصفاً على ٍ
وجه ال يدعو إلى اللبي أو التأويل
إن إنجاز أي أمر بشكل سليم يتطلب وكع خوارزمية صحيحة وفعالة له .على سبيل المثال ،لنتناول مسألة طرح
سحب كرة حمراء اللون من صندوق يحوي عدداً كبي اًر من الكرات الملونة.
يمكن التعبير عن إنجاز مثل هذه المسألة من خالل الخوارزمية التالية:
-1البداية.
-2سحب كرة من الصندوق.
-3اختبار لون الكرة المسحوبة فإن كان أحمر ،االنتقال إلى الخطوة 4وإال تكرار الخطوات 2و .3
-4النهاية.
تعتبر الخوارزميات مكوناً جوهريا في مجال الحوسبة وذلو ألنها تساعد على بناء اإلجراءات الالزمة بطريقة نظامية.
وتوجد عدة خوارزميات لحل المسألة الواحدة ولكن أفضل هذه الخوارزميات هي التي تصل إلى النتيجة بأقل جهد وزمن
ممكنين "أي سهلة الفهم وسريعة التنفيذ".
4
إن استخدام الخوارزمية الجيدة يشبه استخدام األداة الصحيحة في الورشة .فهو يتيح إنجاز العمل المطلوب بطريقة
صحيحة وبالمقدار الصحيح من الجهد .أما استخدام الخوارزمية الخاطئة أو الخوارزمية الغير معرفة بشكل واكح فهو
أمر يشبه محاولة قطع شجرة بسكين إذا على الرغم من أنو قد تتمكن من إنجاز العمل إال أنو تتساءل عن مدى
الفعالية التي أنجز فيها األمر.
علننى سننبيل المثننال ،لنفننرض أن لننديو صننديقاً يقننيم فنني مدينننة بعينندة ويرغننب بزيارتننو ،فهننناك عنندد كبيننر مننن الخوارزميننات
التي تتيح لو إرشاده إلى كيفية إنجاز هذا األمر والوصل بشكل سليم إلى منزلو ،نبين ليما يلي بعضها:
❖ خوارزمية سيارة األجرة
➢ إذهب إلى موقف سيارات األجرة.
➢ إركب سيارة أجرة.
➢ أعط العنوان للسائق.
❖ خوارزمية إتصل بي
➢ عندما تصل إلى محطة الباصات ،إتصل برقم هاتفي.
➢ انتظرني على مدخل محطة الباصات.
❖ خوارزمية حافالت النقل العام (السرفيس)
➢ إتجه إلى مدخل محطة الباصات.
➢ إركب حافلة النقل رقم .xxx
➢ إنزل من هذه الحافلة في الموقع .YYY
➢ إركب حافلة النقل ..ZZZ
➢ إنزل من هذه الحافلة في الموقع ..TTT
➢ قم بالسير ثالث بنايات نحو الغرب.
إن جميع هذه الخوارزميات تحقق الهدف ذاته ،إال أن كل خوارزمية تنجز هذا األمر بطريقة مختلفة .كما أن لكل
خوارزمية كلفة مختلفة وتحتاج إلى زمن مختلف .فمثالً خوارزمية سيارة األجرة هي األسرع ولكنها األكثر تكلفة مادية.
في حين أن خوارزمية حافلة النقل العام هي األقل كلفة مادية لكنها األبطأ .يتوقف نوع الخوارزمية التي عليو اختيارها
حسب أولوية االعتبارات (الوقت ،الكلفة المادية).
بطريقة مشابهة تماماً ،عند برمجة الحاسوب هناك غالباً العديد من الخوارزميات لتحقيق مهمة معينة .كل خوارزمية لها
حسنات ومساوا بحسب هروف الحل.
هناك ثالثة أسباب الستخدام الخوارزميات وهي الجدوى ،efficiencyالتجريد abstractionوقابيلة إعادة االستخدام
.reusability
5
الجدوى :efficiencyنواجه بعض األنواع من المسائل ،مثل مسائل الفرز ،بشكل متكرر .يجب عندها ▪
استخدام خوارزمية مجدية لحل مثل هذه المسائل بزمن مقبول ،إذا أن عامل الكلفة هنا أمر أساسي في كل
خوارزمية نقوم بتصميمها.
التجريد :abstractionتمكننا الخوارزميات من تحقيق مستوى معيناً من التجريد في حل المسائل وذلو ألن ▪
الكثير من المسائل التي قد تبدو معقدة يمكن أن تتم تجزئتها إلى مسائل أبسط ،يوجد لكل منها خوارزمية حل
شهيرة.
قابلية إعادة االستخدام :reusabilityغالباً ماتكون الخوارزميات قابلة إلعادة االستخدام في العديد من ▪
األوكاع المختلفة .وبما أن الكثير من الخوارزميات المعروفة تمثل تعميماً لخوارزميات أكثر تعقيداً ،وبما أن
الكثير من المسائل المعقدة يمكن تجزئتها إلى خوارزميات أبسط ،فإنه من الممكن حل مسألة معقدة بواسطة
استخدام حلول مسبقة لمسائل أبسط.
-4أنواع الخوارزميات
كخالصة لكل ماسبق ،يمكن تعريف الخوارزمية بأنها توصيف دقيق وكامل على شكل خطوات متسلسلة معدودة
ومعرفة تحدد طريقة إنجاز عمل ما ،أوحل مسألة ما.
ٍ
بشكل عا ٍم إلى حسابية وغير حسابية (عامة). و يمكن تقسيم الخوارزميات
يقصد بالخوارزمية غير الحسابية ،الخوارزمية التي ال تتضمن التعامل مع مقادير حسابية وال عمليات حسابية أو
رياضية وال تعيد نتائج رقمية .ربما كانت الخوارزميات غير الحسابية هي أكثر الخوارزميات استخداماً ،ونذكر منها تلو
التي تقوم بمعنالجة النصوص ،وتخزين المعلومات واستعادتها ،وإدارة قواعد البيانات ،والمساعدة في اتخاذ القرار في
جميع نواحي الحياة.
6
مثال :2خوارزمية تحضير بيضة مقلية:
-1كع الوعاء على النار؛
-2أكف مقدار نصف ملعقة صغيرة من الزبدة؛
-3انتظر ذوبان الزبدة؛
-4اكسر البيضة وصع محتواها كمن الوعاء؛
-5انتظر حتى تنضج البيضة.
(الحظ أن ترتيب الخطوات يغير في إنجاز العمل المطلوب من الخوارزمية وقد يعطي نتائج خاطئة ،فلو وكعنا
الخطوة 4قبل الخطوة 2؛ أي وكع البيض قبل الزبدة ،لما حصلنا على "العجة" اللذيذة!!)
الخوارزميات الحسابية
يقصد بالخوارزمية الحسابية تلك التي تتعامل مع المقادير الرياضية .وقد شاع لدى الرياكنيين تقنديم األمثلنة علنى هنذه
الخوارزميات حتى ارتبط مفهوم الخوارزمية عند الكثيرين بهذا النوع.
7
-5طرق التعبير عن الخوارزميات
يمكن التعبير عن الخوارزميات بأساليب عدة مختلفة ،منها اللغات الطبيعية ،natural languagesشبه الشيفرة
،pseudocodeالمخططات التدفقية ،flowchartsولغات البرمجة .programming languagesكما أن من
الممكن استخدام مزيج من األساليب السابقة لدى التعبير عن خوارزمية ما.
نبين ليما يلي شرحاً لكل طريقة من هذه الطرق ،حيث سنقوم بتوكيح الفارق بينها من خالل بناء خوارزمية إليجاد
مجموع عددين وإههار الناتج.
وهي الطريقة التلقائية التي نقوم باستخدامها في التعبير عن خطوات إنجاز أي أمر ،حيث نقوم باستخدام اللغة الطبيعية
التي نستخدمها في المحادثة ( كاللغة العربية مثالً ) لتحقيق هذا األمر.
تتميز هذه الطريقة بالسهولة ،وإمكانية استخدامها من قبل جميع الناس ولهذا فهي تستخدم على نطاق واسع في الحياة
اليومية لصياغة بعض أنواع الخوارزميات الموجهة للجمهور كتعليمات تشغيل األجهزة أو وصفات تحضير أطباق
الطعام .إال أن من مساوا هذا األسلوب في التعبير عن الخوارزميات أنه يميل ألن يكون إنشائياً وغامضاً ،وهو ناد اًر
مايستخدم من أجل الخوارزميات المعقدة أو التقنية.
على سبيل المثال ،لو رغبنا بإيجاد مجموع عددين وإههار ناتج الجمع:
يمكن التعبير عن مثل هذه الخوارزمية باللغة الطبيعية كما يلي:
-1البداية
-2اق أر (أدخل) الرقم األول وقم بتخزينه في الحاسوب.
-3اق أر الرقم الثاني واحفظه في الحاسوب.
-4أكف الرقم األول إلى الرقم الثاني للحصول على المجموع وقم بتخزينه في الحاسوب.
-5إعرض (أخرج) قيمة المجموع.
-6النهاية
تقوم هذه الطريقة على استخدام عبارات خاصة في التعبير عن خطوات الخوارزمية قريبة جداً من العبارات المستخدمة
في لغات البرمجة إال أنها مستقلة عن أي لغة برمجة .واستخدام صياغات رياكية شبه برمجية للعمليات وبنى تخزين
القيم.
8
يبين الجدول التالي قائمة بأهم العبارات أو األوامر التي يمكن أن تستخدم في صياغة التعابير على أوامر الخوارزمية
المكتوبة باستخدام لغة شبه الشيفرة:
أوامر شبه الشيفرة العملية
START, BEGIN, STOP, END البداية والنهاية
INPUT, READ, GET اإلدخال
PRINT, DISPLAY, SHOW, PROMPT, WRITE, OUTPUT اإلخراج
SET, INIT التهيئة واإلسناد
COMPUTE, CALCULATE, DETERMINE العملية الحسابية
TEST, IF/ELSE القرار أو الشرط
WHILE, FOR, REPEAT, LOOP الحلقة أو التكرار
للتعبير عن الخوارزمية السابقة إليجاد مجموع عددين باستخدام هذا األسلوب يمكن أن نكتب كما يلي:
1- START
2- READ VALUE1
3- READ VALUE2
4- CALCUATE SUM = VALUE1 + VALUE2
5- WRITE SUM
6- STOP
نشير أخي اًر إلى أن لغة شبه الشيفرة ليست لغة قياسية وقد تجد أشكاالً مختلفة في التعبير تختلف من مرجع آلخر.
في بعض األحيان يكون من المفيد أثناء وصف الخوارزمية أن نقوم ببناء مخطط تدفقي بسيط يكتب في داخل رموزه أو
صناديقه عبارات باللغة الطبيعية أو تعابير رياكية لتلخيص ماينجزه هذا المخطط التدفقي.
المخطط التدفقي flowchartهو نوع من المخططات (الرسومية أو الرمزية) التي تعبر عن خوارزمية أو عملية ما.
حيننث يننتم تمثيننل كننل خطننوة فنني الخوارزميننة بواسننطة رمننز مختلننف يتضننمن وصننفاً مبسننطاً لهننذه الخطننوة .يننتم ربننط رمننوز
المخطط التدفقي مع بعضها من خالل أسهم لتبين تدفق أو مسار تنفيذ الخطوات.
يقوم المخطط التدفقي بوصف ماهي العمليات (وما هو ترتيبها ) الالزمة لحل مسألة مطروحة.
تستخدم المخططات التدفقينة فني تحلينل ،تصنميم ،توثينق أو إدارة البنرامج .وهني ترسنم عنادة فني الم ارحنل األولنى لتصنميم
البرنننامج .كمننا أن مننن مزاياهننا تسننهيل التواصننل والتفنناهم بننين المصننمم والمبننرمج مننن جهننة ،والمبننرمج واآلخ نرين مننن جهننة
ثانية.
9
تعتمد هذه الطريقة في التعبير عن الخوارزميات على توكيح خطوات تنفيذ الخوارزمية باستخدام أشكال هندسنية خاصنة
وأسهم تصل بينها ،إكافة إلى عبارات باللغة الطبيعية ،و/أو بتعابير رياكية أو منطقية.
وعل ننى ال ننرغم م ننن أن المخطط ننات التدفقي ننة تعتب ننر أداة مفي نندة ،إال أنه ننا تواج ننه بع ننض المحدودي ننة ف نني التعبي ننر ع ننن جمي ننع
المسائل وذلو في الحاالت التالية:
-في المسائل ذات الطبيعة المعقدة.
-في حال كثرة التعديالت على المسألة المطروحة التي تتطلب إعادة بناء الخوارزمية من جديد.
-وجود بعض العمليات التي ال يمكن التعبير عنها بواسطة رموز المخططات التدفقية.
نب ننين ليم ننا يل نني قائم ننة ب ننأهم الرم ننوز الت نني يمك ننن اس ننتخدامها ف نني بن نناء مث ننل ه ننذه المخطط ننات (يكت ننب ب ننداخل ه ننذه الرم ننوز
توصيف للعملية التي تمثلها):
الرمز التخطيطي المستخدم العملية
البداية والنهاية
اإلدخال واإلخراج
االختبار أو القرار
مسار التدفق
10
يعبر المخطط التالي عن خوارزمية إيجاد مجموع عددين:
الخوارزميات التسلسلية
تسنتخدم فني حننل المسنائل التني يكننون حلهنا مؤلفناً منن تتنال محنندد للخطنوات التنني تنؤدي إلنى النتيجننة دون الحاجنة لتغييننر
س ننياق التنفي ننذ ،تنف ننذ ه ننذه الخط نوات خط ننوة خط ننوة حت ننى الوص ننول إل ننى النهاي ننة دون تجاه ننل أو تك نرار ألي م ننن الخط نوات
الموجودة .يبين الشكل التالي بنية المخطط التتابعي:
Statement 1
Statement 2
Statement n
11
مثال خوارزمية تسلسلية:
احسب المصروف اليومي لطفليو بحسب عمر كل منهما ،بمعدل 75ليرة لكل عام من أعوام عمر الطفل.
تنويه هام:
تماما وبالتالي البد من البدء بتحليل المسألة عبر طرح
قبل البدء بكتابة أي خوارزمية ،تأكد من أن المهمة محددة ً
مجموعة من األسئلة ومحاولة اإلجابة عنها بشكل واكح ودقيق.
أسئلة يجب طرحها:
ما هي البيانات المعروفة قبل تشغيل البرنامج؟ •
ما هي البيانات التي يجب إدخالها من قبل المستخدم؟ •
ما هي الحسابات التي سيتم إجراؤها على البيانات؟ •
ما هي البيانات التي سيتم إخراجها (المعروكة) للمستخدم؟ •
تحليل المسألة:
المعدل 75ليرة لكل سنة. • القيم المعروفة
أعمار األطفال. • المدخالت
المصروف = العمر xالمعدل • الحسابات
المصروف لكل طفل. • المخرجات
مالحظة :إن إخراج الرسائل التوضيحية ورسائل التخاطب ليس إلزامياً ولكنه ممارسة جيدة وخاصة أثناء االنتقال من
الخوارزمية المصممة إلى كتابة البرنامج.
12
التعبير عن الحل باستخدام المخططات التدفقية
ان األمر ليي دائماً على النحو الوارد في الحالة التسلسلية ،فقد يتطلب تنفيذ برنامج أن ال يتم تنفيذ جميع األوامر وإنما
اختيار تنيفذ أوامر وتجاهل تنفيذ أوامر أخرى بحسب ناتج اختبار شروط ما ،كما يوكح المخطط التدفقي التالي:
T F
boolean expression
13
وبالمثل ،قد يتطلب تنفيذ برنامج أن ال يكتفى بتنفيذ األمر لمرة واحدة وإنما تكرار تنيفذه لعدد من المرات بحسب ناتج
اختبار شروط ما ،كما يوكح المخطط التدفقي التالي:
F
boolean expression
T
Statement
تدعى المخططات التي تتضمن اختيا اًر بين تنفيذ أمرين مختلفين بمخططات القرار ،أما المخططنات التني تتضنمن تكن ار اًر
لتنفيذ مجموعة من الخطوات ألكثر من مرة باسم المخططات الحلقية.
1. START
2. ”WRITE “Enter Age
3. READ Age
4. IF Age < 10 THEN
4-1 CALCULATE Expense = Age x YoungRate
ELSE
4-1 CALCULATE Expense = Age x OlderRate
5. WRITE Expense
6. STOP
14
التعبير عن الحل باستخدام المخططات التدفقية
15
التعبير عن الحل باستخدام المخططات التدفقية:
16
-7تمارين وأنشطة
مالحظة :يطلب التعبير عن حلول جميع هذه التمارين باستخدام شبه الشيفرة والمخططات التدفقية بعد
إجراء تحليل المسألة المطروحة وتحديد القيم المعروفة والمدخالت والحسابات والمخرجات.
التمرين األول:
التمرين الثاني
صمم خوارزمية إليحاد العدد األكبر بين ثالثة أعداد A,B,Cيدخلها المستخدم.
التمرين الثالث
التمرين الرابع
التمرين الخامس
حيث تعبر xiعن معدالت طالب صف من صفوف الجامعة االفتراكية .مع العلم أن عدد طالب الصف الواحد
المستخدم يقوم بإدخال
(المشار إليه بالمتحول ُ )nيعطى من الدخل ،وأن المعدالت محسوبة من 100عالمة وأن ُ
ُ
المعدالت عند تنفيذ البرنامج.
17
التمرين السادس
صمم خوارزمية حساب اإلنحراف المعياري:
n
) (x i − Average
i =1
= S tan dardDeviation
n
حينث تعبنر xiعنن معندالت طنالب صنف مننن صنفوف الجامعنة االفت اركنية ،ويعبنر Averageعنن المتوسنط الحسننابي
(المشار إليه بنالمتحول ُ )nيعطنى منن الندخل وأن المعندالت محسنوبة
للمعدالت .مع العلم أن عدد طالب الصف الواحد ُ
المستخدم يقوم بإدخال المعدالت عند تنفيذ البرنامج.
من 100عالمة وأن ُ
18