1 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 1ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος
Ορισμός Wikipedia.org 2 Δομημένος προγραμματισμός (structured programming) ή διαδικαστικός προγραμματισμός (procedural programming) είναι μία προσέγγιση στον προγραμματισμό, η οποία βασίζεται στην έννοια της κλήσης διαδικασίας. Η διαδικασία, γνωστή επίσης και ως ρουτίνα, υπορουτίνα, μέθοδος ή συνάρτηση (δεν σχετίζεται άμεσα με τη μαθηματική έννοια της συνάρτησης), είναι απλά ένα αυτοτελές σύνολο εντολών προς εκτέλεση. Ο δομημένος προγραμματισμός βασίζεται στην αρχή του διαίρει και βασίλευε, καθώς διασπά το βασικό πρόβλημα σε μικρότερα υποπροβλήματα (γνωστά επίσης και ως εργασίες). Κάθε εργασία με πολύπλοκη περιγραφή διαιρείται σε μικρότερες, έως ότου οι εργασίες να είναι αρκετά μικρές, περιεκτικές και εύκολες προς κατανόηση.
Σκοπός του μαθήματος 3 Εισαγωγή στον προγραμματισμό Η/Υ με τη γλώσσα C Εισαγωγή στην αλγοριθμική επίλυση προβλημάτων Πρόγραμμα: Ακριβής διατύπωση ενός αλγορίθμου σε μια γλώσσα προγραμματισμού. Αλγόριθμος: Βήμα προς βήμα διαδικασία για την επίλυση κάποιου προβλήματος.
Αλγόριθμος. Πρέπει να: 4 Είσοδος (>=0 εξωτερικά δεδομένα) Έξοδος (>=1 αποτελέσματα) περιέχει πεπερασμένο αριθμό βημάτων είναι σαφώς ορισμένος (πληρότητα & ακρίβεια) κάθε βήμα, μεμονωμένα, να είναι απλό είναι αποδοτικός καλύπτει όλες τις δυνατές καταστάσεις
Τρόποι περιγραφής αλγορίθμων 5 φυσική γλώσσα ψευδοκώδικας (pseudocode) περιγραφικός τρόπος διάγραμμα ροής (flow chart) σχηματικός τρόπος κώδικας
Σχεδιασμός Αλγορίθμου 6 Καθορισμός στόχου περιορισμοί; παραδοχές; (υποθέσεις) Διαδικασίες για τη λύση του προβλήματος Καταμερισμός σε υποπροβλήματα / ενέργειες / εξισώσεις Εφαρμογή βημάτων σε λογική σειρά Καταμερισμός σε λογικά βήματα απαραίτητα inputs σταθερές user inputs data από αρχείο data από άλλο μέρος του προγράμματος Επιλογή των outputs Ποια; Που; (οθόνη; αρχείο; εκτυπωτή; αλλού;)
Ανάπτυξη προγράμματος 7 1. Ανάλυση δεδομένων του προβλήματος 2. Μαθηματική διατύπωση του προβλήματος 3. Σχεδιασμός κατάλληλου αλγορίθμου (προηγούμενη διαφάνεια) 4. Ανάπτυξη προγράμματος (έκφραση αλγορίθμου σε γλώσσα προγραμματισμού) 5. Εκτέλεση προγράμματος για συγκεκριμένα δεδομένα 6. Ερμηνεία αποτελεσμάτων
Γλώσσες προγραμματισμού 8 Γλώσσες υψηλού επιπέδου (Γ.Υ.Ε.) compiler Java, C, C++, Python, Lisp, Fortran, Pascal, κτλ. Γλώσσες χαμηλού επιπέδου γλώσσα μηχανής (Γ.Μ.) διαφορετική για κάθε τύπο επεξεργαστή εντολές = αλληλουχίες από bits (0 και 1) Assembly λίγο ανώτερο επίπεδο από Γ.Μ. διαφορετική για κάθε τύπο επεξεργαστή μεταγλωττιστής μνημονικά ονόματα αντί για bits (ADD, MPY, A1, A2) Γ.Υ.Ε. : ανεξάρτητες από τον τύπο επεξεργαστή
Ένα πολύ απλό πρόγραμμα σε C 9 #include <stdio.h> void main() { printf("hello world!\n"); }
Το ίδιο πρόγραμμα, σε Assembly: 10 ; Hello World for Intel Assembler (MSDOS) mov ax,cs mov ds,ax mov ah,9 mov dx, offset Hello int 21h xor ax,ax int 21h Hello: db "Hello world!",13,10,"$"
Το ίδιο πρόγραμμα, σε Γλώσσα Μηχανής: 11
Μεταγλωττιστές (compilers) 12 Προγράμματα που μετατρέπουν ένα πηγαίο πρόγραμμα (Γ.Υ.Ε.)σε εκτελέσιμο (σε Γ.Μ.) Το παραγόμενο εκτελέσιμο πρόγραμμα τρέχει αυτόνομα σε κάθε υπολογιστή που καταλαβαίνει τη συγκεκριμένη Γ.Μ.
Διερμηνείς (interpreters) 13 Προγράμματα που εκτελούν άμεσα ένα πηγαίο πρόγραμμα γραμμένο σε γλώσσα υψηλού επιπέδου. Αρχείο προγράμματος (πηγαίο) Διερμηνέας ΕΚΤΕΛΕΣΗ Δεν παράγουν εκτελέσιμο πρόγραμμα Για την εκτέλεση του πηγαίου προγράμματος σε κάποιον υπολογιστή απαιτείται και η ύπαρξη του διερμηνέα. Τα ερμηνευόμενα προγράμματα είναι πιο αργά από τα μεταγλωττιζόμενα
Σφάλματα προγραμματισμού 14 Συντακτικά σφάλματα (syntax errors) Ανιχνεύονται από τον compiler. Σφάλματα κατά την εκτέλεση (run-time errors) Ανιχνεύονται από τον interpreter (σε γλώσσες που διαθέτουν). Σφάλματα λογικής (bugs) Ανιχνεύονται από τον προγραμματιστή (debugging). Δυσκολία εντοπισμού σφαλμάτων (συνήθως): γ > β > α
Βασικά χαρακτηριστικά της C 15 Περιλαμβάνει βασικές αρχές και δομές των περισσότερων Γ.Π. (Fortran, Pascal, Basic, κτλ) Έχει δυνατότητες που δεν συναντώνται σε παλαιότερες Γ.Π. Δεν εξειδικεύεται σε συγκεκριμένες εφαρμογές (όπως π.χ. η Fortran σε αριθμητική ανάλυση, η Cobol σε αρχεία), αλλά είναι εξίσου αποτελεσματική Είναι ο κορμός των πιο διαδεδομένων αντικειμενοστραφών (object-oriented) Γ.Π., π.χ. C++ και Java Είναι συχνά εργαλείο θεωρητικής διατύπωσης αλγορίθμων
Βασικά πλεονεκτήματα της C 16 Αποτελεσματικότητα (συνδυασμός δομής γλωσσών υψηλού επιπέδου με προσβασιμότητα στο hardware του Η/Υ γλωσσών χαμηλού επιπέδου) Γενικότητα εφαρμογών Ευκολία εκμάθησης Οικονομία έκφρασης (βιβλιοθήκες συναρτήσεων)
Ιστορία: 17 Δημιουργός: Dennis Ritchie (1972), ANSI Standard: 1988 Σημαντικότερο βιβλίο: Kernighan & Ritchie, The C Programming Language, 1978 Αρχικά: Γλώσσα συστημάτων, δηλαδή μεταγλωττιστών (compilers) και λειτουργικών συστημάτων (operating systems). Π.χ., Ο compiler της C είναι γραμμένος σε C! Το UNIX είναι γραμμένο σε C.
Το πρώτο πρόγραμμα σε C 18 #include <stdio.h> void main() { printf("hello world!\n"); /* sxolia pollwn grammwn*/ } //sxolio grammis
Φάσεις υλοποίησης ενός προγράμματος C 19 Σύνταξη του κώδικα του προγράμματος σε κάποιον editor και αποθήκευση σε αρχείο με κατάληξη.c (π.χ., hello.c) Compilation i. Προ-επεξεργασία (Preprocess) Ενσωματώνει αρχεία στον κώδικα και ορίζει τυχόν μακροαντικαταστάσεις. Εκτελούνται οι εντολές που ξεκινάνε από #. ii. Μεταγλώττιση (Compile) Μεταγλωττίζει το πρόγραμμα σε Γ.Μ. iii. Σύνδεση (Link) Γίνεται σύνδεση του κώδικα της Γ.Μ. με τις βιβλιοθήκες Εκτέλεση Η εντολή hello.exe θα τυπώσει: Hello world!
Μεταβλητές 20 Χρησιμοποιούνται για την αποθήκευση (φύλαξη) και επεξεργασία δεδομένων. Το στοιχείο που περιέχει μια μεταβλητή λέγεται τιμή. Μια μεταβλητή έχει: τύπο (type) όνομα (identifier αναγνωριστικό) τιμή (value) Δήλωση <τύπος> <όνομα> [=τιμή]; ή <τύπος> <μεταβλητή1>, <μεταβλητή2>,... ;
21 Κανόνες ονοματολογίας μεταβλητών Δεσμευμένες λέξεις(reserved): for, else, main, int, char, if ξεκινάνε με γράμμα ή _ περιέχουν γράμματα, αριθμούς, _ (όχι τελείες, *, #, κλπ.) χωρίς κενά υπάρχει διάκριση μεταξύ κεφαλαίων και μικρών Συνήθως (κατά σύμβαση): π.χ. my.var χρήση ΚΕΦΑΛΑΙΩΝ σε σταθερές char περιγραφικά ονόματα 7eleven arithmos_foititwn (π.χ. number_of_baskets, mesos_oros) σύντομα ονόματα για μεταβλητές μετρητών
Βασικοί τύποι μεταβλητών 22 όνομα περιγραφή μέγεθος* char Χαρακτήρας συνήθως 1 byte (ακέραιος 0-255) int Ακέραιος συνήθως 2 ή 4 bytes float double Πραγματικός απλής ακρίβειας Πραγματικός διπλής ακρίβειας char symbol = 'A'; int x = 5; float y, z; double a = 5.2; συνήθως 4 bytes συνήθως 8 bytes *εξαρτώνται από την αρχιτεκτονική του επεξεργαστή και από τον compiler Προσδιοριστές μεγέθους short/long: short int, long int, short double, long double