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

Περίληψη

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

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

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

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

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

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

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

  1. Ερώτηση 1Από προηγούμενες ενότητεςΤο απόσπασμα int largest{0}; int t{}; while (std::cin >> t) { if (t > largest) { largest = t; } } πρέπει να αφήσει στο largest τη μεγαλύτερη από τις θερμοκρασίες που διαβάστηκαν. Με ποια είσοδο αποτυγχάνει;

  2. Ερώτηση 2Από προηγούμενες ενότητεςΜια συνάρτηση υπολογίζει πόσα φωνήεντα έχει ένα κείμενο ενός εκατομμυρίου χαρακτήρων, αποθηκευμένο σε ένα std::string, και δεν το τροποποιεί. Πώς είναι προτιμότερο να δηλωθεί η παράμετρός της;

  3. Ερώτηση 3Από προηγούμενες ενότητεςΠόσες φορές εκτελείται το ++count στο for (int i{0}; i < 6; ++i) { for (int j{0}; j < i; ++j) { ++count; } };

  4. Ερώτηση 4Από προηγούμενες ενότητεςΤι γράφει η std::println("{}", 0u - 1); σε ένα σύστημα με unsigned int των 32 bit;

  5. Ερώτηση 5Σε μια ακολουθία nn στοιχείων αριθμημένων όπως στη C++, ποιοι δείκτες ii προσδιορίζουν ένα στοιχείο;

  6. Ερώτηση 6Τι περιέχει το v μετά το std::vector<int> v(3, 7);;

  7. Ερώτηση 7Πόσους γύρους κάνει το for (int m{1024}; m > 1; m /= 2) { ... };

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

  9. Ερώτηση 9Με std::vector<std::vector<int>> t{{1, 2, 3}, {4, 5, 6}};, πόσο κάνουν τα t[1][0] και t.size();

  10. Ερώτηση 10Ένα πρόγραμμα φυλάει τα ονόματα μιας ομάδας σε ένα διάνυσμα και τους βαθμούς τους σε ένα άλλο, έτσι ώστε ο βαθμός grades[i] να είναι εκείνος του names[i]. Αν ταξινομήσει μόνο το διάνυσμα των βαθμών, τι συμβαίνει;