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

Περίληψη

Ένα πρόγραμμα μετασχηματίζει εισόδους σε εξόδους, και αυτό το μάθημα μελετά τα δύο άκρα αυτού του μετασχηματισμού και ό,τι μπορεί να αποτύχει ανάμεσά τους. Διδάσκει πώς γράφουμε με τις συναρτήσεις std::print και std::println, με θέσεις αντικατάστασης και προδιαγραφές μορφής που ορίζουν το πλάτος, τη στοίχιση και τα δεκαδικά· πώς διαβάζουμε αριθμούς με το std::cin· πώς προβλέπουμε τι συμβαίνει όταν ο χρήστης γράφει κάτι διαφορετικό από αυτό που ζητήθηκε, κάτι που, με ένα σύστημα εισόδου όπως αυτό της C++, δεν προκαλεί προειδοποίηση αλλά μια ροή σε κατάσταση σφάλματος και μια μεταβλητή με ένα μηδέν· και πώς ταξινομούμε τα σφάλματα ενός προγράμματος σε τέσσερα είδη, ανάλογα με τη στιγμή που εκδηλώνονται: σφάλματα μεταγλώττισης, σύνδεσης, εκτέλεσης και λογικά σφάλματα. Κλείνει με τη μεθοδική ανάγνωση των μηνυμάτων του μεταγλωττιστή.

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

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

Το πρόγραμμα και το σύνορό του

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

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