ΕΠΛ 032 Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Γενική Περιγραφή Ο προγραμματισμός αποτελεί αναπόσπαστο μέρος της Πληροφορικής. Στο μάθημα ΕΠΛ 032 διδάσκεται ο προγραμματισμός μεθόδων επίλυσης προβλημάτων κάνοντας χρήση της διαδικασιακής γλώσσας C. Το μάθημα διδάσκει τις βασικές αρχές προγραμματισμού με έμφαση στο δομημένο προγραμματισμό, την αφαιρετικότητα, υλοποίηση, έλεγχο, και αποσφαλμάτωση αρθρωτών προγραμμάτων. Το μάθημα επίσης καλύπτει πολύ βασικές έννοιες αναφορικά με την λειτουργία των ηλεκτρονικών υπολογιστών. Ο προγραμματισμός είναι σχετικός σε άτομα εκτός πληροφορικής λόγω των προεκτάσεων της πληροφορικής στις διάφορες πτυχές τηςζωήςμας(επαγγελματικής και μη). Π.χ. χρήση εργαλείων (καθορισμός τύπων σε spreadsheet), εκτίμηση δυνατοτήτων ενός υπολογιστή, εκτίμηση βαθμού δυσκολίας εργασιών στο τμήμα τεχνολογίας πληροφοριών, κ.τ.λ.
Στόχοι Βασικός στόχος του μαθήματος είναι η απόκτηση ικανότητας επίλυσης διαφόρων προβλημάτων με προγραμματισμό. Συγκεκριμένα: Θεμελίωση βασικών αρχών προγραμματισμού, αλγοριθμικής σκέψης, αλγοριθμικών τεχνικών και δομών προγραμμάτων. Σχεδίαση, υλοποίηση, δοκιμή και εξάλειψη σφαλμάτων αρθρωτών προγραμμάτων. Αξιολόγηση λύσεων ενός προβλήματος. Εκμάθηση μιας υψηλού επιπέδου γλώσσας προγραμματισμού Τρόπος Διδασκαλίας Η διδασκαλία του μαθήματος περιλαμβάνει μια σειρά διαλέξεων κι εργαστηρίων. Η παρακολούθηση των διαλέξεων και των εργαστηρίων είναι υποχρεωτική και θεωρείται αναγκαία για την επιτυχή ολοκλήρωση του μαθήματος. Βασικός στόχος είναι η ενεργή συμμετοχή των φοιτητών μέσω ερωτήσεων και εργαστηριακών ασκήσεων. Παρακαλείστε να προμηθεύεστε τις σημειώσεις των διαλέξεων από την ιστοσελίδα του μαθήματος πριν από κάθε διάλεξη. 2
Προτεινόμενη Βιβλιογραφία Συνιστάται η αγορά του παρακάτω βιβλίου το οποίο αποτελεί τη βάση της διδασκαλίας του μαθήματος: J.R. Hanly and E.B. Koffman, Problem Solving and Program Design in C, 5th edition, Addison-Wesley, 2007 Άλλη Βιβλιογραφία: Εισαγωγή στον Προγραμματισμό με την 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 Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις Είσοδος & Έξοδος Δεδομένων Εντολές επιλογής & Συνθήκες επιλογής Εντολές επανάληψης Συναρτήσεις, Εμβέλεια Μεταβλητών Πίνακες Πίνακες και Συναρτήσεις Αλφαριθμητικές σειρές χαρακτήρων Αναδρομικές Συναρτήσεις 3
Ιστορική Αναδρομή Στο τέλος του 9 ου αιώνα ο Herman Hollerith εφευρίσκει την σύγχρονη διάτρητη κάρτα η οποία και χρησιμοποιείται για την απογραφή του πληθυσμού των Η.Π.Α το 890. Η εργασία αυτή οδηγεί στην ίδρυση της ΙΒΜ. Το 936 ο Alan Turing δημιουργεί ένα μαθηματικό υπολογιστικό μοντέλο το οποίο ονομάζει Τuring Machine. Διαφοροποιήσεις αυτού του μοντέλου μπορούν να εξομοιώσουν οποιοδήποτε υπολογιστή ο οποίος μπορεί να κατασκευαστεί. To 939 oι Atanasoff και Berry δημιουργούν στην Iowa τον ABC, τον πρώτο ψηφιακό Η/Υ για την εκτέλεση μαθηματικών υπολογισμών προβλημάτων πυρηνικής φυσικής. Το 946 αναπτύσσεται ο πρώτος ηλεκτρονικός ψηφιακός υπολογιστής γενικής χρήσης: ο ENIAC. Ζυγίζει 30 τόνουςκαιέχεικαλύπτειχώρο30*50 πόδια. Στηρίζεται στο μοντέλο Von Neumann. Το 95 παραδίδεται ο UNIVAC I, ο πρώτος εμπορικός ηλεκτρονικός υπολογιστής. Χρησιμοποιείται για την πρόβλεψη των προεδρικών εκλογών στην Αμερική. Το 959 ανακαλύπτεται το transistor που οδηγεί σε μείωση του μεγέθους και κόστους των Η/Υ. Από το 963 εμφανίζονται τα ολοκληρωμένα κυκλώματα τα οποία μειώνουν ακόμα περισσότερο τον όγκο και αυξάνουν την ταχύτητα. Το 98 κατασκευάζεται από την ΙΒΜ ο πρώτος προσωπικός Η/Υ. Από το 986 εμφανίζονται οι παράλληλοι υπολογιστές. Υλικό Υπολογιστή (Computer Hardware) 4
Υλικό Υπολογιστή (Computer Hardware) Η κεντρική μονάδα επεξεργασίας δέχεται εντολές και δεδομένα. Τα δεδομένα επεξεργάζονται σύμφωνα με τις εντολές που έχουν δοθεί και τα αποτελέσματα διαβιβάζονται στις κατάλληλες μονάδες. Η μονάδα εισόδου είναι μια συσκευή δια μέσου της οποίας δεδομένα και προγράμματα εισάγονται από τον έξω κόσμο στον Η/Υ (πληκτρολόγιο, ποντίκι). Η μονάδα εξόδου είναι μια συσκευή δια μέσου της οποίας, αποτελέσματα αποθηκευμένα στον Η/Υ καθίστανται διαθέσιμα στον εξωτερικό κόσμο (εκτυπωτές, τερματικά). Η μνήμη είναι μια συλλογή από κελιά (cells) το καθένα από τα οποία έχει μια μοναδική φυσική διεύθυνση. Υπάρχει η κύρια και η δευτερεύουσα μνήμη. Λογισμικό Υπολογιστή (Computer Software) Κώδικας Μηχανής. Τα προγράμματα γράφονται σε δυαδική γλώσσα Γλώσσα Assembly (Translators). ΓλώσσεςΥψηλούΕπιπέδου(Fortran, Cobol, Lisp). Χρησιμοποιούν ένα μικρό σύνολο από αγγλικές λέξεις. Λογισμικό συστημάτων (Προγράμματα Ωφελιμότητας, Μεταφραστές Γλωσσών, Λειτουργικό Σύστημα). Δομημένος Προγραμματισμός (Pascal, Basic, C). Αντικειμενοστραφής Προγραμματισμός (C++, Java). Λογισμικό εφαρμογής για χρήστες (Λογιστικά Φύλλα, Επεξεργαστές κειμένού, Εξωμειωτές). Λογισμικό επικοινωνίας υπολογιστών (WWW). 5
Μεταφραστές (Compilers) Μεταφράζουν γλώσσες ψηλού επιπέδου σε κώδικα μηχανής: Πηγαίο Πρόγραμμα (Source code) το αρχικό πρόγραμμα σε γλώσσα ψηλού επιπέδου. Αντικείμενο Πρόγραμμα (Object code) το μεταφρασμένο πρόγραμμα σε κώδικα μηχανής. Μεταφραστές (Compilers) 6
Συνδέτης (Linker) Ορισμένα προγράμματα είναι είδη μεταφρασμένα (έτοιμες βιβλιοθήκες): Tα αντικείμενα προγράμματα είναι διαθέσιμα για να χρησιμοποιηθούν Παραδείγματα: προγράμματα εισόδου εξόδου. O συνδέτης (linker) συνδυάζει: Το αντικείμενο πρόγραμμα για το πρόγραμμα που έχουμε γράψει με Άλλα αντικείμενα προγράμματα από έτοιμες βιβλιοθήκες για τη δημιουργία Κώδικα μηχανής που θα φορτώσει ο loader στην κύρια μνήμη και θα δώσει εντολή για την εκτέλεση του από τον ΚΜΕ. Μέθοδος Επίλυσης Προβλημάτων Περιγραφή του προβλήματος. Προσδιορισμός των απαιτήσεων του προβλήματος. Ανάλυση του προβλήματος. Προσδιορισμός εισόδων, εξόδων. Προσδιορισμός της λύσης. Σχεδίαση της λύσης του προβλήματος. Ανάπτυξη αλγορίθμου. (top-down design) Σχεδιασμός διαγραμμάτων ροής. Δημιουργία ψευδοκώδικα. Υλοποίηση του αλγορίθμου. Δοκιμή, έλεγχος και διόρθωση λαθών. Συντήρηση και εκσυγχρονισμός του προγράμματος. 7
Περιγραφή Προβλήματος Πρόβλημα: Έχουμε μια λίστα με ονόματα. Θέλουμε να βρούμε τους φοιτητές του ου έτους Επίθετο Davis Crane Schakowsky Kirk Weller Costello Biggert Hastert STUDENTS.DAT Όνομα Ηλεκτρονικό Ταχυδρομείο Έτος Albert none Amory none 2 Anibal none 3 Anne rep.kirk@volcano.com 4 Anthony none Barbara none Barney none Baron speaker@volcano.com Τηλέφωνο 668-78-9226 689-48-8430 652-58-7355 623-87-0203 780-52-0498 599-98-7962 058-86-065 075-45-4923 Ανάλυση Προβλήματος /2 Δεδομένα Εισόδου: STUDENTS.DAT Αποτέλεσμα: H Λίστα με τους φοιτητές του ου έτους. Θυμηθείτε ότι για να επεξεργαστούμε μια εγγραφή πρέπει να ανακτηθεί (μεταφερθεί) από τον δίσκο (DISK) στην μνήμη (RAM) students.dat CPU RAM DISK 8
Ανάλυση Προβλήματος 2/2 Προσδιορισμός της Λύσης- Ανάπτυξη Αλγορίθμου ) Άνοιξε το αρχείο. 2) Διάβασε μια εγγραφή από τον δίσκο στην μνήμη. 3) Αν είναι φοιτητής είναι του πρώτου έτους τύπωσε το όνομα του. 4) Αν υπάρχει επόμενη εγγραφή διάβασε την και μετά επανέλαβε τo βήμα 3-4. 3) Σχεδίαση Λύσης Προβλήματος /2 Διάγραμμα Ροής Δεδομένων START OPEN students.dat read rec rec == EOF? YES CLOSE students.dat END NO rec.year ==? YES PRINT rec.name NO read rec 9
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== then print rec.name read rec /* Read next record*/ end while close STUDENT.DAT /* Close file */ end /* End of program */ 4) Κωδικοποίηση (στην C) /2 #include <stdio.h> int main() { FILE *fp; char line[00], *c; /* open file*/ fp = fopen("student.dat","r"); if (fp==null) { printf("unable to open file!\n"); exit(-); } /* read line (one record) */ c = fgets(line, 00, fp); while (c!= NULL) { /* getyear() returns the year */ if (getyear(line) == ) printf("%s", line); /* read next line (one record) */ c = fgets(line, 00, fp); } fclose(fp); return 0; } Δεν χρειάζεται να ξέρετε να «μιλάτε» C. Η εκμάθηση της C είναι μέρος του μαθήματος! 0
4) Μετάφραση Εκτέλεση 2/2 Κώδικας C C Compiler (μεταγλωττιστής) Κώδικας Μηχανής 000000000000000 00000000000000000000.. 5) Έλεγχος Λαθών Επέστρεψε το πρόγραμμα τις αναμενόμενες τιμές? Davis Albert none 668-78-9226 Weller Anthony none 780-52-0498 Costello Barbara none 599-98-7962 Biggert Barney none 058-86-065 Hastert Baron speaker@volcano.com 075-45-4923 Ναι! Το πρόγραμμα πρέπει να ελεγχθεί και με άλλες τιμές εισόδου πριν να χρησιμοποιηθεί. Αν βρεθούν λάθη τότε αυτά πρέπει να διορθωθούν
6) Συντήρηση προγράμματος, τεκμηρίωση. Συντήρηση προγράμματος: Συγγραφή τεκμηρίωσης Το λογισμικό εγκαθίσταται και ξεκινά η λειτουργία του. Το περιβάλλον αλλάζει αλλάζει και το πρόγραμμα Οι χρήστες επιθυμούν (ή χρειάζονται) περισσότερα από το πρόγραμμα Στόχος Μαθήματος Η ανάπτυξη ικανοτήτων ανάλυσης προβλημάτων Ηθεµελίωση βασικών αρχών αλγοριθµικής σκέψης και προγραμματισμού (στην γλώσσα C) Σχεδίαση, υλοποίηση, δοκιµή και εξάλειψη σφαλµάτων αρθρωτών προγραµµάτων. 2