Γενικά

K08 - Εαρινό εξάμηνο 2022-23 - Τμήμα περιττών ΑΜ

Καθηγητής

Βαθμολογία
  • Εργαστήριο: 12%
  • Εργασίες: 48%
    • Οι βαθμοί σε εργαστήριο και εργασίες ισχύουν για την εξεταστική του Σεπτεμβρίου της ίδιας χρονιάς, αλλά όχι για τις επόμενες χρονίες.
    • Προφορική εξέταση για εργαστήριο & εργασίες στο τέλος.
  • Τελική εξέταση: 40%
    • Απαιτείται βάση (50%) για να περάσετε το μάθημα.
Forum για συζητήσεις και ανακοινώσεις (piazza)
  • Είσοδος (εγγραφή με το @di.uoa.gr email σας αυστηρά)
  • Η εγγραφή είναι υποχρεωτική, όλες οι ανακοινώσεις θα γίνονται στο piazza!

Διαλέξεις

Εισαγωγή & τεχνικές αποδοτικού προγραμματισμού
Εισαγωγήhtml  pdf  4up
Modules, Makefiles, Editors, Githtml  pdf  4up
Recap: memory allocation, pointers, structs, typedefshtml  pdf  4up
Code style, Naming convensions, Testshtml  pdf  4up
Αφηρημένοι Τύποι Δεδομένων και εφαρμογές
Εισαγωγή στους Αφηρημένους Τύπους Δεδομένωνhtml  pdf  4up
Vectors, Λίστες, Στοίβες, Ουρέςhtml  pdf  4up
Ουρές προτεραιότητας, Maps, Σύνολαhtml  pdf  4up
Φροντιστήριο
Δομές δεδομένων
Εισαγωγή την υλοποίηση ΑΤΔ, Συνδεδεμένες λίστες
Ανάλυση αλγορίθμων, πολυπλοκότηταhtml  pdf  4up
Δυναμικοί Πίνακεςhtml  pdf  4up
Εξαρτημένες Δομές
Δέντρα, σωροίhtml  pdf  4up
Δυαδικά δέντρα αναζήτησηςhtml  pdf  4up
AVL δέντραhtml  pdf  4up
Δέντρα αναζήτησης m δρόμων, δέντρα 2-3, δέντρα 2-3-4html  pdf  4up
B-δέντραhtml  pdf  4up
Κατακερματισμόςhtml  pdf  4up
Γράφοιhtml  pdf  4up
Γράφοι με βάρηhtml  pdf  4up
Visualizations
  • Σε διαφάνειες που περιέχουν visualizations, μπορείτε να τα εκτελείτε βήμα-βήμα πατώντας space
  • Interactive εκδόσεις υπάρχουν εδώ (και για πολλές ακόμα δομές)

Εργαστήρια

Πρόγραμμα
  • Ένα εισαγωγικό εργαστήριο, χωρίς βαθμολόγηση, τις πρώτες 2 εβδομάδες.
  • 5 εργαστήρια με ασκήσεις που πρέπει να λύσετε και να παραδώσετε μέσω github.
    • Οι ασκήσεις μπορούν να λυθούν μέσα στο 2ωρο του εργαστηρίου, αλλά μπορείτε να τις παραδώσετε και αργότερα, μέχρι και το τέλος της επόμενη εβδομάδας από το εργαστήριο (ακριβείς ημερομηνίες στις εκφωνήσεις των εργαστηρίων).
    • Οι παρουσία είναι υποχρεωτική μόνο για τους πρωτοετείς, αλλά όλοι πρέπει να υποβάλλουν τις ασκήσεις μέσα στην προθεσμία.
  • Πέμπτη & Παρασκευή, 9:00-11:00 & 11:00-13:00 ανά 2 εβδομάδες (8 τμήματα).
Θέματα Εργαστηρίων

Εργασίες

Διαβάσετε προσεκτικά τις οδηγίες (κοινές για όλες τις εργασίες).

Κώδικας

Εργαλεία

Στο μάθημα χρησιμοποιείται ο editor VS Code (χωρίς να απαγορεύεται η χρήση άλλων editors), καθώς και τα εργαλεία gcc, make, git και valgrind.

Σημείωση: το c_programs directory που δημιουργείται όταν εκτελέσετε τις οδηγίες αφορά την Εισαγωγή στον Προγραμματισμό και δεν χρησιμοποιείται στο μάθημα.

Sample Project

Παράδειγμα δομής ενός C project, για χρήση στις πρώτες 2 ενότητες του μαθήματος. Επιδεικνύει modules, Makefiles και tests, καθώς και τη χρήση των ADTs που διδάσκονται στο μάθημα.

Για να το χρησιμοποιήσετε:

  • Κάντε clone το sample-project μέσω git (διαφάνειες) στον υπολογιστή σας.

    (Το project είναι αυτόνομο, μην το βάλετε μέσα σε κάποιο άλλο, πχ στο c_programs.)

  • Aνοίξτε το sample-project directory από το VS Code : File / Open Folder / <sample-project>.

  • Kάντε compile με Ctrl-Shift-B (διαφάνειες) ή τρέχοντας make στο αντίστοιχο directory.

Κώδικας διαλέξεων

Ο βασικός κώδικας που χρησιμοποιείται στις διαλέξεις της τρίτης ενότητας του μαθήματος. Περιέχει υλοποιήσεις από όλους τους ADTs που διδάσκονται στο μάθημα.

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

Η βασική ύλη του μαθήματος περιλαμβάνεται στις διαφάνειες των διαλέξεων και τον κώδικα που διδάσκεται στο μάθημα. Τα παρακάτω βασικά συγγράμματα χρησιμοποιούνται βοηθητικά στο μάθημα.

Βασικά συγγράμματα

  • Robert Sedgewick: Αλγόριθμοι σε C, Εκδόσεις Κλειδάριθμος, 2006. [Εύδοξος]

  • Thomas A. Standish: Data Structures, Algorithms and Software Principles in C, Addison-Wesley. 1995.

Πλήρης λίστα προτεινόμενων συγγραμμάτων στην υπηρεσία Εύδοξος

  • Robert Sedgewick: Αλγόριθμοι σε C, Εκδόσεις Κλειδάριθμος, 2006. [Εύδοξος] (προτεινόμενο)

  • Michael T. Goodrich, Roberto Tamassia: Δομές Δεδομένων & Αλγόριθμοι σε JAVA, Εκδόσεις Δίαυλος, 2013. [Εύδοξος]

  • Bruno R. Preiss: Δομές Δεδομένων και Αλγόριθμοι με Αντικειμενοστρεφή Σχεδιαστικά Μορφήματα στη C++, Εκδόσεις Πεδίο, 2016. [Εύδοξος]

  • Ν. Μισυρλής: Δομές Δεδομένων με C. [Εύδοξος]

Άλλα βιβλία διαθέσιμα online

  • Kyle Loudon, Mastering Algorithms with C, O'Reilly, 1999. [pdf]

  • Clifford A. Shaffer: Data Structures and Algorithm Analysis, Dover, 2013. [pdf]

Team

Καθηγητής

Υπεύθυνος εργαστηρίων

  • Σαράντης Πασκαλής (paskalis@di….)

Μεταπτυχιακοί συνεργάτες

Προπτυχιακοί συνεργάτες

Προηγούμενα Έτη

Διαλέξεις και εργασίες περασμένων ετών