ΕΠΛ 032 Προγραµµατισµός Μεθόδων Επίλυσης Προβληµάτων Διάλεξη 1 Παύλος Αντωνίου
Εισαγωγή στην Πληροφορική και Προγραµµατισµό Συµβόλαιο Μαθήµατος. Ιστορική Αναδροµή. Υλικό Υπολογιστή (Computer Hardware). Λογισµικό Υπολογιστή (Computer Software). Μέθοδος Επίλυσης Προβληµάτων. Παραδείγµατα.
Συµβόλαιο Μαθήµατος Διδάσκων Καθηγητής: Παύλος Αντωνίου Γραφείο: ΘΕΕ 01, #Β117 Τηλέφωνο: 22 892636 E-mail: panton@cs.ucy.ac.cy Ιστοσελίδα Μαθήµατος http://www.cs.ucy.ac.cy/courses/ EPL032-2/index.html Διαλέξεις: Δευτέρα & Πέµπτη, 13:30 15:00 Αίθουσα: Ώρες γραφείου: Εργαστήρια: ΧΩΔ 01(Πανεπιστηµιούπολη), Αίθουσα #109 Δευτέρα, 11:00-13:00 (ή µετά από συνεννόηση) Υπεύθυνος Εργαστηρίου: Θα ανακοινωθεί σύντοµα
Γενική Περιγραφή Ο προγραµµατισµός αποτελεί αναπόσπαστο µέρος της Πληροφορικής. Στο µάθηµα ΕΠΛ 032 διδάσκεται ο προγραµµατισµός µεθόδων επίλυσης προβληµάτων κάνοντας χρήση της διαδικασιακής γλώσσας C. Το µάθηµα διδάσκει τις βασικές αρχές προγραµµατισµού µε έµφαση στο δοµηµένο προγραµµατισµό, την αφαιρετικότητα, υλοποίηση, έλεγχο, και αποσφαλµάτωση αρθρωτών προγραµµάτων. Το µάθηµα επίσης καλύπτει πολύ βασικές έννοιες αναφορικά µε την λειτουργία των ηλεκτρονικών υπολογιστών. Ο προγραµµατισµός είναι σχετικός σε άτοµα εκτός πληροφορικής λόγω των προεκτάσεων της πληροφορικής στις διάφορες πτυχές της ζωής µας (επαγγελµατικής και µη). Π.χ. χρήση εργαλείων (καθορισµός τύπων σε spreadsheet), εκτίµηση δυνατοτήτων ενός υπολογιστή, εκτίµηση βαθµού δυσκολίας εργασιών στο τµήµα τεχνολογίας πληροφοριών, κ.τ.λ.
Στόχοι Βασικός στόχος του µαθήµατος είναι η απόκτηση ικανότητας επίλυσης διαφόρων προβληµάτων µε προγραµµατισµό. Συγκεκριµένα: Θεµελίωση βασικών αρχών προγραµµατισµού, αλγοριθµικής σκέψης, αλγοριθµικών τεχνικών και δοµών προγραµµάτων. Σχεδίαση, υλοποίηση, δοκιµή και εξάλειψη σφαλµάτων αρθρωτών προγραµµάτων. Αξιολόγηση λύσεων ενός προβλήµατος. Εκµάθηση µιας υψηλού επιπέδου γλώσσας προγραµµατισµού (για το εαρινό εξάµηνο 2009-2010 έχει επιλεχτεί η εκµάθηση της γλώσσας C).
Τρόπος Διδασκαλίας Η διδασκαλία του µαθήµατος περιλαµβάνει µια σειρά διαλέξεων κι εργαστηρίων. Η παρακολούθηση των διαλέξεων και των εργαστηρίων είναι υποχρεωτική και θεωρείται αναγκαία για την επιτυχή ολοκλήρωση του µαθήµατος. Βασικός στόχος είναι η ενεργή συµµετοχή των φοιτητών µέσω ερωτήσεων και εργαστηριακών ασκήσεων. Παρακαλείστε να προµηθεύεστε τις σηµειώσεις των διαλέξεων από την ιστοσελίδα του µαθήµατος πριν από κάθε διάλεξη.
Αξιολόγηση και Βαθµολόγηση Η αξιολόγηση των φοιτητών προκύπτει µε βάση την απόδοσή τους στις εργαστηριακές ασκήσεις και τις γραπτές εξετάσεις. Πιο αναλυτικά, η τελική βαθµολογία υπολογίζεται µε βάση τον παρακάτω πίνακα: Εξέταση Ηµιεξαµήνου Τελική Εξέταση Σύνολο Γραπτή Εξέταση 20% 50% 70% Εργαστήριο 30% 100% Τονίζεται ότι η παρακολούθηση των διαλέξεων και εργαστηρίων είναι υποχρεωτική, καθώς κρίνεται απολύτως αναγκαία για την επιτυχή ολοκλήρωση του µαθήµατος. Απαραίτητες προϋποθέσεις επιτυχίας στο µάθηµα είναι: η συµµετοχή του φοιτητή και στις 2 εξεταστικές (εξέταση ηµιεξαµήνου και τελική εξέταση) η παράδοση όλων των εργαστηριακών ασκήσεων.
Προτεινόµενη Βιβλιογραφία Συνιστάται η αγορά του παρακάτω βιβλίου το οποίο αποτελεί τη βάση της διδασκαλίας του µαθήµατος: J.R. Hanly and E.B. Koffman, Problem Solving and Program Design in C, 6th edition, Pearson Education, 2009 Άλλη Βιβλιογραφία: Εισαγωγή στον Προγραµµατισµό µε την C, N. Μισυρλής, Αθήνα, 2005 The C Programming Language, by Brian W. Kernighan and D. Ritchie, 2nd edition, Prentice Hall Software Series. Διαφάνειες του δικτυακού τόπου του µαθήµατος http://www.cs.ucy.ac.cy/courses/epl032/
Περιγραφή Διαλέξεων Εισαγωγή στην Πληροφορική & Προγραµµατισµό Εισαγωγή στην γλώσσα C Τύποι Δεδοµένων, Τελεστές και Αριθµητικές Εκφράσεις Είσοδος & Έξοδος Δεδοµένων Εντολές επιλογής & Συνθήκες επιλογής Εντολές επανάληψης Συναρτήσεις, Εµβέλεια Μεταβλητών Πίνακες Πίνακες και Συναρτήσεις Αλφαριθµητικές σειρές χαρακτήρων Αναδροµικές Συναρτήσεις
Ιστορική Αναδροµή Στο τέλος του 19 ου αιώνα ο Herman Hollerith εφευρίσκει την σύγχρονη διάτρητη κάρτα η οποία και χρησιµοποιείται για την απογραφή του πληθυσµού των Η.Π.Α το 1890. Η εργασία αυτή οδηγεί στην ίδρυση της ΙΒΜ. Το 1936 ο Alan Turing δηµιουργεί ένα µαθηµατικό υπολογιστικό µοντέλο το οποίο ονοµάζει Τuring Machine. Διαφοροποιήσεις αυτού του µοντέλου µπορούν να εξοµοιώσουν οποιοδήποτε υπολογιστή ο οποίος µπορεί να κατασκευαστεί. To 1939 oι Atanasoff και Berry δηµιουργούν στην Iowa τον ABC, τον πρώτο ψηφιακό Η/Υ για την εκτέλεση µαθηµατικών υπολογισµών προβληµάτων πυρηνικής φυσικής. Το 1946 αναπτύσσεται ο πρώτος ηλεκτρονικός ψηφιακός υπολογιστής γενικής χρήσης: ο ENIAC. Ζυγίζει 30 τόνους και έχει καλύπτει χώρο 30*50 πόδια. Στηρίζεται στο µοντέλο Von Neumann. Το 1951 παραδίδεται ο UNIVAC I, ο πρώτος εµπορικός ηλεκτρονικός υπολογιστής. Χρησιµοποιείται για την πρόβλεψη των προεδρικών εκλογών στην Αµερική. Το 1959 ανακαλύπτεται το transistor που οδηγεί σε µείωση του µεγέθους και κόστους των Η/Υ. Από το 1963 εµφανίζονται τα ολοκληρωµένα κυκλώµατα τα οποία µειώνουν ακόµα περισσότερο τον όγκο και αυξάνουν την ταχύτητα. Το 1981 κατασκευάζεται από την ΙΒΜ ο πρώτος προσωπικός Η/Υ. Από το 1986 εµφανίζονται οι παράλληλοι υπολογιστές.
Υλικό Υπολογιστή (Computer Hardware)
Υλικό Υπολογιστή (Computer Hardware) Η κεντρική µονάδα επεξεργασίας δέχεται εντολές και δεδοµένα. Τα δεδοµένα επεξεργάζονται σύµφωνα µε τις εντολές που έχουν δοθεί και τα αποτελέσµατα διαβιβάζονται στις κατάλληλες µονάδες. Η µονάδα εισόδου είναι µια συσκευή δια µέσου της οποίας δεδοµένα και προγράµµατα εισάγονται από τον έξω κόσµο στον Η/Υ (πληκτρολόγιο, ποντίκι). Η µονάδα εξόδου είναι µια συσκευή δια µέσου της οποίας, αποτελέσµατα αποθηκευµένα στον Η/Υ καθίστανται διαθέσιµα στον εξωτερικό κόσµο (εκτυπωτές, τερµατικά). Η µνήµη είναι µια συλλογή από κελιά (cells) το καθένα από τα οποία έχει µια µοναδική φυσική διεύθυνση. Υπάρχει η κύρια και η δευτερεύουσα µνήµη.
Λογισµικό Υπολογιστή (Computer Software) Κώδικας Μηχανής. Τα προγράµµατα γράφονται σε δυαδική γλώσσα Γλώσσα Assembly (Translators). Γλώσσες Υψηλού Επιπέδου (Fortran, Cobol, Lisp). Χρησιµοποιούν ένα µικρό σύνολο από αγγλικές λέξεις. Λογισµικό συστηµάτων (Προγράµµατα Ωφελιµότητας, Μεταφραστές Γλωσσών, Λειτουργικό Σύστηµα). Δοµηµένος Προγραµµατισµός (Pascal, Basic, C). Αντικειµενοστραφής Προγραµµατισµός (C++, Java). Λογισµικό εφαρµογής για χρήστες (Λογιστικά Φύλλα, Επεξεργαστές κειµένού, Εξωµειωτές). Λογισµικό επικοινωνίας υπολογιστών (WWW).
Μεταφραστές (Compilers) Μεταφράζουν γλώσσες ψηλού επιπέδου σε κώδικα µηχανής: Πηγαίο Πρόγραµµα (Source code) το αρχικό πρόγραµµα σε γλώσσα ψηλού επιπέδου. Αντικέιµενο Πρόγραµµα (Object code) το µεταφρασµένο πρόγραµµα σε κώδικα µηχανής.
Μεταφραστές (Compilers)
Συνδέτης (Linker) Ορισµένα προγράµµατα είναι είδη µεταφρασµένα (έτοιµες βιβλιοθήκες): Tα αντικείµενα προγράµµατα είναι διαθέσιµα για να χρησιµοποιηθούν Παραδείγµατα: προγράµµατα εισόδου εξόδου. O συνδέτης (linker) συνδυάζει: Το αντικείµενο πρόγραµµα για το πρόγραµµα που έχουµε γράψει µε Άλλα αντικείµενα προγράµµατα από έτοιµες βιβλιοθήκες για τη δηµιουργία Κώδικα µηχανής που θα φορτώσει ο loader στην κύρια µνήµη και θα δώσει εντολή για την εκτέλεση του από τον ΚΜΕ.
Μέθοδος Επίλυσης Προβληµάτων Περιγραφή του προβλήµατος. Προσδιορισµός των απαιτήσεων του προβλήµατος. Ανάλυση του προβλήµατος. Προσδιορισµός εισόδων, εξόδων. Προσδιορισµός της λύσης. Σχεδίαση της λύσης του προβλήµατος. Ανάπτυξη αλγορίθµου. (top-down design) Σχεδιασµός διαγραµµάτων ροής. Δηµιουργία ψευδοκώδικα. Υλοποίηση του αλγορίθµου. Δοκιµή, έλεγχος και διόρθωση λαθών. Συντήρηση και εκσυγχρονισµός του προγράµµατος.
Περιγραφή Προβλήµατος Πρόβληµα: Έχουµε µια λίστα µε ονόµατα. Θέλουµε να βρούµε τους φοιτητές του 1ου έτους STUDENTS.DAT Ηλεκτρονικό Επίθετο Όνοµα Ταχυδροµείο Έτος Τηλέφωνο Davis Albert none 1 668-78-9226 Crane Amory none 2 689-48-8430 Schakowsky Anibal none 3 652-58-7355 Kirk Anne rep.kirk@volcano.com 4 623-87-0203 Weller Anthony none 1 780-52-0498 Costello Barbara none 1 599-98-7962 Biggert Barney none 1 058-86-1065 Hastert Baron speaker@volcano.com 1 075-45-4923
Ανάλυση Προβλήµατος 1/2 Δεδοµένα Εισόδου: STUDENTS.DAT Αποτέλεσµα: H Λίστα µε τους φοιτητές του 1ου έτους. Θυµηθείτε ότι για να επεξεργαστούµε µια εγγραφή πρέπει να ανακτηθεί (µεταφερθεί) από τον δίσκο (DISK) στην µνήµη (RAM)
Ανάλυση Προβλήµατος 2/2 Προσδιορισµός της Λύσης- Ανάπτυξη Αλγορίθµου 1) Άνοιξε το αρχείο. 2) Διάβασε µια εγγραφή από τον δίσκο στην µνήµη. 3) Αν είναι φοιτητής είναι του πρώτου έτους τύπωσε το όνοµα του. 4) Αν υπάρχει επόµενη εγγραφή διάβασε την και µετά επανέλαβε τo βήµα 3-4.
3) Σχεδίαση Λύσης Προβλήµατος 1/2 Διάγραµµα Ροής Δεδοµένων
3) Σχεδίαση Λύσης Προβλήµατος 2/2 Ψευδοκώδικας /* This is a comment */ start /* Start program*/ open STUDENT.DAT /* Open file */ read rec /* Read Record */ while not EOF do /* repeat until end while*/ if rec.year==1 then print rec.name read rec /* Read next record*/ end while close STUDENT.DAT /* Close file */ end /* End of program */
4) Κωδικοποίηση (στην C) 1/2 #include <stdio.h> int main() { FILE *fp; char line[100], *c; /* open file*/ fp = fopen("student.dat","r"); if (fp==null) { printf("unable to open file!\n"); exit(-1); } /* read line (one record) */ c = fgets(line, 100, fp); while (c!= NULL) { /* getyear() returns the year */ if (getyear(line) == 1) printf("%s", line); /* read next line (one record) */ c = fgets(line, 100, fp); } fclose(fp); return 0; } Δεν χρειάζεται να ξέρετε να «µιλάτε» C. Η εκµάθηση της C είναι µέρος του µαθήµατος!
4) Μετάφραση Εκτέλεση 2/2 Κώδικας C C Compiler (µεταγλωττιστής) Κώδικας Μηχανής 000101010011110111101010101110000 111010000100010010100000000111..
5) Έλεγχος Λαθών Επέστρεψε το πρόγραµµα τις αναµενόµενες τιµές? Davis Albert none 1 668-78-9226 Weller Anthony none 1 780-52-0498 Costello Barbara none 1 599-98-7962 Biggert Barney none 1 058-86-1065 Hastert Baron speaker@volcano.com 1 075-45-4923 Ναι! Το πρόγραµµα πρέπει να ελεγχθεί και µε άλλες τιµές εισόδου πριν να χρησιµοποιηθεί. Αν βρεθούν λάθη τότε αυτά πρέπει να διορθωθούν
6) Συντήρηση προγράµµατος, τεκµηρίωση. Συντήρηση προγράµµατος: Συγγραφή τεκµηρίωσης Το λογισµικό εγκαθίσταται και ξεκινά η λειτουργία του. Το περιβάλλον αλλάζει αλλάζει και το πρόγραµµα Οι χρήστες επιθυµούν (ή χρειάζονται) περισσότερα από το πρόγραµµα
Στόχος Μαθήµατος Η ανάπτυξη ικανοτήτων ανάλυσης προβληµάτων Η θεµελίωση βασικών αρχών αλγοριθµικής σκέψης και προγραµµατισµού (στην γλώσσα C) Σχεδίαση, υλοποίηση, δοκιµή και εξάλειψη σφαλµάτων αρθρωτών προγραµµάτων.