تجاوز إلى المحتوى الرئيسي
تابعنا على تيليجرامانضم

الحلقات

الخوارزميات والبرمجة · المهارات الرقمية

آخر تحديث:

محتويات الموضوع (٢٠)

شرح الموضوع

تعرَّف كيف تُكتب جمل التحكم في برمجة بايثون ⁦(Python)⁩ باستخدام المُعاملات المنطقية، واختيار الهياكل البرمجية مناسبة لحلِّ مشكلات مُعيَّنة بكفاءة وتفسير سبب استخدامها، وكتابة مقاطع برمجية بسيطة وواضحة بحيث يسهل على الآخرين فهمها وصيانتها.

الحلقات ⁦(Loops)⁩

نتاجات التعلُّم :

  • أكتب جمل التحكم باستخدام الحلقات (مثل: ⁦For⁩، و ⁦While⁩) في برمجة بايثون ⁦(Python)⁩.
  • أستخدم أكثر الهياكل البرمجية (مثل: الحلقات، والجمل الشرطية) مناسبة لحلِّ مشكلات مُعيَّنة بكفاءة.
  • أكتب برامج متكاملة على نحوٍ يسهل على الآخرين قراءتها وفهمها.
  • أتعرف جمل التكرار وأذكر أنواعها.
  • أقارن ناتج تنفيذ جمل التحكم (⁦break⁩, ⁦continue⁩).
الشكل (4-1): مبدأ عمل الحلقات في برمجة بايثون (Python)
الشكل (4-1): مبدأ عمل الحلقات في برمجة بايثون ⁦(Python)⁩

تعرَّفتُ سابقًا في برمجة سكراتش ⁦(Scratch)⁩، واستخدمتُها في كتابة البرامج التي تتطلَّب تكرار تنفيذ مجموعة من الأوامر البرمجية عددًا من المَرَّات. هل تتشابه بنية الحلقات في لغات البرمجة جميعها؟

أُفكِّر في روتيني اليومي، وأُحدِّد الأعمال والأنشطة التي أقوم بها كل يوم بانتظام، مثل: الاستيقاظ، وتناول طعام الإفطار، والذهاب إلى المدرسة، والتعلم، وتناول طعام الغداء، واللعب، وتناول طعام العشاء، والنوم. بعد ذلك أُدوِّن هذه الأعمال والأنشطة في دفتر ملاحظاتي، ثمَّ أُناقشها مع زملائي / زميلاتي ومُعلِّمي / مُعلِّمي.

أنواع الحلقات في برمجة بايثون ⁦(Python)⁩

الروتين اليومي حلقة تتكرر

يُشبه الروتين اليومي الحلقة في البرمجة؛ إذ تشهد تكرار نفس المجموعة من الأوامر كل يوم.

  • فعند البدء بتشغيل برنامج يحتوي على حلقة، فإنَّ تنفيذ الجمل يتوقَّف عند هذه الحلقة، حيث يعمل البرنامج على تنفيذ ما في داخل الحلقة من جمل عددًا من المَرَّات.
  • وبعد أن يخرج البرنامج من تلك الحلقة، فإنَّه يأخذ بتنفيذ بقية الجمل التي تليها
  • لن ينتقل لتنفيذ الجملة التالية إلا بعد تنفيذ جميع الأوامر الموجودة في الحلقة بعدد من الدورات بناءً على نوع الحلقة

نوعان من الحلقات وجملتا تحكم

تُصنَّف الحلقات في برمجة بايثون ⁦(Python)⁩ إلى نوعين، هما:

  • تحتوي برمجة بايثون ⁦(Python)⁩ على جمل تحكُّم ⁦(Control Statements)⁩ تعمل على ضبط الآلية التي تُنفَّذ بها الحلقات.

حلقات

كرّر ما دام الشرط صحيحًا

  • تُعرَّف حلقة ⁦(while)⁩ باستخدام الكلمة المحجوزة ⁦(while)⁩، وتُكتب صيغتها العامة على النحو الآتي:

``python while condition: statements increment or decrement ``

  • condition: شرط يُحدِّد استمرار تنفيذ الجمل الموجودة في حلقة ⁦(while)⁩، ويتمُّ التحقُّق منه في كل دورة؛ إذ يتوقَّف تنفيذ الجمل حين يصبح هذا الشرط غير مُتحقِّق.
  • statements: جمل توجد في حلقة ⁦(while)⁩، ويُكرِّر البرنامج تنفيذها ما دام الشرط مُتحقِّقًا.
  • increment / decrement: إجراء يُحدِّد كيف تزداد قيمة العداد أو تنقص، وهو يُنفَّذ في كل دورة.
الشكل (4-2): مُخطَّط سَيْر العمليات لحلقات (while)
الشكل (4-2): مُخطَّط سَيْر العمليات لحلقات ⁦(while)⁩

مثال:

أُنفِّذ المثال السابق في بيئة بايثون ⁦(Python)⁩، وأُلاحظ الناتج.

أُعدِّل المقطع البرمجي بتغيير جملة ⁦(count += 1)⁩ إلى جملة ⁦(count += 2)⁩، ثمَّ أُنفِّذ البرنامج. ما الناتج المُترتِّب على تنفيذ البرنامج؟

أُعدِّل المقطع البرمجي بتغيير الشرط (⁦count⁩ < 6) إلى الشرط ⁦(count = 6)⁩، ثمَّ أُنفِّذ البرنامج. ما الناتج المُترتِّب على تنفيذ البرنامج؟

مثال:

إيقاف الحلقة وتخطي دورة

مثال:

جملة ⁦(else)⁩ مع حلقات ⁦(while)⁩

ما يحدث عند خروج الحلقة

مثال:

في المثال السابق، إذا حُذفت جملة ⁦(else)⁩، فهل سيختلف الناتج؟ ما ذا أتوقَّع أن يكون الناتج؟ أُعدِّل المقطع البرمجي بحذف جملة ⁦(else)⁩، ثمَّ أُنفِّذ البرنامج المُعدَّل باستخدام برمجة بايثون ⁦(Python)⁩، ثمَّ أُقارن الناتج الحالي بالناتج السابق، وأُلاحظ الفرق بينهما إن وجد.

هل أثَّرت جملة ⁦(else)⁩ في الناتج؟

مثال:

  • إذا حُذفت جملة ⁦(else)⁩ الواردة في المثال السابق، فإنَّ النتيجة الآتية ستظهر على شاشة جهاز الحاسوب عند تشغيل البرنامج:

أقرأ - بالتعاون مع أفراد مجموعتي - المقطعين البرمجِيين الآتيين، وأُحاول توقُّع ناتج التنفيذ، ثمَّ أُنفِّذ هذين المقطعين باستخدام برمجة بايثون ⁦(Python)⁩، ثمَّ أُقارن الناتج بما توقَّعته: ```⁦python i = 1 while i == 1⁩: ⁦print(⁩"⁦I am stuck⁩")

while True: print("I am stuck") ```

لماذا يؤدِّي هذان المقطعان البرمجِيان إلى حلقة لانهائية؟

ما الطرائق التي يُمكن استعمالها لتجنُّب الحلقات اللانهائية؟

كيف يُمكن تعديل المقطع البرمجي على نحوٍ يجعل التنفيذ ينتهي في نقطة مُحدَّدة؟

حلقات

العدّ على عناصر متتابعة

  • تُعرَّف حلقة ⁦(for)⁩ باستخدام الكلمتين المحجوزتين ⁦(for)⁩ و⁦(in)⁩ على النحو الآتي:

``python for element in sequence: statements ``

  • element: مُتغيِّر يُعرف داخل الحلقة، وتوضع فيه إحدى قيم المتتابعة ⁦(sequence)⁩ التي تُجلَب في كل دورة، وتكون موضوعة بعد هذا المُتغيِّر.
  • sequence: سلسلة يريد المُستخدِم الوصول إلى جميع عناصرها.
  • statements: جمل موجودة في حلقة ⁦(for)⁩ التي سيُكرِّر البرنامج تنفيذها في كل دورة.
الشكل (4-3): مُخطَّط سَيْر العمليات لحلقة (for)
الشكل (4-3): مُخطَّط سَيْر العمليات لحلقة ⁦(for)⁩

الدالَّة ⁦range()⁩ مع حلقات ⁦(for)⁩

الدالة التي تصنع الأرقام

``python for element in range(a): statements ``

  • تُستخدم الدالَّة ⁦range()⁩ بثلاث طرائق مختلفة، هي:

مثال:

  • إذا كانت قيمة ⁦(a)⁩ هي (5)، فإنَّ الدالَّة ستُرجع سلسلة الأرقام الآتية: (0)، (1)، (2)، (3)، (4).

مثال:

  • إذا كانت قيمة ⁦(a)⁩ هي (1)، وقيمة ⁦(b)⁩ هي (5)، فإنَّ الدالَّة ستُرجع سلسلة الأرقام الآتية:

    (1)، (2)، (3)، (4).

مثال:

  • إذا كانت قيمة ⁦(a)⁩ هي (1)، وقيمة ⁦(b)⁩ هي (5)، وقيمة ⁦(c)⁩ هي (2)، فإن الدالة ستُرجع سلسلة الأرقام (1)، (3)
  • ولا يتمُّ تضمين القيمة (5) في هذه الحالة؛ لأنَّ السلسلة تتوقف عند الرقم ⁦(b-1)⁩؛ أي عند الرقم (4).

هل سيختلف الناتج في البرنامج السابق إذا استُخدم (5, ⁦1) range⁩ بدلاً من (1, 5, ⁦1) range⁩؟

جملة التحكُّم ⁦(break)⁩ مع حلقات ⁦(for)⁩

إيقاف وتخطٍّ وخروج في حلقة العدّ

  • تعمل جملة التحكُّم ⁦(break)⁩ مع حلقات ⁦(for)⁩ بالطريقة نفسها التي استُخدمت فيها مع حلقات ⁦(while)⁩.

في المثال السابق، إذا وُضعت جملة ⁦()print⁩ بعد جملة ⁦(if)⁩، فماذا سيحدث؟ أتوقَّع ناتج البرنامج، ثمَّ أُنفِّذه باستخدام برمجية بايثون ⁦(Python)⁩، وأُلاحظ الناتج.

جملة التحكُّم ⁦(continue)⁩ مع حلقات ⁦(for)⁩

  • تُستخدَم جملة التحكُّم ⁦(continue)⁩ مع حلقات ⁦(for)⁩ بالطريقة نفسها التي استُخدمت فيها مع حلقات ⁦(while)⁩.

جملة ⁦(else)⁩ مع حلقات ⁦(for)⁩

  • يُمكن استعمال جملة ⁦(else)⁩ مع حلقات ⁦(for)⁩ لتنفيذ مجموعة من الأوامر عند الخروج من الحلقة.

أجرِّب وأستنتج: ما ناتج تنفيذ المقطع البرمجي الآتي مع وجود جملة ⁦(pass)⁩ ومن دون وجودها؟ ``python for x in range(5): pass ``

أبحثُ في المواقع الإلكترونية الموثوقة في شبكة الإنترنت عن استخدامات الحلقات التكرارية في البرمجة، وأهميتها في كتابة البرامج المفيدة في الحياة اليومية.

المواطنة الرقمية:

من الحلقة إلى مشروع اللعبة

  • الأمان الرقمي: أحرص على عدم تضمين المقطع البرمجي في لغة البرمجة بايثون ⁦(Python)⁩ أيَّ معلومات شخصية أو مشاركتها في المقطع، وأستخدم تقنيات البرمجة الآمنة لحماية بياناتي.
  • التعاون والمشاركة: أتعاون مع الزملاء/ الزميلات، وأُشاركهم في تحليل الأخطاء البرمجية وتصحيحها، وأُشارك أيضًا في تبادل المعرفة بين أوساط المجتمعات البرمجية الرقمية.
  • أستخدم حلقة تكرار مُركَّبة لتنفيذ ذلك كما يأتي:
  • حلقة خارجية: حلقة لانهائية تعمل على تكرار طباعة القائمة الرئيسية، والطلب إلى اللاعب إدخال أحد الخيارات.
  • حلقة داخلية: حلقة تعمل على تكرار طلب الإدخال إذا كان الرقم المُدخل غير صحيح؛ أي أقل من (1) وأكثر من (3).

أُقيِّم تعلُّمي

اختبر فهمك للحلقات

السؤال الأوَّل: أُقارن بين حلقات ⁦(for)⁩ وحلقات ⁦(while)⁩ باستخدام مُخطَّط سَيْر العمليات لكلِّ منهما.

السؤال الثاني: ما الطرائق الثلاث التي يُمكن بها استخدام الدالة ⁦()range⁩؟

السؤال الأوَّل: أكتب برنامجًا لإيجاد مضروب عدد ما باستخدام حلقات ⁦(for)⁩.

السؤال الثاني: اقرأ البرنامج التالي المكتوب بلغة البرمجة بايثون ⁦(Python)⁩، ثمَّ أُجيب عمَّا يأتي: أصف ما يقوم به البرنامج عامةً من دون وصف وظيفة أيِّ أمر برمجي فيه. ``python num = int(input("enter a number")) if num % 2 != 0: while num > 0: print(num) num -= 2 else: while num > 0: print(num) num -= 1 ``

أبحثُ في المواقع الإلكترونية الموثوقة عن تقنيات البرمجة الآمنة وطرق حماية البيانات عند مشاركة البرامج عبر مجتمعات البرمجة وألخص ما أتوصل إليه في ⁦Google Docs⁩ وأنشره عبر الموقع الإلكتروني للمدرسة.

تعريفات أساسية

الحلقات ⁦(Loops)⁩

يُستفاد من الحلقات في تكرار مجموعة من الأوامر البرمجية مَرَّات عديدة

حلقات ⁦while (while loops)⁩

تُستعمل حلقة ⁦(while)⁩ لتكرار تنفيذ جملة واحدة أو أكثر طالما تحقَّق شرط مُعيَّن

حلقات ⁦for (for loops)⁩

تُستعمل حلقة ⁦(for)⁩ لتكرار مجموعة من الجمل البرمجية عددًا مُحدَّدًا من المَرَّات

جملة التحكم ⁦(break)⁩

تُستعمل هذه الجملة لإيقاف الحلقة إذا تحقَّق شرط مُعيَّن، ثمَّ تنفيذ الجمل التي تلي الحلقة في البرنامج

جملة التحكم ⁦(continue)⁩

تُستعمل هذه الجملة لإيقاف الدورة الحالية في الحلقة، والانتقال إلى الدورة التالية فيها إذا تحقَّق شرط مُعيَّن

الدالة ⁦range()⁩

تُستعمل الدالَّة ⁦range()⁩ لإرجاع سلسلة من الأرقام، تبدأ بالرقم (0) (ما لم يُحدَّد رقم آخر)، وتنتهي برقم مُحدَّد

معاينة موضوع «الحلقات» من وحدة «الخوارزميات والبرمجة» في مادة المهارات الرقمية. أقسام الشرح: ٢٠، التعريفات: ٦.

المصدر: المركز الوطني لتطوير المناهج، الحلقات (ص ٦٠–٧٥)

موضوعات أخرى في الوحدة

تابع الدراسة