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

Περίληψη

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

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

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

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

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

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

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

  1. Ερώτηση 1Από προηγούμενες ενότητεςΤι κάνει η γραμμή int gcd(int a, int b); γραμμένη πριν από τη main;

  2. Ερώτηση 2Από προηγούμενες ενότητεςΗ συνάρτηση toBase(n, base) έχει την προσυνθήκη «n >= 0 και 2 <= base <= 10». Ποιος πρέπει να την εξασφαλίσει;

  3. Ερώτηση 3Από προηγούμενες ενότητεςΗ συνάρτηση binarySearch(values, target) του μαθήματος 6.4 επιστρέφει μια θέση του target ή values.size() αν δεν υπάρχει. Ποια είναι η προσυνθήκη της;

  4. Ερώτηση 4Από προηγούμενες ενότητεςΈνα πρόγραμμα μεταγλωττίζεται χωρίς σφάλματα και, κατά τη δόμηση του εκτελέσιμου, εμφανίζεται undefined reference to `tetrahedral(int)'. Ποιο στάδιο απέτυχε;

  5. Ερώτηση 5Από προηγούμενες ενότητεςΠοιο από αυτά τα σύνολα περιπτώσεων δοκιμάζει καλύτερα μια δυαδική αναζήτηση;

  6. Ερώτηση 6Από προηγούμενες ενότητεςΠόσο κάνουν τα a και b μετά από int a{0}; int b{1}; for (int i{0}; i < 4; ++i) { const int t{a + b}; a = b; b = t; };

  7. Ερώτηση 7Από προηγούμενες ενότητεςΓιατί το std::vector<int> v{1, 2}; std::println("{}", v[2]); σταματά με τις επιλογές του κύκλου μαθημάτων και, όταν μεταγλωττίζεται μόνο με -O2, χωρίς τους ανιχνευτές, μπορεί να γράψει έναν οποιονδήποτε αριθμό;

  8. Ερώτηση 8Μια κεφαλίδα με φρουρούς συμπερίληψης ορίζει (όχι μόνο δηλώνει) τη double scale(double x), χωρίς inline, και τη συμπεριλαμβάνουν το main.cpp και το report.cpp. Τι συμβαίνει κατά τη δόμηση του προγράμματος;

  9. Ερώτηση 9Μια συνάρτηση περνά πεντακόσιες αυτοματοποιημένες δοκιμές επιλεγμένες με προσοχή. Τι μπορεί να ισχυριστεί κανείς;

  10. Ερώτηση 10Ένα σημείο διακοπής βρίσκεται στη γραμμή total += k;, μέσα σε έναν βρόχο, και το πρόγραμμα σταματά εκεί για τρίτη φορά. Τι δείχνει η επισημασμένη γραμμή;