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

Περίληψη

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

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

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

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

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

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

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

  1. Ερώτηση 1Από προηγούμενες ενότητεςΜοιράζονται 47 φύλλα σε 6 άτομα, σε ίσα ακέραια μερίδια, και όσα δεν φτάνουν για έναν πλήρη γύρο φυλάσσονται. Πόσα παίρνει κάθε άτομο και πόσα φυλάσσονται;

  2. Ερώτηση 2Από προηγούμενες ενότητεςΓια να στείλουμε ένα συνημμένο αρχείο με ηλεκτρονικό ταχυδρομείο υπάρχουν τέσσερα βήματα: A, γράφουμε τη διεύθυνση του παραλήπτη· B, πατάμε «Αποστολή»· C, ανοίγουμε ένα νέο μήνυμα· D, επισυνάπτουμε το αρχείο. Ποια σειρά είναι η κατάλληλη;

  3. Ερώτηση 3Από προηγούμενες ενότητεςΈνα αρχείο είναι αποθηκευμένο στη διαδρομή C:\Users\ana\programas\suma.cpp. Ποιο είναι το όνομά του, ποια η επέκτασή του και σε ποιον φάκελο βρίσκεται;

  4. Ερώτηση 4Μια συνταγή λέει: «Αν η ζύμη είναι στεγνή, πρόσθεσε μια κουταλιά νερό και ζύμωσε· επανάλαβε ώσπου να μην είναι». Η ζύμη χρειάζεται ακριβώς τρεις κουταλιές για να πάψει να είναι στεγνή. Πόσες φορές ρωτάμε αν η ζύμη είναι στεγνή;

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

  6. Ερώτηση 6Ένα πρόγραμμα μεταγλωττίζεται χωρίς σφάλματα και χωρίς προειδοποιήσεις, εκτελείται σωστά με πολλά δεδομένα, και με ένα συγκεκριμένο σταματά με το μήνυμα «division by zero». Σε ποια στιγμή προέκυψε το σφάλμα;

  7. Ερώτηση 7Εγκαταστάθηκε το Visual Studio Code με την επέκτασή του για τη C++, και όταν ζητάμε g++ --version στο τερματικό, αυτό απαντά ότι δεν αναγνωρίζει το g++. Ποιο είναι το πιθανότερο;

  8. Ερώτηση 8Ο μεταγλωττιστής γράφει ένα μήνυμα που αρχίζει με warning: και, παρ' όλα αυτά, παράγει το εκτελέσιμο. Τι σημαίνει;

  9. Ερώτηση 9Πού αρχίζει η εκτέλεση ενός προγράμματος C++;

  10. Ερώτηση 10Ένα πρόγραμμα δηλώνει int age{};, εκτελεί std::cin >> age; για να διαβάσει μια ηλικία, και ο χρήστης γράφει abc. Τι συμβαίνει;

Τα περιεχόμενα της ενότητας

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

  • Από το πρόβλημα στον αλγόριθμο. Ο κύκλος μαθημάτων αρχίζει χωρίς κώδικα, επειδή ο αλγόριθμος προηγείται του προγράμματος. Το μάθημα διδάσκει πώς προδιαγράφουμε ένα πρόβλημα με την είσοδό του, την έξοδό του και τη σχέση ανάμεσά τους (την προσυνθήκη και τη μετασυνθήκη)· πώς περιγράφουμε έναν αλγόριθμο σε αριθμημένα βήματα, χωρίς αμφισημία· πώς τον εκτελούμε με το χέρι με έναν πίνακα ίχνους· πώς αναγνωρίζουμε σε αυτόν την ακολουθία, την απόφαση και την επανάληψη· και πώς αιτιολογούμε ότι μια επανάληψη τερματίζει, με μια ποσότητα που μειώνεται σε κάθε γύρο.
  • Προγράμματα, μεταγλωττιστές και C++. Ένας αλγόριθμος γραμμένος για μια μηχανή είναι ένα πρόγραμμα, και ένα πρόγραμμα C++ δεν εκτελείται όπως γράφεται: ο προεπεξεργαστής, ο μεταγλωττιστής και ο συνδέτης το μετατρέπουν σε εκτελέσιμο αρχείο. Το μάθημα διατρέχει αυτά τα τρία στάδια, διακρίνει όσα ανακαλύπτονται κατά τη μεταγλώττιση από όσα εκδηλώνονται μόνο κατά την εκτέλεση, συγκρίνει το μοντέλο της μεταγλώττισης με εκείνο της διερμηνείας και τοποθετεί στον χρόνο τα πρότυπα της γλώσσας, ως τη C++23, εκείνο που χρησιμοποιεί ο κύκλος μαθημάτων, και τη C++26, της οποίας η υλοποίηση στους μεταγλωττιστές βρίσκεται σε εξέλιξη.
  • Εγκατάσταση του περιβάλλοντος σε Windows, macOS και Linux. Τρεις πλήρεις οδηγοί, ένας για κάθε σύστημα, για να εγκαταστήσουμε έναν μεταγλωττιστή ικανό για C++23 και τον επεξεργαστή κειμένου Visual Studio Code με την επέκτασή του για τη C++, να ελέγξουμε ότι όλα λειτουργούν με ένα δοκιμαστικό πρόγραμμα και να λύσουμε τα συχνά προβλήματα: τον μεταγλωττιστή που το τερματικό δεν βρίσκει, την παλιά έκδοση και το πρότυπο που δεν ζητήθηκε.
  • Μεταγλώττιση, εκτέλεση και ρύθμιση. Ο κύκλος εργασίας της επεξεργασίας, της αποθήκευσης, της μεταγλώττισης, της εκτέλεσης και της ανάγνωσης, από το τερματικό και από τον επεξεργαστή κειμένου, με την εντολή μεταγλώττισης του κύκλου μαθημάτων. Το μάθημα διακρίνει τα σφάλματα, που εμποδίζουν το εκτελέσιμο, από τις προειδοποιήσεις, που επισημαίνουν ύποπτο κώδικα· ενεργοποιεί τους ανιχνευτές (sanitizers), τον ανιχνευτή σφαλμάτων μνήμης, AddressSanitizer, και εκείνον της απροσδιόριστης συμπεριφοράς, UndefinedBehaviorSanitizer, που επιτηρούν το πρόγραμμα όσο τρέχει· και εξηγεί γιατί μια έξοδος δείχνει παράξενα σύμβολα αντί για ελληνικά γράμματα.
  • Ανατομία ενός προγράμματος. Το ελάχιστο πρόγραμμα, κομμάτι κομμάτι: η οδηγία συμπερίληψης και οι κεφαλίδες, η συνάρτηση main και ο κωδικός εξόδου, ο χώρος ονομάτων std, οι εντολές, τα μπλοκ και τα σχόλια. Το μάθημα διδάσκει πώς διορθώνουμε τα σφάλματα δομής διαβάζοντας τα μηνύματα του μεταγλωττιστή από το πρώτο, και ορίζει τον οδηγό ύφους του κύκλου μαθημάτων.
  • Είσοδος, έξοδος και σφάλματα. Το πρόγραμμα επικοινωνεί με τον έξω κόσμο: γράφει με τις συναρτήσεις std::print και std::println, με προδιαγραφές μορφής για το πλάτος και τα δεκαδικά, και διαβάζει με το std::cin. Το μάθημα δείχνει τι συμβαίνει όταν η είσοδος δεν έχει την αναμενόμενη μορφή και πώς ελέγχεται η ανάγνωση, και κλείνει την ενότητα με την κατάταξη των σφαλμάτων ανάλογα με τη στιγμή τους: σφάλματα μεταγλώττισης, σύνδεσης, εκτέλεσης και λογικά σφάλματα.

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

Τι θεωρείται γνωστό

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

Η πρώτη είναι η αριθμητική του σχολείου: πράξεις με ακέραιους και με δεκαδικούς, τήρηση της σειράς των πράξεων (ο πολλαπλασιασμός και η διαίρεση πριν από την πρόσθεση και την αφαίρεση, εκτός αν υπάρχουν παρενθέσεις) και, πάνω απ' όλα, υπολογισμός του πηλίκου και του υπολοίπου μιας ακέραιας διαίρεσης. Αυτή η τελευταία είναι σημαντικότερη απ' ό,τι φαίνεται. Αν μοιράσουμε 47 φύλλα σε 6 άτομα, παίρνει το καθένα 7 και περισσεύουν 5, πράγμα που γράφεται 47=6⋅7+547 = 6 \cdot 7 + 5, με το υπόλοιπο 55 μικρότερο από τον διαιρέτη 66. Η C++ έχει έναν τελεστή για το πηλίκο και έναν άλλον για το υπόλοιπο, και ένα μεγάλο μέρος των υπολογισμών με ακέραιους (η μετατροπή δευτερολέπτων σε ώρες, ο διαχωρισμός των ψηφίων ενός αριθμού, η απόφαση αν ένας αριθμός είναι άρτιος) ανάγεται σε αυτούς. Όποιος θέλει να τη μελετήσει διεξοδικά τη βρίσκει, με την απόδειξή της, στον κύκλο μαθημάτων Άλγεβρα και γεωμετρία I: αριθμοί, συναρτήσεις και γεωμετρία του επιπέδου· εδώ αρκεί να ξέρουμε να την υπολογίζουμε.

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

Η τρίτη είναι ο βασικός χειρισμός ενός υπολογιστή: να δημιουργούμε έναν φάκελο, να αποθηκεύουμε σε αυτόν ένα αρχείο με ένα όνομα της επιλογής μας, να αναγνωρίζουμε την επέκταση του ονόματος (.cpp, .txt, .exe) και να ξέρουμε σε ποιον φάκελο βρίσκεται κάθε αρχείο. Αξίζει να ρυθμίσουμε από τώρα το σύστημα ώστε να εμφανίζει τις επεκτάσεις, που ορισμένα συστήματα, όπως τα Windows, κρύβουν εξ ορισμού: ο πηγαίος κώδικας suma.cpp και το εκτελέσιμο suma.exe είναι πολύ διαφορετικά αρχεία, και η σύγχυσή τους είναι πηγή παράλογων σφαλμάτων. Η ενότητα διδάσκει επίσης τη χρήση του τερματικού, ώστε δεν χρειάζεται να την ξέρουμε από πριν· αρκεί να είμαστε διατεθειμένοι να γράφουμε εντολές στο τερματικό αντί να πατάμε κουμπιά. Η εγκατάσταση προγραμμάτων απαιτεί, τέλος, να μπορούμε να την κάνουμε στον δικό μας υπολογιστή· το μάθημα της εγκατάστασης υποδεικνύει μια διαδικτυακή εναλλακτική για όποιον δεν μπορεί.

Δεν προϋποτίθενται αγγλικά. Τα μηνύματα του μεταγλωττιστή είναι στα αγγλικά, και ο κύκλος μαθημάτων διδάσκει πώς τα διαβάζουμε πεδίο προς πεδίο, ώστε όσα μετρούν από αυτά (το αρχείο, η γραμμή, το είδος του ελαττώματος) να γίνονται κατανοητά χωρίς να κατέχουμε τη γλώσσα. Ούτε προϋποτίθενται μαθηματικά πέρα από τα σχολικά: τα παραδείγματα χρησιμοποιούν τη διαίρεση, τους μέσους όρους, την προπαίδεια, τις ημερομηνίες και τις ώρες.

Το πρόβλημα που λύνει η ενότητα

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

ΠαράδειγμαΜια διάρκεια σε ώρες, λεπτά και δευτερόλεπτα

Ένα χρονόμετρο καταγράφει τη διάρκεια κάθε δραστηριότητας ως αριθμό δευτερολέπτων, για παράδειγμα 7384, και θέλουμε να τη γράψουμε στη συνήθη μορφή ωρών, λεπτών και δευτερολέπτων, με τα λεπτά και τα δευτερόλεπτα πάντα με δύο ψηφία: 2:03:04. Με το χέρι, ο υπολογισμός είναι μια αλυσίδα διαιρέσεων: 7384=3600⋅2+1847384 = 3600 \cdot 2 + 184, από όπου προκύπτουν 2 ώρες και 184 δευτερόλεπτα· 184=60⋅3+4184 = 60 \cdot 3 + 4, από όπου προκύπτουν 3 λεπτά και 4 δευτερόλεπτα. Για μία διάρκεια γίνεται σε ένα λεπτό. Για τις χίλιες διάρκειες ενός αρχείου καταγραφής, αντίθετα, ο υπολογισμός με το χέρι είναι μακρύς και επιρρεπής σε σφάλματα, και η εργασία προσφέρεται για να την εκτελέσει μια μηχανή.

Ωστόσο, μια μηχανή δεν μπορεί να δεχτεί την παραπάνω εξήγηση. Δέχεται ένα κείμενο σε μια γλώσσα προγραμματισμού, και για να γράψουμε αυτό το κείμενο πρέπει να έχουμε λύσει πρώτα τρία ζητήματα που ο υπολογισμός με το χέρι άφηνε σιωπηρά. Το πρώτο είναι η προδιαγραφή: τι μπαίνει (ένας ακέραιος αριθμός δευτερολέπτων, μη αρνητικός), τι βγαίνει (τρεις ακέραιοι, οι ώρες, τα λεπτά και τα δευτερόλεπτα) και ποια σχέση τα συνδέει: αν tt είναι το σύνολο, t=3600h+60m+st = 3600 h + 60 m + s, με 0≤m<600 \leq m < 60 και 0≤s<600 \leq s < 60. Το δεύτερο είναι ο αλγόριθμος: τα ακριβή βήματα που, για κάθε αποδεκτή είσοδο, παράγουν αυτή την έξοδο.

  1. Η hh παίρνει την τιμή του πηλίκου του tt διά 36003600.
  2. Η mm παίρνει την τιμή του πηλίκου διά 6060 του υπολοίπου του tt διά 36003600.
  3. Η ss παίρνει την τιμή του υπολοίπου του tt διά 6060.
  4. Γράφονται η hh, άνω και κάτω τελεία, η mm με δύο ψηφία, άνω και κάτω τελεία και η ss με δύο ψηφία.

Το τρίτο είναι η γραφή του αλγορίθμου σε C++, με την ακριβή μορφή που απαιτεί η γλώσσα, και η μετάφρασή του σε εκτελέσιμο με τα κατάλληλα εργαλεία. Το πρόγραμμα που ακολουθεί το κάνει. Περιέχει πολλά πράγματα που δεν έχουν εξηγηθεί ακόμη: τις μεταβλητές (μάθημα 2.1), τους τελεστές / και %, που δίνουν το πηλίκο και το υπόλοιπο της ακέραιας διαίρεσης (μάθημα 3.1), την ανάγνωση με το std::cin και τις προδιαγραφές μορφής (μάθημα 1.6)· η προδιαγραφή {:02} αυτού του προγράμματος, που γράφει έναν αριθμό σε δύο θέσεις συμπληρώνοντας με μηδενικά στα αριστερά, είναι μια παραλλαγή του πλάτους που διδάσκει εκείνο το μάθημα και που θα χρησιμοποιήσει το μάθημα 3.1. Προς το παρόν αρκεί να αναγνωρίσουμε σε αυτό τα τέσσερα βήματα του αλγορίθμου.

Πρόγραμμα σε C++
#include <iostream>#include <print>​int main(){    int total{};  // οι μεταβλητές θα εξηγηθούν στο μάθημα 2.1    std::print("Διάρκεια σε δευτερόλεπτα: ");    std::cin >> total;    const int hours{total / 3600};    const int minutes{total % 3600 / 60};    const int seconds{total % 60};    std::println("{} s = {}:{:02}:{:02}", total, hours, minutes, seconds);}
Είσοδος του προγράμματος
7384
Έξοδος
Διάρκεια σε δευτερόλεπτα: 7384 s = 2:03:04

Οι γραμμές 9 έως 11 είναι τα βήματα 1 έως 3, και η γραμμή 12 είναι το βήμα 4. Το ότι το αποτέλεσμα συμπίπτει με εκείνο που υπολογίστηκε με το χέρι δεν είναι σύμπτωση, αλλά ο έλεγχος που αξίζει σε κάθε πρόγραμμα: να το δοκιμάζουμε πρώτα με ένα δεδομένο του οποίου την απάντηση γνωρίζουμε.

Το πρόγραμμα λύνει το πρόβλημα, αλλά η ενότητα διδάσκει επίσης να δυσπιστούμε απέναντί του. Αν ο χρήστης γράψει abc αντί για αριθμό, η ανάγνωση αποτυγχάνει, η μεταβλητή total μένει μηδέν και το πρόγραμμα γράφει, χωρίς κανένα σήμα συναγερμού, ότι η διάρκεια είναι 0:00:00: ένα ψευδές συμπέρασμα με όψη αληθινού. Αν γράψει μια αρνητική διάρκεια, η προδιαγραφή δεν λέει τι πρέπει να συμβεί, και το αποτέλεσμα στερείται νοήματος. Αν γραφτεί total / 360 αντί για total / 3600, το πρόγραμμα μεταγλωττίζεται, εκτελείται και δίνει λανθασμένο αποτέλεσμα, και κανένα εργαλείο δεν το επισημαίνει. Καθένα από αυτά τα ελαττώματα ανήκει σε διαφορετικό είδος σφάλματος, που ανακαλύπτεται σε διαφορετική στιγμή και αναζητείται με διαφορετικό τρόπο· το τελευταίο μάθημα της ενότητας τα κατατάσσει. Από αυτό έπεται ότι το πρόβλημα που λύνει η ενότητα δεν είναι μόνο να γράψουμε αυτό το πρόγραμμα, αλλά να ξέρουμε γιατί λειτουργεί, με ποια δεδομένα παύει να λειτουργεί και ποιο εργαλείο θα προειδοποιήσει, ή όχι, για κάθε ελάττωμα.

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

Πού οδηγεί

Η ενότητα είναι το κατώφλι του κύκλου μαθημάτων. Όσα χρησιμοποιούνται σε αυτήν χωρίς εξήγηση εξηγούνται αργότερα, με την εξής σειρά. Η ενότητα 2, «Δεδομένα και τύποι», εξηγεί τις μεταβλητές και πώς αποθηκεύονται στη μνήμη, τα όρια των ακεραίων (και γιατί ένας σωστός υπολογισμός μπορεί να υπερχειλίσει), τη στρογγυλοποίηση των αριθμών με δεκαδικά και τις μετατροπές ανάμεσα σε τύπους. Η ενότητα 3, «Εκφράσεις και τελεστές», εξηγεί την αριθμητική της C++, με το πηλίκο και το υπόλοιπο των αρνητικών, τη λογική των συνθηκών και όσα το πρότυπο αφήνει απροσδιόριστα σε μια έκφραση. Η ενότητα 4, «Έλεγχος ροής», μεταφέρει στη C++ τις αποφάσεις και τις επαναλήψεις που το πρώτο μάθημα γράφει στα ελληνικά, και διδάσκει πώς αιτιολογούμε ότι ένας βρόχος είναι σωστός και τερματίζει. Η ενότητα 5 αναλύει τα προγράμματα σε συναρτήσεις· η 6 εισάγει τα σύνθετα δεδομένα (πίνακες, διανύσματα, δισδιάστατους πίνακες και εγγραφές), με τους αλγορίθμους αναζήτησης και ταξινόμησης και το κόστος τους· η 7 πραγματεύεται το κείμενο, την εύρωστη ανάγνωση της εισόδου και τα αρχεία· και η 8, τα προγράμματα πολλών αρχείων, τις συστηματικές δοκιμές και τον αποσφαλματωτή.

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