Περίληψη
Αυτό το μάθημα ανοίγει την πέμπτη ενότητα του κύκλου μαθημάτων, αφιερωμένη στις συναρτήσεις. Εξηγεί σε τι χρησιμεύει η ενότητα: να διδάξει πώς αναλύεται ένα πρόβλημα σε μέρη με όνομα, το καθένα με διεπαφή και σύμβαση, και πώς λύνονται ορισμένα προβλήματα με αναγωγή σε ένα μικρότερο στιγμιότυπο του εαυτού τους, με αναδρομή· παρουσιάζει τα τέσσερα μαθήματά της και το νήμα που τα ενώνει· θυμίζει όσα η ενότητα θεωρεί γνωστά, κυρίως τους βρόχους και τις αναλλοίωτές τους από την ενότητα 4· διατυπώνει το πρόβλημα που λύνει η ενότητα, εκείνο ενός προγράμματος που επαναλαμβάνει τον ίδιο υπολογισμό αντιγραμμένο και που, από μια αβλεψία στην αντιγραφή, απαντά λάθος χωρίς ο μεταγλωττιστής να πει τίποτα· προαναγγέλλει τη σύμβαση (την προσυνθήκη και τη μετασυνθήκη) ως τη μορφή με την οποία η ενότητα θα προδιαγράφει κάθε μέρος· και δείχνει πού οδηγεί, στις επόμενες ενότητες και στον κύκλο μαθημάτων Προγραμματισμός σε C++ II.
Μαθησιακοί στόχοι
- Να περιγράφει τη σειρά των περιεχομένων της ενότητας και να εξηγεί τι προσφέρει κάθε μάθημα στο επόμενο.
- Να θυμάται τους αλγορίθμους της ενότητας 4 (το ίχνος ενός βρόχου, την αναλλοίωτη και τη φθίνουσα ποσότητά του) και να τους επαναλαμβάνει, αν χρειάζεται.
- Να προαναγγέλλει, με ένα παράδειγμα, την ιδέα της σύμβασης: τι απαιτεί ένα μέρος του προγράμματος από όποιον το χρησιμοποιεί και τι του εγγυάται σε αντάλλαγμα.
- Να αναγνωρίζει τι αναμένεται να ξέρει να κάνει στο τέλος της ενότητας και να το διακρίνει από όσα θα μάθει στις επόμενες ενότητες.
Αρχική αξιολόγηση
Πριν διατρέξουμε την ενότητα, αξίζει να μετρήσουμε το σημείο εκκίνησης. Η αξιολόγηση αυτή είναι αυτοαξιολόγηση: δεν βαθμολογείται, και μοναδικός σκοπός της είναι να προσανατολίσει τη μελέτη. Οι πέντε πρώτες ερωτήσεις ελέγχουν όσα η ενότητα θεωρεί γνωστά: το ίχνος ενός βρόχου, την αναλλοίωτή του, την προσυνθήκη μιας προδιαγραφής, την αντιγραφή μιας τιμής στην αρχικοποίηση και την αναζήτηση, μέσα σε ένα πρόγραμμα της ενότητας 4, ενός υπολογισμού με δικές του εισόδους και εξόδους. Οι πέντε που ακολουθούν αγγίζουν, με τη σειρά των μαθημάτων, τις κεντρικές ιδέες της ενότητας: τη στοίβα κλήσεων, τη μεταβίβαση ενός ορίσματος, τον χωρισμό του υπολογισμού από την παρουσίαση, τον αναδρομικό ορισμό του παραγοντικού και την εκτέλεση μιας συνάρτησης που καλεί τον εαυτό της. Κανείς δεν είναι υποχρεωμένος να τις απαντήσει σωστά ακόμη, και σε ορισμένες το «δεν το ξέρω ακόμη» είναι τίμια απάντηση: κάθε απάντηση, σωστή ή λανθασμένη, εξηγεί το ζήτημα και κατονομάζει το μάθημα που το πραγματεύεται. Οι ίδιες δεξιότητες μετρώνται ξανά στο τέλος, στο μάθημα της σύνθεσης.
Πριν ξεκινήσεις την ενότητα, μέτρησε το σημείο εκκίνησής σου. Είναι μια σύντομη αυτοαξιολόγηση: δεν βαθμολογείται και το αποτέλεσμα αποθηκεύεται μόνο στον περιηγητή σου.
Ερώτηση 1Από προηγούμενες ενότητεςΤι γράφει το
int n{305}; int c{1}; while (n >= 10) { n = n / 10; ++c; } std::println("{}", c);;Μετρά τους γύρους και ξεχνά ότι ηcξεκινά από το 1.Κάνει έναν γύρο παραπάνω: με η συνθήκηn >= 10είναι ήδη ψευδής.Συγχέει τον μετρητή με την τιμή τηςnμετά τον πρώτο γύρο.Το ίχνος δίνει και : το σώμα εκτελείται δύο φορές, και με η συνθήκη αποτυγχάνει. Ο βρόχος μετρά τα ψηφία ενός φυσικού· το μάθημα Συναρτήσεις τον κλείνει σε μια συνάρτηση με όνομα και σύμβαση, και το μάθημα Αναδρομή τον γράφει χωρίς βρόχο.Επανάληψη: Βρόχοι
Ερώτηση 2Από προηγούμενες ενότητεςΣτον βρόχο
int total{0}; int k{1}; while (k <= n) { total += k; ++k; }, με , ποια σχέση ισχύει κάθε φορά που αποτιμάται η συνθήκη;Ισχύει στη μέση του γύρου, μετά την πρόσθεση και πριν από την αύξηση, αλλά όχι όταν αποτιμάται η συνθήκη.Ισχύει μόνο στο τέλος: είναι η μετασυνθήκη, όχι η αναλλοίωτη.Είναι η συνθήκη του βρόχου, και είναι ψευδής ακριβώς κατά την έξοδο· μια αναλλοίωτη ισχύει και τότε.Ισχύει στην αρχή, με το κενό άθροισμα και · και αν ισχύει πριν από έναν γύρο, ισχύει και μετά, γιατί ο γύρος προσθέτει το και ύστερα το αυξάνει. Κατά την έξοδο , και η αναλλοίωτη δίνει το άθροισμα από το 1 έως το . Το μάθημα Αναδρομή αιτιολογεί τις συναρτήσεις του με τον ίδιο συλλογισμό με επαγωγή.Επανάληψη: Σχεδίαση σωστών βρόχων
Ερώτηση 3Από προηγούμενες ενότητεςΗ προδιαγραφή της διαίρεσης λέει: «δοθέντων ακεραίων και , να βρεθούν και με και ». Ποια είναι η προσυνθήκη της;
Συγχέει την προσυνθήκη με τη μετασυνθήκη: αυτό είναι ό,τι ικανοποιεί το αποτέλεσμα, όχι ό,τι απαιτείται από τα δεδομένα.Είναι συνθήκη για την έξοδο, όχι για την είσοδο.Με δεν υπάρχει κανένα με : το πρόβλημα δεν έχει λύση, και η προσυνθήκη το αποκλείει.Η προσυνθήκη είναι ό,τι απαιτείται από τα δεδομένα ώστε το πρόβλημα να έχει λύση· η μετασυνθήκη, ό,τι ικανοποιεί το αποτέλεσμα. Η ενότητα μετατρέπει αυτό το ζεύγος στη σύμβαση κάθε συνάρτησης: η προσυνθήκη δεσμεύει όποιον καλεί, και η μετασυνθήκη τη συνάρτηση.Επανάληψη: Από το πρόβλημα στον αλγόριθμο
Ερώτηση 4Από προηγούμενες ενότητεςΜετά το
int a{3}; int b{a}; b = 7;, πόσο κάνει ηa;Νομίζει ότι ηbκαι ηaμένουν δεμένες για πάντα· η αρχικοποίηση αντιγράφει την τιμή, όχι το κελί.Συγχέει την αντιγραφή με μια μεταβλητή χωρίς αρχικοποίηση: ηaπήρε το 3 και τίποτα δεν το άλλαξε.Η αρχικοποίησηint b{a}αντιγράφει στο κελί τηςbτην τιμή που είχε ηa· ύστερα, τα δύο κελιά είναι ανεξάρτητα. Το μάθημα Παράμετροι και εμβέλεια δείχνει ότι μια παράμετρος αρχικοποιείται με τον ίδιο τρόπο, με ένα αντίγραφο του ορίσματος, και διδάσκει την άλλη δυνατότητα: ένα δεύτερο όνομα για το ίδιο κελί.Επανάληψη: Μεταβλητές και μνήμη
Ερώτηση 5Από προηγούμενες ενότητεςΤο πρόγραμμα του μαθήματος 4.4 που γράφει τους πρώτους τους μικρότερους από 100 έχει έναν βρόχο που διατρέχει τους υποψηφίους και, μέσα του, έναν άλλο που δοκιμάζει τους διαιρέτες τους. Ποιο μέρος είναι ένας υπολογισμός με δικές του εισόδους και εξόδους, που θα άξιζε να πάρει όνομα;
Συγχέει την είσοδο και την έξοδο ολόκληρου του προγράμματος με εκείνες ενός εσωτερικού υπολογισμού.Είναι μια εντολή, όχι ένας υπολογισμός με δικό του νόημα: δεν έχει μια είσοδο και ένα αποτέλεσμα που κάποιος θα ήθελε να χρησιμοποιήσει.Συγχέει ένα δεδομένο με μια εργασία: η μεταβλητή φυλάει το αποτέλεσμα του υπολογισμού, αλλά δεν είναι ο υπολογισμός.Ο εσωτερικός βρόχος δεν εξαρτάται από τίποτε άλλο εκτός από τον υποψήφιο, και το αποτέλεσμά του είναι ένα ναι ή ένα όχι. Αν του δοθεί όνομα, ο εξωτερικός βρόχος διαβάζεται σαν την προδιαγραφή του: «για κάθε υποψήφιο, αν είναι πρώτος, γράψε τον». Το μάθημα Σχεδίαση με συναρτήσεις ξαναγράφει έτσι εκείνο το πρόγραμμα.Επανάληψη: Αριθμητικοί αλγόριθμοι
Ερώτηση 6Ένα πρόγραμμα ξεκινά από τη
main· ηmainκαλεί μια συνάρτησηg, και ηgκαλεί μια άλλη συνάρτησηh. Όσο εκτελείται ηh, ποιες κλήσεις βρίσκονται σε εξέλιξη;Νομίζει ότι όποιος καλεί εξαφανίζεται όταν καλεί· αντίθετα, περιμένει για να συνεχίσει από εκεί όπου σταμάτησε.Νομίζει ότι ηgτελείωσε όταν κάλεσε τηνh· θα τελειώσει όταν ηhτης επιστρέψει τον έλεγχο.Είναι τίμια απάντηση: το μάθημα 5.1 το εξηγεί με ένα σχήμα της στοίβας.Μια κλήση δεν τελειώνει πριν τελειώσουν εκείνες που έκανε: ηgπεριμένει το αποτέλεσμα τηςh, και ηmainτο αποτέλεσμα τηςg. Κάθε κλήση σε εξέλιξη φυλάει τις μεταβλητές της σε ένα πλαίσιο, και τα πλαίσια στοιβάζονται· είναι η στοίβα κλήσεων του μαθήματος Συναρτήσεις.Επανάληψη: Συναρτήσεις
Ερώτηση 7Με τη συνάρτηση
int f(int x) { x = x + 1; return x; }, τι γράφει τοint a{3}; int b{f(a)}; std::println("{} {}", a, b);;Νομίζει ότι η συνάρτηση τροποποιεί το όρισμα· από προεπιλογή, λαμβάνει ένα αντίγραφο.Νομίζει ότι η αλλαγή τηςxδεν φτάνει ούτε καν στην επιστρεφόμενη τιμή.Νομίζει ότι μια παράμετρος δεν μπορεί να τροποποιηθεί· μπορεί, εκτός αν δηλωθείconst.Η παράμετροςxείναι μια μεταβλητή τηςfπου αρχικοποιείται με ένα αντίγραφο του ορίσματος: η συνάρτηση αλλάζει το αντίγραφο και επιστρέφει 4, και ηaκρατά το 3 της. Είναι η μεταβίβαση με τιμή, ο προεπιλεγμένος τρόπος της C++.Επανάληψη: Παράμετροι και εμβέλεια
Ερώτηση 8Ένα πρόγραμμα διαβάζει μια ημερομηνία και πρέπει να γράψει την ημέρα της εβδομάδας της. Ποια αποσύνθεση χωρίζει τον υπολογισμό από την παρουσίαση;
Ανακατεύει δύο εργασίες: ό,τι υπολογίστηκε δεν μπορεί ούτε να επαναχρησιμοποιηθεί ούτε να συγκριθεί με μια αναμενόμενη τιμή.Χωρίζει τις εργασίες, αλλά τις συνδέει μέσω μιας κρυφής επίδρασης: όποιος διαβάζει την κλήση δεν βλέπει από πού προέρχεται το δεδομένο.Είναι τίμια απάντηση: το μάθημα 5.3 διδάσκει πώς αποφασίζουμε ποιες συναρτήσεις θα γράψουμε.Έτσι ο υπολογισμός δοκιμάζεται με αριθμούς, χωρίς να κοιτάμε την οθόνη, και μπορεί να εξυπηρετήσει ένα άλλο πρόγραμμα που γράφει το αποτέλεσμα με άλλον τρόπο. Το μάθημα 5.3 ονομάζει αυτό το κριτήριο «μία συνάρτηση, μία εργασία».Επανάληψη: Σχεδίαση με συναρτήσεις
Ερώτηση 9Ποιος από τους παρακάτω ορισμούς ορίζει το για κάθε φυσικό ;
Χωρίς βασική περίπτωση, ο ορισμός δεν σταματά ποτέ: το θα παρέπεμπε στο , και ούτω καθεξής χωρίς τέλος.Ορίζει σωστά το για , αλλά αφήνει χωρίς ορισμό το , που ισούται με 1.Ορίζει το μέσω του εαυτού του: ο ορισμός είναι κυκλικός και δεν ανάγει το πρόβλημα.Ερώτηση 10Με τη συνάρτηση
int f(int n) { if (n == 0) { return 0; } return n + f(n - 1); }, τι γράφει τοstd::println("{}", f(3));;Νομίζει ότι εκτελείται μία μόνο κλήση, ή συγχέει το όρισμα με το αποτέλεσμα.Νομίζει ότι τοreturn 0της βασικής περίπτωσης είναι το αποτέλεσμα όλης της αλυσίδας· είναι μόνο το αποτέλεσμα της τελευταίας κλήσης.Το όνομα της συνάρτησης είναι γνωστό από την κεφαλίδα της και μπορεί να χρησιμοποιηθεί στο ίδιο της το σώμα.Ηf(3)περιμένει τηνf(2), που περιμένει τηνf(1), που περιμένει τηνf(0)· αυτή επιστρέφει 0, και στην επιστροφή προστίθενται τα 1, 2 και 3. Η συνάρτηση υπολογίζει το , το ίδιο άθροισμα με τον βρόχο της δεύτερης ερώτησης.Επανάληψη: Αναδρομή
Φόρτωση του περιεχομένου…
Ολοκληρώθηκε
Συνδεθείτε για να αποθηκεύσετε την πρόοδό σας