0% found this document useful (0 votes)
29 views18 pages

Ipg101 CHP2

Uploaded by

Zoher
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views18 pages

Ipg101 CHP2

Uploaded by

Zoher
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

‫مقدمة في البرمجة‬

IPG101
Introduction To Programming

‫الفصل الثاني‬
‫تصميم البرمجيات‬
Programs Design

1
‫الكلمات المفتاحية‬
‫خوارزمية‪ ،‬برنامج‪ ،‬خوارزمية حسابية‪ ،‬خوارزمية غير حسابية‪ ،‬خوارزمية تسلسلية‪ ،‬خوارزمية غير تسلسلية‪ ،‬قرار‪،‬‬
‫تكرار‪ ،‬مخطط تدفقي‪ ،‬شبه الشيفرة‪.‬‬

‫ملخص الفصل‬
‫يتضمن هذا الفصل مدخالً إلى البرمجة‪ ،‬حيث يركز على مهارات التفكير البرمجي من خالل شرح منهجية تصميم‬
‫البرامج عبر تحديد مدخالتها ومخرجاتها وعملياتها وتصميم خوارزميات الحل لها‪ ،‬ومن ثم يقدم تعريفاً بالخوارزميات‬
‫وأنواعها وطرق التعبير عنها حيث يركز على أسلوب المخططات التدفقية وأسلوب شبه الشيفرة‪.‬‬

‫أهداف الفصل‬
‫بنهاية هذا الفصل سيكون الطالب قادراً على‪:‬‬
‫▪ وصف منهجية حل المسائل باستخدام مفاهيم هندسة البرمجيات‪.‬‬
‫▪ معرفة مفهوم الخوارزمية‪.‬‬
‫▪ معرفة أنواع الخوارزميات‪.‬‬
‫▪ التعبير عن الخوارزميات بطرق مختلفة‪.‬‬
‫▪ رسم المخطط التدفقي المعبر عن خوارزمية حل مسألة ما‪.‬‬
‫▪ تصميم خوارزمية الحل لمسألة ما‪.‬‬

‫محتويات الفصل‬
‫‪ .1‬مقدمة‪.‬‬
‫‪ .2‬منهجية تطوير البرمجيات‪.‬‬
‫‪ .3‬مدخل إلى الخوارزميات‪.‬‬
‫‪ .4‬أنواع الخوارزميات‪.‬‬
‫‪ .5‬طرق التعبير عن الخوارزميات‪.‬‬
‫‪ .6‬التحكم بمسار التنفيذ‪.‬‬
‫‪ .7‬تمارين وأنشطة‪.‬‬

‫‪2‬‬
‫‪ -1‬مقدمة‬

‫تعتبر مهارة االنتقال من المسألة المطروحة إلى تصميم الحل الالزم لها واحدة من أهم المهارات التي يجب على‬
‫المبرمج أن يمتلكها وهذه المهارة تدعى مهارة التفكير البرمجي وتقوم على فهم وتحليل المسألة واستخراج مكوناتها‬
‫األساسية وتصميم خوارزمية الحل‪.‬‬
‫إن مفهوم الخوارزمية ‪ Algorithm‬مفهوم قديم يعود إلى مطلع القرن التاسع الميالدي يعود إلى العالم العربي محمد بنن‬
‫موسنى الخنوارزمي الننذي بننرز فني علننوم الرياكننيات والفلننو وكنان أول مننن وكننع مبننادا علنم الجبننر‪ ،‬إال أن هننذا المفهننوم‬
‫ازداد شيوعاً وتعزز به كثي اًر فني المندة األخينرة‪ .‬ومننذ ههنور الحواسنيب‪ ،‬شناع اسنتخدامها وتركينز االهتمنام علنى مبادئهنا‬
‫في الكتب واألبحاث وميادين متعددة من النشاطات العلمية والتطبيقية‪.‬‬
‫يعتبر الحاسوب أداة مذهلة في حل طيف واسع من المسائل‪ .‬لجعل الحاسوب يقوم بأي شي (حل أي مسألة)‪ ،‬البد من‬
‫كتابة برنامج حاسوبي ‪ ، computer program‬تقوم في هذا البرنامج بإخبار الحاسوب‪ ،‬خطوة خطوة بما ترغب منه‬
‫أن يقوم به بدقة‪ .‬يقوم الحاسوب عندئذ بتنفيذ البرنامج متتبعاً كل خطوة إلنجاز الهدف النهائي‪.‬‬
‫يعرف هذا التتالي من الخطوات الواجب تنفيذها بالترتيب لحل المسألة من قبل الحاسوب باسم الخوارزمية ‪.algorithm‬‬
‫أما المخطط التدفقي ‪ flowchart‬فهو عبارة عن تمثيل رسومي أو ترميزي للخوارزمية‪ .‬إنه التمثيل المخططاتي للحل‬
‫المعطى للمسألة خطوة خطوة‪ .‬في حين يتألف تصميم البرنامج ‪ program design‬من الخطوات الواجب على‬
‫المبرمج تنفيذها قبل البدء بكتابة شيفرة البرنامج بلغة البرمجة المرغوبة‪ .‬إن التصميم المالئم للبرنامج يساعد المبرمجين‬
‫اآلخرين على صيانة وتعديل البرنامج الحقاً‪.‬‬

‫‪ -2‬منهجية تطوير البرمجيات‬

‫تعتمد هندسة البرمجيات طرائق أساسية محددة للحصول على حلول برمجية للمسائل‪ .‬وعلى الرغم من أن المسائل بحد‬
‫ذاتها تتنوع وأن لغات البرمجة المستخدمة في الحل تتنوع كذلو‪ ،‬إال أن هناك عدة مراحل مشتركة في عملية تطوير‬
‫وبناء البرمجيات‪:‬‬
‫‪ -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‬حيث يتم ترتيب األغراض والعميات الموصفة وفق ترتيب يؤدي إلى‬
‫حل المسألة بما يحقق السلوك الموصوف للبرنامج‪.‬‬

‫‪ -3‬مدخل إلى الخوارزميات‬

‫شامل للمسألة المطروحة‪ .‬وهنذا يتضنمن تحديند وتوصنيف‬


‫ٌ‬ ‫فهم‬
‫قبل كتابة أي برنامج لحل مسألة ما‪ ،‬يجب أن يتوفر لدينا ٌ‬
‫المعطيات التي نعتمد عليها أو ننطلق منها‪ ،‬والنتائج التي نريد الوصول إليها‪.‬‬
‫قبل كتابة البرنامج نتبع أسلوباً منهجياً للحل‪ ،‬ونعبر عن هذا الحل بطريقة منؤطرة مهيكلنة ال لنبي فيهنا كالينة لتنقلننا ليمنا‬
‫بعد إلى لغة برمجة معينة دون عناء كبير‪.‬‬

‫يتم حل أي مسألة برمجية وكع خطة للحل ندعوها الخوارزمية ‪ ،Algorithm‬حيث يمكن تعريف الخوارزمية على أنها‬
‫مجموعة متتالية ومنتهية من الخطوات التي تعبر عن حل مسألة ما‪.‬‬
‫تتضمن الخوارزمية إذا خطوات حل مسألة عبر تحديد‪:‬‬
‫‪ -1‬األفعال الواجب تنفيذها‪.‬‬
‫‪ -2‬الترتيب الواجب إتباعه من أجل تنفيذ األفعال السابقة‪.‬‬
‫يجب أن تكون األفعال وترتيب التنفيذ موصفاً على ٍ‬
‫وجه ال يدعو إلى اللبي أو التأويل‬

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

‫تعتبر الخوارزميات مكوناً جوهريا في مجال الحوسبة وذلو ألنها تساعد على بناء اإلجراءات الالزمة بطريقة نظامية‪.‬‬
‫وتوجد عدة خوارزميات لحل المسألة الواحدة ولكن أفضل هذه الخوارزميات هي التي تصل إلى النتيجة بأقل جهد وزمن‬
‫ممكنين "أي سهلة الفهم وسريعة التنفيذ"‪.‬‬

‫‪4‬‬
‫إن استخدام الخوارزمية الجيدة يشبه استخدام األداة الصحيحة في الورشة‪ .‬فهو يتيح إنجاز العمل المطلوب بطريقة‬
‫صحيحة وبالمقدار الصحيح من الجهد‪ .‬أما استخدام الخوارزمية الخاطئة أو الخوارزمية الغير معرفة بشكل واكح فهو‬
‫أمر يشبه محاولة قطع شجرة بسكين إذا على الرغم من أنو قد تتمكن من إنجاز العمل إال أنو تتساءل عن مدى‬
‫الفعالية التي أنجز فيها األمر‪.‬‬
‫علننى سننبيل المثننال‪ ،‬لنفننرض أن لننديو صننديقاً يقننيم فنني مدينننة بعينندة ويرغننب بزيارتننو‪ ،‬فهننناك عنندد كبيننر مننن الخوارزميننات‬
‫التي تتيح لو إرشاده إلى كيفية إنجاز هذا األمر والوصل بشكل سليم إلى منزلو‪ ،‬نبين ليما يلي بعضها‪:‬‬
‫❖ خوارزمية سيارة األجرة‬
‫➢ إذهب إلى موقف سيارات األجرة‪.‬‬
‫➢ إركب سيارة أجرة‪.‬‬
‫➢ أعط العنوان للسائق‪.‬‬
‫❖ خوارزمية إتصل بي‬
‫➢ عندما تصل إلى محطة الباصات‪ ،‬إتصل برقم هاتفي‪.‬‬
‫➢ انتظرني على مدخل محطة الباصات‪.‬‬
‫❖ خوارزمية حافالت النقل العام (السرفيس)‬
‫➢ إتجه إلى مدخل محطة الباصات‪.‬‬
‫➢ إركب حافلة النقل رقم ‪.xxx‬‬
‫➢ إنزل من هذه الحافلة في الموقع ‪.YYY‬‬
‫➢ إركب حافلة النقل ‪..ZZZ‬‬
‫➢ إنزل من هذه الحافلة في الموقع ‪..TTT‬‬
‫➢ قم بالسير ثالث بنايات نحو الغرب‪.‬‬

‫إن جميع هذه الخوارزميات تحقق الهدف ذاته‪ ،‬إال أن كل خوارزمية تنجز هذا األمر بطريقة مختلفة‪ .‬كما أن لكل‬
‫خوارزمية كلفة مختلفة وتحتاج إلى زمن مختلف‪ .‬فمثالً خوارزمية سيارة األجرة هي األسرع ولكنها األكثر تكلفة مادية‪.‬‬
‫في حين أن خوارزمية حافلة النقل العام هي األقل كلفة مادية لكنها األبطأ‪ .‬يتوقف نوع الخوارزمية التي عليو اختيارها‬
‫حسب أولوية االعتبارات (الوقت‪ ،‬الكلفة المادية)‪.‬‬

‫بطريقة مشابهة تماماً‪ ،‬عند برمجة الحاسوب هناك غالباً العديد من الخوارزميات لتحقيق مهمة معينة‪ .‬كل خوارزمية لها‬
‫حسنات ومساوا بحسب هروف الحل‪.‬‬

‫هناك ثالثة أسباب الستخدام الخوارزميات وهي الجدوى ‪ ،efficiency‬التجريد ‪ abstraction‬وقابيلة إعادة االستخدام‬
‫‪.reusability‬‬

‫‪5‬‬
‫الجدوى ‪ :efficiency‬نواجه بعض األنواع من المسائل‪ ،‬مثل مسائل الفرز‪ ،‬بشكل متكرر‪ .‬يجب عندها‬ ‫▪‬
‫استخدام خوارزمية مجدية لحل مثل هذه المسائل بزمن مقبول‪ ،‬إذا أن عامل الكلفة هنا أمر أساسي في كل‬
‫خوارزمية نقوم بتصميمها‪.‬‬
‫التجريد ‪ :abstraction‬تمكننا الخوارزميات من تحقيق مستوى معيناً من التجريد في حل المسائل وذلو ألن‬ ‫▪‬
‫الكثير من المسائل التي قد تبدو معقدة يمكن أن تتم تجزئتها إلى مسائل أبسط‪ ،‬يوجد لكل منها خوارزمية حل‬
‫شهيرة‪.‬‬
‫قابلية إعادة االستخدام ‪ :reusability‬غالباً ماتكون الخوارزميات قابلة إلعادة االستخدام في العديد من‬ ‫▪‬
‫األوكاع المختلفة‪ .‬وبما أن الكثير من الخوارزميات المعروفة تمثل تعميماً لخوارزميات أكثر تعقيداً‪ ،‬وبما أن‬
‫الكثير من المسائل المعقدة يمكن تجزئتها إلى خوارزميات أبسط‪ ،‬فإنه من الممكن حل مسألة معقدة بواسطة‬
‫استخدام حلول مسبقة لمسائل أبسط‪.‬‬

‫‪ -4‬أنواع الخوارزميات‬

‫كخالصة لكل ماسبق‪ ،‬يمكن تعريف الخوارزمية بأنها توصيف دقيق وكامل على شكل خطوات متسلسلة معدودة‬
‫ومعرفة تحدد طريقة إنجاز عمل ما‪ ،‬أوحل مسألة ما‪.‬‬
‫ٍ‬
‫بشكل عا ٍم إلى حسابية وغير حسابية (عامة)‪.‬‬ ‫و يمكن تقسيم الخوارزميات‬

‫الخوارزميات غير الحسابية‪:‬‬

‫يقصد بالخوارزمية غير الحسابية‪ ،‬الخوارزمية التي ال تتضمن التعامل مع مقادير حسابية وال عمليات حسابية أو‬
‫رياضية وال تعيد نتائج رقمية‪ .‬ربما كانت الخوارزميات غير الحسابية هي أكثر الخوارزميات استخداماً‪ ،‬ونذكر منها تلو‬
‫التي تقوم بمعنالجة النصوص‪ ،‬وتخزين المعلومات واستعادتها‪ ،‬وإدارة قواعد البيانات‪ ،‬والمساعدة في اتخاذ القرار في‬
‫جميع نواحي الحياة‪.‬‬

‫مثال ‪ :1‬خوارزمية تشغيل برنامج حاسوبي‪:‬‬


‫‪ -1‬اكغط على زر التشغيل؛‬
‫‪ -2‬انتظر ههور شاشة االستقبال؛‬
‫عرف عن نفسو‪ :‬أدخل إسم حسابو وكلمة مرورك؛‬ ‫‪ -3‬إذا كان من الضروري أن تُ ِّ‬
‫‪ -4‬ابحث عن أيقونة البرنامج الذي تريد تشغيله وانقر عليها نقرتين بالفأرة‪.‬‬
‫(الحظ هنا أن األفعال قد تكون ملتبسة حسب الحاالت‪ :‬شاشة االستقبال قد تكون الشاشة البيانية ‪ :‬أيقونات ونوافذ‪،....‬‬
‫وقد تكون الشاشة السوداء ‪ :‬نصية فقط‪ ،‬وبالتالي خوارزميتنا ال تغطي جميع الحاالت!! ولكنها تنفذ المطلوب أي تشغيل‬
‫برنامج حاسوبي ‪ ،‬في الحالة األكثر شيوعاً)‬

‫‪6‬‬
‫مثال ‪ :2‬خوارزمية تحضير بيضة مقلية‪:‬‬
‫‪ -1‬كع الوعاء على النار؛‬
‫‪ -2‬أكف مقدار نصف ملعقة صغيرة من الزبدة؛‬
‫‪ -3‬انتظر ذوبان الزبدة؛‬
‫‪ -4‬اكسر البيضة وصع محتواها كمن الوعاء؛‬
‫‪ -5‬انتظر حتى تنضج البيضة‪.‬‬
‫(الحظ أن ترتيب الخطوات يغير في إنجاز العمل المطلوب من الخوارزمية وقد يعطي نتائج خاطئة‪ ،‬فلو وكعنا‬
‫الخطوة ‪ 4‬قبل الخطوة ‪2‬؛ أي وكع البيض قبل الزبدة‪ ،‬لما حصلنا على "العجة" اللذيذة!!)‬

‫الخوارزميات الحسابية‬

‫يقصد بالخوارزمية الحسابية تلك التي تتعامل مع المقادير الرياضية‪ .‬وقد شاع لدى الرياكنيين تقنديم األمثلنة علنى هنذه‬
‫الخوارزميات حتى ارتبط مفهوم الخوارزمية عند الكثيرين بهذا النوع‪.‬‬

‫مثال ‪ :1‬خوارزمية حساب قيمة المقدار ‪ result‬في المعادلة الرياضية التالية‪:‬‬


‫‪4a + b‬‬
‫= ‪result‬‬
‫‪3ab − b + a‬‬
‫‪ -1‬البداية‪.‬‬
‫‪ -2‬الحصول على قيمة ‪.a‬‬
‫‪ -3‬الحصول على قيمة ‪.b‬‬
‫‪ -4‬حساب قيمة البسط‪num=4a+b :‬‬
‫‪ -5‬حساب قيمة المقام‪.denum=3ab-b+a :‬‬
‫‪ -6‬حساب قيمة المقدار ‪.result=num/denum‬‬
‫‪ -7‬النهاية‪.‬‬

‫مثال ‪ :2‬خوارزمية تحديد العدد األكبر من مجموعة أعداد‪:‬‬


‫‪ .1‬أدخل العدد األول إلى المتحول ‪KMax‬‬
‫‪ .2‬أدخل العدد التالي إلى المتحول ‪K‬‬
‫‪ .3‬إذا (‪ K‬تساوي ‪ )999‬اذهب إلى الخطوة ‪6‬‬
‫أسند ‪ K‬إلى ‪KMAX‬‬ ‫‪ .4‬إذا ‪ K‬أكبر من ‪KMax‬‬
‫‪ .5‬اذهب إلى الخطوة ‪2‬‬
‫‪ .6‬اكتب "قيمة العدد األكبر"‪KMax ،‬‬

‫‪7‬‬
‫‪ -5‬طرق التعبير عن الخوارزميات‬

‫يمكن التعبير عن الخوارزميات بأساليب عدة مختلفة‪ ،‬منها اللغات الطبيعية ‪ ،natural languages‬شبه الشيفرة‬
‫‪ ،pseudocode‬المخططات التدفقية ‪ ،flowcharts‬ولغات البرمجة ‪ .programming languages‬كما أن من‬
‫الممكن استخدام مزيج من األساليب السابقة لدى التعبير عن خوارزمية ما‪.‬‬

‫نبين ليما يلي شرحاً لكل طريقة من هذه الطرق‪ ،‬حيث سنقوم بتوكيح الفارق بينها من خالل بناء خوارزمية إليجاد‬
‫مجموع عددين وإههار الناتج‪.‬‬

‫التعبير عن الخوارزميات باستخدام اللغات الطبيعية ‪Natural Language‬‬

‫وهي الطريقة التلقائية التي نقوم باستخدامها في التعبير عن خطوات إنجاز أي أمر‪ ،‬حيث نقوم باستخدام اللغة الطبيعية‬
‫التي نستخدمها في المحادثة ( كاللغة العربية مثالً ) لتحقيق هذا األمر‪.‬‬

‫تتميز هذه الطريقة بالسهولة‪ ،‬وإمكانية استخدامها من قبل جميع الناس ولهذا فهي تستخدم على نطاق واسع في الحياة‬
‫اليومية لصياغة بعض أنواع الخوارزميات الموجهة للجمهور كتعليمات تشغيل األجهزة أو وصفات تحضير أطباق‬
‫الطعام‪ .‬إال أن من مساوا هذا األسلوب في التعبير عن الخوارزميات أنه يميل ألن يكون إنشائياً وغامضاً‪ ،‬وهو ناد اًر‬
‫مايستخدم من أجل الخوارزميات المعقدة أو التقنية‪.‬‬

‫على سبيل المثال‪ ،‬لو رغبنا بإيجاد مجموع عددين وإههار ناتج الجمع‪:‬‬
‫يمكن التعبير عن مثل هذه الخوارزمية باللغة الطبيعية كما يلي‪:‬‬
‫‪ -1‬البداية‬
‫‪ -2‬اق أر (أدخل) الرقم األول وقم بتخزينه في الحاسوب‪.‬‬
‫‪ -3‬اق أر الرقم الثاني واحفظه في الحاسوب‪.‬‬
‫‪ -4‬أكف الرقم األول إلى الرقم الثاني للحصول على المجموع وقم بتخزينه في الحاسوب‪.‬‬
‫‪ -5‬إعرض (أخرج) قيمة المجموع‪.‬‬
‫‪ -6‬النهاية‬

‫التعبير عن الخوارزميات باستخدام شبه الشيفرة ‪Pseudo code‬‬

‫تقوم هذه الطريقة على استخدام عبارات خاصة في التعبير عن خطوات الخوارزمية قريبة جداً من العبارات المستخدمة‬
‫في لغات البرمجة إال أنها مستقلة عن أي لغة برمجة‪ .‬واستخدام صياغات رياكية شبه برمجية للعمليات وبنى تخزين‬
‫القيم‪.‬‬

‫‪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‬‬
‫يعبر المخطط التالي عن خوارزمية إيجاد مجموع عددين‪:‬‬

‫‪ -6‬التحكم بمسار التنفيذ‬

‫يمكن تصنيف الخوارزميات من حيث التحكم بمسار التنفيذ إلى نوعين‪:‬‬


‫‪ -1‬خوارزميات تسلسلية (تتابعية)‪.‬‬
‫‪ -2‬خوارزميات غير تسلسلية (تفرعية)‬

‫الخوارزميات التسلسلية‬
‫تسنتخدم فني حننل المسنائل التني يكننون حلهنا مؤلفناً منن تتنال محنندد للخطنوات التنني تنؤدي إلنى النتيجننة دون الحاجنة لتغييننر‬
‫س ننياق التنفي ننذ‪ ،‬تنف ننذ ه ننذه الخط نوات خط ننوة خط ننوة حت ننى الوص ننول إل ننى النهاي ننة دون تجاه ننل أو تك نرار ألي م ننن الخط نوات‬
‫الموجودة‪ .‬يبين الشكل التالي بنية المخطط التتابعي‪:‬‬

‫‪Statement‬‬ ‫‪1‬‬

‫‪Statement‬‬ ‫‪2‬‬

‫‪Statement‬‬ ‫‪n‬‬

‫‪11‬‬
‫مثال خوارزمية تسلسلية‪:‬‬
‫احسب المصروف اليومي لطفليو بحسب عمر كل منهما‪ ،‬بمعدل‪ 75‬ليرة لكل عام من أعوام عمر الطفل‪.‬‬

‫تنويه هام‪:‬‬
‫تماما وبالتالي البد من البدء بتحليل المسألة عبر طرح‬
‫قبل البدء بكتابة أي خوارزمية‪ ،‬تأكد من أن المهمة محددة ً‬
‫مجموعة من األسئلة ومحاولة اإلجابة عنها بشكل واكح ودقيق‪.‬‬
‫أسئلة يجب طرحها‪:‬‬
‫ما هي البيانات المعروفة قبل تشغيل البرنامج؟‬ ‫•‬
‫ما هي البيانات التي يجب إدخالها من قبل المستخدم؟‬ ‫•‬
‫ما هي الحسابات التي سيتم إجراؤها على البيانات؟‬ ‫•‬
‫ما هي البيانات التي سيتم إخراجها (المعروكة) للمستخدم؟‬ ‫•‬

‫تحليل المسألة‪:‬‬
‫المعدل ‪ 75‬ليرة لكل سنة‪.‬‬ ‫•‬ ‫القيم المعروفة‬
‫أعمار األطفال‪.‬‬ ‫•‬ ‫المدخالت‬
‫المصروف = العمر ‪ x‬المعدل‬ ‫•‬ ‫الحسابات‬
‫المصروف لكل طفل‪.‬‬ ‫•‬ ‫المخرجات‬

‫التعبير عن الحل باستخدام شبه الشيفرة‬


‫‪1-‬‬ ‫‪START‬‬
‫‪2-‬‬ ‫”‪WRITE “Age of Child1‬‬
‫‪3-‬‬ ‫‪READ Age_of_Child1‬‬
‫‪4-‬‬ ‫”‪WRITE “Age of Child2‬‬
‫‪5-‬‬ ‫‪READ Age_of_Child2‬‬
‫‪6-‬‬ ‫‪CALCULATE Expenses_for_Child1 = Age_of_Child1 x Rate‬‬
‫‪7- CALCULATE Expenses_for_Child2 = Age_of_Child2 x Rate‬‬
‫‪8- WRITE Expenses_for_Child1‬‬
‫‪9- WRITE Expenses_for_Child2‬‬
‫‪10- STOP‬‬

‫مالحظة‪ :‬إن إخراج الرسائل التوضيحية ورسائل التخاطب ليس إلزامياً ولكنه ممارسة جيدة وخاصة أثناء االنتقال من‬
‫الخوارزمية المصممة إلى كتابة البرنامج‪.‬‬

‫‪12‬‬
‫التعبير عن الحل باستخدام المخططات التدفقية‬

‫الخوارزميات غير التسلسلية‬

‫ان األمر ليي دائماً على النحو الوارد في الحالة التسلسلية‪ ،‬فقد يتطلب تنفيذ برنامج أن ال يتم تنفيذ جميع األوامر وإنما‬
‫اختيار تنيفذ أوامر وتجاهل تنفيذ أوامر أخرى بحسب ناتج اختبار شروط ما‪ ،‬كما يوكح المخطط التدفقي التالي‪:‬‬

‫‪T‬‬ ‫‪F‬‬
‫‪boolean expression‬‬

‫‪Statement‬‬ ‫‪1‬‬ ‫‪Statement‬‬ ‫‪2‬‬

‫‪13‬‬
‫وبالمثل‪ ،‬قد يتطلب تنفيذ برنامج أن ال يكتفى بتنفيذ األمر لمرة واحدة وإنما تكرار تنيفذه لعدد من المرات بحسب ناتج‬
‫اختبار شروط ما‪ ،‬كما يوكح المخطط التدفقي التالي‪:‬‬

‫‪F‬‬
‫‪boolean expression‬‬

‫‪T‬‬

‫‪Statement‬‬

‫تدعى المخططات التي تتضمن اختيا اًر بين تنفيذ أمرين مختلفين بمخططات القرار‪ ،‬أما المخططنات التني تتضنمن تكن ار اًر‬
‫لتنفيذ مجموعة من الخطوات ألكثر من مرة باسم المخططات الحلقية‪.‬‬

‫مثال خوارزمية غير تسلسلية (حالة االختيار أو القرار)‪:‬‬


‫احسب المصروف اليومي للطفل بحسب عمر الطفل‪ ،‬بمعدل‪ 75‬ليرة لكل عام من أعوام عمر الطفل إذا كان عمره‬
‫أقل من ‪ 10‬سنوات و ‪ 100‬ليرة إذا كان عمره أكبر أو يساوي ‪ 10‬سنوات‪.‬‬

‫التعبير عن الحل باستخدام شبه الشيفرة‪:‬‬

‫‪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‬‬
‫التعبير عن الحل باستخدام المخططات التدفقية‬

‫مثال خوارزمية غير تسلسلية (حالة التكرار)‪:‬‬

‫التعبير عن الحل باستخدام شبه الشيفرة‪:‬‬


‫الطفل‪.‬‬‫احسب المصروف اليومي اليومي لثالثة أطفال بحسب عمر الطفل‪ ،‬بمعدل‪ 100‬ليرة لكل عام من أعوام عمر‬
‫‪1.‬‬ ‫‪START‬‬
‫‪2.‬‬ ‫‪SET KidsPaid = 0‬‬
‫‪3.‬‬ ‫‪SET Total = 0‬‬
‫‪4.‬‬ ‫‪WHILE KidsPaid < 3‬‬
‫”‪4-1 WRITE “ENTER AGE‬‬
‫‪4-2 READ Age‬‬
‫‪4-3 CALCULATE Expense = Age x Rate‬‬
‫‪4-4 ADD Expense to Total‬‬
‫‪4-5 SET KidsPaid = KidsPaid + 1‬‬
‫‪5. WRITE Total‬‬
‫‪6. STOP‬‬

‫‪15‬‬
‫التعبير عن الحل باستخدام المخططات التدفقية‪:‬‬

‫‪16‬‬
‫‪ -7‬تمارين وأنشطة‬

‫مالحظة‪ :‬يطلب التعبير عن حلول جميع هذه التمارين باستخدام شبه الشيفرة والمخططات التدفقية بعد‬
‫إجراء تحليل المسألة المطروحة وتحديد القيم المعروفة والمدخالت والحسابات والمخرجات‪.‬‬

‫التمرين األول‪:‬‬

‫صمم خوارزمية لحساب مجموع األعداد المحصورة بين ‪ 1‬و ‪.50‬‬

‫التمرين الثاني‬

‫صمم خوارزمية إليحاد العدد األكبر بين ثالثة أعداد ‪ A,B,C‬يدخلها المستخدم‪.‬‬

‫التمرين الثالث‬

‫صمم خوارزمية إليحاد عاملي عدد صحيح موجب !‪ N‬حيث أن‪:‬‬


‫‪N! = 1 * 2 * 3 * ……. * (N-1) * N‬‬

‫التمرين الرابع‬

‫صمم خوارزمية إليجاد العدد األكبر بين مجموعة من األعداد‪.‬‬

‫التمرين الخامس‬

‫صمم خوارزمية حساب المتوسط الحسابي‪:‬‬


‫‪n‬‬
‫‪ xi‬‬
‫‪i =1‬‬
‫= ‪Average‬‬
‫‪n‬‬

‫حيث تعبر ‪ xi‬عن معدالت طالب صف من صفوف الجامعة االفتراكية‪ .‬مع العلم أن عدد طالب الصف الواحد‬
‫المستخدم يقوم بإدخال‬
‫(المشار إليه بالمتحول ‪ُ )n‬يعطى من الدخل‪ ،‬وأن المعدالت محسوبة من ‪ 100‬عالمة وأن ُ‬
‫ُ‬
‫المعدالت عند تنفيذ البرنامج‪.‬‬

‫‪17‬‬
‫التمرين السادس‬
‫صمم خوارزمية حساب اإلنحراف المعياري‪:‬‬
‫‪n‬‬
‫)‪ (x i − Average‬‬
‫‪i =1‬‬
‫= ‪S tan dardDeviation‬‬
‫‪n‬‬

‫حينث تعبنر ‪ xi‬عنن معندالت طنالب صنف مننن صنفوف الجامعنة االفت اركنية‪ ،‬ويعبنر ‪ Average‬عنن المتوسنط الحسننابي‬
‫(المشار إليه بنالمتحول ‪ُ )n‬يعطنى منن الندخل وأن المعندالت محسنوبة‬
‫للمعدالت‪ .‬مع العلم أن عدد طالب الصف الواحد ُ‬
‫المستخدم يقوم بإدخال المعدالت عند تنفيذ البرنامج‪.‬‬
‫من ‪ 100‬عالمة وأن ُ‬

‫‪18‬‬

You might also like