Διδάσκων: Μιχάλης Πλεξουσάκης, Γ-118, Λευκό Κτήριο. E-mail: plex [at] tem uoc gr

Ώρες γραφείου: TBA

Το μάθημα «Γλώσσα Προγραμματισμού Ηλεκτρονικών Υπολογιστών» αποτελεί συνέχεια του μαθήματος «Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές». Απευθύνεται σε πρωτοετείς φοιτητές του Τμήματος Εφαρμοσμένων Μαθηματικών οι οποίοι έχουν αποκτήσει εμπειρία στον προγραμματισμό με τη γλώσσα C. Οι διαλέξεις φιλοδοξούν να παρουσιάσουν εκείνα τα μέρη της γλώσσας τα οποία δεν καλύφθηκαν εκτενώς στο μάθημα «Εισαγωγή στους Η/Υ» και συγκεκριμένα, δομές (structs), δυναμική παραχώρηση μνήμης, λειτουργίες εισόδου/εξόδου και αριθμητική κινητής υποδιαστολής. Έμφαση δίδεται στην ανάπτυξη αλγορίθμων για την επίλυση υπολογιστικών προβλημάτων.

Ώρες διαλέξεων: Δευτέρα και Τετάρτη, 9-11, Αμφ. Β.

Ώρες εργαστηρίων: Δευτέρα 13-15 (Πίκουλας) και 15-17 (Iordanov), Τρίτη 11-13 (Αθανασόπουλος), Τετάρτη 11-13 (Γουρλής), Παρασκευή 9-11 (Πλεξουσάκης), Η-205

Programming language cartoon. Courtesy of
			http://www.taranfx.com/huge-collection-of-programming-cartoons

Η γλώσσα προγραμματισμού C, αν και αναπτύχθηκε πρίν από 40 και πλέον χρόνια, αποτελεί ακόμα και σήμερα μια από τις δημοφιλέστερες γλώσσες προγραμματισμού. Διακρίνεται για την οικονομία του συντακτικού της, τις μοντέρνες δομές ελέγχου και τον πλούτο των τύπων δεδομένων και τελεστών της. Αυτά τα χαρακτηριστικά καθιστούν την C ελκυστική για την λύση υπολογιστικών προβλημάτων και τον προγραμματισμό επιστημονικών και τεχνικών εφαρμογών. Το μάθημα ΤΕΜ-102 δίνει μεγάλη σημασία τόσο στην παρουσιάση των εννοιών της γλώσσας όσο και στην ανάπτυξη αλγορίθμων για την επίλυση υπολογιστικών προβλημάτων. Η παρουσία, επομένως, του ακροατή στα εργαστήρια του μαθήματος κρίνεται απαραίτητη. Άλλο τόσο χρήσιμη είναι και η έγκαιρη κατανόηση του γεγονότος ότι ο μόνος τρόπος να μάθει κανείς να προγραμματίζει είναι γράφοντας προγράμματα.

Διδακτικό υλικό

Για τις ανάγκες του μαθήματος θα χρησιμοποιηθεί το βιβλίο «Η γλώσσα προγραμματισμού C» των Brian W. Kernighan και Dennis Μ. Ritchie (ο δεύτερος συγγραφέας είναι ο δημιουργός της C). Η C είναι μικρή γλώσσα προγραμματισμού, σε σχέση με το πλήθος των δομών και τύπων δεδομένων της, και η εκμάθησή της εξυπηρετείται καλύτερα από ένα σύντομο βιβλίο όπως αυτό των Kernighan και Ritchie (μόνο 272 σελίδες!). Η βιβλιογραφία βρίθει κυριολεκτικά με βιβλία για την εκμάθηση της γλώσσας και στο διαδίκτυο μπορεί να βρεί κανείς χιλιάδες οδηγούς εκμάθησης (tutorials). Ο αναγνώστης ίσως βρεί χρήσιμο και το βιβλίο του Eric S. Roberts «Η τέχνη και η επιστήμη της C», εκδόσεις Κλειδάριθμος, το οποίο χρησιμοποιείται επίσης ευρέως για τη διδασκαλία της C σε εισαγωγικά μαθήματα προγραμματισμού. Προσωπικές σημειώσεις του διδάσκοντα, οι οποίες θα αναρτώνται σε αυτήν εδώ την ιστοσελίδα, θα καλύψουν περαιτέρω θέματα.

06-05-11 Υλικό για τα εργαστήρια της εβδομάδας 9-13 Μαΐου: το πρόγραμμα nqueens.c λύνει το πρόβλημα των n-βασιλισσών με την τεχνική backtracking. Μια άλλη εφαρμογή της ίδιας τεχνικής υλοποιείται στο πρόγραμμα subsets.c το οποίο τυπώνει όλα τα υποσύνολα ενός (πεπερασμένου) συνόλου.

17-04-11 Υλικό για τα εργαστήρια της εβδομάδας 2-6 Μαΐου: το πρόγραμμα lists.c περιέχει μια υλοποίηση της δομής συνδεδεμένη λίστα. Το συμπιεσμένο αρχείο bintree.tgz περιέχει την υλοποίηση ενός προγράματος που διαβάζει λέξεις από ένα αρχείο και τις τοποθετεί σε ένα δυαδικό δέντρο αναζήτησης. Το πρόγραμμα hash.c τοποθετεί τις λέξεις του αρχείου /use/share/dict/linux.words σε ένα πίνακα κατακερματισμού.

26-03-11 Υλικό για τα εργαστήρια της εβδομάδας 26/3-1/4: ο κώδικας binsearch.c υλοποιεί την μέθοδο της δυαδικής αναζήτησης.

14-03-11 Υλικό για τα εργαστήρια της εβδομάδας 14-18 Μαρτίου: ο κώδικας dateconv.c είναι ένα πρόγραμμα μετατροπής ημερομηνιών. Ένα παράδειγμα ταξινόμησης αλφαριθμητικών με τον αλγόριθμο ταξινόμησης Quicksort περιέχεται στο αρχείο ptrsort.c. Το πρόγραμμα geom.c είναι ένα παράδειγμα χρήσης δομών.

05-03-11 Υλικό για τα εργαστήρια της εβδομάδας 7-11 Μαρτίου: ο κώδικας fmtout.c περιέχει παραδείγματα χρήσης διάφορων κωδικών μορφοποίησης. Ο κώδικας fileio.c είναι ένα παράδειγμα εισόδου-εξόδου σε αρχεία. Ένα πιό πολύπλοκο παράδειγμα βρίσκεται στο αρχείο fileio2.c.

02-03-11 Υλικό για τα εργαστήρια της εβδομάδας 28 Φεβρουαρίου - 4 Μαρτίου: ο κώδικας mathfuncs.c είναι ένα πρόγραμμα που χρησιμοποιεί τριγωνομετρικές συναρτήσεις. Υλοιποιήσεις μερικών συναρτήσεων σε strings στον κώδικα strfuncs.c. Το πρόγραμμα charfuncs.c αποτελεί παράδειγμα χρήσης συναρτήσεων σε χαρακτήρες.

21-02-11 Υλικό για τα εργαστήρια της εβδομάδας 21-25 Φεβρουαρίου: ο κώδικας pattern.c από το Κεφάλαιο 4. Το πρόγραμμα sizes.c υπολογίζει τα μεγέθη των ακεραίων τύπων δεδομένων (προσημασμένων και μη). Το πρόγραμμα calc1.c είναι η πρώτη εκδοχή του προγράμματος-αριθμομηχανή (παράγραφος 4.3). Το συμπιεσμένο archive calcprog.tgz περιέχει το πρόγραμμα-αριθμομηχανή χωρισμένο σε περισσότερα του ενός αρχεία πηγαίου κώδικα (παράγραφος 4.4).

Αξιολόγηση

Ο τελικός βαθμός, Β, του μαθήματος θα υπολογιστεί ως εξής: Αν T ≥ 4 τότε B = 0.35 * E + 0.65 * T, διαφορετικά Β = Τ. Εδώ E είναι ο μέσος όρος των εργαστηριακών ασκήσεων και T ο βαθμός στο τελικό διαγώνισμα. Ο ίδιος τύπος υπολογισμού του τελικού βαθμού ισχύει και για την εξεταστική περίοδο του Σεπτεμβρίου.

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

23-06-11 Παρακαλούνται οι φοιτητές με αριθμούς μητρώου 635, 641, 730, 803, 812, 828, 835, 839, 893, 896, 910, 911, 914, 1022, 1061, 1077, 1421, 1435, 1480, 1481, 1336 και 1353 να επικοινωνήσουν με τον διδάσκοντα το συντομότερο δυνατόν.

16-06-11 Λύσεις Τελικού διαγωνίσματος: Θέματα Α, Θέματα Β.

05-04-11 Επαναληπτικές ασκήσεις για την τελική εξέταση του μαθήματος 8α γίνουν στις 30-05-11 και 01-06-11, 9.00, Αμφ Β.

19-04-11 H τρίτη εργαστηριακή άσκηση. Ημερομηνία παράδοσης Τρίτη 10 Μαΐου, 21:00.

13-04-11 Μια λύση της δεύτερης εργαστηριακής άσκησης.

28-03-11 Η εξέταση της 1ης και της 2ης εργαστηριακής άσκησης θα γίνει στα εργαστήρια της εβδομάδας 4/4-8/4.

21-03-11 H δεύτερη εργαστηριακή άσκηση. Ημερομηνία παράδοσης Τρίτη 29 Μαρτίου, 21:00.

11-03-11 Μια λύση της πρώτης εργαστηριακής άσκησης.

02-03-11 Η πρώτη εργαστηριακή άσκηση. Ημερομηνία παράδοσης Πέμπτη 10 Μαρτίου, 21:00.

23-02-11 Η εγγραφή στα εργαστήρια του μαθήματος γίνεται μέσω της ιστοσελίδας http://doodle.com/uy9v2nepuw2x9run. Δηλώστε ένα και μόνο ένα δίωρο εργαστηρίων και γράψτε το όνομα και τον αριθμό μητρώου σας. Τα εργαστήρια θα ξεκινήσουν μόλις οριστούν βοηθοί.

Ημερολόγιο

04-05-11 Η τεχνική backtracking. Παραδείγματα.

02-05-11 Πολύπλοκες δηλώσεις (complicated declarations).

13-04-11 Δείκτες σε συναρτήσεις (συνέχεια). Η εντολή typedef.

11-04-11 Ορίσματα γραμμής εντολών. Δείκτες σε συναρτήσεις.

06-04-11 Πίνακες κατακερματισμού (hash tables).

04-04-11 Συνδεδεμένες λίστες.

30-03-11 Αυτοαναφερόμενες δομές (συνέχεια). Δυαδικά δέντρα αναζήτησης.

28-03-11 Δυναμική κατανομή μνήμης. Αυτοαναφερόμενες δομές.

23-03-11 Δείκτες σε δομές.

21-03-11 Δομές (structs).

16-03-11 Πολυδιάστατοι πίνακες και δείκτες. Δομές (structs).

14-03-11 Πίνακες δεικτών. Πολυδιάστατοι πίνακες και δείκτες. Δείκτες σε δείκτες.

09-03-11 Μορφοποιημένη είσοδος-έξοδος. Πρότυπες ροές και αρχεία.

02-03-11 Συναρτήσεις της πρότυπης βιβλιοθήκης. Συναρτήσεις σε χαρακτήρες και αλφαριθμητικά. Μαθηματικές συναρτήσεις.

28-02-11 Δομή προγράμματος και συναρτήσεις (συνέχεια).

23-02-11 Δομή προγράμματος και συναρτήσεις. Ένα απλό πρόγραμμα-αριθμομηχανή. Συμβολισμός postfix για αριθμητικές παραστάσεις (RPN).

21-02-11 Δείκτες (επανάληψη). Δομή προγράμματος και συναρτήσεις.

16-02-11 Σύντομη επανάληψη Κεφαλαίων 1-4 (συνέχεια).

14-02-11 Σύντομη επανάληψη Κεφαλαίων 1-4 από το βιβλίο «Η γλώσσα προγραμματισμού C» των Brian W. Kernighan και Dennis Μ. Ritchie.