ETY-215 Προχωρημένος Προγραμματισμός Ι:
Εισαγωγή στη γλώσσα προγραμματισμού C++

Διδάσκων

Σταμάτης Σταματιάδης
email
stamatis@materials.uoc.gr
τηλέφωνο
2810394284
γραφείο
Γραφείο Β-201, κτίριο Επιστήμης Υπολογιστών.

Ώρες και Αίθουσες Διδασκαλίας

Παρασκευή 16:00–19:00
Αίθουσα Υπολογιστών 2
Κτήρια Φυσικού, Βούτες

Ανακοινώσεις

8 Σεπτεμβρίου 2016
Το μάθημα αρχίζει την Παρασκευή 23 Σεπτεμβρίου.
4 Νοεμβρίου 2016
Θα γίνει έκτακτο μάθημα ασκήσεων τη Δευτέρα 7/11 στις 15:00, στην αιθ. ΗΥ 2 Φυσικού. Όσοι δεν μπορούν τότε, θα γίνει άλλο τμήμα την Πέμπτη 10 Νοεμβρίου, στις 16:00, στο εργ. ΗΥ του ΤΕΤΥ.
9 Νοεμβρίου 2016
Θα γίνει έκτακτο μάθημα ασκήσεων τη Δευτέρα 7/11 στις 15:00, στην αιθ. ΗΥ 2 Φυσικού. Όσοι δεν μπορούν τότε, θα γίνει άλλο τμήμα την Πέμπτη 10 Νοεμβρίου, στις 16:00, στο εργ. ΗΥ του ΤΕΤΥ.
9 Δεκεμβρίου 2016
Η εξέταση του μαθήματος θα γίνει την Παρασκευή 3 Φεβρουαρίου 2017, στις 10:00, στην αιθ. ΗΥ 2 Φυσικού.

Αντικείμενο –Σκοπός

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

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

Διδακτέα Ύλη

Η διδακτέα ύλη του μαθήματος περιλαμβάνει

Εισαγωγή, τύποι και τελεστές της C++.
Συντακτικό της γλώσσας, δεσμευμένες λέξεις, κανόνες σχηματισμού ονομάτων. Θεμελειώδεις τύποι μεταβλητών: λογικός, χαρακτήρα, ακεραίων, πραγματικών, μιγαδικών αριθμών. "Τύπος" void. Απαριθμήσεις. Τρόποι δήλωσης και εμβέλεια μεταβλητών και σταθερών ποσοτήτων. Αριθμητικοί τελεστές, προτεραιότητες. Χώροι ονομάτων. Αναφορές και Δείκτες.
Εντολές επιλογής, εντολές επανάληψης.
Τελεστές σύγκρισης, Εντολή if, τελεστής (?:), εντολή switch, εντολή goto. Βρόχοι while, do while, for, range for. Εντολές continue, break.
Πίνακες και Δομές (struct)
Μονοδιάστατοι - Πολυδιάστατοι Πίνακες
Ροές (streams)
Ροές αρχείων, Ροές strings, είσοδος-έξοδος δεδομένων, διαμορφώσεις
Συναρτήσεις.
Ορισμός και κλήση συνάρτησης, συνάρτηση main. Overloading, συναρτήσεις template. Μαθηματικές συναρτήσεις της C++.
Χειρισμός σφαλμάτων
Συναρτήσεις assert, static_assert. Σφάλματα μαθηματικών συναρτήσεων. Εξαιρέσεις (exceptions).
Standard Library.
Iterators. Συλλογές (containers): array, vector, deque, list, set, multiset, map, multimap, unordered_set, unordered_multiset, unordered_map, unordered_multimap. Αλγόριθμοι, Αντικείμενα-Συναρτήσεις.
Προχωρημένα Θέματα.
Κλάσεις, στοιχεία προγραμματισμού object-based και object-oriented. Μεθοδολογία οργάνωσης προγραμμάτων. Διασύνδεση με βιβλιοθήκες συναρτήσεων σε FORTRAN και C.

Διδακτικά Βοηθήματα

Διατίθενται εκτεταμένες σημειώσεις που παρουσιάζουν τα πιο χρήσιμα χαρακτηριστικά της C++11.

Διαλέξεις

Πρώτη
Εισαγωγή. Παράδειγμα προγράμματος. Ανάλυσή του. Τύποι (ακέραιοι, πραγματικοί). Δήλωση μεταβλητής. Κανόνες σχηματισμού ονόματος. Σχόλια. Μορφή ακέραιων και πραγματικών σταθερών. Αριθμητικοί τελεστές. Κανόνες μετατροπής - ρητή μετατροπή. Εντολή Εκχώρησης.

Προτεινόμενες ασκήσεις από τις σημειώσεις: 1.1-1.3, 2.1-2.12

Ενδεικτικές λύσεις: 2.8, 2.11.

Δεύτερη
Επανάληψη. Λοιποί Τύποι (char, bool). Δήλωση με αρχική τιμή. Δήλωση με αυτόματη αναγνώριση τύπου. Σταθερές ποσότητες. Εμβέλεια. Μαθηματικές συναρτήσεις. Μιγαδικός τύπος. Εντολές επιλογής (if, switch, ?:). Λογικοί τελεστές.

Προτεινόμενες ασκήσεις από τις σημειώσεις: 2.13,2.14, 3.1-3.9

Ενδεικτικές λύσεις: 2.13, 3.3, 3.9.

Τρίτη
Επανάληψη. Χώρος ονομάτων. Γεννήτρια τυχαίων αριθμών. Εντολές Επανάληψης (for, while, do ... while) – Βοηθητικές εντολές (break, continue).

Προτεινόμενες ασκήσεις από τις σημειώσεις: 4.1-4.28

Τέταρτη
Διανύσματα και διδιάστατοι πίνακες με γνωστή και άγνωστη διάσταση (κατά τη μεταγλώττιση). Υλοποίηση με std::array<> και std::vector<>. Σχετικές παράγραφοι στις σημειώσεις: 5.1, 5.2, 5.2.1, 5.2.3, 5.3, 5.3.3, 5.4.

Προτεινόμενες ασκήσεις από τις σημειώσεις: 5.1-5.10

Ενδεικτικές λύσεις: 5.3, Κόσκινο Ερατοσθένη, 5.8.

Πέμπτη
Ροές αρχείων. Είσοδος-έξοδος δεδομένων. Διαμορφώσεις. Τύπος string.

Προτεινόμενες ασκήσεις από τις σημειώσεις: 6.1-6.10

Ενδεικτικές λύσεις: 6.1, 6.2.

Έκτη
Συναρτήσεις: ορισμός-δήλωση-κλήση-αναδρομικές συναρτήσεις. Μαθηματικές συναρτήσεις.

Προτεινόμενες ασκήσεις από τις σημειώσεις: 7.1-7.32, 7.34,7.35,7.38

Ενδεικτικές λύσεις: 7.16, 7.29.

Έβδομη
Ασκήσεις.

Προτεινόμενη άσκηση από τις σημειώσεις: 7.42 (sudoku).

Ενδεικτική λύση sudoku.

Όγδοη
Overloading. Templates. Αλγόριθμοι αναζήτησης-ταξινόμησης.

Προτεινόμενες ασκήσεις από τις σημειώσεις: οι ασκήσεις του παραρτήματος Β'.

Ενδεικτικές λύσεις.

Ένατη
Επισκόπηση της Standard Template Library. Παρουσίαση containers. Iterators. Κατηγορίες iterators. Βοηθητικές συναρτήσεις.

Ύλη από τις σημειώσεις: παράγραφοι 9.1, 10.1, 10.2, 10.3, 10.4, 10.5, 10.6.

Προτεινόμενες ασκήσεις: όλες του κεφ. 10.

Ενδεικτικές λύσεις.

Δέκατη

Εξετάσεις και Βαθμολόγηση

Εξεταστέα ύλη

Από τις σημειώσεις:

Κεφάλαια 1, 2 (εκτός από 2.6, 2.11, 2.14, 2.17.1, 2.18), 3, 4, 5, 6, 7 (εκτός από 7.6-7.9), 9 (εκτός από 9.2.2, 9.3), 10, 11, 12, 13, Παράρτημα Β.

Τρόπος Εξέτασης

Σημαντικό ρόλο έχει το ενδιαφέρον προς το μάθημα και η γενική απόδοση στις ασκήσεις που θα γίνονται σε κάθε εργαστήριο. Η συμμετοχή στα εργαστήρια δεν είναι υποχρεωτική, η ύλη όμως που καλύπτεται σε αυτά θεωρείται γνωστή στα επόμενα.

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

Κατά τη διάρκεια της εξέτασης ΑΠΑΓΟΡΕΥΕΤΑΙ Η ΧΡΗΣΗ ΚΙΝΗΤΩΝ ΤΗΛΕΦΩΝΩΝ.

Παλαιά θέματα εξετάσεων

Ιστοσελίδες μαθημάτων

C++ Online Documentation

C++ Online Tutorials

Δωρεάν Compilers της C++

Online Compilers της C++

Συλλογές Συνδέσμων

Διάφορα

Βιβλιογραφία

Bιβλία, στα αγγλικά, ταξινομημένα με αύξοντα βαθμό δυσκολίας και πληρότητας (και αριθμού σελίδων!). Κάποια από τα βιβλία υπάρχουν στη Βιβλιοθήκη του Πανεπιστημίου. Να αποφύγετε όσα τυχόν βρείτε και έχουν εκδοθεί πριν το 1997, περιγράφουν τη γλώσσα πριν τυποποιηθεί με το Standard του 1998. Να προτιμήσετε βιβλία που έχουν εκδοθεί μετά το 2011 και περιγράφουν τη γλώσσα σύμφωνα με το Standard του 2011.

C++11

  1. Bjarne Stroustrup. Programming -- Principles and Practice Using C++ (Second Edition) Addison Wesley, Reading, MA, USA, 2014.
  2. Bjarne Stroustrup. A tour of C++. Addison Wesley, Reading, MA, USA, 2013. A Tour of C++ ]
  3. Stanley B. Lippman, Josée Lajoie and Barbara E. Moo. C++ Primer. Addison Wesley, Reading, MA, USA, fifth edition, August 2012. Πολύ καλή, αναλυτικότατη παρουσίαση σχεδόν όλης της γλώσσας. Είναι κάπως δύσχρηστο ως βιβλίο αναφοράς.
  4. Nicolai M. Josuttis. The C++ Standard Library: A Tutorial and Reference. Addison Wesley, Reading, MA, USA, March 2012. The C++ Standard Library ] Πλήρες βιβλίο για την παρουσίαση της Standard Library. Απαιτεί γνώση των βασικών στοιχείων της C++. Ο τρόπος οργάνωσης της ύλης ίσως δυσκολεύει τον αναγνώστη.
  5. Bjarne Stroustrup. The C++ Programming Language. Addison Wesley, Reading, MA, USA, fourth edition, 2013. The C++ Programming Language (Fourth Edition) ] Η τέταρτη έκδοση διατίθεται μεταφρασμένη στα ελληνικά, με τίτλο “Η Γλώσσα Προγραμματισμού C++”, από τις εκδόσεις “Κλειδάριθμος”. Το πληρέστερο βιβλίο για τη C++, από το δημιουργό της γλώσσας.

C++98

  1. Andrew Koenig and Barbara E. Moo. Accelerated C++: practical programming by example. C++ In-Depth Series. Addison Wesley, Reading, MA, USA, 2000. Accelerated C++ ] Θεωρείται ένα από καλύτερα εισαγωγικά βιβλία, με πρωτοποριακή προσέγγιση στη διδασκαλία της C++. Υπάρχει στη Βιβλιοθήκη και προτείνεται για αυτομελέτη.
  2. Stanley B. Lippman. Essential C++. C++ In-Depth Series. Addison Wesley, Reading, MA, USA, 2000. Σύντομο και σχετικά πλήρες. Απαιτεί κάποια εξοικοίωση με τον προγραμματισμό. Προτείνεται για αυτομελέτη.
  3. Bjarne Stroustrup. Programming -- Principles and Practice Using C++ Addison Wesley, Reading, MA, USA, 2008.
    Εκδίδεται μεταφρασμένο στα ελληνικά, με τίτλο “Προγραμματισμός με τη C++”, από τις εκδόσεις “Παπασωτηρίου”.
  4. John R. Hubbard. Programming with C++. Schaum's Outline Series. McGraw-Hill, second edition, June 2000.
  5. Bruce Eckel. Thinking in C++. Introduction to Standard C++, volume 1.
    Prentice Hall, second edition, 2000. http://www.mindviewinc.com ] Διατίθεται και σε ηλεκτρονική μορφή, δωρεάν στο σχετικό link.
  6. Stanley B. Lippman, Josée Lajoie. C++ Primer. Addison Wesley, Reading, MA, USA, third edition, April 1998. Πολύ καλή, αναλυτικότατη παρουσίαση σχεδόν όλης της γλώσσας. Είναι κάπως δύσχρηστο ως βιβλίο αναφοράς. Υπάρχει στη Βιβλιοθήκη.
  7. Nicolai M. Josuttis. The C++ Standard Library: A Tutorial and Reference. Addison Wesley, Reading, MA, USA, September 1999. The C++ Standard Library ] Πλήρες βιβλίο για την παρουσίαση της Standard Library. Απαιτεί γνώση των βασικών στοιχείων της C++. Ο τρόπος οργάνωσης της ύλης ίσως δυσκολεύει τον αναγνώστη. Υπάρχει στη Βιβλιοθήκη.
  8. Bjarne Stroustrup. The C++ Programming Language. Addison Wesley, Reading, MA, USA, third edition, 1997. The C++ Programming Language (Third Edition) ] Διατίθεται μεταφρασμένη στα ελληνικά, με τίτλο “Η Γλώσσα Προγραμματισμού C++”, από τις εκδόσεις “Κλειδάριθμος”. Το πληρέστερο βιβλίο για τη C++, από το δημιουργό της γλώσσας. Η τρίτη έκδοση υπάρχει στη Βιβλιοθήκη. Τα τρία πρώτα κεφάλαια του βιβλίου (ιστορία και επισκόπηση της γλώσσας) παρέχονται δωρεάν στo σχετικό link και προτείνονται για ανάγνωση (είναι ιδιαίτερα δύσκολα για αρχάριους).