ورقاتورقات تعليمية
تسجيل الدخولإنشاء حساب
درس

شرح درس البرمجة التركيبية ثاني متوسط الفصل الثاني

البرمجة التركيبية تعني تقسيم المهمة الكبيرة إلى أجزاء صغيرة، وكتابة كل جزء في دالة مسماة نستدعيها متى شئنا، فيصبح البرنامج أقصر وأوضح وأسهل في التصحيح.

المرحلة
المتوسطة
المادة
المهارات الرقمية
وقت القراءة
15 دقائق
الاختبار
متاح

🎯أهداف الدرس

  • يقسّم مهمة الروبوت إلى أجزاء صغيرة.
  • يعرّف دالة بالكلمة ⁦def⁩ ويستدعيها.
  • يستخدم الحلقة ⁦for⁩ مع الدوال لتكرار الأجزاء.
  • يبني برنامج متاهة بسيطًا من دوال.
  • يتتبع الأخطاء في البرنامج ويصلحها.

💡المفهوم الأساسي

البرمجة التركيبية تعني تقسيم المهمة الكبيرة إلى أجزاء صغيرة، وكتابة كل جزء في دالة مسماة نستدعيها متى شئنا، فيصبح البرنامج أقصر وأوضح وأسهل في التصحيح.

شرح الدرس

أراد فريق مدرسة أن يرسم الروبوت الافتراضي أربعة مربعات متتالية في ملعب المحاكاة. كتب أحد الطلاب أوامر المربع الأول ثم نسخها أربع مرات، فصار البرنامج طويلًا وأخطأ في أحد الأسطر. الحل الأفضل هو الدوال.

انتبه

الأوامر قد تختلف قليلًا بين إصدارات المنصة، وكل كتلة روبوت تعمل داخل منصة VEXcode VR.

تقسيم المهمة إلى أجزاء

«لا نحل المشكلة الكبيرة دفعة واحدة، بل نقسمها إلى أجزاء صغيرة ونحل كل جزء على حدة»

لنفرض أن مهمة الروبوت: يقطع المتاهة، ويلتف حول العائق، ثم يتوقف عند الخط الأحمر. نقسمها إلى ثلاثة أجزاء، لكل جزء اسم:

  • جزء أول: التقدم حتى الجدار.
  • جزء ثانٍ: الدوران حول العائق.
  • جزء ثالث: التوقف عند اللون.

تعريف الدالة واستدعاؤها

الدالة (Function) مجموعة أوامر لها اسم. نعرّفها مرة واحدة بالكلمة ⁦def⁩، ثم نستدعي اسمها كلما احتجنا إليها.

# نص
def forward_step():
    drivetrain.drive_for(FORWARD, 200, MM)

def turn_right():
    drivetrain.turn_for(RIGHT, 90, DEGREES)

forward_step()
turn_right()
forward_step()
  • التعريف: السطر الذي يبدأ بـ ⁦def⁩ ثم اسم الدالة وقوسان ونقطتان.
  • الجسم: الأسطر المزاحة ٤ مسافات تحت التعريف.
  • الاستدعاء: كتابة اسم الدالة مع القوسين، فتنفذ أوامرها.

في المثال يتقدم الروبوت ٢٠٠ ملم ثم يدور يمينًا ثم يتقدم ٢٠٠ ملم.

تذكّر

تعريف الدالة لا ينفذها، وإنما يحفظها فقط، وتنفذ عندما نستدعيها.

دالة رسم المربع

المربع أربعة أضلاع متساوية وأربع زوايا قائمة، فنكرر «تقدم ثم دوران» أربع مرات:

# نص
def draw_square():
    for i in range(4):
        drivetrain.drive_for(FORWARD, 200, MM)
        drivetrain.turn_for(RIGHT, 90, DEGREES)

draw_square()

الحلقة ⁦for i in range(4)⁩ تكرر الأمرين المزاحين أربع مرات، فيعود الروبوت إلى نقطة البداية بعد رسم المربع.

لرسم مربعين متتاليين نضيف بعد الاستدعاء الأول أمرًا يحرك الروبوت قليلًا ثم نستدعي الدالة مرة ثانية، ولا نعيد كتابة أسطرها.

الدوران حول عائق

حين يعترض جسم الطريق نلتف حوله بسلسلة حركات نكتبها في دالة:

# نص
def go_around():
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 200, MM)
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 400, MM)
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 200, MM)
    drivetrain.turn_for(RIGHT, 90, DEGREES)

يدور الروبوت يمينًا ثم يتقدم، ثم يدور يسارًا مرتين مع التقدم بينهما، وأخيرًا يدور يمينًا فيعود إلى اتجاهه الأول بعد تجاوز العائق. وعند الحاجة نستدعي ⁦go_around()⁩ في أي مكان فيه عائق.

مشروع متاهة بسيط

نكتب برنامج المتاهة من دوال صغيرة تتعاون معًا:

# نص
def go_to_wall():
    drivetrain.drive(FORWARD)
    while front_distance.get_distance(MM) > 300:
        wait(1, SECONDS)
    drivetrain.stop()

def turn_right():
    drivetrain.turn_for(RIGHT, 90, DEGREES)

go_to_wall()
turn_right()
go_to_wall()
turn_right()

يتقدم الروبوت إلى أول جدار ويدور يمينًا، ثم يتقدم إلى الجدار التالي ويدور يمينًا. ولتطويل المسار نكرر الاستدعاءات داخل ⁦for⁩ بحسب عدد زوايا المتاهة.

تتبع الأخطاء وإصلاحها

  • نسيان القوسين عند الاستدعاء: كتابة ⁦turn_right⁩ بلا قوسين لا تنفذ الدالة.
  • استدعاء دالة قبل تعريفها: تظهر رسالة خطأ لأن البرنامج لا يعرف الاسم بعد.
  • خطأ في الإزاحة: أسطر لم تُزح ٤ مسافات لا تدخل في جسم الدالة أو الحلقة.
  • خطأ منطقي: يدور الروبوت دورانًا زائدًا، فنجرّب ونعدّل الأرقام.

طريقة التصحيح: شغّل البرنامج، ولاحظ أين يخطئ الروبوت، ثم اختبر كل دالة وحدها قبل جمعها.

نشاط تعليمي

التطبيق الأول

عرّف دالة ⁦turn_left⁩ تدير الروبوت إلى اليسار بزاوية ٩٠ درجة ثم استدعها.

الإجابة

⁦def turn_left():⁩ وتحتها ⁦drivetrain.turn_for(LEFT, 90, DEGREES)⁩ ثم السطر ⁦turn_left()⁩.

الهدف

أن يعرّف الطالب دالة ويستدعيها.

المسألة الثانية

كم ضلعًا يرسم الروبوت إذا استدعينا ⁦draw_square()⁩ مرتين متتاليتين؟

الإجابة

ثمانية أضلاع لأن كل استدعاء يرسم أربعة.

الهدف

أن يتتبع الطالب الاستدعاء المتكرر.

الموقف الثالث

كتب طالب ⁦forward_step⁩ في آخر البرنامج بلا قوسين ولم يتحرك الروبوت.

الإجابة

ينقصه القوسان، والصواب ⁦forward_step()⁩.

الهدف

أن يكتشف الطالب خطأ الاستدعاء.

ملاحظات مهمة

  1. 1نعرّف الدالة قبل أن نستدعيها.
  2. 2نختار اسمًا إنجليزيًا يعبر عن عمل الدالة.
  3. 3جسم الدالة يزاح ٤ مسافات.
  4. 4نختبر كل دالة وحدها ثم نجمعها.

أخطاء شائعة

  • ✗ خطأنسيان النقطتين بعد اسم الدالة.
    ✓ الصواب: نكتب ⁦def name():⁩ وننهي السطر بنقطتين.
  • ✗ خطأنسخ الأوامر بدل كتابة دالة.
    ✓ الصواب: نجمع الأوامر المكررة في دالة ونستدعيها.
+عرض جميع الأخطاء (3) ←إخفاء الأخطاء الإضافية
  • ✗ خطأتعريف الدالة دون استدعائها.
    ✓ الصواب: نضيف سطر الاستدعاء لتعمل.

ملخص الدرس

  • نقسم المهمة الكبيرة إلى أجزاء صغيرة.
  • نعرّف الدالة بالكلمة ⁦def⁩ ونستدعيها باسمها وقوسين.
  • الحلقة ⁦for⁩ تكرر الدالة أو الأوامر عددًا محددًا من المرات.
  • نبني المتاهة من دوال، ونختبر كل دالة ونصلح الأخطاء.

هل أتقنت الدرس؟اختبر نفسك من خلال اختبار قصير من عدة أسئلة.

حزمة الدرس