سؤال 1: بناءً على السيناريو الموضح أعلاه، أكمل كتل البرمجة التالية لتنفيذ سلوك الروبوت: قياس المسافة من العائق بالانعطاف 90 درجة لليسار ثم 180 درجة لليمين، ثم مقارنة المسافتين والانعطاف في الاتجاه ذي المسافة الأكبر، ثم التحرك للأمام. السيناريو: لتشاهد مثالاً ينعطف فيه روبوت الواقع الافتراضي في ملعب شبكة خريطة إلى اليسار بمقدار 90 درجة ليقيس المسافة من العائق، ثم يعود لينعطف 180 درجة إلى اليمين لقياس المسافة من العائق، وبعد ذلك يقارن بين المسافتين ويقرر أن ينعطف في الاتجاه الذي تكون فيه المسافة أكبر ويتحرك في هذا الاتجاه.
الإجابة: المتغيرات: Distance_to_left, Distance_to_right. تعريف Turn 90 left or right: العطف اليسار 90 درجة، مجموعة Distance_to_left إلى المسافة الأمامية في mm، العطف يمين 180 درجة، مجموعة Distance_to_right إلى المسافة الأمامية في mm، إذا Distance_to_left > Distance_to_right: العطف اليسار 180 درجة، وإلا: العطف يمين 0 درجة، تحرك إلى الأمام.
خطوات الحل:
- | المعطيات | الوصف | |----------|--------| | **السيناريو** | روبوت يقيس المسافة من عائق في اتجاهين مختلفين ثم يختار الاتجاه ذي المسافة الأكبر للتحرك فيه. | | **الإجراءات المطلوبة** | 1. قياس المسافة بعد انعطاف 90° لليسار. 2. قياس المسافة بعد انعطاف 180° لليمين. 3. مقارنة المسافتين. 4. الانعطاف في الاتجاه ذي المسافة الأكبر. 5. التحرك للأمام. | | **المطلوب** | كتابة كتل برمجة لتنفيذ هذا السلوك. |
- **المبدأ المستخدم:** البرمجة باستخدام **المتغيرات** و **التعليمات الشرطية** لاتخاذ القرار بناءً على مقارنة قيمتين.
- 1. **تحديد المتغيرات اللازمة:** - `Distance_to_left`: لتخزين المسافة المقاسة بعد الانعطاف لليسار. - `Distance_to_right`: لتخزين المسافة المقاسة بعد الانعطاف لليمين.
- 2. **كتابة خطوات البرمجة التفصيلية:** - **الخطوة 1:** انعطاف الروبوت **90 درجة لليسار**. - **الخطوة 2:** قياس المسافة الأمامية من العائق (بوحدة **mm**) وتخزينها في المتغير `Distance_to_left`. - **الخطوة 3:** انعطاف الروبوت **180 درجة لليمين** (للعودة للاتجاه الأصلي ثم القياس في الاتجاه المعاكس). - **الخطوة 4:** قياس المسافة الأمامية من العائق (بوحدة **mm**) وتخزينها في المتغير `Distance_to_right`. - **الخطوة 5:** استخدام **تعليمة شرطية** للمقارنة: - **إذا** `Distance_to_left > Distance_to_right`: - انعطاف **180 درجة لليسار** (للتوجه نحو الاتجاه ذي المسافة الأكبر، وهو اليسار). - **وإلا** (أي إذا كانت `Distance_to_right` أكبر أو تساوي): - انعطاف **0 درجة** (أي البقاء في الاتجاه الحالي، الذي هو اليمين بعد الخطوة 3، أو يمكن تفسيره كـ "انعطاف يمين 0 درجة" للدلالة على عدم التغيير). - **الخطوة 6:** التحرك **إلى الأمام** في الاتجاه المختار.
- > **ملاحظة مهمة:** الانعطاف 180 درجة لليمين في الخطوة 3 يعيد الروبوت فعلياً إلى اتجاهه الأصلي ثم يجعله يقيس في الاتجاه المعاكس (اليمين) مقارنة بالقياس الأول. القرار النهائي (الخطوة 5) يضمن أن الروبوت ينعطف ليتوجه نحو الجانب ذي المسافة الأكبر من العائق.
- **الحل البرمجي النهائي:** بعد تنفيذ الخطوات السابقة، سيتحرك الروبوت في الاتجاه الذي يوفر مسافة أكبر من العائق، مما يضمن تجنبه بشكل فعال.