ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ. ΚΑΤΕΥΘΥΝΣΗ ΔΙΟΙΚΗΣΗΣ ΤΟΥΡΙΣΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΕΩΝ ΦΙΛΟΞΕΝΙΑΣ Πληροφορική I "Προγραμματισμός" B. Φερεντίνος ver. 141214
Ο ρόλος των υπολογιστών Ο υπολογιστής είναι εργαλείο επίλυσης προβλημάτων λόγω: ταχύτητας υπολογισμού και μεγέθους μνήμης γενικής χρησιμότητας μέσω της έννοιας του προγραμματισμού Ένα πρόγραμμα: Είναι μια αλληλουχία κατάλληλων οδηγιών (εντολών) που εκτελεί ο υπολογιστής για την επίλυση ενός προβλήματος Η λειτουργία του υπολογιστή προσαρμόζεται στο προς επίλυση πρόβλημα Υλοποιεί έναν αλγόριθμο
Αλγόριθμος Είναι μια μαθηματική μεθοδολογία υπολογιστικής επίλυσης ενός προβλήματος Ορισμός: Ο πεπερασμένος αριθμός βημάτων που λύνουν ένα πρόβλημα Αλλιώς: Η βήμα προς βήμα διαδικασία για την επίλυση ενός προβλήματος Απαραίτητα χαρακτηριστικά ενός αλγόριθμου: Είσοδος (>=0 εξωτερικά δεδομένα) Έξοδος (>=1 αποτελέσματα) Ορισμένος (περιέχει σαφείς και ακριβείς οδηγίες) Κάθε οδηγία, μεμονωμένα, είναι εξαιρετικά απλή Καλύπτει όλες τις δυνατές καταστάσεις Τερματισμός (σε πεπερασμένο αριθμό βημάτων ή χρόνο)
Βασικές αλγοριθμικές ενέργειες Κάθε αλγόριθμος περιγράφει μόνο τις εξής οδηγίες: είσοδο δεδομένων έξοδο δεδομένων πράξεις και αναθέσεις τιμών σε μεταβλητές έλεγχο ποσοτήτων επιλογή ανάλογης δράσης (διακλαδώσεις) επαναληπτικές διαδικασίες τερματισμό Τα (πεπερασμένα) βήματα ενός αλγόριθμου εκτελούνται σειριακά
Τρόποι περιγραφής αλγορίθμων Φυσική γλώσσα Διάγραμμα ροής (flow chart) Ψευδοκώδικας (pseudocode) Κώδικας
Διάγραμμα ροής ή Αρχή / Τέλος Εκτέλεση υπολογισμών ή απόδοση τιμών σε μεταβλητές Έλεγχος συνθήκης (true ή false) Είσοδος δεδομένων / Έξοδος αποτελ. Διεύθυνση ροής του προγράμματος
Βήματα στην υπολογ. επίλυση προβλήματος 1. Ανάλυση δεδομένων του προβλήματος 2. Μαθηματική διατύπωση του προβλήματος 3. Ανάπτυξη τεχνικών επίλυσης: αλγόριθμος Σχεδιασμός ή επιλογή αλγορίθμου Συνήθως: ένα πρόβλημα πολλοί αλγόριθμοι 4. Διατύπωση αλγορίθμου σε γλώσσα προγ/σμού: πρόγραμμα 5. Εκτέλεση προγράμματος για συγκεκριμένα δεδομένα 6. Ερμηνεία αποτελεσμάτων
Ένα απλό πρόβλημα Έστω ότι ο φόρος ενός εργαζόμενου προκύπτει ως εξής: αν ο μισθός του είναι κάτω από 1000, ο φόρος του είναι 10% του μισθού του, αλλιώς ο φόρος του είναι 20% του μισθού του. Γράψτε ένα πρόγραμμα που δέχεται σαν είσοδο το μισθό ενός εργαζόμενου και εμφανίζει στην έξοδο το φόρο που πρέπει αυτός να πληρώσει.
Ο αλγόριθμος σε φυσική γλώσσα Αν ο μισθός της εισόδου είναι μικρότερος από 1000, τον πολλαπλασιάζουμε επί 10, διαιρούμε το γινόμενο με το 100 και τυπώνουμε το αποτέλεσμα. Αλλιώς, πολλαπλασιάζουμε τον αριθμό της εισόδου επί 20, διαιρούμε το γινόμενο με το 100 και τυπώνουμε το αποτέλεσμα.
Ο αλγόριθμος σε διάγραμμα ροής Αρχή Διάβασε Μ ΝΑΙ Μ < 1000? ΟΧΙ Φ = Μ *0.1 Φ = Μ *0.2 Εκτύπωσε Φ Τέλος
Ένα πιο πολύπλοκο πρόβλημα Έστω ότι ο φόρος ενός εργαζόμενου προκύπτει ως εξής: Αν ο μισθός του είναι κάτω από 1000, ο φόρος του είναι 10% του μισθού του. Αν ο μισθός του είναι πάνω από 1000 και κάτω από 2000, ο φόρος του είναι 20% του μισθού του. Αλλιώς, ο φόρος του είναι 30% του μισθού του. Γράψτε ένα πρόγραμμα που δέχεται σαν είσοδο το μισθό ενός εργαζόμενου και εμφανίζει στην έξοδο το φόρο που πρέπει αυτός να πληρώσει.
Ο αλγόριθμος σε διάγραμμα ροής Αρχή Διάβασε Μ ΝΑΙ Μ < 1000? ΟΧΙ Φ = Μ *0.1 ΝΑΙ Μ < 2000? ΟΧΙ Φ = Μ *0.2 Φ = Μ *0.3 Εκτύπωσε Φ Τέλος
Παραδείγματα αλγορίθμων Μέσος όρος 2 αριθμών Ελάχιστος 2 αριθμών Μετατροπή δεκαδικού σε δυαδικό αριθμό Μέγιστος Ν αριθμών
Αλγόριθμος ταξινόμησης φυσαλίδας Ο αλγόριθμος της φυσαλίδας (bubble sort) σε φυσική γλώσσα: 1. Σύγκρινε κάθε ζευγάρι στοιχείων (1ο με 2ο, 2ο με 3ο,..., (ν-1)ο με ν-οστό) και εάν τα στοιχεία κάποιου ζευγαριού είναι λάθος ταξινομημένα, ενάλλαξέ τα (swap) 2. Εάν έγινε έστω και μία εναλλαγή στοιχείων στο προηγούμενο βήμα, τότε επανέλαβε τη διαδικασία σύγκρισης των ζευγαριών (βήμα 1), διαφορετικά (δηλ., εάν δεν έγινε καμία εναλλαγή) τερμάτισε τον αλγόριθμο. (σε κάθε νέα επανάληψη του 1ου βήματος, το τελευταίο ζευγάρι της προηγούμενης επανάληψης της διαδικασίας δεν χρειάζεται να συγκριθεί, άρα συγκρίνεται πάντα ένα ζευγάρι λιγότερο)
Παράδειγμα bubble sort (ελαχιστοποίηση): Αρχική λίστα: 1η σύγκριση: 2η σύγκριση:... (ν-1)η σύγκριση: Μετά το 1ο πέρασμα:... Μετά το 2ο πέρασμα: 5 3 8 1 4 5 7 6 3 5 8 1 4 5 7 6 3 5 8 1 4 5 7 6 3 5 1 4 5 7 6 8 3 5 1 4 5 7 6 8 3 1 4 5 5 6 7 8
Ο ψευδοκώδικας του αλγόριθμου procedure bubblesort(a : list of sortable items) do swapped := false for each i in 0 to length(a) - 2 if A[i] > A[i+1] then swap( A[i], A[i+1] ) swapped := true end if end for while swapped end procedure Πρόβλημα: δεν προβλέπει μία επανάληψη λιγότερη σε κάθε επανεκτέλεση του for. Λύση;
Βήματα στην υπολογ. επίλυση προβλήματος 1. Ανάλυση δεδομένων του προβλήματος 2. Μαθηματική διατύπωση του προβλήματος 3. Ανάπτυξη τεχνικών επίλυσης: αλγόριθμος Σχεδιασμός ή επιλογή αλγορίθμου Συνήθως: ένα πρόβλημα πολλοί αλγόριθμοι 4. Διατύπωση αλγορίθμου σε γλώσσα προγ/σμού: πρόγραμμα 5. Εκτέλεση προγράμματος για συγκεκριμένα δεδομένα 6. Ερμηνεία αποτελεσμάτων
Γλώσσες προγραμματισμού Γλώσσα μηχανής (ΓΜ) Γλώσσα assembly Οι εντολές είναι αλληλουχίες από bits Εκτελούνται άμεσα από τη CPU Διαφορετική για κάθε τύπο επεξεργαστή Μνημονικά ονόματα αντί bits (ίδιο πλήθος εντολών) Μετατροπή σε ΓΜ από κατάλληλο πρόγραμμα (assembler) Διαφορετική για κάθε τύπο επεξεργαστή Γλώσσες υψηλού επιπέδου (π.χ. Fortran, C, C++, Java) Υψηλή αφαίρεση / ευκολότερος προγραμματισμός Μετατροπή σε ΓΜ από κατάλληλα προγράμματα: μεταγλωττιστές (compilers) ή διερμηνείς (interpreters) Ανεξάρτητες από τύπο επεξεργαστή: υψηλή φορητότητα
Το Hello world! σε C #include <stdio.h> main() { printf("hello world!\n"); }
Το Hello world! σε Assembly ; 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,"$"
Το Hello world! σε Γλώσσα Μηχ. 0000000 457f 464c 0101 0001 0000 0000 0000 0000 0000020 0002 0003 0001 0000 82c0 0804 0034 0000 0000040 1d08 0000 0000 0000 0034 0020 0007 0028 0000060 0021 001e 0006 0000 0034 0000 8034 0804 0000100 8034 0804 00e0 0000 00e0 0000 0005 0000 0000120 0004 0000 0003 0000 0114 0000 8114 0804... 0026060 6e69 755f 6573 0064 5f5f 6164 6174 735f 0026100 6174 7472 5f00 764a 525f 6765 7369 6574 0026120 4372 616c 7373 7365 5f00 675f 6f6d 5f6e 0026140 7473 7261 5f74 005f 0026150 (712 γραμμές)
Μεταγλωττιστές (compilers) Προγράμματα που μετατρέπουν ένα πηγαίο πρόγραμμα (κώδικα) γραμμένο σε γλώσσα υψηλού επιπέδου, σε εκτελέσιμο (δηλ., σε ΓΜ) Αρχείο προγράμματος Compiler Αρχείο object Linker Εκτελέσιμο αρχείο Αρχεία βιβλιοθήκες Ο μεταγλωττιστής δεν εκτελεί το πηγαίο πρόγραμμα Το παραγόμενο εκτελέσιμο πρόγραμμα εκτελείται ( τρέχει ) αυτόνομα σε κάθε υπολογιστή που καταλαβαίνει τη συγκεκριμένη ΓΜ.
Διερμηνείς (Interpreters) Προγράμματα που εκτελούν άμεσα ένα πηγαίο πρόγραμμα γραμμένο σε γλώσσα υψηλού επιπέδου Αρχείο προγράμματος ΔΙΕΡΜΗΝΕΑΣ ΕΚΤΕΛΕΣΗ Δεν παράγουν εκτελέσιμο πρόγραμμα Για την εκτέλεση του πηγαίου προγράμματος σε κάποιον υπολογιστή, απαιτείται και η ύπαρξη του διερμηνέα Τα ερμηνευόμενα προγράμματα είναι πιο αργά από τα μεταγλωττιζόμενα.