Μετάβαση στο περιεχόμενο
Topos Uranos

Περίληψη

Αυτό το μάθημα ανοίγει την πέμπτη ενότητα του κύκλου μαθημάτων, αφιερωμένη στις συναρτήσεις. Εξηγεί σε τι χρησιμεύει η ενότητα: να διδάξει πώς αναλύεται ένα πρόβλημα σε μέρη με όνομα, το καθένα με διεπαφή και σύμβαση, και πώς λύνονται ορισμένα προβλήματα με αναγωγή σε ένα μικρότερο στιγμιότυπο του εαυτού τους, με αναδρομή· παρουσιάζει τα τέσσερα μαθήματά της και το νήμα που τα ενώνει· θυμίζει όσα η ενότητα θεωρεί γνωστά, κυρίως τους βρόχους και τις αναλλοίωτές τους από την ενότητα 4· διατυπώνει το πρόβλημα που λύνει η ενότητα, εκείνο ενός προγράμματος που επαναλαμβάνει τον ίδιο υπολογισμό αντιγραμμένο και που, από μια αβλεψία στην αντιγραφή, απαντά λάθος χωρίς ο μεταγλωττιστής να πει τίποτα· προαναγγέλλει τη σύμβαση (την προσυνθήκη και τη μετασυνθήκη) ως τη μορφή με την οποία η ενότητα θα προδιαγράφει κάθε μέρος· και δείχνει πού οδηγεί, στις επόμενες ενότητες και στον κύκλο μαθημάτων Προγραμματισμός σε C++ II.

Μαθησιακοί στόχοι

  1. Να περιγράφει τη σειρά των περιεχομένων της ενότητας και να εξηγεί τι προσφέρει κάθε μάθημα στο επόμενο.
  2. Να θυμάται τους αλγορίθμους της ενότητας 4 (το ίχνος ενός βρόχου, την αναλλοίωτη και τη φθίνουσα ποσότητά του) και να τους επαναλαμβάνει, αν χρειάζεται.
  3. Να προαναγγέλλει, με ένα παράδειγμα, την ιδέα της σύμβασης: τι απαιτεί ένα μέρος του προγράμματος από όποιον το χρησιμοποιεί και τι του εγγυάται σε αντάλλαγμα.
  4. Να αναγνωρίζει τι αναμένεται να ξέρει να κάνει στο τέλος της ενότητας και να το διακρίνει από όσα θα μάθει στις επόμενες ενότητες.

Αρχική αξιολόγηση

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

Αρχική αξιολόγηση

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

  1. Ερώτηση 1Από προηγούμενες ενότητεςΤι γράφει το int n{305}; int c{1}; while (n >= 10) { n = n / 10; ++c; } std::println("{}", c);;

  2. Ερώτηση 2Από προηγούμενες ενότητεςΣτον βρόχο int total{0}; int k{1}; while (k <= n) { total += k; ++k; }, με n≥0n \geq 0, ποια σχέση ισχύει κάθε φορά που αποτιμάται η συνθήκη;

  3. Ερώτηση 3Από προηγούμενες ενότητεςΗ προδιαγραφή της διαίρεσης λέει: «δοθέντων ακεραίων a≥0a \geq 0 και b>0b > 0, να βρεθούν qq και rr με a=b⋅q+ra = b \cdot q + r και 0≤r<b0 \leq r < b». Ποια είναι η προσυνθήκη της;

  4. Ερώτηση 4Από προηγούμενες ενότητεςΜετά το int a{3}; int b{a}; b = 7;, πόσο κάνει η a;

  5. Ερώτηση 5Από προηγούμενες ενότητεςΤο πρόγραμμα του μαθήματος 4.4 που γράφει τους πρώτους τους μικρότερους από 100 έχει έναν βρόχο που διατρέχει τους υποψηφίους και, μέσα του, έναν άλλο που δοκιμάζει τους διαιρέτες τους. Ποιο μέρος είναι ένας υπολογισμός με δικές του εισόδους και εξόδους, που θα άξιζε να πάρει όνομα;

  6. Ερώτηση 6Ένα πρόγραμμα ξεκινά από τη main· η main καλεί μια συνάρτηση g, και η g καλεί μια άλλη συνάρτηση h. Όσο εκτελείται η h, ποιες κλήσεις βρίσκονται σε εξέλιξη;

  7. Ερώτηση 7Με τη συνάρτηση int f(int x) { x = x + 1; return x; }, τι γράφει το int a{3}; int b{f(a)}; std::println("{} {}", a, b);;

  8. Ερώτηση 8Ένα πρόγραμμα διαβάζει μια ημερομηνία και πρέπει να γράψει την ημέρα της εβδομάδας της. Ποια αποσύνθεση χωρίζει τον υπολογισμό από την παρουσίαση;

  9. Ερώτηση 9Ποιος από τους παρακάτω ορισμούς ορίζει το n!n! για κάθε φυσικό nn;

  10. Ερώτηση 10Με τη συνάρτηση int f(int n) { if (n == 0) { return 0; } return n + f(n - 1); }, τι γράφει το std::println("{}", f(3));;