Πώς να διδάξετε πώς να ξεπερνάτε τις δυσκολίες και ταυτόχρονα να γράφετε κύκλους

Παρά το γεγονός ότι θα μιλήσουμε για ένα από τα βασικά θέματα, αυτό το άρθρο είναι γραμμένο για έμπειρους επαγγελματίες. Ο στόχος είναι να δείξουμε ποιες λανθασμένες αντιλήψεις έχουν οι αρχάριοι στον προγραμματισμό. Για τους πρακτικούς προγραμματιστές, αυτά τα προβλήματα έχουν λυθεί εδώ και καιρό, έχουν ξεχαστεί ή δεν έχουν παρατηρηθεί καθόλου. Το άρθρο μπορεί να σας φανεί χρήσιμο εάν ξαφνικά χρειαστεί να βοηθήσετε κάποιον με αυτό το θέμα. Το άρθρο κάνει παραλληλισμούς με υλικό από διάφορα βιβλία προγραμματισμού των Schildt, Stroustrup, Okulov.

Το θέμα σχετικά με τους κύκλους επιλέχθηκε επειδή πολλοί άνθρωποι αποκλείονται από αυτό όταν κυριαρχούν στον προγραμματισμό.

Αυτή η τεχνική έχει σχεδιαστεί για αδύναμους μαθητές. Κατά κανόνα, οι ισχυροί άνθρωποι δεν κολλάνε σε αυτό το θέμα και δεν χρειάζεται να επινοηθούν ειδικές τεχνικές για αυτούς. Ο δευτερεύων στόχος του άρθρου είναι να μεταφερθεί αυτή η τεχνική από την τάξη «εργάζεται για όλους τους μαθητές, αλλά μόνο ένας δάσκαλος» στην τάξη «εργάζεται για όλους τους μαθητές, για όλους τους δασκάλους». Δεν διεκδικώ την απόλυτη πρωτοτυπία. Εάν χρησιμοποιείτε ήδη παρόμοια μεθοδολογία για να διδάξετε αυτό το θέμα, γράψτε πώς διαφέρει η έκδοσή σας. Εάν αποφασίσετε να το χρησιμοποιήσετε, πείτε μας πώς πήγε. Εάν μια παρόμοια τεχνική περιγράφεται σε ένα βιβλίο, γράψτε το όνομα.


Δούλεψα αυτήν την τεχνική για 4 χρόνια, μελετώντας ατομικά με μαθητές διαφορετικών επιπέδων εκπαίδευσης. Συνολικά υπάρχουν περίπου πενήντα μαθητές και δύο χιλιάδες ώρες μαθήματα. Στην αρχή, οι μαθητές πάντα κολλούσαν σε αυτό το θέμα και έφευγαν. Μετά από κάθε μαθητή, προσαρμόστηκε η μεθοδολογία και το υλικό. Κατά τη διάρκεια του περασμένου έτους, οι μαθητές δεν ήταν πλέον κολλημένοι σε αυτό το θέμα, έτσι αποφάσισα να μοιραστώ τα ευρήματά μου.

Γιατί τόσα γράμματα; Οι κύκλοι είναι τόσο στοιχειώδεις!

Όπως έγραψα παραπάνω, για τους προγραμματιστές και για δυνατούς μαθητές, η πολυπλοκότητα της έννοιας των βρόχων μπορεί να υποτιμηθεί. Για παράδειγμα, μπορείτε να δώσετε μια μεγάλη διάλεξη, να δείτε κεφαλιά που γνέφουν και έξυπνα μάτια. Αλλά όταν προσπαθείτε να λύσετε οποιοδήποτε πρόβλημα, αρχίζει η λήθαργος και τα ανεξήγητα προβλήματα. Μετά τη διάλεξη, οι μαθητές μάλλον είχαν μόνο μερική κατανόηση. Η κατάσταση επιδεινώνεται από το γεγονός ότι οι ίδιοι οι μαθητές δεν μπορούν να εκφράσουν ποια ακριβώς είναι η αυταπάτη τους.
Μια μέρα συνειδητοποίησα ότι οι μαθητές αντιλαμβάνονταν τα παραδείγματά μου ως ιερογλυφικά. Δηλαδή, σαν αδιαίρετα κομμάτια κειμένου στα οποία πρέπει να προσθέσετε κάποιο «μαγικό» γράμμα και θα λειτουργήσει.
Μερικές φορές παρατήρησα ότι οι μαθητές πιστεύουν ότι για να λύσετε ένα συγκεκριμένο πρόβλημα χρειάζεστε κάτι άλλο ένα σχέδιο που απλά δεν έχω καλύψει ακόμα. Αν και η λύση απαιτούσε μόνο μια μικρή τροποποίηση του παραδείγματος.

Κατέληξα λοιπόν στην ιδέα ότι η εστίαση δεν πρέπει να είναι στη σύνταξη των εκφράσεων, αλλά στην ιδέα της αναπαράστασης επαναλαμβανόμενου κώδικα χρησιμοποιώντας βρόχους. Μόλις οι μαθητές κατακτήσουν αυτήν την ιδέα, οποιαδήποτε σύνταξη μπορεί να βελτιωθεί με λίγη εξάσκηση.

Ποιους και γιατί διδάσκω;

Δεδομένου ότι δεν υπάρχουν εισαγωγικές εξετάσεις, τα μαθήματα μπορούν να περιλαμβάνουν τόσο δυνατούς όσο και πολύ αδύναμους μαθητές. Μπορείτε να διαβάσετε περισσότερα για τους μαθητές μου στο άρθρο Πορτρέτο φοιτητών βραδινού μαθήματος
Προσπάθησα να διασφαλίσω ότι όλοι όσοι θέλουν να μάθουν προγραμματισμό μπορούν να τον μάθουν.
Τα μαθήματά μου γίνονται μεμονωμένα και ο μαθητής πληρώνει τα δικά του χρήματα για το καθένα. Φαίνεται ότι οι μαθητές θα βελτιστοποιήσουν το κόστος και θα απαιτήσουν το ελάχιστο. Ωστόσο, οι άνθρωποι πηγαίνουν σε μαθήματα πρόσωπο με πρόσωπο με έναν ζωντανό δάσκαλο όχι για την ίδια τη γνώση, αλλά για την εμπιστοσύνη σε αυτά που έχουν μάθει, για ένα αίσθημα προόδου και για έγκριση από τον ειδικό (δάσκαλο). Εάν οι μαθητές δεν αισθάνονται πρόοδο στη μάθησή τους, θα φύγουν. Γενικά, οι τάξεις μπορούν να δομηθούν έτσι ώστε οι μαθητές να αισθάνονται πρόοδο στην αύξηση του αριθμού των οικείων δομών. Δηλαδή, πρώτα μελετάμε ενώ λεπτομερώς, μετά μελετάμε για, μετά κάνουμε ενώ, και τώρα έχουμε έτοιμο χίλια και μια νυχτερινή σειρά μαθημάτων, στα οποία μελετώνται μόνο κύκλοι για δύο μήνες, και στο τέλος - ένας μαθητής που έγραψε μια τυπική βιβλιοθήκη υπό υπαγόρευση. Ωστόσο, για να λύσετε πρακτικά προβλήματα, χρειάζεστε όχι μόνο γνώση του υλικού, αλλά και ανεξαρτησία στην εφαρμογή του και στην αναζήτηση νέων πληροφοριών. Ως εκ τούτου, για τα μαθήματα πρόσωπο με πρόσωπο, νομίζω ότι η σωστή αρχή είναι να διδάσκετε το ελάχιστο και να ενθαρρύνετε την ανεξάρτητη μελέτη των αποχρώσεων και των σχετικών θεμάτων. Στο θέμα των βρόχων, θεωρώ ότι η κατασκευή while είναι η ελάχιστη. Μπορείτε να καταλάβετε την αρχή από αυτό. Γνωρίζοντας την αρχή, μπορείτε να κυριαρχήσετε τόσο για τον εαυτό σας όσο και για να το κάνετε.

Για να επιτύχουμε γνώση της ύλης από αδύναμους μαθητές, η περιγραφή της σύνταξης δεν αρκεί. Είναι απαραίτητο να δοθούν πιο απλές αλλά ποικίλες εργασίες και να περιγραφούν παραδείγματα με περισσότερες λεπτομέρειες. Τελικά, η ταχύτητα ανάπτυξης περιορίζεται από την ικανότητα του μαθητή να μεταμορφώνει εκφράσεις και να αναζητά μοτίβα. Για τους έξυπνους μαθητές, οι περισσότερες εργασίες θα είναι βαρετές. Όταν μελετάτε μαζί τους, δεν χρειάζεται να επιμένετε στην επίλυση του 100% των προβλημάτων. Το υλικό μου μπορείτε να το δείτε στο το github μου. Είναι αλήθεια ότι το αποθετήριο μοιάζει περισσότερο με το grimoire ενός warlock - κανείς εκτός από εμένα δεν θα καταλάβει πού είναι πού και αν αποτύχεις τον έλεγχο, μπορείς να τρελαθείς

Η μεθοδολογία είναι προσανατολισμένη στην πρακτική

Η θεωρία εξηγείται χρησιμοποιώντας το παράδειγμα της επίλυσης ενός προβλήματος. Σε ένα μάθημα βασικών αρχών προγραμματισμού όπου διδάσκονται κλάδοι και βρόχοι, απλά δεν είναι δυνατό να δοθεί μια χρήσιμη διάλεξη για ένα θέμα για μια ολόκληρη ώρα. 15-20 λεπτά είναι αρκετά για να εξηγηθεί η έννοια. Οι κύριες δυσκολίες προκύπτουν κατά την εκτέλεση πρακτικών εργασιών.
Οι αρχάριοι δάσκαλοι μπορούν να χτυπήσουν τελεστές, διακλαδώσεις, βρόχους και πίνακες σε μία διάλεξη. Αλλά οι μαθητές τους θα αντιμετωπίσουν το πρόβλημα της αφομοίωσης αυτών των πληροφοριών.
Είναι απαραίτητο όχι μόνο να πούμε το υλικό, αλλά και να βεβαιωθούμε ότι οι ακροατές το καταλαβαίνουν.

Το γεγονός της κατάκτησης ενός θέματος καθορίζεται από το πώς ο μαθητής αντιμετωπίζει την ανεξάρτητη εργασία.
Εάν ένας μαθητής κατάφερε να λύσει ένα πρόβλημα σε ένα θέμα χωρίς τη βοήθεια καθηγητή, τότε το θέμα έχει κατακτηθεί. Για να εξασφαλιστεί ο αυτοέλεγχος, κάθε εργασία περιγράφεται σε έναν πίνακα με σενάρια δοκιμών. Τα καθήκοντα έχουν σαφή σειρά. Δεν συνιστάται η παράλειψη εργασιών. Εάν η τρέχουσα εργασία είναι πολύ δύσκολη, τότε η μετάβαση στην επόμενη είναι άχρηστη. Είναι ακόμα πιο περίπλοκο. Για να μπορέσει ο μαθητής να κατακτήσει την τρέχουσα περίπλοκη εργασία, του εξηγούνται διάφορες τεχνικές χρησιμοποιώντας το παράδειγμα του πρώτου προβλήματος. Στην πραγματικότητα, ολόκληρο το περιεχόμενο του θέματος καταλήγει σε τεχνικές για την υπέρβαση των δυσκολιών. Οι κύκλοι είναι περισσότερο παρενέργεια.

Το πρώτο καθήκον είναι πάντα ένα παράδειγμα. Το δεύτερο διαφέρει ελαφρώς και εκτελείται «ανεξάρτητα» αμέσως μετά το πρώτο υπό την επίβλεψη δασκάλου. Όλες οι επόμενες εργασίες στοχεύουν στην προσοχή σε διάφορα μικρά πράγματα που μπορούν να προκαλέσουν παρανοήσεις.

Η εξήγηση του παραδείγματος είναι ένας διάλογος στον οποίο ο μαθητής πρέπει να ανακαλέσει τη διάδοση και τη διασταυρούμενη επικύρωση για να βεβαιωθεί ότι έχει κατακτήσει ένα μέρος του υλικού.

Θα είμαι κοινός και θα πω ότι το πρώτο παράδειγμα για το θέμα είναι πολύ σημαντικό. Εάν έχετε το υλικό για εκτεταμένη ανεξάρτητη εργασία, οι παραλείψεις του πρώτου παραδείγματος μπορούν να διορθωθούν. Εάν δεν υπάρχει τίποτα άλλο εκτός από το παράδειγμα, τότε ο μαθητής πιθανότατα δεν θα κατακτήσει το θέμα.

Ενώ ή για;

Ένα από τα αμφιλεγόμενα ζητήματα είναι η επιλογή της κατασκευής για το παράδειγμα: ενώ ή για. Κάποτε, ένας φίλος μου προγραμματιστής, χωρίς διδακτική εμπειρία, πέρασε μια ώρα για να με πείσει ότι ο βρόχος for ήταν ο πιο εύκολος στην κατανόηση. Τα επιχειρήματα συνοψίζονται στο ότι «όλα σε αυτό είναι ξεκάθαρα και διατυπωμένα στη θέση τους». Ωστόσο, η βασική αιτία των δυσκολιών για πραγματικούς αρχάριους είναι η ιδέα του ίδιου του κύκλου και όχι η γραφή του. Εάν κάποιος δεν κατανοεί αυτήν την ιδέα, τότε θα έχει δυσκολία με τη σύνταξη. Μόλις υλοποιηθεί η ιδέα, τα προβλήματα του σχεδιασμού κώδικα εξαφανίζονται από μόνα τους.

Στα υλικά μου, το θέμα των βρόχων ακολουθεί το θέμα της διακλάδωσης. Η εξωτερική ομοιότητα του if και while μας επιτρέπει να σχεδιάσουμε μια άμεση αναλογία: «όταν η συνθήκη στην κεφαλίδα είναι αληθής, τότε το σώμα εκτελείται». Η μόνη ιδιαιτερότητα του κύκλου είναι ότι το σώμα εκτελείται πολλές φορές.

Το δεύτερο επιχείρημά μου είναι ότι το while απαιτεί λιγότερη μορφοποίηση από το για. Λιγότερη μορφοποίηση σημαίνει λιγότερα ανόητα λάθη με κόμματα και παρενθέσεις που λείπουν. Οι αρχάριοι δεν έχουν ακόμη αναπτύξει αρκετή προσοχή και σχολαστικότητα για να αποφεύγουν αυτόματα τα συντακτικά λάθη.
Το τρίτο επιχείρημα εξηγείται σε πολλά καλά βιβλία ως το πρώτο επιχείρημα.

Εάν ο μαθητής μπορεί εύκολα να μετασχηματίσει εκφράσεις, τότε μπορείτε να μιλήσετε για εν παρόδω. Στη συνέχεια ο μαθητής θα επιλέξει αυτό που του αρέσει περισσότερο. Εάν οι μεταμορφώσεις προκαλούν δυσκολίες, τότε είναι καλύτερο να μην αποσπάσετε την προσοχή σας. Αφήστε τον μαθητή πρώτα να λύσει τα πάντα χρησιμοποιώντας ενώ. Αφού κατακτήσετε το θέμα των βρόχων, μπορείτε να ξαναγράψετε τις λύσεις για να εξασκηθείτε στη μετατροπή ενώ σε για.
Οι θηλιές Postcondition είναι ένα αρκετά σπάνιο θηρίο. Δεν αφιερώνω καθόλου χρόνο σε αυτό. Εάν ένας μαθητής έχει κατακτήσει τις ιδέες της αναγνώρισης προτύπων και της μεταμόρφωσης των εκφράσεων, μπορεί να το καταλάβει χωρίς τη βοήθειά μου.

Κατά την επίδειξη του πρώτου παραδείγματος σε δυνατούς μαθητές, εφιστώ την προσοχή στο γεγονός ότι στο πρώτο παράδειγμα είναι σημαντικό να καταγράψουμε όχι μόνο τη λύση, αλλά και ολόκληρη την αλυσίδα των ενεργειών που οδήγησαν στο αποτέλεσμα. Οι τεμπέληδες μαθητές μπορούν να παραμελήσουν τη γραφή και να αντιγράψουν μόνο τον τελικό αλγόριθμο. Πρέπει να πειστούν ότι μια μέρα θα τους έρθει μια δύσκολη αποστολή. Για να το λύσετε, θα χρειαστεί να ακολουθήσετε τα βήματα όπως σε αυτό το παράδειγμα. Γι' αυτό είναι σημαντικό να καταγράφονται όλα τα στάδια. Στα παρακάτω προβλήματα θα μπορείτε να αφήσετε μόνο την τελική έκδοση της λύσης.

Η κύρια ιδέα του αυτοματισμού είναι ότι εμπιστευόμαστε έναν υπολογιστή να κάνει καθημερινές εργασίες για ένα άτομο. Μία από τις βασικές τεχνικές είναι η γραφή βρόχων. Χρησιμοποιείται όταν πολλές ίδιες επαναλαμβανόμενες ενέργειες γράφονται σε ένα πρόγραμμα στη σειρά.

Το ρητό είναι καλύτερο από το άρρητο

Μπορεί να φαίνεται καλή ιδέα να εμφανίζεται η ίδια φράση πολλές φορές στην πρώτη εργασία βρόχου. Για παράδειγμα:

Ουρα, δουλεύει!
Ουρα, δουλεύει!
Ουρα, δουλεύει!
Ουρα, δουλεύει!
Ουρα, δουλεύει!
Ουρα, δουλεύει!
Ουρα, δουλεύει!
Ουρα, δουλεύει!

Αυτή η επιλογή είναι κακή επειδή η τιμή του μετρητή δεν είναι ορατή στην έξοδο. Αυτό είναι ένα πρόβλημα για αρχάριους. Μην την υποτιμάς. Αρχικά, αυτή η εργασία ήταν η πρώτη και η εργασία της εξαγωγής μιας σειράς αριθμών σε αύξουσα σειρά ήταν η δεύτερη. Ήταν απαραίτητο να εισαχθούν πρόσθετοι όροι «κύκλος Ν φορές» και «κύκλος από το Α στο Β», που είναι ουσιαστικά το ίδιο πράγμα. Για να μην δημιουργήσω περιττές οντότητες, αποφάσισα να δείξω μόνο ένα παράδειγμα με την έξοδο μιας σειράς αριθμών. Λίγοι άνθρωποι καταφέρνουν να μάθουν πώς να κρατούν έναν πάγκο στο κεφάλι τους και να μοντελοποιούν τη συμπεριφορά ενός προγράμματος στο κεφάλι τους χωρίς προετοιμασία. Μερικοί μαθητές συναντούν πρώτα τη νοητική μοντελοποίηση στο θέμα των κύκλων.
Μετά από λίγη εξάσκηση, δίνω την εργασία της επανάληψης του ίδιου κειμένου να λυθεί ανεξάρτητα. Εάν δώσετε πρώτα έναν ορατό μετρητή και μετά έναν αόρατο, οι μαθητές θα έχουν λιγότερα προβλήματα. Μερικές φορές η υπόδειξη "μην γράφετε τον μετρητή στην οθόνη" είναι αρκετή.

Πώς το εξηγούν οι άλλοι;

Στα περισσότερα εκπαιδευτικά υλικά στο Διαδίκτυο, η σύνταξη του κύκλου δίνεται ως μέρος μιας «διάλεξης». Για παράδειγμα, στο developer.mozilla.org (προς το παρόν), περιγράφονται πολλές άλλες δομές μαζί με τον βρόχο while. Σε αυτή την περίπτωση, μόνο τα ίδια τα σχέδια δίνονται με τη μορφή προτύπων. Το αποτέλεσμα της εκτόξευσης τους περιγράφεται με λόγια, αλλά δεν υπάρχει καμία απεικόνιση. Κατά τη γνώμη μου, μια τέτοια παρουσίαση του θέματος πολλαπλασιάζει τη χρησιμότητα τέτοιων υλικών με μηδέν. Ο μαθητής μπορεί να ξαναγράψει τον κώδικα και να τον εκτελέσει μόνος του, αλλά χρειάζεται ακόμα ένα πρότυπο για σύγκριση. Πώς μπορείτε να καταλάβετε ότι ένα παράδειγμα έχει ξαναγραφεί σωστά αν δεν υπάρχει τίποτα με το οποίο να συγκρίνετε το αποτέλεσμα;
Όταν δίνεται μόνο ένα πρότυπο, χωρίς παράδειγμα, γίνεται ακόμα πιο δύσκολο για τον μαθητή. Πώς να καταλάβετε ότι τα τμήματα κώδικα τοποθετούνται σωστά στο πρότυπο; Μπορείτε να δοκιμάσετε να γράψετε κάπως, και μετά τρέξτε. Αλλά αν δεν υπάρχει πρότυπο για τη σύγκριση του αποτελέσματος, τότε ούτε η εκτόξευση θα βοηθήσει.

Στο μάθημα της C++ στο Intuitive, η σύνταξη βρόχου είναι θαμμένη στην τρίτη σελίδα της Διάλεξης 4 με θέμα «τελεστές». Κατά την επεξήγηση της σύνταξης των βρόχων, δίνεται ιδιαίτερη έμφαση στον όρο «τελεστής». Ο όρος παρουσιάζεται ως ένα σύνολο γεγονότων όπως «σύμβολο. αυτό είναι μια πρόταση", "{} είναι μια σύνθετη πρόταση", "το σώμα του βρόχου πρέπει να είναι μια πρόταση". Δεν μου αρέσει αυτή η προσέγγιση γιατί φαίνεται να κρύβει σημαντικές σχέσεις πίσω από έναν όρο. Η ανάλυση του πηγαίου κώδικα ενός προγράμματος σε όρους σε αυτό το επίπεδο απαιτείται από τους προγραμματιστές μεταγλωττιστών για την υλοποίηση της προδιαγραφής γλώσσας, αλλά όχι από τους μαθητές ως πρώτη προσέγγιση. Οι νεοεισερχόμενοι στον προγραμματισμό σπάνια είναι αρκετά σχολαστικοί ώστε να δίνουν τόσο μεγάλη προσοχή στους όρους. Είναι ένα σπάνιο άτομο που θυμάται και καταλαβαίνει νέες λέξεις την πρώτη φορά. Σχεδόν κανείς δεν μπορεί να εφαρμόσει σωστά έναν όρο που μόλις έμαθε. Επομένως, οι μαθητές λαμβάνουν πολλά σφάλματα όπως "Έγραψα ενώ(a<7);{, αλλά το πρόγραμμα δεν λειτουργεί."
Κατά τη γνώμη μου, στην αρχή είναι καλύτερα να δώσουμε τη σύνταξη της κατασκευής αμέσως με παρένθεση. Η επιλογή χωρίς παρενθέσεις θα πρέπει να εξηγείται μόνο εάν ο μαθητής έχει μια συγκεκριμένη ερώτηση: «γιατί δεν υπάρχουν παρενθέσεις και λειτουργεί».

Στο βιβλίο του Okulov το 2012 «Fundamentals of Programming», μια εισαγωγή στους βρόχους ξεκινά με το μοτίβο for, μετά δίνει συστάσεις για τη χρήση του και μετά πηγαίνει αμέσως στην πειραματική ενότητα του μαθήματος. Καταλαβαίνω ότι το βιβλίο γράφτηκε για εκείνη τη μειοψηφία πολύ ικανών μαθητών που σπάνια έρχονται στα μαθήματά μου.

Στα δημοφιλή βιβλία, το αποτέλεσμα των θραυσμάτων κώδικα γράφεται πάντα. Για παράδειγμα, η έκδοση του 8 του Shildt "Java 2015. The Complete Guide". Πρώτα, δίνεται ένα πρότυπο, στη συνέχεια ένα παράδειγμα προγράμματος και αμέσως μετά - το αποτέλεσμα της εκτέλεσης.

Ως παράδειγμα, θεωρήστε έναν βρόχο while που κάνει το αντίστροφο
αντίστροφη μέτρηση ξεκινώντας από το 10 και εμφανίζονται ακριβώς 10 γραμμές «μέτρων»:

//Продемонстрировать применение оператора цикла while
class While {
    public static void main(String args []) {
        int n = 10;
        while (n > 0) {
            System.out.println("такт " + n);
            n--;
        }
    }
}

Μόλις εκτελεστεί, αυτό το πρόγραμμα βγάζει δέκα "κύκλους" ως εξής:
такт 10
такт 9
такт 8
такт 7
такт 6
такт 5
такт 4
такт 3
такт 2
такт 1

Η προσέγγιση της περιγραφής ενός προτύπου, ενός παραδείγματος προγράμματος και του αποτελέσματος του προγράμματος χρησιμοποιείται επίσης στο βιβλίο «Javascript for Kids» και στο μάθημα js στο w3schools.com. Η μορφή της ιστοσελίδας επιτρέπει ακόμη και σε αυτό το παράδειγμα να είναι διαδραστικό.

Το βιβλίο του Stroustrup το 2016 Principles and Practice Using C++ προχώρησε ακόμη περισσότερο. Το πρώτο βήμα είναι να εξηγήσετε ποιο αποτέλεσμα πρέπει να ληφθεί και μετά εμφανίζεται το κείμενο του προγράμματος. Επιπλέον, δεν παίρνουν απλώς ένα τυχαίο πρόγραμμα ως παράδειγμα, αλλά κάνουν μια εκδρομή στην ιστορία. Αυτό βοηθάει να επιστήσουμε την προσοχή σε αυτό: «Κοίτα, αυτό δεν είναι απλώς κάποιο άχρηστο κείμενο. Βλέπεις κάτι σημαντικό».

Ως παράδειγμα επανάληψης, θεωρήστε το πρώτο πρόγραμμα που εκτελέστηκε σε μια αποθηκευμένη μηχανή προγράμματος (EDSAC). Γράφτηκε από τον David Wheeler στο Εργαστήριο Υπολογιστών του Πανεπιστημίου του Κέιμπριτζ, Αγγλία, στις 6 Μαΐου 1949. Αυτό το πρόγραμμα υπολογίζει και εκτυπώνει μια απλή λίστα τετραγώνων.
0 0
1 1
2 4
3 9
4 16
...
98 9604
99 9801

Εδώ, κάθε γραμμή περιέχει έναν αριθμό ακολουθούμενο από έναν χαρακτήρα καρτέλας ('t') και το τετράγωνο αυτού του αριθμού. Η έκδοση C++ αυτού του προγράμματος μοιάζει με αυτό:

//Вычисляем и распечатываем таблицу квадратов чисел 0-99
int main()
{
    int i = 0; // Начинаем с нуля
    while(i < 100){
        cout << i << 't' << square(i) << 'n';
        ++i;
    }
}

Είναι ενδιαφέρον ότι το συντακτικό μοτίβο δεν περιγράφεται σε αυτό το βιβλίο. Stroustrup στο εγχειρίδιο του εκπαιδευτή (μετάφραση) τονίζει ότι σέβεται τη νοημοσύνη των μαθητών του. Ίσως η ικανότητα αναγνώρισης ενός προτύπου σε πολλά παραδείγματα θεωρείται εκδήλωση μιας τέτοιας νοημοσύνης.

Όπως εξηγούμαι

Η προσέγγιση του Stroustrup: η περιγραφή του αποτελέσματος, μετά η επίλυση του προβλήματος και μετά μια ανεξάρτητη ανάλυση από τον μαθητή - φαίνεται η πιο στοχαστική. Ως εκ τούτου, αποφάσισα να το πάρω ως βάση, αλλά να το πω χρησιμοποιώντας ένα λιγότερο ιστορικό παράδειγμα - το έργο της εξαγωγής ενός «πίνακα περιεχομένων». Σχηματίζει μια αναγνωρίσιμη άγκυρα ώστε να μπορείτε στη συνέχεια να πείτε «θυμηθείτε την εργασία σχετικά με τον πίνακα περιεχομένων» και έτσι ώστε οι μαθητές να θυμούνται ακριβώς αυτό. Στο παράδειγμά μου, προσπάθησα να αποτρέψω δύο ακόμη από τις πιο κοινές παρανοήσεις. Στη συνέχεια θα γράψω για αυτούς με περισσότερες λεπτομέρειες.

Σε αυτή την εργασία εισάγουμε τεχνικές για την επίλυση σύνθετων προβλημάτων. Η αρχική απόφαση πρέπει να ληφθεί πρωτόγονη και απλή. Λοιπόν, τότε μπορείτε να σκεφτείτε πώς να βελτιώσετε αυτήν τη λύση.
Введение
Глава 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("Заключение");

Μετά την εφαρμογή της τεχνικής "έκφραση του μοτίβου μιας μεταβλητής" στον κώδικα, λαμβάνετε πολλές ομάδες πανομοιότυπων ενεργειών που γίνονται στη σειρά. Τώρα οι επαναλαμβανόμενες ενέργειες μπορούν να αντικατασταθούν με έναν κύκλο.

Η σειρά επίλυσης ενός προβλήματος όπου πρέπει να χρησιμοποιήσετε βρόχους αποτελείται από τα ακόλουθα βήματα:

  1. Λύστε το "κατά μέτωπο" με πολλές ξεχωριστές εντολές
  2. Βρείτε ένα μοτίβο
  3. Να εκφράσετε το μοτίβο μιας μεταβλητής
  4. Σχεδιασμός ως κύκλος

Στη συνέχεια, εισάγονται νέοι όροι, έτσι ώστε ο μαθητής να μην βρεθεί στην κατάσταση «καταλαβαίνω τα πάντα, αλλά δεν μπορώ να τα πω»:
— ένας μετρητής είναι πάντα μια μεταβλητή που απαιτείται για την παρακολούθηση του αριθμού των βημάτων σε έναν βρόχο. Συνήθως ένας ακέραιος που συγκρίνεται με τον περιορισμό.
— βήμα μετρητή — περιγραφή του μοτίβου των αλλαγών του μετρητή.
- περιορισμός - αριθμός ή μεταβλητή με την οποία συγκρίνεται ο μετρητής έτσι ώστε ο αλγόριθμος να είναι τελικός. Η τιμή του μετρητή αλλάζει για να πλησιάσει το όριο.
— σώμα βρόχου — ένα σύνολο εντολών που θα επαναληφθούν. Όταν λένε "η εντολή είναι γραμμένη μέσα σε ένα βρόχο", εννοούν το σώμα.
— επανάληψη βρόχου — εφάπαξ εκτέλεση του σώματος βρόχου.
— Συνθήκη βρόχου — μια λογική έκφραση που καθορίζει εάν θα εκτελεστεί άλλη επανάληψη. (Εδώ μπορεί να υπάρχει σύγχυση με τις δομές διακλάδωσης)
Πρέπει να είστε προετοιμασμένοι για το γεγονός ότι στην αρχή οι μαθητές θα χρησιμοποιήσουν όρους για άλλους σκοπούς. Αυτό ισχύει και για τους δυνατούς και για τους αδύναμους. Η δημιουργία μιας κοινής γλώσσας είναι τέχνη. Τώρα θα γράψω εν συντομία: πρέπει να ορίσετε την εργασία "επισήμανση του τμήματος κώδικα με <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 μικρότερος ή μεγαλύτερος από τον αναμενόμενο. Λύσεις:
    — αυξήστε την αρχική τιμή του μετρητή κατά 1.
    — αντικαταστήστε τον τελεστή αυστηρής σύγκρισης (< ή >) με έναν μη αυστηρό (<= ή >=).
    — αλλάξτε την οριακή τιμή σε 1.
  2. Οι ενέργειες σε έναν βρόχο εκτελούνται χωρίς διακοπή, επ' αόριστον. Λύσεις:
    — προσθέστε μια εντολή αλλαγής μετρητή εάν λείπει.
    — Διορθώστε την εντολή αλλαγής μετρητή έτσι ώστε η τιμή της να πλησιάζει περισσότερο το όριο.
    — αφαιρέστε την εντολή αλλαγής περιορισμών εάν βρίσκεται στο σώμα του βρόχου.
  3. Ο αριθμός των ενεργειών σε έναν βρόχο είναι περισσότερο από 1 μικρότερος ή μεγαλύτερος από τον αναμενόμενο. Η ενέργεια στον βρόχο δεν εκτελέστηκε ούτε μία φορά. Πρώτα πρέπει να μάθετε τις πραγματικές τιμές των μεταβλητών λίγο πριν ξεκινήσει ο βρόχος. Λύσεις:
    — αλλάξτε την αρχική τιμή του περιορισμού
    — αλλάξτε την αρχική τιμή του μετρητή

Το πρόβλημα 3 συνήθως περιλαμβάνει τη χρήση της λανθασμένης μεταβλητής ή τη μη επαναφορά του μετρητή στο μηδέν.

Μετά από αυτή την εξήγηση, ο μαθητής μπορεί να εξακολουθεί να έχει διάφορες παρανοήσεις σχετικά με τον τρόπο λειτουργίας των βρόχων.
Για να διαλύσω τα πιο συνηθισμένα, σας δίνω τις ακόλουθες εργασίες:

  1. Στο οποίο ο χρήστης εισάγει το όριο, την αρχική τιμή μετρητή ή το βήμα μετρητή.
  2. Στην οποία η τιμή του μετρητή πρέπει να χρησιμοποιείται σε κάποια αριθμητική έκφραση. Συνιστάται η χρήση μετρητή στη ριζική έκφραση ή στον παρονομαστή έτσι ώστε η διαφορά να είναι μη γραμμική.
  3. Στην οποία η τιμή του μετρητή δεν εμφανίζεται στην οθόνη ενώ εκτελείται ο βρόχος. Για παράδειγμα, εμφάνιση του απαιτούμενου αριθμού πανομοιότυπων τμημάτων κειμένου ή σχεδίαση μιας φιγούρας με γραφικά χελώνας.
  4. Στις οποίες πρέπει να εκτελέσετε πρώτα μερικές επαναλαμβανόμενες ενέργειες και μετά άλλες.
  5. Στις οποίες πρέπει να εκτελέσετε άλλες ενέργειες πριν και μετά την επανάληψη

Για κάθε εργασία πρέπει να παρέχετε δεδομένα δοκιμής και το αναμενόμενο αποτέλεσμα.

Για να καταλάβετε πόσο γρήγορα μπορείτε να κινηθείτε, πρέπει να διαβάσετε τους όρους αυτών των προβλημάτων και να ρωτήσετε: "σε τι διαφέρουν από το παράδειγμα;", "Τι πρέπει να αλλάξει στο παράδειγμα για να τα επιλύσετε;" Αν ο μαθητής απαντήσει με νόημα, τότε αφήστε τον να λύσει τουλάχιστον ένα στην τάξη, και τα υπόλοιπα στο σπίτι μόνος του. Εάν η λύση είναι επιτυχής, τότε μπορούμε να αρχίσουμε να εξηγούμε τις συνθήκες μέσα στους βρόχους.
Εάν έχετε προβλήματα να λύσετε προβλήματα μόνοι σας, πρέπει να τα επεξεργαστείτε όλα στην τάξη. Για να αποφύγετε την επίλυση του προβλήματος να θυμίζει σχέδιο κουκουβάγιας, προτείνω πρώτα να λύσετε το πρόβλημα με μη καθολικό τρόπο. Δηλαδή, ώστε η λύση να περάσει την πρώτη δοκιμή και να μην χρησιμοποιεί την κατασκευή βρόχου. Λοιπόν, εφαρμόστε μετασχηματισμούς για να επιτύχετε καθολικότητα της λύσης.

Βρόχους και κλαδιά

Κατά τη γνώμη μου, είναι χρήσιμο να δοθεί ξεχωριστά το θέμα «κύκλοι εντός κλάδων». Για να μπορείτε αργότερα να δείτε τη διαφορά μεταξύ του πολλαπλού ελέγχου μιας συνθήκης και του ελέγχου της μίας.
Οι εργασίες για ενοποίηση θα αφορούν την έξοδο αριθμών από το Α έως το Β, οι οποίοι εισάγονται από τον χρήστη:
- πάντα με αύξουσα σειρά.
- αύξουσα ή φθίνουσα ανάλογα με τις τιμές των Α και Β.

Το θέμα της «διακλάδωσης εντός βρόχων» θα πρέπει να μετακινηθεί μόνο αφού ο μαθητής έχει κατακτήσει τις τεχνικές: «αντικατάσταση μοτίβου με μεταβλητή» και «αντικατάσταση επαναλαμβανόμενων ενεργειών με κύκλο».
Ο κύριος λόγος για τη χρήση κλαδιών μέσα στους βρόχους είναι οι ανωμαλίες στο σχέδιο. Στη μέση σπάει ανάλογα με τα αρχικά δεδομένα.
Για εκείνους τους μαθητές που είναι σε θέση να αναζητήσουν μια λύση συνδυάζοντας απλές τεχνικές, αρκεί να πουν «η διακλάδωση μπορεί να γραφτεί μέσα σε βρόχους» και να δώσει το πρόβλημα «για παράδειγμα» εντελώς για να λυθεί ανεξάρτητα.
Παράδειγμα εργασίας:

Ο χρήστης εισάγει τον αριθμό Χ. Εμφανίστε τους αριθμούς από το 0 έως το 9 σε μια στήλη και τοποθετήστε ένα σύμβολο «+» απέναντι από τον αριθμό που είναι ίσος με Χ.

Αν είχε εισαχθεί 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+n1n2n3n4n5n6n7n8n9");
}
if (x==1) {
    Console.WriteLine("0n1+n2n3n4n5n6n7n8n9");
}
if (x==2) {
    Console.WriteLine("0n1n2+n3n4n5n6n7n8n9");
}
if (x==3) {
    Console.WriteLine("0n1n2n3+n4n5n6n7n8n9");
}
if (x==4) {
    Console.WriteLine("0n1n2n3n4+n5n6n7n8n9");
}
if (x==5) {
    Console.WriteLine("0n1n2n3n4n5+n6n7n8n9");
}
if (x==6) {
    Console.WriteLine("0n1n2n3n4n5n6+n7n8n9");
}
if (x==7) {
    Console.WriteLine("0n1n2n3n4n5n6n7+n8n9");
}
if (x==8) {
    Console.WriteLine("0n1n2n3n4n5n6n7n8+n9");
}
if (x==9) {
    Console.WriteLine("0n1n2n3n4n5n6n7n8n9+");
}

Δίνω μια παρόμοια εργασία εκ των προτέρων, ενώ μελετώ το θέμα της διακλάδωσης.
Εάν ο μαθητής βρει μια «πιθανή» επιλογή, τότε πρέπει να του πείτε ότι μπορεί να υπάρχουν πολλές λύσεις στο ίδιο πρόβλημα. Ωστόσο, διαφέρουν ως προς την αντοχή τους στις αλλαγές των απαιτήσεων. Κάντε την ερώτηση: «Πόσες θέσεις στον κώδικα θα έπρεπε να διορθωθούν αν έπρεπε να προσθέσω έναν άλλο αριθμό;» Στην "πιθανή" έκδοση, θα χρειαστεί να προσθέσετε ένα ακόμη υποκατάστημα και να προσθέσετε έναν νέο αριθμό σε 10 άλλα μέρη. Στο "επιθυμητό" αρκεί να προσθέσετε μόνο έναν κλάδο.
Ρυθμίστε την εργασία ώστε να αναπαράγει την επιλογή "επιθυμητή", στη συνέχεια βρείτε ένα μοτίβο στον κώδικα, εκτελέστε μια αντικατάσταση μεταβλητής και γράψτε έναν βρόχο.
Εάν έχετε μια ιδέα για το πώς να λύσετε αυτό το πρόβλημα χωρίς βρόχο με κάποιον άλλο τρόπο, γράψτε στα σχόλια.

Βρόχοι εντός βρόχων

Σε αυτό το θέμα πρέπει να δώσετε προσοχή στα εξής:
— οι μετρητές για τον εσωτερικό και τον εξωτερικό βρόχο πρέπει να είναι διαφορετικές μεταβλητές.
— ο μετρητής για τον εσωτερικό βρόχο πρέπει να μηδενιστεί πολλές φορές (δηλαδή στο σώμα του εξωτερικού βρόχου).
— στις εργασίες εξόδου κειμένου, δεν μπορείτε πρώτα να γράψετε ένα γράμμα σε πολλές γραμμές και μετά το δεύτερο. Πρέπει πρώτα να εκτυπώσετε όλα τα γράμματα της πρώτης γραμμής, μετά όλα τα γράμματα της δεύτερης και ούτω καθεξής.

Είναι καλύτερο να ξεκινήσετε να εξηγείτε το θέμα των βρόχων μέσα σε βρόχους εξηγώντας τη σημασία της μηδενισμού του μετρητή.
Παράδειγμα εργασίας:

Ο χρήστης εισάγει δύο αριθμούς: R και T. Εκτυπώστε δύο γραμμές με χαρακτήρες "#". Η πρώτη γραμμή πρέπει να περιέχει R χαρακτήρες. Η δεύτερη γραμμή περιέχει κομμάτια Τ. Εάν κάποιος αριθμός είναι αρνητικός, εμφανίστε ένα μήνυμα σφάλματος.

R=5, Τ=11#####
#############

R=20, Τ=3######################
###

R=-1, Τ=6Η τιμή R πρέπει να είναι μη αρνητική

R=6, Τ=-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;
}

Η διαφορά είναι ότι στην «πιθανή» λύση, χρησιμοποιήθηκε μια δεύτερη μεταβλητή για την έξοδο της δεύτερης γραμμής. Θα πρέπει να επιμείνετε στη χρήση της ίδιας μεταβλητής και για τους δύο βρόχους. Αυτός ο περιορισμός μπορεί να δικαιολογηθεί από το γεγονός ότι μια λύση με έναν μετρητή για δύο κύκλους θα αποτελεί παράδειγμα του όρου "επαναφορά μετρητή". Η κατανόηση αυτού του όρου είναι απαραίτητη κατά την επίλυση των παρακάτω προβλημάτων. Ως συμβιβασμός, μπορείτε να αποθηκεύσετε και τις δύο λύσεις στο πρόβλημα.

Ένα τυπικό πρόβλημα με τη χρήση μιας μεταβλητής μετρητή για δύο βρόχους εμφανίζεται ως εξής:
R=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) εισάγεται από το πληκτρολόγιο.

W = 10
1
2
3
4
5
6
7
8
9

W = 100000000000
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
8888888888
9999999999

Εάν ένας μαθητής έχει κατακτήσει την τεχνική της αντικατάστασης μιας μεταβλητής, τότε θα αντεπεξέλθει αρκετά γρήγορα. Ένα πιθανό πρόβλημα θα είναι πάλι η επαναφορά της μεταβλητής. Εάν δεν μπορείτε να χειριστείτε τη μεταμόρφωση, σημαίνει ότι βιάζεστε και πρέπει να λύσετε πιο απλά προβλήματα.

Σας ευχαριστώ για την προσοχή σας. Κάντε like και εγγραφή στο κανάλι.

Υ.Γ Αν βρείτε τυπογραφικά λάθη ή λάθη στο κείμενο, ενημερώστε με. Αυτό μπορεί να γίνει επιλέγοντας μέρος του κειμένου και πατώντας «⌘ + Enter» σε Mac και «Ctrl / Enter» σε κλασικά πληκτρολόγια ή μέσω προσωπικών μηνυμάτων. Εάν αυτές οι επιλογές δεν είναι διαθέσιμες, γράψτε για σφάλματα στα σχόλια. Ευχαριστώ!

Μόνο εγγεγραμμένοι χρήστες μπορούν να συμμετάσχουν στην έρευνα. Συνδεθείτε, Σας παρακαλούμε.

Δημοσκόπηση για αναγνώστες χωρίς κάρμα

  • 20,0%Διδάσκω επαγγελματικά, +12

  • 10,0%Διδάσκω επαγγελματικά, -11

  • 70,0%Δεν διδάσκω, +17

  • 0,0%Δεν διδάσκω, -10

  • 0,0%Άλλο0

Ψήφισαν 10 χρήστες. 5 χρήστες απείχαν.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο