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

Περίληψη

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

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

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

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

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

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

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

  1. Ερώτηση 1Από προηγούμενες ενότητεςΤι γράφει το std::println("{:d} {:d}", 'A', 'a');;

  2. Ερώτηση 2Από προηγούμενες ενότητεςΠώς γράφεται το 233 στο δυαδικό και στο δεκαεξαδικό σύστημα;

  3. Ερώτηση 3Από προηγούμενες ενότητεςΠόσο κάνει 0xB1 & 0xC0;

  4. Ερώτηση 4Από προηγούμενες ενότητεςΤι γράφει το std::vector<int> v{4, 7, 10, 3}; std::vector<int> w{}; for (const int x : v) { if (x % 2 == 0) { w.push_back(x); } } std::println("{}", w);;

  5. Ερώτηση 5Από προηγούμενες ενότητεςΜετά το int n{-1}; std::cin >> n;, ο χρήστης πληκτρολογεί abc. Πόσο κάνει το n και τι συμβαίνει με τις αναγνώσεις που ακολουθούν;

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

  7. Ερώτηση 7Αν το s είναι std::string s{"casa azul"};, τι επιστρέφει η s.find("x");

  8. Ερώτηση 8Τι γράφει το std::println("{}", std::string{"año"}.size()); σε ένα πρόγραμμα αποθηκευμένο σε UTF-8, όπως αυτά του κύκλου μαθημάτων;

  9. Ερώτηση 9Ένα πρόγραμμα εκτελεί int age{}; std::string name{}; std::cin >> age; std::getline(std::cin, name); και ο χρήστης πληκτρολογεί 36, πατά Enter, πληκτρολογεί Άννα και πατά Enter. Τι μένει στο name;

  10. Ερώτηση 10Ένα πρόγραμμα εκτελεί std::ifstream in{"data.txt"}; int x{-1}; in >> x;, αλλά το data.txt δεν υπάρχει στον φάκελο από τον οποίο εκτελείται. Τι συμβαίνει;