You are on page 1of 16

‫محاضرة عن الخوارزميات وكيفية كتابتها‬

‫مقدمة‪:‬‬

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

‫خطوات حل مسألة باستخدام الحاسب‪:‬‬

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

‫• طبيعة المخرجات(النتائج) و تنظيم كتابتها‪.‬‬


‫• المدخالت (البيانات أو المعلومات) و تحديد نوعها و تنظيم إدخالها إلى الحاسب االلكتروني‪.‬‬
‫• طرق الحل المناسبة و تقييمها بما يتالءم مع كيفية تنفيذها بالحاسب االلكتروني و في ضوء ذلك يتم‬
‫اختيار الحل األفضل‪.‬‬

‫• برمجة الحل خطياً‪:‬‬


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

‫‪1‬‬
‫•برمجة الحل باستخدام إحدى لغات البرمجة‪:‬‬
‫إن مخطط سير العمليات هو عبارة عن تخطيط تصوري مساعد سهل المالحظة بالنسبة للمبرمج و‬
‫لكنه غير مفهوم عند الحاسب االلكتروني‪ ،‬لذلك فإن طريقة الحل الممثلة بمخطط سير العمليات يجب‬
‫أن تكتب بإحدى لغات الحاسب التي يفهمها و التي تتالءم مع حل المسألة‪.‬‬
‫و يلي ذلك كتابة البرنامج على الوسط الخارجي المناسب و إدخال البرنامج إلى الحاسب و البرنامج‬
‫الناتج من هذه الخطوة و المكتوبة بإحدى اللغات الرمزية أو الراقية يسمى بالبرنامج المصدري ‪source‬‬
‫‪.program‬‬

‫• ترجمة البرنامج المصدري‪:‬‬


‫بعد االنتهاء من كتابة البرنامج المصدري يتعين إدخاله إلى الحاسب للتأكد من صحة كتابته من جهة‪،‬‬
‫ثم لترجمته إلى لغة اآللة بواسطة برنامج الترجمة الخاص في حالة عدم وجود أخطاء في البرنامج‬
‫المصدري‪ .‬و تمر عملية الترجمة في المراحل اآلتية‪:‬‬

‫‪ .1‬مرحلة التحليل المعجمي ‪:Lexical analysis‬‬


‫في هذه المرحلة يتم مطابقة مفردات برنامج المصدر والعالقات و األسماء مع تلك المسموح بها في‬
‫اللغة و اكتشاف أي أخطاء فيها‪.‬‬
‫‪ .2‬مرحلة التحليل اللغوي والنحوي ‪:Syntax analysis‬‬
‫في هذه المرحلة تجري عملية مطابقة تعليمات البرنامج المصدري مع القواعد اللغوية المستخدمة‪ ،‬و‬
‫اكتشاف أي أخطاء فيها‪ ،‬باإلضافة إلى عملية تحويل البرنامج المصدري إلى تعليمات و أوامر رمزية بلغة‬
‫التجميع‪.‬‬
‫‪.3‬مرحلة ترجمة البرنامج إلى لغة اآللة‪:‬‬
‫في هذه المرحلة نحصل على البرنامج الهدفي ‪ object program‬و الذي بموجبه يمكن البدء في‬
‫عملية التنفيذ‪.‬‬

‫• تجربة البرنامج و تنفيذه‪:‬‬


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

‫مفهوم خرائط سير العمليات ‪:‬‬

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

‫‪2‬‬
‫و عند رسم خريطة سير العمليات لمسألة معينة فإننا نستخدم مجموعة من األشكال الرمزية‬
‫االصطالحية المبينة في الجدول التالي‪:‬‬

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

‫هذا و يمكن تصنيف خرائط سير العمليات بما يلي‪:‬‬


‫•خرائط التتابع البسيط )‪.(Simple sequential Flowchart‬‬
‫•خرائط التفرع )‪.(Branched Flowchart‬‬
‫•خرائط الدوران البسيط )‪.(Loop Flowchart‬‬
‫•خرائط الدورانات المتداخلة )‪.(Nested‬‬

‫و يمكن للبرنامج الواحد أن يشتمل على أكثر من نوع واحد من هذه األنواع‪ .‬و سنتناول فيما يأتي‬
‫شرح هذه األنواع بشيء من التفصيل‪.‬‬

‫‪3‬‬
‫خرائط التتابع البسيط‪:‬‬

‫يخلو هذا النوع من التفرعات ‪ Branches‬و الدورانات ‪ ،loops‬و يكون الشكل العام لهذا النوع كما هو‬
‫مبين في الشكل ‪:1-‬‬

‫الشكل ‪1-‬خرائط التتابع البسيط‬

‫و كلمة ‪ Event‬الواردة في شكل ‪ 1-‬تعني الحدث أو العملية المطلوب تنفيذها‪.‬‬


‫مثال ‪ :‬أرسم خريطة سير العمليات إليجاد مساحة و محيط دائرة نصف قطرها معلوم ‪.R‬‬

‫وقيمتها العددية ثابتة و تساوي ‪ 3114‬بينما ‪ R‬متغير‪.‬‬


‫وتكون خطوات الحل المبينة في الشكل ‪ 2-‬كما يلي‪:‬‬

‫‪4‬‬
‫‪.1‬ابدأ‪.‬‬

‫‪.2‬اقرأ قيمة‪. R‬‬

‫‪ .3‬ضع قيمة ‪3.14=PIE‬‬

‫‪ .4‬احسب المساحة)‪ (A‬من‬


‫المعادلة ‪.A =(PIE)*R*R‬‬

‫‪ .5‬احسب المحيط )‪ (C‬من‬


‫المعادلة ‪.C =2*(PIE)*R‬‬

‫‪ .6‬اطبع قيم كل من ‪.C, A, R‬‬

‫‪ .7‬توقف‪.‬‬

‫الشكل ‪2-‬‬

‫مثال‪:‬ارسم خريطة سير العمليات لحساب قيمة كل من المتغيرات ‪ C, B, A‬في المعادلة اآلتية‪:‬‬

‫إذا علمت أن قيم كل من ‪ Y, X‬معطاة (معلومة)‪ ،‬ثم اطبع قيم كل من ‪.C, B, A, Y, X‬‬
‫الحل‪ :‬من الواضح أنه يمكننا من حساب قيمة المتغير ‪ A‬في المعادلة(‪ )1‬لمعرفتنا بقيم المعطيات‬
‫األولية ‪ ،Y, X‬ويمكننا من حساب قيمة المتغير ‪ B‬في المعادلة (‪ )2‬باالعتماد على قيمة ‪ X‬المعلومة‬
‫لدينا وقيمة المتغير ‪A‬المحسوبة في الخطوة السابقة‪ ،‬أما قيمة المتغير ‪ C‬في المعادلة (‪ )3‬باالعتماد‬
‫على قيم كل من المتغيرات ‪ B, A, X‬وكلها معلومة‪.‬‬
‫وتكون خطوات حل المسألة كما هو مبين في الشكل ‪ 3-‬كما يلي‪:‬‬

‫‪5‬‬
‫‪.1‬ابدأ‪.‬‬

‫‪.2‬اقرأ قيمة كل من ‪.Y, X‬‬

‫‪.3‬احسب قيمة ‪ A‬من المعادلة (‪.)1‬‬

‫‪.4‬احسب قيمة ‪ B‬من المعادلة (‪.)2‬‬

‫‪.5‬احسب قيمة ‪ C‬من المعادلة (‪.)3‬‬

‫‪.6‬اطبع قيمة كل من ‪.C, B, A, Y, X‬‬

‫‪.7‬توقف‪.‬‬

‫الشكل ‪3-‬‬

‫خرائط التفرع‪:‬‬

‫ويحدث التفرع في البرامج بسبب الحاجة التخاذ قرار أو مفاضلة بين اختيارين أو أكثر‪ ،‬وهناك أسلوبان‬
‫في تنفيذ القرار(انظر شكل ‪.)4-‬‬

‫قرار ذو تفرعين‬ ‫قرار ذو ثالثة تفرعات‬


‫الشكل ‪4-‬‬

‫وبشكل عام فإن خرائط التفرع يمكن أن تأخذ إحدى الصورتين اآلتيتين (انظر شكل ‪ 5-‬و الشكل ‪.) 6-‬‬

‫‪6‬‬
‫الشكل ‪5-‬‬ ‫الشكل ‪6-‬‬

‫يمكننا مالحظة أن شكل ‪ 5-‬يبين أنه إذا كان جواب الشرط )‪ YSE (Condition‬فإن الحدث التالي في‬
‫التنفيذ يكون الحدث )‪ (a‬أما إذا كان الجواب ‪ NO‬فإن الحدث التالي يكون الحدث)‪ (b‬كما يمكننا أن نالحظ‬
‫في الشكل ‪ 6-‬أنه إذا كان جواب الشرط‪ YSE‬فإن الحدث التالي في التنفيذ يكون الحدث )‪ (a‬ثم يتبعه‬
‫الحدث )‪ (b‬أما إذا كان جواب الشرط ‪ NO‬فإن الحدث التالي يكون الحدث )‪ (b‬مباشرة‪.‬‬

‫مثال‪:‬ارسم خريطة سير العمليات إليجاد قيمة االقتران )‪ F(x‬المعرف حسب القاعدة التالية‪:‬‬

‫‪X if X>=0‬‬
‫= )‪ F(X‬׀‪X‬׀‬
‫‪-X if X<0‬‬

‫حيث كلمة )‪ (if‬هنا تعني عندما‪.‬‬


‫خطوات الحل المبينة في الشكل ‪ 7-‬تكون‪:‬‬

‫‪7‬‬
‫‪ .1‬ابدأ‬

‫‪ .2‬اقرأ قيمة المتغير ‪. X‬‬

‫‪ .3‬إذا كانت ‪ X‬أكبر أو تساوي صف ًرا اذهب إلى‬


‫خطوة(‪ )4‬وإال فأذهب إلى الخطوة(‪.)5‬‬

‫‪.4‬احسب قيمة االقتران من ‪F(X)=X‬ثم اذهب إلى‬


‫الخطوة(‪.)6‬‬

‫‪.5‬احسب قيمة االقتران من ‪.F(x)= -X‬‬

‫‪ .6‬اطبع قيمة كل من ‪.F(x)، X‬‬

‫‪ .7‬توقف‪.‬‬

‫الشكل ‪7-‬‬

‫مثال‪ :‬ارسم خريطة سير العمليات لحساب قيمة ‪ W‬طب ًقا للمعادالت اآلتية عل ً‬
‫ما بأن قيمة‬
‫المتغير ‪ X‬معطاة معلومة‪:‬‬

‫=‪W‬‬

‫خطوات الحل كما هي مبينة في الشكل ‪: 8-‬‬

‫‪8‬‬
‫‪ .1‬ابدأ‪.‬‬

‫‪ .2‬اقرأ قيمة المتغير ‪.X‬‬

‫‪ .3‬إذا كانت ‪ X‬أكبر من صفر فاذهب إلى‬


‫الخطوة ‪ 4‬أما إذا كانت ليست أكبر من‬
‫فاذهب إلى خطوة ‪.5‬‬

‫‪ .4‬احسب ‪ W‬من المعادلة (‪ )1‬ثم اذهب‬


‫إلى الخطوة ‪.8‬‬

‫‪ .5‬إذا كانت ‪ X‬تساوي صفر فاذهب إلى‬


‫الخطوة ‪ 6‬وإال فاذهب إلى الخطوة ‪.7‬‬

‫‪ .6‬احسب ‪ W‬من المعادلة (‪ )2‬ثم اذهب‬


‫إلى الخطوة ‪.8‬‬

‫‪ .7‬احسب ‪ W‬من المعادلة (‪ )3‬ثم اذهب‬


‫إلى الخطوة ‪.9‬‬

‫‪ .8‬اطبع قيمة ‪.W‬‬

‫‪ .9‬توقف‪.‬‬

‫الشكل ‪8-‬‬

‫‪-‬خرائط الدوران (التكرار) البسيط‪:‬‬

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

‫‪9‬‬
‫الحدث )‪ (a‬يتكرر تنفيذه في كل دوره‬ ‫الحدث )‪ (a‬يتكرر تنفيذه في كل دورة‬
‫حتى يصبح جواب الشرط ‪.YES‬‬ ‫طالما كان جواب الشرط ‪.YES‬‬
‫الشكل ‪9-‬‬

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

‫ابدأ‪.‬‬ ‫‪.1‬‬
‫اقرأ نصف قطر الدائرة )‪.(R‬‬ ‫‪.2‬‬
‫أوجد مساحة الدائرة )‪.(A‬‬ ‫‪.3‬‬
‫اطبع قيم كل من ‪.A, R‬‬ ‫‪.4‬‬
‫هل هناك مزيد من الدوائر؟‬ ‫‪.5‬‬
‫فإن كان نعم فعد إلى الخطوة(‪ )2‬وإن كان ال فعد‬
‫إلى الخطوة (‪.)6‬‬
‫توقف‪.‬‬ ‫‪.6‬‬

‫الشكل ‪11-12‬‬

‫‪ 7‬العداد‪Counter:‬‬

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

‫‪11‬‬
‫‪.1‬اجعل العداد مساويًا للصفر‪.‬‬
‫‪. 2‬اجعل القيمة الجديدة للعداد تساوي القيمة القديمة لها زائد واحد‪ ،‬أي أن‪:‬‬
‫قيمة العداد (الجديدة)= قيمة العداد (القديمة)‪1+‬‬
‫‪.3‬كرر الخطوات ابتداء من الخطوة ‪.2‬‬

‫مثال‪ :‬ارسم خريطة سير العمليات التي يتبعها الحاسب لطباعة األعداد الطبيعية من ‪ 1‬إلى ‪111‬‬
‫ومربعاتها‪.‬‬
‫الحل‪ :‬خطوات الحل مبينة في الشكل ‪11‬هي‪:‬‬

‫ابدأ‪.‬‬ ‫‪.1‬‬
‫اجعل ‪.I=0‬‬ ‫‪.2‬‬
‫اجعل ‪.I=I+1‬‬ ‫‪.3‬‬
‫‪.‬‬ ‫اجعل‬ ‫‪.4‬‬
‫اطبع ‪.J, I‬‬ ‫‪.5‬‬
‫إذا كانت ‪ I=100‬اذهب إلى الخطوة ‪ 7‬وإال‬ ‫‪.6‬‬
‫اذهب إلى الخطوة ‪.3‬‬
‫توقف‪.‬‬ ‫‪.7‬‬

‫الشكل‪11-‬‬

‫‪ 8‬المجاميع اإلجمالية‪:‬‬

‫في كثير من األحيان نحتاج في برامج الحاسب اإللكتروني إلى جمع مجموعة كبيرة من األعداد التي‬
‫تمثل معطيات ظاهرة معينة‪ ،‬فمثال ً قد نرغب في إيجاد الوسط الحسابي ألعمار طالب الجامعة‪،‬‬
‫ولتحقيق هذا أوال ً يجب أن نحسب مجموع أعمار الطالب‪ ،‬وطبعًا ليس عمليًا إعطاء رمز أبجدي لكل عمر‬
‫طالب فقد تحتاج ألكثر من عشرة اآلالف رمز‪ ،‬في مثل هذه الحاالت نصمم خوارزمية معينة للتجميع‬
‫تسمى خوارزمية التجميع ‪ summers Algorithm‬تتضمن خطوات محددة إذا اتبعها الحاسب استطاع أن‬
‫يجمع أي كمية من البيانات باستخدام متغيرين اثنين إحداهما هو المتغير الذي نجمعه واآلخر هو‬
‫الجمع اإلجمالي (المجمع)‪ ،‬ويمكن تحديد الخطوات التي يجب أن يتبعها الحاسب لتحقيق ذلك في‬
‫أربع خطوات هي‪:‬‬
‫‪ .1‬اجعل المجمع مساويًا الصفر‪.‬‬
‫‪ .2‬ادخل قيمة واحدة للمتغير‪.‬‬
‫‪ . 3‬اجعل القيمة الجديدة للمجمع تساوي القيمة القديمة له زائد القيمة المدخلة للمتغير‪ ،‬أي أن‪:‬‬
‫قيمة المجمع الجديدة=قيمة المجمع القديمة ‪ +‬آخر قيمة مدخلة للمتغير‪.‬‬

‫‪11‬‬
‫‪ .4‬كرر ابتدا ًءا من الخطوة الثانية‪.‬‬

‫مثال ‪:‬ارسم خريطة سير العمليات إليجاد الوسط الحسابي ألعمار طالب شعبتك‪.‬‬
‫الحل‪ :‬نفترض أن إجمالي عدد الطالب =‪ N‬ونستخدم عد ًدا لرقم كل طالب ونرمز له بالرمز ‪ I‬ونرمز لعمر‬
‫الطالب ب‪ X‬ونستخدم مجمعًا ألعمار الطلبة ونرمز له بالرمز‪ S‬ونستخدم الرمز ‪ A‬ليدل على معدل أعمار‬
‫الطلبة‪.‬‬
‫وتكون خطوات الحل كما هو مبين في الشكل ‪12-‬هي‪:‬‬

‫ابدأ‪.‬‬ ‫‪.1‬‬
‫ادخل إجمالي عدد الطالب )‪.(N‬‬ ‫‪.2‬‬
‫اجعل ‪.I=0‬‬ ‫‪.3‬‬
‫اجعل ‪.S=0‬‬ ‫‪.4‬‬
‫اجعل ‪.I=I+1‬‬ ‫‪.5‬‬
‫ادخل ‪.X‬‬ ‫‪.6‬‬
‫اجعل ‪.S=S+X‬‬ ‫‪.7‬‬
‫إذا كانت ‪ I=N‬اذهب إلى الخطوة ‪ 9‬وإال‬ ‫‪.8‬‬
‫اذهب إلى الخطوة ‪.5‬‬
‫اجعل ‪.A=S/N‬‬ ‫‪.9‬‬
‫‪ .11‬توقف‪.‬‬

‫الشكل ‪12-12‬‬

‫‪ 9‬خرائط الدورانات المتدخلة‪:‬‬

‫في هذه الحالة تكون الدورانات داخل بعضها البعض بحيث ال تتقاطع فإذا كان لدينا مثال ً دورانان من هذا‬
‫النوع (انظر شكل ‪ 13‬فيسمى الدوران قم (‪ )1‬دورانًا داخليًا )‪ (Inner Loop‬بينما الدوران رقم (‪ )2‬دورانًا‬
‫خارجيًا ‪ (Outer Loop‬ويتم التناسق في عملي مثل هذين الدورانين بحيث‪:‬‬

‫‪12‬‬
‫تكون أولوية التنفيذ للدوران الداخلي‪.‬‬

‫الشكل ‪13‬‬

‫مثال‪ :‬يرغب نجار في تقطيع مجموعة من القطع الخشبية طول كل منها يزيد عن‪ 3‬متر إلى قطع‬
‫صغيرة طول الواحدة منها يساوي ‪ 3‬متر‪.‬‬
‫ارسم خريطة سير العمليات‪.‬‬
‫خطوات الحل المبينة في شكل ‪14-‬هي‪:‬‬

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

‫ملحوظة‪ :‬يالحظ من الشكل ‪ 14-‬أن الدوران الداخلي يتضمن تقطيع‬


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

‫الشكل ‪14-‬‬

‫‪ 11‬صيغة الدوران باستعمال الشكل االصطالحي‪:‬‬

‫لقد عرفنا في الفقرتين السابقتين مفهوم الدوران البسيط والدورانات الضمنية ويمكننا اآلن استخدم‬
‫الشكل االصطالحي للدوران والوارد على النحو التالي‪:‬‬

‫‪13‬‬
‫الشكل ‪15-‬‬

‫نالحظ في الشكل ‪ 15-‬أننا نحتاج إلى العناصر اآلتية‪:‬‬


‫•القيمة األولية للعداد ‪( I‬هنا ‪.(I=1‬‬
‫•القيمة النهائية للعداد ‪( I‬هنا ‪.)I=1‬‬
‫• القيمة النهائية للعداد ‪( I‬هنا ‪.)n‬‬
‫‪.‬‬ ‫• قيمة الزيادة عند نهاية كل دورة‬
‫نالحظ في الشكل ‪ 15‬إن إجراءات الدوران كانت تتم طبقاً للخطوات اآلتية والمفصلة من قبل المبرمج‪:‬‬
‫‪ .1‬أعط ‪ I‬قيمة أولية‪.‬‬
‫‪ .2‬أتم اإلجراءات المطلوب إعادتها‪.‬‬
‫‪( .3‬تقرير) إذا كانت قيمة العداد ‪ 1‬وصلت إلى القيمة النهائية ‪ n‬اخرج إلى الخطوة التالية في البرنامج‬
‫وإال فاذهب إلى الخطوة (‪.)4‬‬
‫‪.‬‬ ‫‪ .4‬زد ‪ I‬بمقدار الزيادة‬
‫‪ .5‬عد إلى الخطوة (‪.)2‬‬

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

‫ما إذا لم تعط قيمة أخرى بخالف ذلك‪ ،‬وفي حالة عدم ذكر‬
‫تساوي ‪ 1‬دائ ً‬ ‫ملحوظة‪ :‬تعتبر قيمة‬
‫تساوي‬ ‫يصبح الشكل االصطالحي الوارد في الشكل ‪ 15-‬كما يلي حيث تكون قيمة‬ ‫قيمة‬
‫‪1‬وبصورة أوتوماتيكية‪.‬‬

‫الشكل ‪16-‬‬

‫مثال‪ :‬أعد حل مثال الموضح في الشكل ‪ 11-‬إليجاد مساحة ‪ n‬من الدوائر باستخدام الشكل‬
‫االصطالحي للدوران‪.‬‬
‫خطوات الحل كما هي مبينة في الشكل ‪.17-‬‬

‫‪14‬‬
‫الشكل ‪12‬‬

‫ارسم خريطة سير العمليات إليجاد!‪.N‬‬


‫الحل‪.N!=N (N-1) (N-2) …3*2*1 :‬‬
‫فخطوات الحل كما يلي هي مبينة في الشكل ‪: 18‬‬

‫الشكل ‪18‬‬

‫‪15‬‬
16

You might also like