على الرغم من حقيقة أننا سنركز على واحد من الموضوعات الأساسية ، فإن هذا المقال مكتوب للمحترفين ذوي الخبرة. الهدف هو إظهار المفاهيم الخاطئة لدى المبتدئين في البرمجة. للمطورين الممارسين ، تم حل هذه المشاكل منذ فترة طويلة أو نسيانها أو عدم ملاحظتها على الإطلاق. يمكن أن يكون المقال مفيدًا إذا كان عليك فجأة مساعدة شخص ما في هذا الموضوع. تستمد المقالة أوجه التشابه مع المواد من مختلف الكتب عن البرمجة من قبل شيلدت ، شتراوستراب ، أوكولوف.
تم اختيار موضوع الدورات لأن عددًا كبيرًا من الناس يتدفقون عليه عند إتقان البرمجة.
تم تصميم هذه التقنية للطلاب ضعيفة. كقاعدة عامة ، لا يتعطل الأشخاص الأقوياء في هذا الموضوع ولا يحتاجون إلى ابتكار تقنيات خاصة لهم. الهدف الثانوي من هذا المقال هو نقل هذه المنهجية من الفصل "يعمل لجميع الطلاب ، ولكن فقط لمعلم واحد" إلى الفصل "يعمل لجميع الطلاب ، وجميع المعلمين". أنا لا أدعي أن أكون الأصلي تماما. إذا كنت تستخدم بالفعل تقنية مماثلة لتدريس هذا الموضوع ، فالرجاء كتابة مدى اختلاف نسختك. إذا قررت التقديم ، أخبرنا بالنتائج كيف سارت الأمور. إذا تم وصف تقنية مماثلة في كتاب ، يرجى كتابة الاسم.
مارست هذه التقنية لمدة 4 سنوات ، وأدرس بشكل فردي مع طلاب من مستويات مختلفة من التدريب. فقط حوالي خمسين طالبا وألفي ساعة من الفصول. في البداية ، تمسك الطلاب وتركوا هذا الموضوع إلى الأبد. بعد كل طالب ، تم تعديل المنهجية والمواد. في العام الماضي ، لم يعد الطلاب عالقين بشأن هذا الموضوع ، لذلك قررت أن أشارك أفضل ممارساتي.
لماذا الكثير من الرسائل؟ دورات الابتدائية!
كما كتبت أعلاه ، بالنسبة للمطورين الممارسين والطلاب الأقوياء ، يمكن التقليل من تعقيد مفهوم الدورات. على سبيل المثال ، يمكنك ترتيب محاضرة طويلة ، ورؤية رؤساء الايماء والعينين الذكية. لكن عندما تحاول حل مشكلة ما ، تبدأ المشاكل الذهنية وغير المعقولة. بعد المحاضرة ، ربما طور الطلاب فهمًا جزئيًا فقط. يتفاقم الموقف بسبب حقيقة أن الطلاب أنفسهم لا يستطيعون التعبير عن خطأهم بالضبط.
بمجرد أن أدركت أن الطلاب ينظرون إلى الأمثلة على أنها الهيروغليفية. هذا هو ، كنصوص غير قابلة للتجزئة تحتاج فيها إلى إضافة نوع من الحروف "السحرية" وستعمل.
في بعض الأحيان لاحظت أن الطلاب يعتقدون أنه لحل مشكلة معينة ،
هناك حاجة إلى إنشاءات
أخرى ، لم أخبرها بعد. على الرغم من أن الحل لا يتطلب سوى القليل من تعديل المثال.
لذلك ، توصلت إلى فكرة أن التركيز الرئيسي لا ينبغي أن يكون على بناء جملة التعبيرات ، ولكن على فكرة إعادة بناء الكود التكراري باستخدام الحلقات. بمجرد إتقان هذه الفكرة للطلاب ، يتم تشديد أي بناء جملة مع القليل من التمارين.
لمن ولماذا أعلم
نظرًا لعدم وجود امتحانات القبول ، في الفصل يمكن أن يكون هناك طلاب أقوياء وضعفاء للغاية. يمكن العثور على مزيد من التفاصيل حول طلابي في المقالة "
صورة لطلاب الدورات المسائية".حاولت التأكد من أن كل من يريد ذلك يتقن البرمجة.
تقام دروسي بشكل فردي ويدفع الطالب أمواله مقابل كل منها. يبدو أن الطلاب سيقومون بتحسين التكاليف ويتطلبون الحد الأدنى. ومع ذلك ، لا يحضر الأشخاص دروسًا بدوام كامل مع مدرس مباشر للمعرفة نفسها ، ولكن للثقة التي تعلموها ، ولشعور التقدم وللموافقة من خبير (معلم). إذا لم يشعر الطلاب بالتقدم في دراساتهم ، فسيغادرون. بشكل عام ، يمكن تصميم الفصول بحيث يشعر الطلاب بالتقدم في زيادة عدد التصميمات المألوفة. هذا هو ، أولاً ، نحن ندرس أثناء التفصيل ، ثم ندرس ، ثم ندرس ، والآن لدينا دورة لمدة ألف ليلة وليلة ، ندرس فيها دورات لمدة شهرين فقط ، وفي النهاية ، لدينا طالب كتب مكتبة قياسية تمليها. ومع ذلك ، من أجل حل المشاكل العملية ، لا يحتاج المرء فقط معرفة المواد ، ولكن أيضا الاستقلال في تطبيقها وفي البحث عن معلومات جديدة. لذلك ، بالنسبة للدورات بدوام كامل ، أعتقد أن المبدأ صحيح - لتدريس الحد الأدنى وتشجيع الدراسة المستقلة للفروق الدقيقة والمواضيع ذات الصلة. في موضوع الحلقات ، أنا أعتبر أن بناء الحد الأدنى. على ذلك يمكنك فهم المبدأ. من خلال معرفة المبدأ ، يمكنك إتقان كل من نفسك وتفعله.
لا يكفي لوصف بناء الجملة لتحقيق إتقان المواد من قبل الطلاب الضعفاء. تحتاج إلى إعطاء مهام أكثر بساطة ولكن متنوعة وأمثلة للدهان بمزيد من التفاصيل. في النهاية ، تكون سرعة التطوير محدودة بقدرة الطالب على تحويل التعبيرات والبحث عن الأنماط. للطلاب الأذكياء ، ستكون معظم المهام مملة. عند التدرب معهم ، لا يمكنك الإصرار على حل 100٪ من المهام. يمكن الاطلاع على المواد الخاصة
بي على
جيثب بلدي . صحيح أن المستودع يشبه إلى حد بعيد مشعوذ من مشعوذ - لا أحد غيرك يفهم مكانه
، وإذا فشلت في التحقق ، يمكنك أن تصاب بالجنونممارسة الممارسة الموجهة
يتم تفسير النظرية بمثال حل المشكلة. في الفصول الدراسية على أساسيات البرمجة ، حيث تتم دراسة التفرع والحلقات ، لن تتمكن من إلقاء محاضرة مفيدة حول موضوع واحد لمدة ساعة كاملة. 15-20 دقيقة كافية لشرح هذا المفهوم. تظهر الصعوبات الرئيسية عند أداء المهام العملية.
يمكن للمعلمين المبتدئين تفريغ البيانات والفروع والحلقات والمصفوفات في محاضرة واحدة. هنا فقط الطلاب الذين سيواجهون مشكلة استيعاب هذه المعلومات.
لا يلزمك فقط إخبار المواد ، ولكن أيضًا التأكد من فهم الجمهور لها.
يتم تحديد حقيقة إتقان الموضوع من خلال كيفية تعامل الطالب مع العمل المستقل.
إذا تمكن الطالب من حل مشكلة في موضوع ما دون مساعدة أحد المعلمين ، فقد تم تعلم الموضوع. لتوفير التحقق الذاتي ، يتم وصف كل مهمة بجدول يحتوي على نصوص اختبار. المهام لها ترتيب واضح. تخطي المهام غير مستحسن. إذا كانت المهمة الحالية معقدة للغاية ، فإن المتابعة إلى المهمة التالية ستكون غير مجدية. إنها أصعب. حتى يتمكن الطالب من إتقان المهمة الصعبة الحالية ، يتم شرح العديد من الحيل على مثال المهمة الأولى. في الواقع ، يتم تقليل المحتوى بالكامل للموضوع إلى أساليب التغلب على الصعوبات. الدورات هي على الأرجح تأثير جانبي.
المهمة الأولى هي دائما مثال. يختلف الثاني قليلاً ويتم تنفيذه "بشكل مستقل" مباشرةً بعد الأول مباشرة تحت إشراف أحد المعلمين. تهدف جميع المهام اللاحقة إلى لفت الانتباه إلى أشياء صغيرة مختلفة يمكن أن تسبب الارتباك.
تفسير المثال هو حوار يحتاج فيه الطالب إلى إعادة نشر التوثيق والتحقق من صحته للتأكد من أنه يستوعب جزءًا من المادة.
سأكون عاديًا وأعلن أن المثال الأول حول هذا الموضوع مهم جدًا. إذا كانت هناك مواد للعمل المستقل الشامل ، فيمكن تصحيح إغفال المثال الأول. إذا لم يكن هناك شيء ، بصرف النظر عن المثال ، فلن يتمكن الطالب على الأرجح من إتقان الموضوع.
بينما او من اجل؟
واحدة من القضايا المثيرة للجدل هو اختيار بناء على سبيل المثال: في حين أو ل. ذات مرة ، أقنعني صديق لي ، وهو مطور ممارس لا يمتلك أي خبرة تعليمية ، لمدة ساعة بأن الحلقة كانت الأسهل على الفهم. وجاءت الحجج إلى "كل شيء واضح في ذلك والموضحة في أماكن". ومع ذلك ، فإن السبب الجذري لصعوبات المبتدئين الحقيقيين في فكرة الدورة ، وليس في كتابتها. إذا لم يفهم الشخص هذه الفكرة ، فسيواجه صعوبات في بناء الجملة. بمجرد أن تتحقق الفكرة ، تختفي مشاكل تصميم الكود بنفسها.
في المواد الخاصة بي ، يتبع موضوع الدورات موضوع التفرع. التشابه الخارجي لـ if و بينما يسمح لنا برسم تشبيه مباشر: "عندما تكون الحالة في الرأس صحيحة ، يكون الجسم راضيًا." خصوصية الدورة هو أن يتم تنفيذ الجسم عدة مرات.
حجتي الثانية هي أنه بينما يتطلب زخرفة أقل من ل. تصميم أقل - عدد أقل من الأخطاء الغبية مع فقد الفواصل والأقواس. المبتدئين ليسوا منتبهين ودقيقين لدرجة أنهم يتجنبون تلقائيًا أخطاء بناء الجملة.
الحجة الثالثة هي أن الكثير من الخير بينما يتم شرح الكتب أولاً.
إذا تمكن الطالب من تحويل التعبيرات بسهولة ، فيمكنك التحدث عنها بشكل عابر. سوف يختار الطالب ما يحبه أكثر. إذا كانت التحولات تسبب صعوبات ، فمن الأفضل عدم تشتيت الانتباه. دع الطالب يحل كل شيء بمساعدة الوقت. بمجرد أن تتقن موضوع الحلقات ، يمكنك إعادة كتابة الحلول لحل التحويل من إلى.
دورات ما بعد التكييف هي حيوان نادر. أنا لا أقضي الوقت في ذلك على الإطلاق. إذا كان الطالب قد أتقن أفكار الكشف عن الأنماط وتحويل التعبيرات ، فسيكون قادرًا على اكتشافها دون مساعدتي.
عند توضيح المثال الأول للطلاب الأقوياء ، أود أن ألفت الانتباه إلى حقيقة أنه في المثال الأول من المهم إصلاح ليس فقط الحل ، ولكن أيضًا سلسلة الإجراءات الكاملة التي أدت إلى النتيجة. يمكن للطلاب كسول إهمال الكتابات ونقل الخوارزمية المحددة فقط لأنفسهم. يجب أن يكونوا مقتنعين بأنهم يومًا ما سيواجهون مهمة صعبة. لحلها ، ستحتاج إلى اتباع الخطوات كما في هذا المثال. هذا هو السبب في أنه من المهم إصلاح جميع المراحل. في المهام التالية ، سيكون من الممكن ترك الحل النهائي فقط.
الفكرة الرئيسية للأتمتة هي أننا نوجه الكمبيوتر إلى أداء العمل الروتيني للشخص الواحد. واحدة من الحيل الأساسية هي كتابة الدورات. يتم استخدامه عند كتابة العديد من الإجراءات المتكررة المتطابقة في برنامج على التوالي.
الصريح أفضل من الضمني
قد يبدو فكرة جيدة في المهمة الأولى على دورات لعرض عبارة متطابقة عدة مرات. على سبيل المثال:
الصيحة ، إنها تعمل!
الصيحة ، إنها تعمل!
الصيحة ، إنها تعمل!
الصيحة ، إنها تعمل!
الصيحة ، إنها تعمل!
الصيحة ، إنها تعمل!
الصيحة ، إنها تعمل!
الصيحة ، إنها تعمل!
هذا الخيار غير صالح لأن الإخراج لا يُظهر قيمة العداد. هذه مشكلة للمبتدئين. لا نقلل من ذلك. في البداية ، كانت هذه المهمة الأولى ، ومهمة إخراج سلسلة من الأرقام بترتيب تصاعدي كانت الثانية. اضطررت إلى تقديم مصطلحات إضافية "دورة N مرة" و "دورة من A إلى B" ، والتي هي نفسها بشكل أساسي. من أجل عدم إنتاج كيانات غير ضرورية ، قررت عرض مثال فقط مع سلسلة من الأرقام. قليلون هم الذين تمكنوا من تعلم كيفية إبقاء العداد في رؤوسهم ومحاكاة سلوك البرنامج في رؤوسهم دون تحضير. لأول مرة ، يواجه بعض الطلاب نماذج "في العقل" حول موضوع الدورات.
بعد بعض الممارسة ، أعطي مهمة تكرار نفس النص إلى حل مستقل. إذا أعطيت لأول مرة عدادًا مرئيًا ، ثم غير مرئي ، فسيواجه الطلاب مشكلات أقل. في بعض الأحيان تكون المطالبات "لا تكتب العداد على الشاشة" كافية.
كيف يفسر الآخرون ذلك؟
في معظم المواد التعليمية على الإنترنت ، يتم إعطاء بناء جملة حلقة كجزء من "محاضرة". على سبيل المثال ، على developer.mozilla.org (حاليًا) ، يتم وصف العديد من التركيبات الأخرى مع حلقة الوقت. في هذه الحالة ، يتم تقديم الإنشاءات فقط في شكل قوالب. يتم وصف نتيجة إطلاقها بالكلمات ، ولكن الرسم التوضيحي مفقود. في رأيي ، مثل هذا العرض للموضوع يضاعف فائدة هذه المواد بصفر. يمكن للطالب إعادة كتابة الكود وتشغيله بنفسه ، لكن لا تزال هناك حاجة إلى معيار المقارنة. كيف نفهم أن المثال أعيد كتابته بشكل صحيح إذا لم يكن هناك شيء للمقارنة بين النتيجة؟
عندما يتم تقديم قالب فقط ، دون مثال ، يصبح الأمر أكثر صعوبة بالنسبة للطالب. كيف نفهم أن شظايا الكود يتم وضعها في القالب بشكل صحيح؟ يمكنك محاولة الكتابة
بطريقة ما ، ثم تشغيلها. ولكن إذا لم يكن هناك معيار لمقارنة النتيجة ، فلن يساعد الإطلاق أيضًا.
في دورة C ++ الخاصة بالحدس ، يتم دفن بناء جملة العروة في الصفحة الثالثة من المحاضرة 4 حول موضوع "العوامل". عند شرح بناء جملة الحلقات ، يتم التركيز بشكل خاص على مصطلح "المشغل". يتم تقديم المصطلح كمجموعة من الحقائق مثل "الرمز" ؛ هذا هو المشغل "،" {} هذا هو المشغل المركب "،" يجب أن يكون نص الحلقة عامل التشغيل ". أنا لا أحب هذا النهج لأنه يبدو أنه يخفي علاقات مهمة في فترة واحدة. يعد تحليل شفرة مصدر البرنامج إلى مصطلحات في مثل هذا المستوى ضروريًا لمطوري برنامج التحويل البرمجي لتنفيذ مواصفات اللغة ، ولكن ليس للطلاب في التقريب الأول. نادرًا ما يكون لدى المبتدئين في البرمجة الدقة في الانتباه إلى المصطلحات. شخص نادر يتذكر ويفهم الكلمات الجديدة في المرة الأولى. عمليا ، لا يمكن لأحد أن يطبق المصطلح الذي تعلموه للتو. لذلك ، لدى الطلاب مجموعة من الأخطاء مثل "كتب أثناء (أ <7) ؛ {، لكن البرنامج لا يعمل".
في رأيي ، في البداية من الأفضل إعطاء بناء الجملة على الفور بين قوسين. يتم شرح الخيار بدون أقواس فقط إذا كان لدى الطالب سؤال محدد "لماذا يعمل بدون أقواس".
في كتاب Okulov "أساسيات البرمجة" في عام 2012 ، يبدأ التعرّف على الدورات بالقالب الخاص بالنموذج ، ثم يتم تقديم توصيات لاستخدامه ، ثم يتبع القسم التجريبي من الدرس مباشرةً. أفهم أن الكتاب قد كتب لأقلية من الطلاب ذوي القدرات العالية الذين نادراً ما يأتون إلى صفوفي.
في الكتب الشائعة ، يتم دائمًا كتابة نتيجة شظايا الكود. على سبيل المثال ، إصدار شيلت "Java 8. Complete Guide" لعام 2015. أولاً ، يتم إعطاء قالب ، ثم برنامج مثال ، وبعده مباشرة هو نتيجة التنفيذ.
على سبيل المثال ، فكر في حلقة من الوقت فيها العكس
العد التنازلي ، ابتداء من 10 ، و 10 خطوط بالضبط من "التدابير" هي الإخراج:
بعد بدء هذا البرنامج يعرض عشرة "تدابير" على النحو التالي:
10
9
8
7
6
5
4
3
2
1
يتم أيضًا استخدام نهج يصف القالب وبرنامج العينة ونتائج هذا البرنامج في كتاب "Javascript for children" وفي دورة js في w3schools.com. يتيح لك تنسيق صفحة الويب جعل هذا المثال تفاعليًا.
في كتاب Straustrup لعام 2016 ، "المبادئ والممارسات باستخدام C ++" ، ذهب المؤلف إلى أبعد من ذلك. تشرح الخطوة الأولى ما يجب أن تكون عليه النتيجة ، وبعد ذلك - عرض نص البرنامج. علاوة على ذلك ، على سبيل المثال ، لا يأخذون برنامجًا عشوائيًا فحسب ، ولكنهم يقومون برحلة إلى التاريخ. إنها تساعد على لفت الانتباه إليها. "انظر ، هذا ليس مجرد نص عديم الفائدة. ترى شيئًا مهمًا ".
كمثال على التكرار ، ضع في اعتبارك أول برنامج يتم تنفيذه على جهاز به برنامج مخزّن (EDSAC). كتبه ديفيد ويلر في مختبر الكمبيوتر بجامعة كامبريدج ، إنجلترا في 6 مايو 1949. هذا البرنامج بحساب وطباعة قائمة بسيطة من المربعات.
0 0
1 1
2 4
3 9
4 16
...
98 9604
99 9801
هنا ، يحتوي كل سطر على رقم متبوعًا بعلامة تبويب ('\ t') ومربع هذا الرقم. يبدو الإصدار C ++ من هذا البرنامج كما يلي:
الغريب ، لم يتم وصف قالب بناء الجملة في هذا الكتاب. يؤكد Stroustrup في دليل المعلم (
الترجمة ) على أنه يحترم ذكاء طلابه. ولعل القدرة على تحديد النمط في عدة أمثلة تعتبر مظهراً من مظاهر هذه الذكاء.
كما اشرح نفسي
نهج Straustrup: وصف للنتيجة ، ثم حل للمشكلة ، ثم تحليل مستقل من قبل الطالب - يبدو الأكثر تفكيرًا. لذلك ، قررت أن أعتبرها أساسًا ، لكن أخبرها على مثال تاريخي أقل - مهمة استنباط "جدول المحتويات". إنها تشكل مرساة يمكن التعرف عليها ، بحيث تقول لاحقًا "تذكر مهمة جدول المحتويات" ومن ثم يتذكرها الطلاب. في مثالي ، حاولت تحذير اثنين من أكثر المفاهيم الخاطئة الشائعة. التالي سأكتب المزيد عنها.
في هذه المهمة ، نتعرف على طرق حل المشكلات المعقدة. يجب أن يتم اتخاذ القرار الأولي بشكل أولي وبسيط. حسنًا ، يمكنك إذن التفكير في كيفية تحسين هذا الحل.
1
2
3
4
5
6
7
وفقًا لملاحظاتي ، لا يزال نهج "نموذج المثال - نتيجة" في مجموعات مختلفة يدفع الطلاب إلى إدراك الدورة على أنها هيروغليفية. وقد تجلى ذلك في حقيقة أنهم لم يفهموا سبب وجوب كتابة شرط ما ، وكيفية الاختيار بين i ++ و i-- وغيرها من الأشياء التي تبدو واضحة. لتجنب هذه المفاهيم الخاطئة ، ينبغي أن يركز النهج الخاص بقصة الدورات على معنى تكرار نفس الإجراءات وعندها فقط - تصميمها باستخدام التصميم. لذلك ، قبل إعطاء بناء جملة الحلقة ، تحتاج إلى حل مشكلة "الجبهة". يبدو الحل البدائي لمشكلة جدول المحتويات كما يلي:
Console.WriteLine(""); Console.WriteLine(" 1"); Console.WriteLine(" 2"); Console.WriteLine(" 3"); Console.WriteLine(" 4"); Console.WriteLine(" 5"); Console.WriteLine(" 6"); Console.WriteLine(" 7"); Console.WriteLine("");
كيف يمكن تحسينه؟
استبدال الإجراءات المتكررة بحلقة.
ما هي الإجراءات المتكررة في صف واحد دون تغييرات؟
لا يوجد شيء في هذا الجزء. ومع ذلك ، الأمر لإخراج كلمة "الفصل" مع الرقم يشبه إلى حد كبير بعضها البعض.
لذلك ، فإن الخطوة التالية هي البحث عن الفرق بين الشظايا. في هذه المهمة فقط ، يكون كل شيء واضحًا ، ثم لن يتم تكرار أوامر مفردة ، ولكن سيتم فك كتل الرموز المكونة من 5 أسطر أو أكثر. سيتعين عليك البحث ليس فقط في قائمة الأوامر ، ولكن في الإنشاءات الفرعية والفرعية.
في المثال ، الفرق بين الفرق في الرقم بعد كلمة "الفصل".
بمجرد العثور على الفرق ، تحتاج إلى فهم نمط التغيير. جزء مختلف هو هذا الرقم؟ هل تتزايد باستمرار أم تتناقص؟ كيف تتغير قيمة الرقم بين فريقين جنبًا إلى جنب؟
في المثال ، يزيد الرقم بعد كلمة "الفصل" مع الخطوة 1. تم العثور على الفرق ، يتم الكشف عن النمط. الآن يمكنك استبدال الجزء المختلف بمتغير.
يجب إعلان مثل هذا المتغير قبل أول الأجزاء المكررة. عادة ما يسمى هذا المتغير I أو j أو بطريقة أو بأخرى موسعة. يجب أن تكون قيمتها الأولية مساوية للقيمة الأولى المعروضة على الشاشة. في المثال ، القيمة الأولى هي 1.
ما القيمة الأولية التي يجب اتخاذها لإخراج سلسلة من الأرقام "100 ، 101 ، 102 ، 103 ، 104 ، 105"؟
في هذا الصف ، الرقم الأول هو 100.
بعد كل أمر إخراج ، تحتاج إلى زيادة قيمة هذا المتغير بمقدار 1. هذه الوحدة هي خطوة تغيير.
ما الخطوة التي ستكون في سلسلة الأرقام "100 ، 102 ، 104 ، 106"؟
في هذا الصف ، الخطوة 2.
بعد استبدال الجزء المختلف بمتغير ، سيبدو الرمز كما يلي:
Console.WriteLine(""); int i; i = 0; Console.WriteLine(" " + i); i = i + 1; Console.WriteLine(" " + i); i = i + 1; Console.WriteLine(" " + i); i = i + 1; Console.WriteLine(" " + i); i = i + 1; Console.WriteLine(" " + i); i = i + 1; Console.WriteLine(" " + i); i = i + 1; Console.WriteLine(" " + i); i = i + 1; Console.WriteLine("");
بعد تطبيق تقنية "التعبير عن قانون المتغير" ، ينتج عن الكود عدة مجموعات من الإجراءات المتماثلة التي تسير على التوالي. يمكن الآن استبدال الإجراءات المتكررة بحلقة.
يتكون تسلسل حل المشكلة التي تحتاج إلى استخدام الدورات من الخطوات:
- حل "الجبهة" مع العديد من فرق منفصلة
- العثور على نمط
- التعبير عن انتظام متغير
- تصميم كحلقة
بعد ذلك ، يتم تقديم مصطلحات جديدة حتى لا يجد الطالب نفسه في موقف "أفهم كل شيء ، لكن لا يمكنني القول":
- العداد هو دائمًا متغير مطلوب لتتبع عدد الخطوات في دورة ما. عادة ما يكون عددًا صحيحًا يُقارن إلى قيد.
- خطوة مضادة - وصف لنمط التغيير في العداد.
- التقييد - رقم أو متغير تتم مقارنة العداد به ، بحيث تكون الخوارزمية محدودة. تتغير قيمة العداد بحيث تقترب من الحد.
- دورة الجسم - مجموعة من الأوامر التي ستتكرر. عندما تقول "الأمر مكتوب داخل الدورة" ، فهذا يعني الجسم.
- التكرار حلقة - تنفيذ واحد من الجسم حلقة.
- شرط الحلقة هو تعبير منطقي يحدد ما إذا كان سيتم تنفيذ تكرار آخر. (قد يكون هناك التباس مع تصاميم فرع)
يجب أن تكون مستعدًا لحقيقة أن الطلاب في البداية سيستخدمون المصطلحات لأغراض أخرى. وهذا ينطبق على كل من قوي وضعيف. بناء لغة مشتركة هو الفن كله. سأكتب لفترة وجيزة الآن: تحتاج إلى تعيين المهمة "تحديد جزء من الشفرة باستخدام <term>" واستخدام هذه المصطلحات في محادثة بشكل صحيح.
بعد التحويل باستخدام حلقة ، يتم الحصول على جزء:
Console.WriteLine(""); int i = 0; while (i < 7) { Console.WriteLine(" " + i); i = i + 1; } Console.WriteLine("");
الاعتقاد الخاطئ الرئيسي
أحد المفاهيم الخاطئة الشائعة لدى الطلاب هو وضعهم داخل بنية الحلقة مثل هذه الإجراءات التي يجب القيام بها مرة واحدة فقط. على سبيل المثال ، مثل هذا:
; int i = 0; while (i < 7) { Console.WriteLine("") Console.WriteLine(" " + i); i = i + 1; Console.WriteLine(""); }
يتعثر الطلاب باستمرار على هذه المشكلة ، سواء في البداية أو في المهام الأكثر تعقيدًا.
تاج تلميح في هذه الحالة:
كم مرة تحتاج إلى تكرار الأمر: مرة واحدة أو عدة مرات؟
أوامر الإخراج لكلمات "مقدمة" و "خاتمة" ، وكذلك الإعلان وتهيئة المتغير i ، ليست مثل الإجراءات المتكررة الأخرى. يتم تنفيذها مرة واحدة فقط ، مما يعني ضرورة كتابتها خارج نص الدورة.
يجب أن تبقى المراحل الثلاث للحل في الكود ، من أجل الرجوع إليها في حالة الصعوبة. الخياران الأولان يكفيان للتعليق حتى لا يتدخلا.
ينبغي إيلاء اهتمام الطالب للحقائق التالية:
- في حالة حلقة ، عادة ما يتم مقارنة العداد والحد. قد يتغير العداد في جسم الحلقة ، لكن الحد لا يتغير. لكسر هذه القاعدة ، تحتاج إلى صياغة أسباب وجيهة.
- أوامر عرض الكلمتين "مقدمة" و "خاتمة" خارج نطاق الدورة. نحن بحاجة إلى تنفيذها 1 مرة. "مقدمة" - قبل تكرار الإجراءات ، "الخاتمة" - بعد.
في عملية إصلاح هذا الموضوع ، وإتقان ما يلي ، وكذلك الإجراءات ذات الصعوبات ، من المفيد حتى للطلاب الأقوياء طرح السؤال: "لكن كم مرة يجب تنفيذ هذا الإجراء؟ واحد او كثير؟
تنمية مهارات إضافية
في عملية دراسة الدورات ، لا يزال الطلاب لديهم مهارة تشخيص المشكلات وحلها. لإجراء التشخيص ، يحتاج الطالب إلى تقديم النتيجة المرجوة ومقارنتها بالنتيجة الفعلية. تعتمد إجراءات التصحيح على الفرق بينهما.
نظرًا لأن الطلاب في هذه المرحلة لا يزال لديهم فكرة سيئة عن النتيجة "المرجوة" ، فيمكنهم التركيز على بيانات الاختبار. كقاعدة عامة ، لا أحد في هذه المرحلة ما زال يفهم ما يمكن أن يحدث خطأ وكيفية التعامل معها. لذلك ، أعطي وصفًا للمشاكل النموذجية وعدة طرق لحلها تحت إدخال في دفتر ملاحظات. اختيار أنسب منهم هو مهمة الطالب.
هناك حاجة إلى السجل لسؤال ، "ماذا حدث كان متوقعًا؟" ، "أي من هذه الحالات حدث الآن؟" ، "هل ساعد الحل؟"
- عدد الإجراءات هو 1 أقل أو أكثر من المتوقع. طرق لحلها:
- زيادة القيمة الأولية للعداد بمقدار 1.
- استبدل عامل المقارنة الصارم (<or>) بعامل غير صارم (<= أو> =).
- قم بتغيير قيمة القيد إلى 1. - يتم تنفيذ الإجراءات في الحلقة دون توقف ، إلى ما لا نهاية. طرق لحلها:
- أضف أمر تغيير العداد إذا كان غائبا.
- إصلاح أمر التغيير العكسي بحيث تصبح قيمته أقرب إلى الحد الأقصى.
- قم بإزالة الأمر الخاص بتغيير القيد ، إذا كان موجودًا في نص الدورة. - عدد الإجراءات في الحلقة أكثر من 1 أقل أو أكثر من المتوقع. لم يتم تنفيذ الإجراء في الحلقة. تحتاج أولاً إلى معرفة القيم الفعلية للمتغيرات قبل بداية الدورة مباشرةً. طرق لحلها:
- تغيير القيمة الأولية للقيد
- تغيير القيمة الأولية للعداد
عادةً ما ترتبط المشكلة 3 باستخدام المتغير الخطأ أو عدم التصفير.
بعد هذا الشرح ، قد لا يزال لدى الطالب مفاهيم خاطئة مختلفة حول تشغيل الدورات.
لتبديد الأكثر شيوعا ، وأنا إعطاء المهام:
- في أي تقييد ، يتم إدخال القيمة الأولية للعداد أو خطوة العداد من قبل المستخدم.
- حيث يجب استخدام قيمة العداد في تعبير حسابي. يُنصح باستخدام العداد في التعبير الراديكالي أو في المقام بحيث يكون الفرق غير خطي.
- حيث لا يتم عرض قيمة العداد أثناء الدورة. على سبيل المثال ، إخراج العدد المطلوب من أجزاء متطابقة من النص أو رسم شخصية مع الرسومات السلحفاة.
- التي تحتاج فيها إلى تنفيذ بعض الإجراءات المتكررة أولاً ، ثم غيرها.
- التي تحتاج إلى تنفيذ إجراءات أخرى قبل وبعد التكرار
لكل مهمة ، تحتاج إلى تقديم بيانات الاختبار والنتيجة المتوقعة.
لفهم مدى سرعة التحرك ، تحتاج إلى قراءة شروط هذه المهام وتسأل: "كيف تختلف عن المثال؟" ، "ما الذي يجب تغييره في المثال لحلها؟". إذا أجاب الطالب بشكل مفيد ، فدعه يقرر واحد على الأقل في الدرس ، والباقي - في المنزل بمفرده. إذا نجح الحل ، فيمكنك البدء في شرح الظروف داخل الحلقات.
إذا كان لديك حل مستقل للصعوبات ، فأنت بحاجة إلى حل كل شيء في الدرس. حتى لا يشبه حل المشكلة رسم البومة ، فإنني أوصيك أولاً بحل المشكلة وليس عالمياً. وهذا هو ، بحيث يمر الحل الاختبار الأول ولا يستخدم بناء حلقة. حسنًا ، قم بتطبيق التحولات لتحقيق عالمية الحل.
الحلقات والفروع
في رأيي ، من المفيد إعطاء الموضوع "حلقات داخل الفروع" بشكل منفصل. بحيث يمكنك لاحقًا رؤية الفرق بين فحص حالة متعددة وواحد.
ستتمحور مهام الإصلاح حول إخراج الأرقام من A إلى B ، والتي يتم إدخالها بواسطة المستخدم:
- دائما تصاعدي.
- تصاعدي أو تنازلي حسب قيم A و B.
يجب تمرير موضوع "التفرع داخل الدورات" فقط بعد أن يتقن الطالب الحيل: "استبدال الأنماط بمتغير" و "استبدال الإجراءات المتكررة بحلقة".
السبب الرئيسي لاستخدام المتفرعة داخل الحلقات هو الشذوذ في الأنماط. في الوسط ، يتم كسرها اعتمادًا على البيانات المصدر.
بالنسبة لأولئك الطلاب القادرين على البحث عن حل من خلال الجمع بين التقنيات البسيطة ، يكفي القول "يمكن كتابة التفرع داخل حلقات" وإعطاء المهمة "على سبيل المثال" تمامًا إلى حل مستقل.
المهمة على سبيل المثال:
يقوم المستخدم بإدخال الرقم X. يتم عرضه في أرقام الأعمدة من 0 إلى 9 ووضع العلامة "+" مقابل الرقم الذي يساوي X.
إذا تم إدخال 00+
1
2
3
4
5
6
7
8
9
إذا تم إدخال 60
1
2
3
4
5
6+
7
8
9
إذا تم إدخال 90
1
2
3
4
5
6
7
8
9+
إذا تم إدخال 7770
1
2
3
4
5
6
7
8
9
إذا كان التفسير المختصر غير كافٍ للكتابة باستخدام حلقة ، فأنت بحاجة إلى تحقيق حل عالمي لنفس المشكلة بدون حلقة.
سوف تحصل على واحد من خيارين:
مرغوب string temp; temp = Console.ReadLine(); int x; x = int.Parse(temp); if (x==0) { Console.WriteLine(0 + "+"); } else { Console.WriteLine(0); } if (x==1) { Console.WriteLine(1 + "+"); } else { Console.WriteLine(1); } if (x==2) { Console.WriteLine(2 + "+"); } else { Console.WriteLine(2); } if (x==3) { Console.WriteLine(3 + "+"); } else { Console.WriteLine(3); } if (x==4) { Console.WriteLine(4 + "+"); } else { Console.WriteLine(4); } if (x==5) { Console.WriteLine(5 + "+"); } else { Console.WriteLine(5); } if (x==6) { Console.WriteLine(6 + "+"); } else { Console.WriteLine(6); } if (x==7) { Console.WriteLine(7 + "+"); } else { Console.WriteLine(7); } if (x==8) { Console.WriteLine(8 + "+"); } else { Console.WriteLine(8); } if (x==9) { Console.WriteLine(9 + "+"); } else { Console.WriteLine(9); }
إمكانية string temp; temp = Console.ReadLine(); int x; x = int.Parse(temp); if (x==0) { Console.WriteLine("0+\n1\n2\n3\n4\n5\n6\n7\n8\n9"); } if (x==1) { Console.WriteLine("0\n1+\n2\n3\n4\n5\n6\n7\n8\n9"); } if (x==2) { Console.WriteLine("0\n1\n2+\n3\n4\n5\n6\n7\n8\n9"); } if (x==3) { Console.WriteLine("0\n1\n2\n3+\n4\n5\n6\n7\n8\n9"); } if (x==4) { Console.WriteLine("0\n1\n2\n3\n4+\n5\n6\n7\n8\n9"); } if (x==5) { Console.WriteLine("0\n1\n2\n3\n4\n5+\n6\n7\n8\n9"); } if (x==6) { Console.WriteLine("0\n1\n2\n3\n4\n5\n6+\n7\n8\n9"); } if (x==7) { Console.WriteLine("0\n1\n2\n3\n4\n5\n6\n7+\n8\n9"); } if (x==8) { Console.WriteLine("0\n1\n2\n3\n4\n5\n6\n7\n8+\n9"); } if (x==9) { Console.WriteLine("0\n1\n2\n3\n4\n5\n6\n7\n8\n9+"); }
أعطي مشكلة مماثلة مقدما ، أثناء دراسة موضوع المتفرعة.
إذا كان لدى الطالب خيار "ممكن" ، فأنت بحاجة إلى معرفة أنه يمكن أن يكون هناك العديد من الحلول لنفس المشكلة. ومع ذلك ، فإنها تختلف في مقاومتها للمتطلبات المتغيرة. اطرح السؤال التالي: "كم من الأماكن في الكود سوف تحتاج إلى تصحيح إذا كان عليك إضافة رقم آخر؟" في الإصدار "الممكن" ، ستحتاج إلى إضافة فرع آخر وإضافة رقم جديد في 10 أماكن أخرى. في "المطلوب" ، يكفي لإضافة فرع واحد فقط.
عيّن مهمة إعادة إنتاج الخيار "المرغوب" ، ثم ابحث عن نقش في الكود ، وأجر بديلاً متغيرًا واكتب حلقة.
إذا كان لديك فكرة عن كيفية حل هذه المشكلة دون حلقة بأي طريقة أخرى ، يرجى كتابة التعليقات.
حلقات داخل الحلقات
في هذا الموضوع تحتاج إلى الانتباه إلى حقيقة:
- يجب أن تكون عدادات الحلقة الداخلية والخارجية متغيرات مختلفة.
- يجب إعادة ضبط العداد للحلقة الداخلية عدة مرات (أي في جسم الحلقة الخارجية).
- في مهام إخراج النص ، لا يمكنك أولاً كتابة حرف واحد في عدة أسطر ، ثم الحرف الثاني. تحتاج أولاً إلى طباعة جميع حروف السطر الأول ، ثم جميع حروف السطر الثاني وما إلى ذلك.
من الأفضل أن يبدأ شرح للموضوع حول الحلقات داخل الحلقات عن طريق شرح أهمية إعادة ضبط العداد.
المهمة على سبيل المثال:
يقوم المستخدم بإدخال رقمين: R و T. طباعة سطرين من الأحرف "#". يجب أن يحتوي السطر الأول على أحرف R السطر الثاني هو قطع تي. إذا كان أي رقم سالبًا ، فقم بعرض رسالة خطأ.
ص = 5 ، ر = 11#####
###########
ص = 20 ، ر = 3####################
###
R = -1 ، T = 6يجب أن تكون قيمة R غير سالب
R = 6 ، T = -2يجب أن تكون قيمة T غير سالب
من الواضح أن هذه المشكلة لها حلان على الأقل.
مرغوب string temp; int R; int T; temp = Console.ReadLine(); R = int.Parse(temp); temp = Console.ReadLine(); T = int.Parse(temp); int i = 0; while (i < R) { Console.Write("#"); i = i + 1; } Console.WriteLine(); i = 0; while (i < T) { Console.Write("#"); i = i + 1; }
ممكن رقم 1 string temp; int R; int T; temp = Console.ReadLine(); R = int.Parse(temp); temp = Console.ReadLine(); T = int.Parse(temp); int i = 0; while (i < R) { Console.Write("#"); i = i + 1; } Console.WriteLine(); int j = 0; j = 0; while (j < T) { Console.Write("#"); j = j + 1; }
الفرق هو أنه في الحل "الممكن" ، تم استخدام المتغير الثاني لعرض السطر الثاني. تحتاج إلى الإصرار على استخدام المتغير نفسه لكلتا الدورتين. يمكن للمرء أن يجادل لمثل هذا القيد في هذا الحل مع عداد واحد لدورتين سيكون مثالا على مصطلح "مكافحة الصفر". فهم هذا المصطلح ضروري عند حل المشكلات التالية. كحل وسط ، يمكنك حفظ كلا الحلين للمشكلة.
تظهر مشكلة نموذجية في استخدام متغير عداد مفرد لدورتين كما يلي:
ص = 5 ، ر = 11#####
######
لا يتطابق عدد الأحرف في السطر الثاني مع قيمة T. إذا كانت هناك حاجة إلى مساعدة مع هذه المشكلة ، فأنت بحاجة إلى "بث أنفك" في ملخص حول المشاكل النموذجية مع الحلقات. هذا هو رقم العرض 3. يتم تشخيصه إذا قمت بإضافة إخراج قيمة العداد مباشرة قبل الدورة الثانية. تصحيح بواسطة التصفير. لكن من الأفضل عدم الإخبار على الفور. يجب على الطالب محاولة صياغة فرضية واحدة على الأقل.
بالطبع ، لا يزال هناك مثل هذا الحل. لكنني لم أره من قبل بين الطلاب. في مرحلة دراسة الدورات ، ستنثر القصة عنه الاهتمام. يمكنك العودة إليها لاحقًا ، عند دراسة وظائف العمل باستخدام الأوتار.
ممكن رقم 2 string temp; int R; int T; temp = Console.ReadLine(); R = int.Parse(temp); temp = Console.ReadLine(); T = int.Parse(temp); Console.WriteLine(new String('#', R)); Console.WriteLine(new String('#', T));
المهمة التالية المطلوبة:
عرض الأرقام من 0 إلى 9. يجب أن يكون كل رقم على خطه الخاص. يتم إدخال عدد الأرقام في كل سطر (W) من لوحة المفاتيح.
ث = 100000000000
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
8888888888
9999999999
إذا كان الطالب قد أتقن تقنية استبدال المتغير ، فسوف يتعامل بسرعة كبيرة. مشكلة محتملة ستكون مرة أخرى في التصفير المتغير. إذا لم تتمكن من التعامل مع التحويل ، فأنت في عجلة من أمرك وتحتاج إلى حل المشكلات البسيطة.
شكرا لاهتمامكم
مثل ، اشترك في القناة.ملاحظة: إذا وجدت أخطاء أو أخطاء في النص ، فيرجى إخبارنا بذلك.
يمكن القيام بذلك عن طريق تمييز جزء من النص والضغط على "Enter + Enter" على جهاز Mac ، وعلى لوحات المفاتيح الكلاسيكية "Ctrl / Enter" ، أو من خلال الرسائل الخاصة. إذا كانت هذه الخيارات غير متوفرة ، فاكتب عن الأخطاء في التعليقات. شكرا لك