حلقاتُ التكرارِ المُتداخِلةُ ( Nested Loops)
تعلَّمْتُ سابقًا أنَّ الحلقةَ ( Loop )هيَ تكرارُ جزءٍ منَ الأوامرِ البرمجيةِ لعددٍ مُحدَّدٍ أوْ غيرِ مُحدَّدٍ منَ المَرّاتِ لتحقيقِ شرطٍ ما. كذلكَ تعلَّمْتُ أنَّ لَبِناتِ الحلقاتِ تُصنَّفُ إلى أنواعٍ مختلفةٍ كما في الشكلِ(3- 1)
اللَّبِناتِ الآتيةِ أنسبُ لتنفيذِ التحسينِ المُقترَحِ:
تستخدم هذه عندما يهتف الجمهورُ "فريقُنا هوَ الأفضلُ"
تستخدم عند وقوف او جلوس الجمهور
تستخدم عندما يلوح بعلم الفريق 3 مرات
إذا افترضْنا أنَّ اللاعبَ في لعبةِ كرةِ القدمِ سيلعبُ في مباراةٍ تتألَّفُ منْ شوطينِ، وأنَّهُ سيُمنَحُ
5 محاولاتٍ لتسديدِ هدفٍ في كلِّ شوطٍ، فهلْ نستطيعُ استعمالَ حلقةِ تكرارٍ واحدةٍ لتحقيقِ
ذلكَ؟ نعم
هلْ سيفي استخدامُ حلقتينِ متتاليتينِ بالغرضِ؟ نعم ايضا
يُمكن استخدام حلقة تكرار واحدة أو حلقتين متتاليتين لتحقيق المطلوب في كرة القدم لكن لكل طريقة لها مزايا وعيوب
هلْ نستطيعُ إجراءَ التعديلِ المطلوبِ بما لديْنا منْ معارفَ ومهاراتٍ سابقةٍ تتعلَّقُ بهذهِ البرمجيةِ؟
يعتمد إمكانية إجراء التعديل المطلوب في برمجية سكراتش على طبيعة التعديل ومدى تعقيده، بالإضافة إلى مهاراتك ومعارفك في استخدام سكراتش ولبناتها البرمجية. مع وجود الرغبة في التعلم والتجربة، يُمكن لمعظم المستخدمين إجراء تعديلات مُتنوعة في برامجه
الحلقاتُ المُتداخِلةُ Nested Loops
يُقصَدُ بالحلقاتِ المُتداخِلةِ وضعُ حلقةٍ تكراريةٍ داخلَ حلقةٍ تكراريةٍ أُخرى؛ بُغْيَةَ تنفيذِ مجموعةٍ منَ الأوامرِ بصورةٍ مُتكرِّرةٍ. وقدْ يكونُ ذلكَ مفيدًا وناجعًا في حالاتٍ عديدةٍ،
مثلَ: رسمِ الأشكالِ المُركَّبةِ، والتعاملِ معَ المصفوفاتِ أوِ الجداولِ، وتنفيذِ عملياتٍ مُتعدِّدةِ الأبعادِ. وكما هوَ مُبيَّنٌ في الشكلِ( 3- 2)
الذي يُعَدُّ مثالًًا على الحلقاتِ المُتداخِلةِ، فإنَّ الحلقةَ الخارجيةَ تكرَّرَتْ 3 مَرّاتٍ، في حينِ تكرَّرَتِ الحلقةُ الداخليةُ مَرَّتينِ.
كمْ مَرَّةً تكرَّرَتِ الحلقةُ الخارجيةُ؟ 10 مرات
كمْ مَرَّةً تكرَّرَتِ الحلقةُ الداخليةُ؟ 2 مرة
مبدأُ عملِ الحلقاتِ المُتداخِلةِ
يوجدُ العديدُ منَ البرامجِ التي تحوي حلقاتٍ مُتداخِلةً، وتترتَّبُ فيها المهامُّ التي تؤدّيها كلٌّ منْ هذهِ الحلقاتِ؛ فما إنْ يبدأُ تشغيلُ أحدِ هذهِ البرامجِ، حتّى تعملَ الحلقةُ الخارجيةُ أوَّلًًا، ثمَّ تعملَ الحلقةُ الداخليةُ مَرّاتٍ عديدةً حتّى نهاية عدد مرات التكرار أوْ تحقيقِ شرطٍ مُحدَّدٍ، ثمَّ تُعاوِدَ الحلقةُ الخارجيةُ العملَ مَرَّةً أُخرى. وهكذا تستمرُّ هذهِ العمليةُ حتّى انتهاءِ الحلقةِ الخارجيةِ.
مثالٌ:
يُبيِّنُ الشكل ( 3- 4-أ)برنامجًا تعملُ فيهِ أوَّلًًا الحلقةُ الخارجيةُ (الرئيسةُ) الظاهرةُ باللونِ الأخضرِ، في حينِ يُبيِّنُ الشكلُ الشكل ( 3- 4-ب)الحلقةَ الفرعيةَ الداخليةَ التي تعملُ تاليًا، وتظهرُ أيضًا باللونِ الأخضرِ.
أُلاحِظُ أنَّ تنفيذَ اللَّبِناتِ سيتمُّ تِباعًا داخلَ الحلقةِ الداخليةِ حتّى الانتهاءِ منْ تحقيقِ شرطٍ كاملٍ، وأنَّهُ يجبُ تكرارُ الخطواتِ جميعِها حتّى استكمالِ شرطِ الحلقةِ الخارجيةِ (الرئيسةُ )كما في الشكلِ (5-3)
ما الذي سيحدثُ بعدَ الانتهاءِ منْ تنفيذِ اللَّبِناتِ في الحلقاتِ المُتداخِلةِ ( الداخليةُ والخارجيةُ):
سيستمر الكائن في التحرك بطريقة عشوائية في حال عدم ملامسة الفأرة للكائن
وسيتوقف الكائن في حال ملامسة مؤشر الفأرة 5 مرات في اخر مكان انتقل اليه عشوائيا
أنواعُ الحلقاتِ المُتداخِلةِ
يُمكِنُ استخدامُ أنواعٍ مختلفةٍ منَ الحلقاتِ المُتداخِلةِ في برمجيةِ سكراتش ( Scratch) تحقيقًا لوظائفَ مُتعدِّدةٍ، أنظرُ الشكلَ ( 3- 7 )
-1 - كمْ مَرَّةً ستتكرَّرُ الحلقةُ الداخليةُ في السيناريو السابقِ؟ 20 مرة
-2- أيُّ أنواعِ الحلقاتِ المُتداخِلةِ يُمكِنُ استخدامُهُ في تطويرِ هذا البرنامجِ؟
كرر / كرر حتى
ويفضل تجنب كرر باستمرار حتى نتجنب الحلقة المستمرة اللانهائية
-1- كمْ مَرَّةً ستتكرَّرُ الحلقةُ الداخليةُ في السيناريو السابقِ؟ حسب عدد الاشكال التي ترغب برسمها
-2- أيُّ أنواعِ الحلقاتِ المُتداخِلةِ يُمكِنُ استخدامُهُ في تطويرِ هذا البرنامجِ؟
الحلقاتِ المُتداخِلةِ يُمكِنُ استخدامُهُ في تطويرِ هذا البرنامجِ هي كرر ..... / كرر حتى
ويفضل تجنب كرر باستمرار حتى نتجنب الحلقة المستمرة اللانهائية
تداخلُ الحلقاتِ والشروطُ
تتطلَّبُ بعضُ الحالاتِ أحيانًا تداخلَ جملةٍ شرطيةٍ في حلقةٍ تكراريةٍ، وفحصِ الشرطِ في كلِّ تكرارٍ، انظرُ الشكلَ ( 3- 8) الذي يعرضُ مثالًًا على هذا النوعِ منَ التداخلِ باستخدامِ اللَّبِناتِ في برمجيةِ سكراتش Scratch إذْ يُدفَعُ فيهِ الكائنُ إلى التحرُّكِ ( 10 ) خطواتٍ في كلِّ مَرَّةٍ، والتحقُّقِ إذا كانَ قدْ لامسَ الحافةَ لتنفيذِ الجملِ التابعةِ للشرطِ، وإلّّا استمرَّتِ الحلقةُ في التكرارِ.
الشكلُ (3- 8) مثالٌ على تداخلِ الحلقاتِ والشروطِ.
يتعيَّنُ عليَّ مراعاةُ ما يأتي بعدَ دراسةِ موضوعِ حلقاتُ التكرارِ المُتداخِلةُ :
- التعاونُ والتعلُّمُ: أستعملُ خصيصةَ Remix في برمجيةِ سكراتش Scratch لتنفيذِ مشروعاتٍ جماعيةٍ، وأحرصُ على احترامِ حقوقِ المُلْكيةِ الفكريةِ بِعَزْوِ المقاطعِ إلى أصحابِها، وتوثيقِ ذلكَ في صفحةِ المشروعِ الرئيسةِ.
- مشاركةُ الأفكارِ: أُشارِكُ مجتمعَ سكراتش ) Scratch ( في مشروعاتي للحصولِ على ملاحظاتٍ وتغذيةٍ راجعةٍ، وأُحفِّزُ الآخرينَ على تجربةِ أفكارٍ جديدةٍ وتحسينِ مشروعاتِهِمْ.
- العملُ البرمجيُّ الثنائيُّ Pair Programming أُقدِّرُ الزميلَ الذي أعملُ معَهُ، وأحترمُ الدورَ الذي يؤدّيهِ، وأُقدِّمُ لهُ الدعمَ والمؤازرةَ لتحقيقِ أفضلِ النتائجِ، وأحرصُ على تبادلِ الأدوارِ في ما بينَنا؛ لصقلِ مهاراتِنا، وتحسينِ أداءِ كلٍّ منّا.