ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ"

Transcript

1

2 Adam Brooks Webber University of Winsconsin - Milwaukee ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Μια πρακτική εισαγωγή Μετάφραση επιστημονική επιμέλεια: Γεώργιος Φρ. Γεωργακόπουλος Ιωάννης Παπαδόγγονας E-BOOK ΠΑΝΕΠΙΣΤΗΜΙΑΚΕΣ ΕΚΔΟΣΕΙΣ ΚΡΗΤΗΣ Ιδρυτική δωρεά Παγκρητικής Ενώσεως Αμερικής ΗΡΑΚΛΕΙΟ 2011

3 ΠΑΝΕΠΙΣΤΗΜΙΑΚΕΣ ΕΚΔΟΣΕΙΣ ΚΡΗΤΗΣ ΙΔΡΥΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΡΕΥΝΑΣ Hράκλειο Kρήτης, T.Θ. 1385, Tηλ.: , Fax: Aθήνα: Mάνης 5, Tηλ.: , Fax: ΣΕΙΡΑ: ΠΑΝΕΠΙΣΤΗΜΙΑΚΗ ΒΙΒΛΙΟΘΗΚΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ / ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΔιευθυνΤΕΣ σειρας: Γεώργιος Φρ. Γεωργακόπουλος - Ιωάννης Παπαδόγγονας Τίτλος πρωτοτύπου: Modern Programming Languages. A Practical Introduction 2003 by Franklin, Beedle & Associates Inc. για την ελληνική γλώσσα, 2005 ΠΑΝΕΠΙΣΤΗΜΙΑΚΕΣ ΕΚΔΟΣΕΙΣ ΚΡΗΤΗΣ Μετάφραση - επιστημονική επιμέλεια: Επιμέλεια έκδοσης: Στοιχειοθεσία - σελιδοποίηση: Μακέτα εξωφύλλου: Γεώργιος Φρ. Γεωργακόπουλος, Αναπληρωτής Καθηγητής Τμήματος Επιστήμης Υπολογιστών Πανεπιστημίου Κρήτης Ιωάννης Παπαδόγγονας, Δρ Φυσικής, Επιστημονικός επιμελητής ΠΕΚ Ιωάννης Παπαδόγγονας ΠΑΝΕΠΙΣΤΗΜΙΑΚΕΣ ΕΚΔΟΣΕΙΣ ΚΡΗΤΗΣ Βάσω Αβραμοπούλου ISBN

4 Στον John Galloway McCubbin

5 Περιεχόμενα Πρόλογος στην ελληνική έκδοση xvii Πρόλογος xix Ευχαριστίες xxiii KΕΦΑΛΑΙΟ 1: Γλώσσες προγραμματισμού Εισαγωγή Η εκπληκτική ποικιλία Προστακτικές γλώσσες Συναρτησιακές γλώσσες Λογικοκεντρικές γλώσσες Οντοστρεφείς γλώσσες Οι παράξενες αντιμαχίες Η αξιοπερίεργη εξέλιξη Οι πολλαπλές διασυνδέσεις Σύντομο σχόλιο για τις Διεπαφές για Προγραμματισμό Εφαρμογών Ανακεφαλαίωση KΕΦΑΛΑΙΟ 2: Ο ορισμός των συντακτικών κανόνων Εισαγωγή Ενδεικτική γραμματική για την αγγλική γλώσσα Ενδεικτική γραμματική για μια γλώσσα προγραμματισμού Ορισμός μιας γραμματικής: η μορφή ΒΝ Η σχεδίαση μιας γραμματικής Η λεκτική και η φραστική δομή μιας γλώσσας Άλλες μορφές γραμματικής Μορφή ΒΝ Μορφή ΕΒΝ Συντακτικά διαγράμματα Ασυμφραστικές τυπικές γραμματικές Ανακεφαλαίωση Ασκήσεις Βιβλιογραφία

6 viii ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ KΕΦΑΛΑΙΟ 3: Σύνταξη και σημασιολογία: το σημείο συνάντησης Εισαγωγή Τελεστές Προτεραιότητα Προσεταιριστικότητα Άλλες πολυσημίες Στρυφνές γραμματικές Συντακτικά δένδρα και η μορφή EBN των γραμματικών Αφηρημένα συντακτικά δένδρα Ανακεφαλαίωση Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 4: Γλωσσικά συστήματα Εισαγωγή Η τυπική ακολουθία εργασιών Βελτιστοποίηση Παραλλαγές της τυπικής ακολουθίας Η απόκρυψη των ενδιάμεσων βημάτων Ενιαία περιβάλλοντα ανάπτυξης (ΕΠΑ) Διερμηνηνευτές Εικονικές μηχανές Ύστερη σύνδεση Σκιαγράφηση Δυναμική μετάφραση Συναπτικά στάδια Γλωσσοσχεδιαστικό στάδιο Υλοποιητικό στάδιο Μεταφραστικό στάδιο Συνδετικό στάδιο Φορτωτικό στάδιο Εκτελεστικό στάδιο Αποσφαλματωτές Εκτελεστική υποστήριξη Ανακεφαλαίωση Ασκήσεις

7 ΠΕΡΙΕΧΟΜΕΝΑ ix KΕΦΑΛΑΙΟ 5: Πρώτη επαφή με τη γλώσσα ML Eισαγωγή Πρώτα βήματα με το γλωσσικό σύστημα ML Σταθερές Τελεστές Υποθετικές εκφράσεις Τυπομετατροπή και εφαρμογή συναρτήσεων Ορισμός μεταβλητών Ρακοσυλλογή Πλειάδες και κατάλογοι Ορισμοί συναρτήσεων Τύποι και επισημείωση τύπων Ανακεφαλαίωση Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 6: Τύποι Εισαγωγή Μια ζούγκλα από τύπους Οι τύποι είναι σύνολα Πρωταρχικοί και κατασκευασμένοι τύποι Απαριθμήματα Πλειάδες Συμβολοσειρές, συστοιχίες και κατάλογοι Ενώσεις Υπότυποι Συναρτησιακοί τύποι Η χρήση των τύπων Επισημείωση τύπων Συναγωγή τύπου Έλεγχος ορθοτυπίας Ζητήματα ισοδυναμίας τύπων Ανακεφαλαίωση Ασκήσεις KΕΦΑΛΑΙΟ 7: Δεύτερη επαφή με τη γλώσσα ML Εισαγωγή Γνωστά μας μορφότυπα Άλλα παραδείγματα απλών μορφοτύπων Σύνθετα μορφότυπα

8 x ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 7.5. Σύνοψη των μορφοτύπων ML μέχρι στιγμής Εναλλακτικά μορφότυπα για συναρτήσεις Το μορφοτυπικό ύφος γραφής προγραμμάτων Τοπικοί ορισμοί μεταβλητών Ένθετοι ορισμοί συναρτήσεων Ανακεφαλαίωση Ασκήσεις KΕΦΑΛΑΙΟ 8: Πολυμορφισμός Εισαγωγή Υπερφόρτιση Μετασκευή παραμέτρων Παραμετρικός πολυμορφισμός Υποτυπικός πολυμορφισμός Ανακεφαλαίωση Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 9: Τρίτη επαφή με τη γλώσσα ML Εισαγωγή Μορφότυπα η συνέχεια Τιμές συναρτήσεων και ανώνυμες συναρτήσεις Υψηλοτάξιες συναρτήσεις και επαλληλία παραμέτρων Προκαθορισμένες υψηλοτάξιες συναρτήσεις Η απεικονιστική συνάρτηση map Η δ-σωρευτική συνάρτηση foldr Η α-σωρευτική συνάρτηση foldl Ανακεφαλαίωση Ασκήσεις KΕΦΑΛΑΙΟ 10: Εμβέλεια Εισαγωγή Ορισμοί και εμβέλεια Εμβελειοθέτηση μέσω παραγράφων Εμβελειοθέτηση με επώνυμους ονοματοχώρους Εμβελειοθέτηση με πρωταρχικούς ονοματοχώρους Δυναμική εμβελειοθέτηση Λίγα σχόλια για την τμηματική μετάφραση Ανακεφαλαίωση Ασκήσεις Βιβλιογραφία

9 ΠΕΡΙΕΧΟΜΕΝΑ xi KΕΦΑΛΑΙΟ 11: Τέταρτη επαφή με τη γλώσσα ML Εισαγωγή Απαριθμήματα Τιμοκατασκευαστές με παραμέτρους Τυποκατασκευαστές με παραμέτρους Αναδρομικοί τυποκατασκευαστές Ανακεφαλαίωση και αποχαιρετισμός στην ML Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 12: Οι θέσεις μνήμης για τις μεταβλητές Εισαγωγή Ενεργοειδικές μεταβλητές Άλλα είδη μεταβλητών Δελτία ενεργοποίησης Στατική δέσμευση των δελτίων ενεργοποίησης Στοίβες και δυναμική δέσμευση των δελτίων ενεργοποίησης Χειρισμός ένθετων ορισμών συναρτήσεων Οι συναρτήσεις ως παράμετροι Μακρόβιες συναρτήσεις Ανακεφαλαίωση Ασκήσεις KΕΦΑΛΑΙΟ 13: Πρώτη επαφή με τη γλώσσα Java Eισαγωγή Με τις οντότητες κατά νου Απλές εκφράσεις και εντολές Σταθερές και τύποι δεδομένων Τελεστές για πράξεις επί ακεραίων Τελεστές για πράξεις επί πραγματικών Συναρμογή συμβολοσειρών Συγκριτικοί τελεστές Λογικοί τελεστές Παρενεργικοί τελεστές Κλήσεις μεθόδων Οντοπαραγωγικές εκφράσεις Προσεταιριστικότητα, προτεραιότητες, μετασκευές, κ.λπ Απλές εντολές Σύνθετες εντολές Δηλωτικές εντολές

10 xii ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η υποθετική εντολή if Η επαναληπτική εντολή while Η επιστροφική εντολή return Ορισμοί κλάσεων Παραπομπές και δείκτες Πρώτη επαφή με ένα γλωσσικό σύστημα Java Ανακεφαλαίωση Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 14: Διαχείριση μνήμης Εισαγωγή Ένα μοντέλο μνήμης με χρήση συστοιχιών της Java Στοίβες Σωροί Ο μηχανισμός της «πρώτης επαρκούς» περιοχής Συγκόλληση συνεχόμενων αδέσμευτων περιοχών Πρόχειροι κατάλογοι και ύστερη συγκόλληση Κατακερματισμός μνήμης Άλλες τεχνικές διαχείρισης του μνημοσωρού Τρέχουσες σωροπαραπομπές Εντοπισμός των τρεχουσών σωροπαραπομπών Σύμπτυξη σωρού Ρακοσυλλογή Ανακεφαλαίωση Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 15: Δεύτερη επαφή με τη γλώσσα Java Εισαγωγή Η υλοποίηση διεπαφών Επέκταση κλάσεων Επέκταση και υλοποίηση Πολλαπλή κληρονόμηση και υποκατάστατά της Αρχέτυπα και υποκατάστατά τους Ανακεφαλαίωση Ασκήσεις

11 ΠΕΡΙΕΧΟΜΕΝΑ xiii KΕΦΑΛΑΙΟ 16: Οντοστρέφεια Εισαγωγή Οντοστρεφής προγραμματισμός Οντοστρεφής ML Μη οντοστρεφής Java Σύνοψη Οντοστρεφείς γλώσσες - απάνθισμα χαρακτηριστικών Κλάσεις Πρωτότυπα Κληρονόμηση Ενθυλάκωση Πολυμορφισμός Ανακεφαλαίωση Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 17: Τρίτη επαφή με τη γλώσσα Java Εισαγωγή Εκπέμψιμες οντότητες Παραλαβή εξαιρέσεων Εκπομπή εξαιρέσεων Ελεγκτέες εξαιρέσεις Διαχείριση σφαλμάτων Απλή δήλωση των προϋποθέσεων Εξαντλητικοί ορισμοί Καταστροφικά σφάλματα Σήμανση των σφαλμάτων Εκπομπή εξαιρέσεων Και «τελικά» Ανακεφαλαίωση και αποχαιρετισμός στην Java Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 18: Παράμετροι Εισαγωγή Αντιστοιχία Τιμοδοτική διαβίβαση Τιμοληπτική διαβίβαση Δοσοληπτική διαβίβαση

12 xiv ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Παραπεμπτική διαβίβαση Διαβίβαση μέσω ανάπτυξης μακροεντολής Ονομαστική διαβίβαση Οικονομική (ονομαστική) διαβίβαση Ζητήματα προδιαγραφών Ανακεφαλαίωση Ασκήσεις KΕΦΑΛΑΙΟ 19: Πρώτη επαφή με τη γλώσσα Prolog Εισαγωγή Οι δομικοί λίθοι: οι όροι της Prolog Πρώτα βήματα με ένα γλωσσικό σύστημα prolog Κανόνες Οι δύο όψεις της Prolog Ένα μικρό σχόλιο για την ερμηνεία των όρων Τελεστές Κατάλογοι Ειδικός συμβολισμός σχετικά με τους καταλόγους Το προσαρτησιακό κατηγόρημα append και άλλα ευέλικτα κατηγορήματα Το αντιστρεπτικό κατηγόρημα reverse και άλλα μη ευέλικτα κατηγορήματα Η ανώνυμη μεταβλητή Αρνήσεις και αποτυχίες Το είδος των εργασιών για τις οποίες προσφέρεται η Prolog Ανακεφαλαίωση Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 20: Δεύτερη επαφή με τη γλώσσα Prolog Εισαγωγή Ενοποίηση Ο έλεγχος εμφάνισης Μια διαδικαστική θεώρηση Οπισθοχώρηση Αντικατάσταση Μια υλοποιητική θεώρηση Το αναλυτικό βήμα Ο διερμηνευτής της Prolog Η συγκέντρωση των αντικαταστάσεων

13 ΠΕΡΙΕΧΟΜΕΝΑ xv Μια αφηρημένη θεώρηση - τα αποδεικτικά δένδρα Ο ορισμός των αποδεικτικών δένδρων Άπειρα αποδεικτικά δένδρα Μετονομασίες μεταβλητών Η πιο ανάλαφρη όψη της Prolog Τα άτομα ως συμβολοσειρές Αναγραφή και ανάγνωση : write και read Βεβαίωση και ανάκληση: assert και retract Ένα παιγνίδι περιπέτειας Ανακεφαλαίωση Ασκήσεις KΕΦΑΛΑΙΟ 21: Κοστολόγηση Εισαγωγή Κοστολόγηση πράξεων σε καταλόγους Κοστολόγηση της κλήσης συναρτήσεων Κοστολόγηση της αναζήτησης στην Prolog Κοστολόγηση πράξεων σε συστοιχίες Εφήμερες αρχές κοστολόγησης Ανακεφαλαίωση Ασκήσεις KΕΦΑΛΑΙΟ 22: Τρίτη επαφή με τη γλώσσα Prolog Εισαγωγή Αριθμητικοί υπολογισμοί Αριθμητική αποτίμηση Αριθμητικές συγκρίσεις Παραδείγματα Διερεύνηση προβληματοχώρου Το πρόβλημα του σακιδίου Το πρόβλημα των οκτώ βασιλισσών Ανακεφαλαίωση και αποχαιρετισμός στην Prolog Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 23: Τυπική σημασιολογία Εισαγωγή Γλώσσα Micro Ο διερμηνευτής Μια φυσική σημασιολογία

14 xvi ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γλώσσα Micro-2: η προσθήκη μεταβλητών Ο διερμηνευτής Μια φυσική σημασιολογία Περί σφαλμάτων Γλώσσα Micro-3: η προσθήκη συναρτήσεων Ένας διερμηνευτής Μια φυσική σημασιολογία Περί σφαλμάτων Περί της σειράς αποτίμησης Άλλα είδη τυπικής σημασιολογίας Εκτελεστική σημασιολογία Αξιωματική σημασιολογία Υποδηλωτική σημασιολογία Ανακεφαλαίωση Ασκήσεις Βιβλιογραφία KΕΦΑΛΑΙΟ 24: Η ιστορία των γλωσσών προγραμματισμού Εισαγωγή Η προϊστορία του προγραμματισμού Η ιστορία των βαβυλώνιων προγραμματιστών Η ιστορία του Μοχάμεντ Αλ-Χουάριζμι Η ιστορία της Augusta Ada, κόμισσας του Lovelace Πρώιμες γλώσσες προγραμματισμού Η ιστορία της Plankalkül Η ιστορία της Fortran Η ιστορία της Lisp Η ιστορία της Algol Η ιστορία της Smalltalk Οι γλώσσες που εξετάσαμε σε αυτό το βιβλίο Η ιστορία της Prolog Η ιστορία της ML Η ιστορία της Java Ανακεφαλαίωση Βιβλιογραφία Επίλογος Ευρετήριο Γλωσσάριο

15 Πρόλογος στην ελληνική έκδοση Οι Πανεπιστημιακές Εκδόσεις Κρήτης έχουν την χαρά να παρουσιάσουν το βιβλίο Σύγχρονες γλώσσες προγραμματισμού, του Adam Brooks Webber. Το συγκεκριμένο σύγγραμμα επιλέχθηκε διότι είναι από τα ελάχιστα αυτού του είδους στη διεθνή βιβλιογραφία. Τα πιο αξιοσημείωτα χαρακτηριστικά του είναι τα εξής: α) Ο τρόπος προσέγγισης. Ο συγγραφέας δεν πραγματεύεται, όπως γίνεται συνήθως, απλά και μόνο κάποια ή κάποιες συγκεκριμένες γλώσσες προγραμματισμού, αλλά το ίδιο το φαινόμενο των γλωσσών προγραμματισμού: Πώς και γιατί έχουν αναπτυχθεί γλώσσες προγραμματισμού με διαφορετικές μορφές; Τι εκφραστική αξία έχουν αυτές οι γλώσσες; Ποιες είναι οι κυριότερες τεχνοτρο πίες προγραμματισμού (λ.χ. προστακτική, οντοστρεφής, συναρτησιακή, λογικοκεντρική, κ.λπ.), και πώς χρησιμοποιούνται; β) Ο βαθμός εμβάθυνσης. Ο συγγραφέας δεν μένει στα «φαινόμενα», αλλά διεισδύει στο παρασκήνιο των γλωσσών, δηλαδή στα καθήκοντα των γλωσσικών συστημάτων: Πώς είναι δυνατή η υλοποίηση γλωσσών με μύρια διαφορετικά χαρακτηριστικά; Πώς δομούνται τα γλωσσικά συστήματα που κάνουν εφικτή τη μαγεία του προγραμματισμού σε οποιoδήποτε προγραμματιστικό ύφος; Τι προβλήματα καλούνται να λύσουν και πώς το επιτυγχάνουν; γ) Η μέθοδος διδασκαλίας. Ο συγγραφέας εναλλάσσει (στη ροή των κεφαλαίων) την αφ υψηλού θεώρηση με την εισαγωγική και πρακτική διδασκαλία τριών γλωσσών προγραμματισμού (ML, Java, Prolog), που αντιστοιχούν σε τρία θεμελιώδη είδη προγραμματισμού: τον οντοστρεφή, τον συναρτησιακό και τον λογικοκεντρικό προγραμματισμό. Η παρουσίαση παραμένει απλή, εισαγωγική, και αποτελεσματικά διδακτική με ευχάριστο τρόπο. Το βιβλίο φωτίζει λοιπόν τις λογικές και τεχνικές βάσεις των γλωσσών προγραμματισμού, και ως εκ τούτου ενδείκνυται ιδιαίτερα για τη διδασκαλία ενός μαθήματος με αυτό το αντικείμενο. Ταυτόχρονα, μπορεί να φανεί πολύ χρήσιμο σε οποιονδήποτε «μαχόμενο» προγραμματιστή, είτε επαγγελματία είτε ερασιτέ-

16 xviii ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ χνη, αφού αναδεικνύει πλευρές των καθημερινών προγραμματιστικών εργα λείων οι οποίες συχνά μένουν κρυφές ή αδίδακτες. Τόσο η ορολογία όσο και η φύση του θέματος προκαλούν εύλογα πολλές μεταφραστικές δυσκολίες (αφού σχεδόν όλες οι γλώσσες προγραμματισμού γράφονται στην αγγλική γλώσσα). Σε κάποιες περιπτώσεις κρίναμε σκόπιμο να παρεμβάλουμε σχόλια στον κώδικα, τα οποία ξεκινούν με τη διπλή πλάγια κάθετο, //. Σε άλλα σημεία προσθέσαμε υποσημειώσεις με αστερίσκο για τη μετάφραση κάποιων από τα μηνύματα των γλωσσικών συστημάτων, ενώ σε λίγες περιπτώσεις τροποποιήσαμε ορισμένες ονομασίες μεταβλητών ώστε να είναι πιο κατανοη τές από τον Έλληνα αναγνώστη. Εν γένει, επιμεληθήκαμε αυτό το βιβλίο και την ορολογία του γνωστικού αντικειμένου με ιδιαίτερη φροντίδα, ώστε να έχουμε μια γνήσια ελληνική μετάφραση, και όχι ένα κουραστικό μίγμα από ελληνικούς και αγγλικούς όρους. Για όσες περιπτώσεις δεν το κατορθώσαμε, ελπίζουμε στην κατανόηση του αναγνώστη. Τέλος, θα θέλαμε να ευχαριστήσουμε την κ. Διονυσία Δασκάλου, γενική επιμελήτρια των ΠΕΚ, για τη συμβολή της σε διάφορα στάδια της παραγωγής του βιβλίου. Γιώργος Φρ. Γεωργακόπουλος Ιωάννης Παπαδόγγονας

17 Πρόλογος Το βιβλίο αυτό έχει τον χαρακτήρα διδακτικού εγχειριδίου για το εισαγωγικό γε νικό μάθημα περί γλωσσών προγραμματισμού το οποίο διδάσκεται σε προπτυχιακούς φοιτητές επιστήμης υπολογιστών και μηχανολογίας υπολογιστών. Προσφέρεται για ένα μάθημα που εισάγει τις γενικές έννοιες των ποικίλων γλωσσών προγραμματισμού, και απευθύνεται σε φοιτητές που έχουν ήδη αρκετή ευχέρεια στον βασικό προγραμματισμό σε μία τουλάχιστον γλώσσα. Πραγματεύεται όλα τα βασικά θέματα των γλωσσών προγραμματισμού τα οποία προτείνονται στην έκθεση της ACM * σχετικά με τα προγράμματα σπουδών στην υπολογιστική (προ σχέδιο Steelman), και εισάγει τα πιο κεντρικά από αυτά τα θέματα με αρκετές λεπτομέρειες. Η ύλη του βιβλίου είναι διαρθρωμένη έτσι ώστε να διεγείρει το ενδιαφέρον του σύγχρονου φοιτητή. Η συνήθης προσέγγιση σε τέτοιου είδους βιβλία είναι να παρουσιάζεται η ιστορία των σημαντικότερων γλωσσών προγραμματισμού, και κατόπιν να μελετούνται λεπτομερώς οι γλώσσες αυτές μέσω μιας διδακτικής ακολουθίας που καθοδηγείται από κάποιες έννοιες ή κάποια παραδείγματα. Οι περισσότεροι φοιτητές της επιστήμης υπολογιστών, όμως, δεν είναι σε θέση να εκτιμήσουν πλήρως τις εξελικτικές λεπτομέρειες, την αφαίρεση χωρίς συγκεκριμένο στόχο, και την κατάταξη σε κατηγορίες. Οι προπτυχιακοί φοιτητές επιστήμης και μηχανολογίας υπολογιστών έχουν κατά κανόνα πρακτικό προσανατολισμό: μελετούν την υπολογιστική επειδή τους αρέσει ο προγραμματισμός και είναι καλοί σε αυτόν. Άλλοι φοιτητές μελετούν την υπολογιστική επειδή τους αρέσει η θεωρητική επιστήμη υπολογιστών και είναι καλοί σε αυτήν. Το ζητούμενο από ένα μάθημα για τις βασικές έννοιες των γλωσσών προγραμματισμού είναι να βοηθήσει όλους τους φοιτητές να κατανοήσουν τις γλώσσες προγραμματισμού σε ένα ασυνήθιστο επίπεδο αφαίρεσης. Προκειμένου να επιτευχθεί αυτός ο στόχος, το βιβλίο περιλαμβάνει αρκετές ασκήσεις προγραμματισμού και παραδείγματα πρακτικής φύσεως, ώστε να συντηρήσει το ενδιαφέρον των φοιτητών με πιο πρακτικό προσανατολισμό, χωρίς να προϋποθέτει από τον αναγνώστη * Association for Computing Machinery: Ένωση για τον Υπολογιστικό Εξοπλισμό

18 xx ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ υψηλό επίπεδο μαθηματικής ωριμότητας. Είναι σχεδιασμένο έτσι ώστε να καθοδηγεί τους φοιτητές να αντιλαμβάνονται σε αφηρημένο επίπεδο τις έννοιες των γλωσσών προγραμματισμού, χρησιμοποιώντας ως αφετηρία κάποιες απλές ασκήσεις προγραμματισμού. Τα κεφάλαια του βιβλίου χωρίζονται σε δύο κατηγορίες: πρακτικού και φιλοσοφικού χαρακτήρα. Τα πρώτα είναι αυτοτελή «αλφαβητάρια» για τρεις γλώσσες προγραμματισμού. Σε αυτά αναπτύσσεται ένα επίπεδο δεξιότητας που θα επιτρέψει στον φοιτητή να διεκπεραιώνει απλές ασκήσεις προγραμματισμού. Η ενασχόληση με τον προγραμματισμό σε διάφορες οικογένειες γλωσσών είναι ιδιαίτερα σημαντική για τον φοιτητή. Το βιβλίο περιλαμβάνει εισαγωγές στον προγραμματισμό για τρεις γλώσσες την ML, την Java και την Prolog από τις οποίες οι δύο τουλάχιστον θα είναι άγνωστες σε όλους σχεδόν τους φοιτητές αυτού του επιπέδου. (Υπάρχουν εξαιρετικές δωρεάν υλοποιήσεις όλων αυτών των γλωσσών για διάφορα υπολογιστικά πλαίσια, μεταξύ των οποίων τα Windows, το Unix και το λειτουργικό σύστημα Macintosh. Στον Ιστότοπο αυτού του βιβλίου, υπάρχουν οδηγίες για το πώς μπο ρεί κανείς να προμηθευτεί μια τέτοια υλοποίηση.) Τα κεφάλαια πρακτικού χαρακτήρα περιλαμβάνουν μια σύντομη εισαγωγή στις ιδιαιτερότητες της κάθε γλώσσας. Δεν καλύπτουν όμως τις Διεπαφές για Προγραμματισμό Εφαρμογών. Ως εκ τούτου, θα δώσουν μεν στον φοιτητή τη δυνατότητα να επιλύει ασκήσεις προγραμματισμού, αλλά όχι και να αναπτύσσει ολοκληρωμένες εφαρμογές μεγάλης κλίμακας. Στα κεφάλαια φιλοσοφικού χαρακτήρα παρουσιάζεται η θεωρητική πλευρά: οι υποκείμενες αρχές των γλωσσών προγραμματισμού. Τα κεφάλαια αυτά εναλλάσσονται με τα κεφάλαια πρακτικού χαρακτήρα, σε μια αλληλουχία που επιτρέπει την αποσαφήνιση των εννοιών μέσω παραδειγμάτων από την πρόσφατα διδαχθείσα γλώσσα, και διευκολύνει την παρουσίαση των θεωρητικών ζητημάτων στην κατάλληλη χρονική συγκυρία ώστε η σύνδεσή τους με την προγραμματιστική πρακτική να είναι όσο το δυνατόν εμφανέστερη. Παραδείγματος χάριν, το Κεφάλαιο 23 πραγματεύεται την τυπική σημασιολογία ξεκινώντας από κάποιους απλούς διερμηνευτές γραμμένους σε Prolog. Οι διερμηνευτές αυτοί οδηγούν με φυσιολογικό τρόπο σε ορισμούς γλωσσών μέσω μακροβηματικής εκτελεστικής σημασιολογίας. Αυτός είναι και ο λόγος που η τυπική σημασιολογία εμφανίζεται τόσο αργά σε αυτό το βιβλίο: μόνο αφότου έχει ολοκληρωθεί η παρουσίαση της Prolog, είναι σε θέση οι φοιτητές να μεταβούν από τις ασκήσεις Prolog σε αυτό το συναφές, αφηρημένο ζήτημα. Το βιβλίο είναι γραμμένο σε εισαγωγικό επίπεδο. Έχει ως στόχο να είναι κατανοητό και ενδιαφέρον για την πλειονότητα των φοιτητών που έχουν ολοκληρώσει μια βασική σειρά μαθημάτων ΕΥ1/ΕΥ2 σε οποιαδήποτε γλώσσα. Ένα συνηθισμένο μειονέκτημα στα υπάρχοντα βιβλία για αυτό το γνωστικό αντικείμενο εί-

19 ΠΡΟΛΟΓΟΣ xxi ναι ότι θέτουν σιωπηρά υπερβολικές προϋποθέσεις: πληρέστερο υπόβαθρο στην υπολογιστική, μεγαλύτερη μαθηματική ωριμότητα, και γνησιότερο ενδιαφέρον για την αφαίρεση και την κατηγοριοποίηση από αυτό που έχουν στην πραγματικότητα οι περισσότεροι φοιτητές στους οποίους απευθύνονται. Η τάση να θέτει κανείς σιωπηρά τέτοιες προϋποθέσεις είναι εύλογη, διότι πολλά ενδιαφέροντα τμήματα της θεωρίας των γλωσσών προγραμματισμού δεν είναι προσιτά στους σπουδαστές αυτού του επιπέδου. Αυτή η πρακτική, όμως, αποβαίνει εις βάρος της πλειονότητας των σπουδαστών. Η ύλη που θα πρέπει να καλυφθεί είναι υπερβολική για ένα εξάμηνο, ακόμη και χωρίς να επεκταθεί κανείς σε ζητήματα που απαιτούν γνώσεις αρχιτεκτονικής υπολογιστών, λειτουργικών συστημάτων, τυπικών γλωσσών και αυτομάτων, μαθηματικής λογικής ή επαγωγικών τεχνικών απόδειξης. Αντιθέτως, ένα μάθημα το οποίο θα ακολουθήσει αυτό το βιβλίο δεν είναι απαραίτητο να τοποθετηθεί στο τέλος μιας μακράς αλυσίδας από προαπαιτούμενα. Έτσι, το βιβλίο αυτό μπορεί να ενταχθεί πιο εύκολα σε περισσότερα προγράμματα σπουδών της επιστήμης και της μηχανολογίας υπολογιστών. Λόγω της αφηγηματικής του δομής και της γραμμικής διδακτικής του συγκρότησης, το βιβλίο μπορεί να χρησιμοποιηθεί εύκολα για διδασκαλία εάν ακολουθηθεί η υπάρχουσα σειρά παρουσίασης της ύλης, εφ όσον βέβαια υπάρχουν τα χρονικά περιθώρια για κάτι τέτοιο. Εάν οι φοιτητές γνωρίζουν ήδη κάποια από τις γλώσσες (το πιθανότερο την Java), κάποια από τα διδακτικά κεφάλαια είναι δυνατόν να παραλειφθούν ή να παρουσιαστούν επί τροχάδην, ώστε να μείνει χρόνος για λεπτομερέστερη κάλυψη άλλων, ή για την παρουσίαση επιπλέον ύλης. Για την περίπτωση που είναι απαραίτητο να παραλειφθούν και άλλα κεφάλαια, παραθέτουμε αμέσως παρακάτω χονδρικά τις πιο σημαντικές αλληλεξαρτήσεις μεταξύ των κεφαλαίων: Κεφάλαιο Κεφάλαια στα οποία βασίζεται 1: Γλώσσες προγραμματισμού 2: Ο ορισμός των συντακτικών κανόνων 3: Σύνταξη και σημασιολογία: το σημείο συνάντησης 2 4: Γλωσσικά συστήματα 5: Πρώτη επαφή με τη γλώσσα ML 2, 3 6: Τύποι 4 7: Δεύτερη επαφή με τη γλώσσα ML 2, 3, 5 8: Πολυμορφισμός 4, 6 9: Τρίτη επαφή με τη γλώσσα ML 2, 3, 5, 7 10: Εμβέλεια 4 11: Τέταρτη επαφή με τη γλώσσα ML 2, 3, 5, 7, 8, 9

20 xxii ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο Κεφάλαια στα οποία βασίζεται 12: Οι θέσεις μνήμης για τις μεταβλητές 4, 5, 7, 9 13: Πρώτη επαφή με τη γλώσσα Java 2, 3 14: Διαχείριση μνήμης 2, 3, 13 15: Δεύτερη επαφή με τη γλώσσα Java 2, 3, 13 16: Οντοστρέφεια 2, 3, 5, 7, 9, 13, 15 17: Τρίτη επαφή με τη γλώσσα Java 2, 3, 13, 15 18: Παράμετροι 2, 3, 13 19: Πρώτη επαφή με τη γλώσσα Prolog 2, 3 20: Δεύτερη επαφή με τη γλώσσα Prolog 2, 3, 19 21: Κοστολόγηση 2, 3, 4, 5, 13, 19, 20 22: Τρίτη επαφή με τη γλώσσα Prolog 2, 3, 19, 20 23: Τυπική σημασιολογία 2, 3, 4, 5, 7, 9, 10, 12 24: Η ιστορία των γλωσσών προγραμματισμού Διάφορα Ειδικότερα, τα Κεφάλαια 11, 14, 21 και 22 μπορούν να παραλειφθούν χωρίς ιδιαίτερη βλάβη των υπολοίπων. Εάν ο χρόνος πιέζει προς το τέλος του εξαμήνου, θα ήταν καλύτερα να παραλειφθούν τα Κεφάλαια 21 και 22 παρά τα Κεφάλαια 23 ή 24. Στο Κεφάλαιο 23 επανεξετάζονται και διευκρινίζονται πολλές σημαντικές έννοιες από τα προηγούμενα κεφάλαια. Το Κεφάλαιο 24 είναι τελευταίο όχι επειδή η ιστορία των γλωσσών προγραμματισμού είναι ασήμαντο ζήτημα, αλλά επειδή γίνεται πιο ενδιαφέρον όταν οι φοιτητές κατανοούν κάποιες από τις έννοιες των οποίων η ιστορική εξέλιξη παρουσιάζεται. Η διεύθυνση του Ιστοτόπου αυτού του βιβλίου είναι com/mpl.html. Εκεί μπορεί κανείς να βρει, μεταξύ άλλων, ένα πλήρες σύνολο από διαφάνειες για κάθε κεφάλαιο, χρήσιμους συνδέσμους για καταφόρτωση και εγκατάσταση δωρεάν γλωσσικών συστημάτων, και όλα τα μακροσκελή τμήματα κώδικα που χρησιμοποιούνται ως παραδείγματα στο κείμενο και τις ασκήσεις. Υπάρχουν επίσης οδηγίες για να επικοινωνήσει κανείς με τον συγγραφέα προκειμένου να αναφέρει ελαττώματα, και για να αποκτήσει πρόσβαση σε επιπλέον διδακτικό υλικό αποκλειστικά για τους διδάσκοντες.

21 Ευχαριστίες Η οικογένειά μου με βοήθησε σημαντικά σε όλη τη διάρκεια της συγγραφής αυτού του βιβλίου, ιδιαίτερα η σύζυγός μου Kelly και τα παιδιά μου Fern και Fox. Θα αναφέρω ένα μόνο παράδειγμα: ο μικρός μου Fox, μόλις δύο ετών, μια μέρα καθώς έγραφα άνοιξε την πόρτα του γραφείου μου, είπε «αγκαλιά», με αγκάλιασε και κατόπιν έφυγε, κλείνοντας την πόρτα πίσω του. Όλοι τους φάνηκαν πραγματικά πολύ γενναιόδωροι, αφήνοντάς μου αρκετό χρόνο για τις ανάγκες της συγγραφής του βιβλίου. Σας ευχαριστώ αγαπημένοι μου. Στις αρχές της δεκαετίας του 1980, συνεργάστηκα με μια εκπληκτική ομάδα προγραμματιστών: τους φοιτητές και το διδακτικό προσωπικό του Kiewit Computation Center του Dartmouth College. Η ιδιόμορφη πρακτική της συγγραφής συστημικού λογισμικού από φοιτητές, η οποία ήταν καθιερωμένη στο Dartmouth, υπήρξε ιδιαίτερα επωφελής για μένα. Μέντοράς μου στο Kiewit ήταν ο Philip D. L. Koch, δημιουργός μιας υπέροχης συλλογής προγραμμάτων η οποία περιλάμβανε ένα λειτουργικό σύστημα κεντρικού υπολογιστή και έναν εξαιρετικό μεταφραστή της PL/I. Αυτό υπήρξε η απαρχή του ενδιαφέροντός μου για τις γλώσσες προγραμματισμού. Είμαι ευγνώμων στους φοιτητές μου στο Πανεπιστήμιο του Wisconsin Milwaukee και στο Πανεπιστήμιο του Western Illinois, οι οποίοι άντεξαν τους καλοπροαίρετους πειραματισμούς μου και με βοήθησαν να αναπτύξω, στη διάρκεια κάποιων ετών, τη δομή του μαθήματος στην οποία βασίζεται το βιβλίο αυτό. Ευχαριστώ επίσης την Stephanie Welch της Franklin Beedle & Associates, που επιμελήθηκε και σελιδοποίησε το βιβλίο στο πλαίσιο της επιμέλειας παραγωγής του. Πολλοί ήταν αυτοί που με βοήθησαν στη διάρκεια της συγγραφής διαβάζοντας και σχολιάζοντας προκαταρκτικές εκδοχές του βιβλίου: ο John Tang Boyland του Πανεπιστημίου του Wisconsin Milwaukee, ο Daniel Canas του Πανεπιστημίου του Wake Forest, ο Frank Friedman του Πανεπιστημίου Temple, ο Assaf Khoury του Πανεπιστημίου της Βοστώνης, ο Shui Lam του Πολιτειακού Πανεπιστημίου της Καλιφόρνιας, στο Long Beach, ο Ernst

22 xxiv ΣΥΓΧΡΟΝΕΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Leiss του Πανεπιστημίου του Houston, ο Mike Morton, ο Robert Roos του Allegheny College, ο Randy Smith του Covenant College, και ο K. Vairavan του Πανεπιστημίου του Wisconsin Milwaukee. Ιδιαίτερα ευχαριστώ τον Randy Smith, ο οποίος χρησιμοποίησε μια προκαταρκτική μορφή του βιβλίου στα μαθήματά του στο Covenant College και μου μετέφερε πολύτιμα στοιχεία από τη χρήση του στη διδασκαλία. Οι εναπομένουσες ατέλειες αποτελούν, φυσικά, αποκλειστικά δική μου ευθύνη.

23 1 Γλώσσες προγραμματισμού 1.1. Εισαγωγή Τα προγράμματα των υπολογιστών είναι μαγεία εν δράσει. Το κάθε πρόγραμμα μοιάζει με ένα περίπλοκο, αλλά και καλαίσθητο, μαγικό ξόρκι. και το καλύτερο είναι ότι με την εκτέλεση ενός προγράμματος ανακαλύπτουμε ότι τελικά τα μάγια πιάνουν! Ακόμα και όταν το πρόγραμμά μας δεν κατορθώνει ακριβώς αυτό που είχαμε κατά νου, εντούτοις κάτι κατορθώνει πράγμα που σίγουρα δεν ισχύει για τα περισσότερα ξόρκια. Και η απόλαυση αυτής της έμπρακτης μαγείας είναι η δύναμη που ωθεί πολλούς αρχάριους στον προγραμματισμό, και που συνεχίζει να ανταμείβει τους έμπειρους προγραμματιστές. Ο συγγραφέας, τουλάχιστον, βιώνει αμείωτη αυτήν την απόλαυση εδώ και 20 χρόνια ενασχόλησης με τον προγραμματισμό. Το βιβλίο αυτό πραγματεύεται τις γλώσσες προγραμματισμού. Περιέχει διδακτικές εισαγωγές σε τρεις γλώσσες προγραμματισμού: την ML, την Java και την Prolog. 1 Οι γλώσσες αυτές είναι πολύ διαφορετικές μεταξύ τους, και αν γνωρίσετε έστω και ένα τμήμα καθεμίας από αυτές, θα έχετε τρία σαφώς διαφορετικά στίγματα στη διάθεσή σας για να «πλοηγηθείτε» στις αρχές των γλωσσών προγραμματισμού. Εάν θελήσετε να ασχοληθείτε και πρακτικά με αυτές τις γλώσσες, δεν θα δυσκολευτείτε καθόλου: υπάρχουν καλές και δωρεάν υλοποιήσεις και για τις τρεις τους, σε ποικιλία υπολογιστικών πλαισίων. Ανάμεσα στα διδακτικά κεφάλαια θα βρείτε κεφάλαια με περισσότερο φιλοσοφικό προσανατολισμό, τα οποία πραγματεύονται με πιο αφηρημένο τρόπο διάφορα σοβαρά ζητήματα που αφορούν τις γλώσσες προγραμματισμού. Αν και αυτά τα κεφάλαια έχουν πιο αφηρημένο χαρακτήρα, δεν απαιτούν ιδιαίτερο μαθηματικό υπόβαθρο. Οι γλώσσες προγραμματισμού στηρίζονται, βέβαια, σε πολύ ενδιαφέροντα και ιδιαίτερα κομψά μαθηματικά, αλλά προσφέρουν επίσης άφθονο υλικό μελέτης το οποίο δεν απαιτεί μαθηματικές γνώσεις δυσπρόσιτες ή και αδιάφορες σε πολλούς αναγνώστες. 1 Στα έντυπα εγχειρίδια των παλαιότερων γλωσσών, τα ονόματα των γλωσσών αναγράφονταν συνήθως με κεφαλαία γράμματα: FORTRAN, COBOL και BASIC. Στα νεώτερα εγχειρίδια, ακόμη και σε αυτά που αφορούν διαλέκτους των παλαιότερων γλωσσών, τα ονόματα αναγράφονται συνήθως σε μικτή γραφή: Fortran. Η σύμβαση που ακολουθούμε σε αυτό το βιβλίο είναι η εξής: για τα ονόματα που προφέρονται σαν λέξεις (π.χ. Java και Prolog) χρησιμοποιούμε μικτή γραφή, ενώ για τα ονόματα που προφέρονται σαν ακολουθίες γραμμάτων του αγγλικού αλφαβήτου (όπως η ML, που προφέρεται «εμ-ελ»), χρησιμοποιούμε κεφαλαιογράμματη γραφή.

24 2 ΚΕΦΑΛΑΙΟ 1 ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πριν συνεχίσετε όμως, θα πρέπει να λάβετε υπ όψιν ότι το βιβλίο αυτό προϋποθέτει ικανοποιητική γνώση μίας τουλάχιστον γλώσσας προγραμματισμού, σε επίπεδο που αντιστοιχεί περίπου σε μια εισαγωγή διάρκειας δύο διδακτικών εξαμήνων. Δεν έχει σημασία ποια γλώσσα γνωρίζετε. Εάν όμως δεν έχετε προγραμματίσει ποτέ στη ζωή σας, τότε αυτό το βιβλίο δεν είναι ό,τι καταλληλότερο για να αρχίσετε. Στο υπόλοιπο αυτού του εισαγωγικού κεφαλαίου θα εξετάσουμε εκείνα τα στοιχεία που κάνουν τις γλώσσες προγραμματισμού ένα τόσο ενδιαφέρον θέμα: την εκπληκτική ποικιλία αυτών των γλωσσών, τις παράξενες αντιμαχίες που προκαλούν, την αξιοπερίεργη εξέλιξή τους, και τις πολλαπλές διασυνδέσεις τους με τους υπόλοιπους κλάδους της πληροφορικής Η εκπληκτική ποικιλία Ένα από τα στοιχεία που κάνουν τις γλώσσες προγραμματισμού τόσο γοητευτικό αντικείμενο μελέτης είναι η ποικιλομορφία τους. Ας ρίξουμε μια ματιά σε τέσσερεις γλώσσες που ανήκουν σε εντελώς ανόμοια είδη. οι τρεις από αυτές είναι οι βασικές γλώσσες με τις οποίες θα ασχοληθούμε σε αυτό το βιβλίο. Προστακτικές γλώσσες Ας δούμε ένα παράδειγμα προστακτικής γλώσσας, της γλώσσας C. Πρόκειται για μια συνάρτηση factorial(n), που υπολογίζει το παραγοντικό (factorial) ενός φυσικού αριθμού n: int factorial(int n) { int sofar = 1; while (n > 0) sofar *= n--; return sofar; } Το παραπάνω παράδειγμα περιέχει τις δύο «σφραγίδες γνησιότητας» κάθε προστακτικής γλώσσας: την τιμοδότηση και την επανάληψη. Η εντολή «sofar *= n--;» της γλώσσας C τιμοδοτεί τη μεταβλητή sofar. Η μεταβλητή αυτή έχει κάποια τρέχουσα τιμή η οποία μεταβάλλεται κάθε φορά που πραγματοποιείται μια τιμοδότηση. Η εντολή επιδρά επίσης στη μεταβλητή n, μειώνοντας κάθε φορά την τιμή της κατά μία μονάδα. Ο βρόχος «while» επαναλαμβάνει διαρκώς την εντολή. Τελικά, σε κάποιο βήμα αυτής της επανάληψης, η τρέχουσα τιμή της μεταβλητής n θα γίνει μηδέν, και η επανάληψη θα σταματήσει. Καθώς οι τιμές των μεταβλητών αλλάζουν σε κάθε βήμα, η σειρά εκτέλεσης των εντολών του προγράμματος έχει καίρια σημασία. Οι έννοιες που μόλις αναφέραμε είναι τόσο στοιχειώδεις, που περνούν απαρατήρητες από τους περισσότερους προγραμματιστές της γλώσσας C: για αυτούς είναι προφανές ότι η σειρά εκτέλεσης των εντολών παίζει καίριο ρόλο, και εξίσου προφανές ότι οι τιμές των μεταβλητών μεταβάλλονται. Υπάρχουν όμως πολλές γλώσσες προγραμ ματισμού για τις οποίες όλα τα παραπάνω δεν έχουν κανένα νόημα. γλώσσες στις οποίες δεν υπάρχουν ούτε τιμοδοτικές εντολές, ούτε επαναληπτικές εντολές, ούτε η έννοια της αλλαγής της «τρέχουσας τιμής» μιας μεταβλητής.

25 1.2 Η ΕΚΠΛΗΚΤΙΚΗ ΠΟΙΚΙΛΙΑ 3 Συναρτησιακές γλώσσες Ας δούμε την ίδια συνάρτηση (του παραγοντικού) υλοποιημένη στη γλώσσα ML: fun factorial x = if x <= 0 then 1 else x * factorial(x-1); Το παραπάνω παράδειγμα περιλαμβάνει δύο από τις «σφραγίδες γνησιότητας» των συναρτησιακών γλωσσών: την αναδρομή και τις μονότιμες μεταβλητές 2. Η αναδρομή είναι μια προγραμματιστική τεχνική τόσο φυσική στους προγραμματιστές της ML, όσο φυσικές είναι οι επαναληπτικές εντολές στους προγραμματιστές της C. Η ίδια συνάρτηση υλοποιημένη στη γλώσσα Lisp θα είχε ως εξής: (defun factorial (x) (if (<= x 0) 1 (* x (factorial (- x 1))))) Όπως βλέπετε, η Lisp έχει ιδιόρρυθμη σύνταξη. Αυτή η συντακτική διαφορά είναι όμως επιφανειακή. Σε βαθύτερο επίπεδο, η συνάρτηση factorial γραμμένη στη Lisp και η συνάρτηση factorial γραμμένη στην ML σχετίζονται μεταξύ τους πολύ περισσότερο απ όσο σχετίζεται η καθεμία από αυτές με τη συνάρτηση factorial γραμμένη στη γλώσσα C: και οι δύο είναι γραμμένες στο συναρτησιακό ύφος, χωρίς τιμοδοτικές ή επαναληπτικές εντολές. Τα δύο παραπάνω παραδείγματα ίσως φαίνονται πιο κομψά από την εκδοχή της C, αλλά μια τέτοια σύγκριση δεν είναι δίκαιη. Το συναρτησιακό είδος προγραμματισμού ταιριάζει ιδιαίτερα σε συναρτήσεις όπως αυτή του παραγοντικού. Σε άλλα είδη προβλημάτων, όπως π.χ. ο πολλαπλασιασμός πινάκων, το πλεονέκτημα θα το είχαν οι προστακτικές γλώσσες προγραμματισμού. Λογικοκεντρικές γλώσσες Η συνάρτηση του παραγοντικού, ενώ είναι το καταλληλότερο παράδειγμα για τη γλώσσα ML, είναι ίσως το χειρότερο για την Prolog. Παρά ταύτα ας δούμε τι μορφή έχει στην Prolog: factorial(x,1) :- X =:= 1. factorial(x,f) :- X > 1, NewX is X - 1, factorial(newx,newf), F is X * NewF. 2 Σ.τ.Μ.: Μεταβλητές από το variables όσο βέβαια τα συμφραζόμενα επιτρέπουν να ονομάζεται «μεταβλητή» κάτι που μένει σταθερό. Οι «μεταβλητές» των συναρτησιακών γλωσσών (όπως η ML) είναι ακριβέστερα επώνυμες σταθερές, γι αυτό ο σχετικός όρος της ML, που θα δοθεί αργότερα, είναι val από το value = τιμή και όχι var, από το variable = μεταβλητή.

26 4 ΚΕΦΑΛΑΙΟ 1 ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Οι πρώτες δύο γραμμές εκφράζουν έναν κανόνα που επιτρέπει στο σύστημα της Prolog να συμπεράνει ότι όταν το X ισούται με 1 το παραγοντικό του X είναι 1. Οι υπόλοιπες πέντε γραμμές κώδικα καθορίζουν έναν γενικό τρόπο για να διαπιστώνει κανείς ότι το παραγοντικό του X ισούται με κάποια δεδομένη τιμή. Συγκεκριμένα: «Για να αποδείξεις ότι το παραγοντικό του X ισούται με F, αρκεί να κάνεις τα εξής: να αποδείξεις ότι το X είναι μεγαλύτερο του 1. να αποδείξεις ότι το NewX είναι μικρότερο του X κατά 1. να αποδείξεις ότι το παραγοντικό του NewX ισούται με NewF. και τέλος να αποδείξεις ότι το F ισούται με X επί NewF». Η διατύπωση ενός προγράμματος μέσω κανόνων λογικού συμπερασμού είναι η «σφραγίδα γνησιότητας» του λογικού προγραμματισμού. Αν και αυτό το είδος προγραμματισμού δεν είναι το καταλληλότερο για τον υπολογισμό μαθηματικών συναρτήσεων, υπάρχουν κατηγορίες προβλημάτων στα οποία υπερέχει ξεκάθαρα. Παραδείγματα τέτοιων προβλημάτων θα δούμε από το Κεφάλαιο 19 και παρακάτω. Οντοστρεφείς γλώσσες Η συνάρτηση του παραγοντικού γραμμένη στη γλώσσα Java φαίνεται σχεδόν ίδια με την εκδοχή της στη γλώσσα C. Η Java όμως είναι μια οντοστρεφής γλώσσα, πράγμα που σημαίνει ότι αφ ενός είναι προστακτικού τύπου, και αφ ετέρου έχει σχεδιαστεί ώστε να διευκολύνει την επίλυση των διαφόρων προβλημάτων μέσω οντοτήτων (ή, αλλιώς, αντικειμένων). Ονομάζουμε οντότητα μια (συνήθως μικρή) δέσμη δεδομένων η οποία «γνωρίζει» πώς να χειρίζεται τον εαυτό της. Για παράδειγμα, ας δούμε τον ορισμό σε Java μιας οντότητας που φέρει έναν ακέραιο αριθμό, και «γνωρίζει» πώς να αναφέρει τόσο τον αριθμό αυτό, όσο και το παραγοντικό του. public class MyInteger { private int value; public MyInteger(int value) { this.value = value; } public int getvalue() { return value; } public MyInteger getfactorial() { return new MyInteger(factorial(value)); } private int factorial(int n) { int sofar = 1; while (n > 1) sofar *= n--; return sofar; } } Το παραπάνω παράδειγμα οντοστρεφούς προγραμματισμού φαίνεται φλύαρο σε σχέση με τα προηγούμενα, αλλά και πάλι η σύγκριση δεν είναι δίκαιη: ο οντοστρε

27 φής προγραμματισμός έχει σχεδιαστεί ώστε να διευκολύνει την οργανωμένη σύνταξη προγραμμάτων πολύ μεγάλου μεγέθους, και ως εκ τούτου δεν φανερώνει τα προτερήματά του σε παραδείγματα μικρού μεγέθους. Είδαμε λοιπόν παραδείγματα από τέσσερεις οικογένειες γλωσσών: τις προστακτικές (όπως η C), τις συναρτησιακές (όπως η ML), τις λογικοκεντρικές (όπως η Prolog), και τις οντοστρεφείς (όπως η Java). Κάθε γλώσσα προγραμματισμού μπορεί, με λίγη προσπάθεια, να καταταγεί σε κάποια από αυτές τις τέσσερεις κατηγορίες. Αυτές οι κατηγορίες δεν είναι όμως προσδιορισμένες με αυστηρότητα, και γι αυτό δεν είναι πάντοτε σαφές ποιoς είναι ο ορθότερος τρόπος ταξινόμησης μιας γλώσσας. Υπάρχουν πάμπολλες γλώσσες που κινούνται στα όρια μεταξύ των κατηγοριών αυτών. Στην πράξη συναντάμε περισσότερες κατηγορίες γλωσσών, όχι μόνο αυτές τις τέσσερεις. Οι διάφορες γλώσσες προγραμματισμού έχουν κατά καιρούς χαρακτηριστεί ως εφαρμοστικές, συγχρονικές, περιοριστικές, δηλωτικές, οριστικές, διαδικαστικές, σεναριογραφικές, μονοτιμοδοτικές και πάει λέγοντας. Μάλιστα, ορισμένες από αυτές είναι τόσο ιδιόμορφες που η ένταξή τους σε μια κατηγορία στερείται νοήματος. Ας εξετάσουμε π.χ. τη γλώσσα Forth. Ο προγραμματισμός της συνάρτησης του παραγοντικού σε αυτή τη γλώσσα θα είχε ως εξής: : FACTORIAL 1 SWAP BEGIN?DUP WHILE TUCK * SWAP 1- REPEAT ; Η Forth είναι μια στοιβoστρεφής γλώσσα, όπως λ.χ. η PostScript είναι σελιδοστρεφής. Η μονολεκτική εντολή SWAP της Forth εναλλάσσει τα δύο κορυφαία στοιχεία της στοίβας που διατηρεί η γλώσσα αυτή. Θα μπορούσαμε να αποκαλέσουμε την Forth προστακτική γλώσσα, αλλά αυτό δεν θα είχε ιδιαίτερο νόημα, καθώς έχει ελάχιστα κοινά στοιχεία με τις περισσότερες άλλες προστακτικές γλώσσες. Θεωρήστε επίσης την APL. Για να εκφραστεί η συνάρτηση παραγοντικού στη γλώσσα αυτή, αρκεί η παρακάτω έκφραση: / ι X Η APL φημίζεται για τη χρήση πάμπολλων ειδικών χαρακτήρων που απουσιάζουν από τα συνηθισμένα πληκτρολόγια. Η παραπάνω έκφραση δηλώνει ότι το X θα πρέπει να αναπτυχθεί σε μια ακολουθία διαδοχικών ακεραίων από το 1 έως το X, και όλοι αυτοί οι αριθμοί να πολλαπλασιαστούν μεταξύ τους. (Στην πράξη, δεν θα χρειαζόσασταν αυτήν την έκφραση, διότι στην APL μπορούμε να δηλώσουμε το παραγοντικό του X απλώς ως!x.) Θα μπορούσαμε να αποκαλέσουμε την APL συναρτησιακή γλώσσα, αλλά και πάλι δεν θα είχε νόημα: η APL έχει ελάχιστα κοινά σημεία με τις περισσότερες άλλες συναρτησιακές γλώσσες Οι παράξενες αντιμαχίες 1.3 ΟΙ ΠΑΡΑΞΕΝΕΣ ΑΝΤΙΜΑΧΙΕΣ 5 Υπάρχουν κάποια γνωστικά αντικείμενα που φαίνονται εκ του φυσικού τους αμφιλεγόμενα: η βιολογική εξέλιξη, η αρχική Μεγάλη Έκρηξη του σύμπαντος, η ανθρώπινη σεξουαλικότητα γενικά, οποιοδήποτε θέμα απασχολεί τακτικά την επιστημονική στήλη της εφημερίδας The New York Times είναι βέβαιο ότι θα προκαλέσει

28 6 ΚΕΦΑΛΑΙΟ 1 ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ πολλές αντιδικίες. Ισχύει όμως το ίδιο και για τις γλώσσες προγραμματισμού; Το δικό μας πεδίο μελέτης σπάνια διεισδύει μέχρι τα πρωτοσέλιδα των εφημερίδων, και είναι μάλλον ελάχιστοι αυτοί που το γνωρίζουν και που ενδιαφέρονται για αυτό. Παρά ταύτα, και παραδόξως, το θέμα των γλωσσών προγραμματισμού εγείρει συχνά θερμότατες διαμάχες. Κατ αρχάς, για κάθε γλώσσα προγραμματισμού θα βρείτε οπαδούς της πρόθυμους να υπερασπιστούν αυτήν την προτίμησή τους ενάντια σε κάθε άλλη γλώσσα. Μερικοί οπαδοί της ML «είναι στα μαχαίρια» με οπαδούς της γλώσσας Haskell. Οι οπαδοί της Forth θα πικραθούν, χωρίς πάντως να εκπλαγούν, όταν διαπιστώσουν ότι κρατούν άλλο ένα εγχειρίδιο που αγνοεί τη δική τους αγαπημένη γλώσσα. Διάφοροι οπαδοί της Prolog είναι αδύνατον να κατανοήσουν για ποιο λόγο ο λογικός προγραμματισμός δεν έχει υιοθετηθεί από όλους τους προγραμματιστές. Και υπάρχουν οπαδοί της Fortran πλήρως πεπεισμένοι ότι η δική τους προτίμηση δεν είναι μόνο η πρώτη ιστορικά, αλλά και η πρώτη σε σπουδαιότητα γλώσσα υψηλού επιπέδου. Ανάμεσα στους θιασώτες της ίδιας γλώσσας ανακύπτουν διαμάχες άλλου είδους. Τα πρότυπα των γλωσσών προγραμματισμού αναπτύσσονται συχνά μέσω διεθνών επιτροπών. Ποιοι είναι οι «εγγυητές», και ποιοι συμμετέχουν τελικά σε τέτοιες διαδικασίες αποφάσεων; Τι πρόκειται και τι δεν πρόκειται να συμπεριληφθεί στην επόμενη επίσημη έκδοση μιας γλώσσας; Η ανάπτυξη των προδιαγραφών για κάποια γλώσσα προγραμματισμού συχνά είναι διαδικασία εντυπωσιακά αργή, περίπλοκη και... μνησίκακη. Αυτό που ενδιαφέρει περισσότερο εμάς είναι οι συχνές διαφωνίες που αφορούν τους θεμελιώδεις ορισμούς. Έχουμε ήδη χρησιμοποιήσει τον όρο οντοστρεφής, ο οποίος είναι ένας από τους πιο έντονα αμφιλεγόμενους όρους. Ποιες ακριβώς ιδιότητες θα πρέπει να έχει μια γλώσσα ώστε να μπορεί να θεωρηθεί οντοστρεφής; Εμείς θα παρακάμψουμε αυτό το ερώτημα, παραθέτοντας μόνο μια άτυπη περιγραφή των οντοστρεφών γλωσσών. Θα αποφύγουμε γενικότερα να δώσουμε απολύτως αυστηρούς ορισμούς για τέτοιους αμφιλεγόμενους όρους, για δύο λόγους. Πρώτον, θα ήταν κάπως υποκριτικό να ισχυριστούμε ότι υπάρχει καν ορισμός, τη στιγμή που στην πραγματικότητα υπάρχουν πολλοί και ασύμβατοι ορισμοί. Και δεύτερον, διότι οι αυστηροί ορισμοί δεν θα είχαν πρακτική χρησιμότητα: ένας αυστηρός ορισμός λ.χ. για τον όρο «οντοστρεφής» απλώς θα πυροδοτούσε διαμάχες της μορφής: «η δική μου γλώσσα μου είναι οντοστρεφής ενώ η δική σου δεν είναι». Για τα ζητήματα που μας ενδιαφέρουν σε αυτό το βιβλίο, οι άτυπες περιγραφές είναι πιο χρήσιμες. Κάποιες γλώσσες είναι πράγματι πιο οντοστρεφείς από κάποιες άλλες, αλλά θα αφήσουμε τέτοια ζητήματα στη κρίση του αναγνώστη. 3 3 Στους μαθηματικούς κύκλους, η ανταλλαγή σκληρών αλλά και ασαφών επιχειρημάτων αποκαλείται συχνά «βατραχομυομαχία». Την έκφραση αυτή είχε χρησιμοποιήσει ως γνωστόν ο Albert Einstein για να χαρακτηρίσει μια έντονη διαμάχη μεταξύ των μαθηματικών David Hilbert και L.E.J. Brouwer, την οποία είχε αποκαλέσει στα γερμανικά «Frosch-Mäuse-Krieg» (δηλ. βατραχομυομαχία). Ο όρος προέρχεται από έναν γνωστό αρχαιοελληνικό μύθο: χρησιμοποιείται σε μια ελληνιστική παρωδία της Ιλιάδας που φέρει τον τίτλο Βατραχομυομαχία. Οι παράξενες αντιμαχίες στις γλώσσες προγραμματισμού ανήκουν συχνά στο είδος των βατραχομυομαχιών.

Πρόλογος στην ελληνική έκδοση

Πρόλογος στην ελληνική έκδοση Πρόλογος στην ελληνική έκδοση Οι Πανεπιστημιακές Εκδόσεις Κρήτης έχουν την χαρά να παρουσιάσουν το βιβλίο Σύγχρονες γλώσσες προγραμματισμού, του Adam Brooks Webber. Το συγκεκριμένο σύγγραμμα επιλέχθηκε

Διαβάστε περισσότερα

Γλώσσες προγραμματισμού

Γλώσσες προγραμματισμού 1 Γλώσσες προγραμματισμού 1.1. Εισαγωγή Τα προγράμματα των υπολογιστών είναι μαγεία εν δράσει. Το κάθε πρόγραμμα μοιάζει με ένα περίπλοκο, αλλά και καλαίσθητο, μαγικό ξόρκι. και το καλύτερο είναι ότι με

Διαβάστε περισσότερα

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

Διαβάστε περισσότερα

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

Διαβάστε περισσότερα

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού. Κεφάλαιο 6 6.1 Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία σημαντικά στάδια : Σον ακριβή προσδιορισμό του προβλήματος Σην ανάπτυξη του αντίστοιχου αλγορίθμου

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

Διαβάστε περισσότερα

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0 ΤΙ ΕΙΝΑΙ ΤΟ ADVANCED Οι Advanced θεματικές ενότητες είναι κατάλληλες για άτομα που επιθυμούν να συνεχίσουν σπουδές στο χώρο

Διαβάστε περισσότερα

Πληροφορική 2. Γλώσσες Προγραμματισμού

Πληροφορική 2. Γλώσσες Προγραμματισμού Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση

Διαβάστε περισσότερα

Επιµέλεια Θοδωρής Πιερράτος

Επιµέλεια Θοδωρής Πιερράτος Εισαγωγή στον προγραµµατισµό Η έννοια του προγράµµατος Ο προγραµµατισµός ασχολείται µε τη δηµιουργία του προγράµµατος, δηλαδή του συνόλου εντολών που πρέπει να δοθούν στον υπολογιστή ώστε να υλοποιηθεί

Διαβάστε περισσότερα

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Γιώργος Δημητρίου Μάθημα 8 ο Μετάφραση Οδηγούμενη από τη Σύνταξη Ο ΣΑ καλεί τις ρουτίνες που εκτελούν τη σημασιολογική ανάλυση και παράγουν τον ενδιάμεσο κώδικα Σημασιολογικές πληροφορίες μπορούν να μεταφέρονται

Διαβάστε περισσότερα

Μαλούτα Θεανώ Σελίδα 1

Μαλούτα Θεανώ Σελίδα 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Α. ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΦΥΛΛΑΔΙΟ 6 ο ( Ενότητες 2.3 ) 1.Τι είναι πρόγραμμα; 2. Ποια είναι τα πλεονεκτήματα των γλωσσών υψηλού επιπέδου σε σχέση με τις γλώσσες

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Καθηγητής Πληροφορικής ΠΕ19 1 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 6 ο : ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΙΣΤΟΣΕΛΙΔΑ ΜΑΘΗΜΑΤΟΣ: http://eclass.sch.gr/courses/el594100/ Η έννοια του προγράμματος

Διαβάστε περισσότερα

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

Διαβάστε περισσότερα

Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού

Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1 Εισαγωγή Γνώση γλώσσας από τη σκοπιά Του συντακτικού (syntax) Περιγραφή με γραμματικές

Διαβάστε περισσότερα

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1 Μεταγλωττιστής Πρόγραμμα Διαβάζει προγράμματα δεδομένης γλώσσας (πηγαία γλώσσα) και τα μετατρέπει

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΕΡΕΥΝΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ΙΝΣΤΙΤΟΥΤΟ ΕΚΠΑΙΔΕΥΤΙΚΗΣ ΠΟΛΙΤΙΚΗΣ Γώγουλος Γ., Κοτσιφάκης Γ., Κυριακάκη Γ., Παπαγιάννης Α., Φραγκονικολάκης Μ., Χίνου Π. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ

Διαβάστε περισσότερα

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το Σηµαντικά σηµεία κεφαλαίου Τα τρία στάδια επίλυσης ενός προβλήµατος: Ακριβής προσδιορισµό του προβλήµατος Ανάπτυξη του αντίστοιχου αλγορίθµου. ιατύπωση του αλγορίθµου σε κατανοητή µορφή από τον υπολογιστή.

Διαβάστε περισσότερα

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19 Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών Κεφ. 2 Θεωρητική Επιστήμη Υπολογιστών 2.3.1.1 Έννοια προγράμματος Τι είναι πρόγραμμα και τι προγραμματισμός; Πρόγραμμα είναι το σύνολο εντολών που χρειάζεται

Διαβάστε περισσότερα

ΠΕΡΙΓΡΑΜΜΑ ΜΑΘΗΜΑΤΟΣ

ΠΕΡΙΓΡΑΜΜΑ ΜΑΘΗΜΑΤΟΣ ΠΕΡΙΓΡΑΜΜΑ ΜΑΘΗΜΑΤΟΣ (1) ΓΕΝΙΚΑ ΣΧΟΛΗ ΠΟΛΥΤΕΧΝΙΚΗ ΤΜΗΜΑ Μηχανικών Οικονομίας και Διοίκησης ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ ΓΕ0145 ΕΞΑΜΗΝΟ ΣΠΟΥΔΩΝ 4ο ΤΙΤΛΟΣ ΜΑΘΗΜΑΤΟΣ Εργαστήριο Προγράμματος

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία εξίσου σημαντικά στάδια.

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία εξίσου σημαντικά στάδια. ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία εξίσου σημαντικά στάδια. Τον ακριβή προσδιορισμό του προβλήματος. Την ανάπτυξη του αντίστοιχου αλγορίθμου.

Διαβάστε περισσότερα

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό Μάριος Αραποστάθης Καθηγητής πληροφορικής Βαρβάκειου Λύκειου http://users.sch.gr/mariosarapostathis 6.1 Η έννοια του

Διαβάστε περισσότερα

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1 ΚΕΦΑΛΑΙΟ 7 ο ΠΡΟΓΡΑΜΜΑ : Το πρόγραμμα αποτελείται από μια σειρά οδηγιών, που ονομάζονται εντολές, για την εκτέλεση τέτοιου είδους πράξεων, καθώς επίσης και από ένα σύνολο πρόσθετων οδηγιών ελέγχου, που

Διαβάστε περισσότερα

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

FORTRAN και Αντικειμενοστραφής Προγραμματισμός FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών

Διαβάστε περισσότερα

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος Κεφάλαιο 2.3: Προγραμματισμός 1 2.3.1 Αναφορά σε γλώσσες προγραμματισμού και «Προγραμματιστικά Υποδείγματα» 2.3.1.1 Πρόγραμμα και Γλώσσες Προγραμματισμού Πρόγραμμα: σύνολο εντολών που χρειάζεται να δοθούν

Διαβάστε περισσότερα

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Κεφάλαιο 7 ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Ερωτήσεις 1. Να αναφέρετε διαφορές μεταξύ γλωσσών μηχανής και γλωσσών χαμηλού επιπέδου. Οι γλώσσες μηχανής κωδικοποιούν τις εντολές τους με ομάδες

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Pascal- Εισαγωγή Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, όπως έχει ήδη αναφερθεί, τρία εξίσου

Διαβάστε περισσότερα

xvi Προσέγγιση δομεσ δεδομενων και αλγοριθμοι

xvi Προσέγγιση δομεσ δεδομενων και αλγοριθμοι Πρόλογος Το εφαλτήριο για τη συγγραφή αυτού του βιβλίου ήταν η πολύχρονη εμπειρία μου στη διδασκαλία του μαθήματος «Αλγόριθμοι και Δομές Δεδομένων» (κωδ. ECE 250) το οποίο εντάσσεται στο πρόγραμμα σπουδών

Διαβάστε περισσότερα

Περιεχόμενα. Περιεχόμενα

Περιεχόμενα. Περιεχόμενα Περιεχόμενα xv Περιεχόμενα 1 Αρχές της Java... 1 1.1 Προκαταρκτικά: Κλάσεις, Τύποι και Αντικείμενα... 2 1.1.1 Βασικοί Τύποι... 5 1.1.2 Αντικείμενα... 7 1.1.3 Τύποι Enum... 14 1.2 Μέθοδοι... 15 1.3 Εκφράσεις...

Διαβάστε περισσότερα

ΛΟΓΙΣΜΟΣ ΜΙΑΣ ΜΕΤΑΒΛΗΤΗΣ, ΕΣΠΙ 1

ΛΟΓΙΣΜΟΣ ΜΙΑΣ ΜΕΤΑΒΛΗΤΗΣ, ΕΣΠΙ 1 ΛΟΓΙΣΜΟΣ ΜΙΑΣ ΜΕΤΑΒΛΗΤΗΣ, ΕΣΠΙ 1 ΣΥΝΑΡΤΗΣΕΙΣ Η έννοια της συνάρτησης είναι θεμελιώδης στο λογισμό και διαπερνά όλους τους μαθηματικούς κλάδους. Για το φοιτητή είναι σημαντικό να κατανοήσει πλήρως αυτή

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ ΥΠΟΥΡΓΕΙΟ ΕΘΝΙΚΗΣ ΠΑΙΔΕΙΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ΠΑΙΔΑΓΩΓΙΚΟ ΙΝΣΤΙΤΟΥΤΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ Κ Υ Κ Λ Ο Υ Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ Κ Α Ι Υ Π Η Ρ Ε Σ Ι Ω Ν Τ Ε Χ Ν Ο Λ Ο Γ Ι Κ Η

Διαβάστε περισσότερα

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. AeppAcademy.com facebook.com/aeppacademy Γεια. Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. Καλή Ανάγνωση & Καλή Επιτυχία

Διαβάστε περισσότερα

Περιεχόμενα Πρόλογος 1. Εισαγωγή 2. Τα Βασικά Μέρη ενός Προγράμματος Prolog

Περιεχόμενα Πρόλογος 1. Εισαγωγή 2. Τα Βασικά Μέρη ενός Προγράμματος Prolog Περιεχόμενα Πρόλογος... xxv 1. Εισαγωγή... 1 1.1. Ιστορική Εξέλιξη της Prolog.... 2 1.2. Προστακτικός και Δηλωτικός Προγραμματισμός.... 2 1.3. Δηλωτική και διαδικαστική έννοια ενός προγράμματος Prolog....

Διαβάστε περισσότερα

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ Α) Να γράψετε στο τετράδιό σας τον αριθμό κάθε πρότασης και δίπλα το γράμμα "Σ", αν είναι σωστή, ή το γράμμα "Λ", αν είναι λανθασμένη. (Μονάδες 25) 1. Ένα αδόμητο πρόβλημα είναι ταυτόχρονα και ανοικτό

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 03/01/09 Χαράλαμπος Τζόκας 1

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 03/01/09 Χαράλαμπος Τζόκας 1 ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 03/01/09 Χαράλαμπος Τζόκας 1 Πρόγραμμα - Προγραμματισμός Πρόγραμμα: Σύνολο εντολών που πρέπει να δοθούν στον Υπολογιστή, ώστε να υλοποιηθεί ο αλγόριθμος της επίλυσης

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Προγραμματισμός Η/Υ Προτεινόμενα θέματα εξετάσεων Εργαστήριο Μέρος 1 ό ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Ιανουάριος 2011 Καλογιάννης Γρηγόριος Επιστημονικός/ Εργαστηριακός

Διαβάστε περισσότερα

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή. ΑΕσΠΠ-Κεφ6. Εισαγωγή στον προγραμματισμό 1 ΣΩΣΤΟ ΛΑΘΟΣ 1. Οι γλώσσες προγραμματισμού αναπτυχθήκαν με σκοπό την επικοινωνία ανθρώπου μηχανής. 2. Αλγόριθμος = Πρόγραμμα + Δομές Δεδομένων 3. Ένα πρόγραμμα

Διαβάστε περισσότερα

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ Η ΔΙΔΑΣΚΑΛΙΑ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΣΤΟ ΛΥΚΕΙΟ Εισαγωγή Η μεγάλη ανάπτυξη και ο ρόλος που

Διαβάστε περισσότερα

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ Μ. Γρηγοριάδου Ρ. Γόγουλου Ενότητα: Η Διδασκαλία του Προγραμματισμού Περιεχόμενα Παρουσίασης

Διαβάστε περισσότερα

Α. Ερωτήσεις Ανάπτυξης

Α. Ερωτήσεις Ανάπτυξης οµηµένος Προγραµµατισµός-Κεφάλαιο 7 Σελίδα 1 α ό 10 ΕΝΟΤΗΤΑ ΙΙΙ (ΠΡΟΓΡΑΜΜΑΤΑ) ΚΕΦΑΛΑΙΟ 7: Είδη, Τεχνικές και Περιβάλλοντα Προγραµµατισµού Α. Ερωτήσεις Ανάπτυξης 1. Τι ονοµάζουµε γλώσσα προγραµµατισµού;

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β Καβακλή Χειμερινό Εξάμηνο 2001 Στόχοι του Μαθήματος! Ανάπτυξη αναλυτικής

Διαβάστε περισσότερα

Αναδρομή Ανάλυση Αλγορίθμων

Αναδρομή Ανάλυση Αλγορίθμων Αναδρομή Ανάλυση Αλγορίθμων Παράδειγμα: Υπολογισμός του παραγοντικού Ορισμός του n! n! = n x (n - 1) x x 2 x 1 Ο παραπάνω ορισμός μπορεί να γραφεί ως n! = 1 αν n = 0 n x (n -1)! αλλιώς Παράδειγμα (συνέχ).

Διαβάστε περισσότερα

Διδακτική της Πληροφορικής ΙΙ

Διδακτική της Πληροφορικής ΙΙ Διδακτική της Πληροφορικής ΙΙ Ομάδα Γ Βότσης Ευστάθιος Γιαζιτσής Παντελής Σπαής Αλέξανδρος Τάτσης Γεώργιος Προβλήματα που αντιμετωπίζουν οι αρχάριοι προγραμματιστές Εισαγωγή Προβλήματα Δυσκολίες Διδακτικό

Διαβάστε περισσότερα

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης Περιεχόμενα Δομές δεδομένων 37. Δομές δεδομένων (θεωρητικά στοιχεία)...11 38. Εισαγωγή στους μονοδιάστατους πίνακες...16 39. Βασικές επεξεργασίες στους μονοδιάστατους πίνακες...25 40. Ασκήσεις στους μονοδιάστατους

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού Strange

Η γλώσσα προγραμματισμού Strange Προγραμματιστική άσκηση: Η γλώσσα προγραμματισμού Strange Η Strange είναι μια μικρή γλώσσα προγραμματισμού. Παρόλο που οι προγραμματιστικές της ικανότητες είναι μικρές, η εκπαιδευτική αυτή γλώσσα περιέχει

Διαβάστε περισσότερα

- Επιστημονικός Υπεύθυνος Ενεργείας: Θεόδωρος Γ. Εξαρχάκος Καθηγητής του Πανεπιστημίου Αθηνών Πρόεδρος του Παιδαγωγικού Ινστιτούτου «Αναμόρφωση / εκ

- Επιστημονικός Υπεύθυνος Ενεργείας: Θεόδωρος Γ. Εξαρχάκος Καθηγητής του Πανεπιστημίου Αθηνών Πρόεδρος του Παιδαγωγικού Ινστιτούτου «Αναμόρφωση / εκ Ενέργεια 1.1.α: Έργο No 15: «Προγράμματα Βιβλία» - Επιστημονικός Υπεύθυνος Ενεργείας: Θεόδωρος Γ. Εξαρχάκος Καθηγητής του Πανεπιστημίου Αθηνών Πρόεδρος του Παιδαγωγικού Ινστιτούτου «Αναμόρφωση / εκ νέου

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Προγραµµατισµός Η/Υ Ο προγραµµατισµός είναι η διατύπωση του αλγορίθµου σε µορφή κατανοητή από τον Η/Υ ώστε να τον εκτελέσει («τρέξει» όπως λέµε στην ορολογία της

Διαβάστε περισσότερα

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

Διαβάστε περισσότερα

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1 Εισαγωγή - 1 Μία κλασσική γλώσσα προγραμματισμού αποτελείται από: Εκφράσεις (των

Διαβάστε περισσότερα

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ GD2520

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ GD2520 ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ GD2520 ΕΞΑΜΗΝΟ ΣΠΟΥΔΩΝ Πέμπτο ΤΙΤΛΟΣ ΜΑΘΗΜΑΤΟΣ Αντικειμενοστρεφής Προγραμματισμός ΑΥΤΟΤΕΛΕΙΣ ΔΙΔΑΚΤΙΚΕΣ

Διαβάστε περισσότερα

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

Διαβάστε περισσότερα

ΑΕΠΠ Ερωτήσεις τύπου Σωστό-Λάθος

ΑΕΠΠ Ερωτήσεις τύπου Σωστό-Λάθος ΑΕΠΠ Ερωτήσεις τύπου Σωστό-Λάθος Κεφάλαιο 1 1. Πρόβλημα είναι μια μαθηματική κατάσταση που πρέπει να αντιμετωπίσουμε 2. Αν υποβάλλουμε τα δεδομένα σε επεξεργασία παίρνουμε πληροφορίες 3. Ο υπολογιστής

Διαβάστε περισσότερα

Η ΑΕΠΠ IN A GLANCE! ΦΡΟΝΤΙΣΤΗΡΙΑ ΠΟΛΥΜΕΝΗ

Η ΑΕΠΠ IN A GLANCE! ΦΡΟΝΤΙΣΤΗΡΙΑ ΠΟΛΥΜΕΝΗ Η ΑΕΠΠ IN A GLANCE! Κατανομή μονάδων: 40 μονάδες το 1 ο Θέμα, από 20 τα υπόλοιπα τρία. Μην χαίρεστε όμως γιατί η «καθαρή» θεωρία περιορίζεται συνήθως- σε 5 ερωτήσεις σωστού ή λάθους και σε 1-2 ερωτήσεις

Διαβάστε περισσότερα

Περιεχόμενα 1 Πρωτοβάθμια Λογική Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων ) / 60

Περιεχόμενα 1 Πρωτοβάθμια Λογική Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων ) / 60 Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων

Διαβάστε περισσότερα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 10 ΟΥ ΚΕΦΑΛΑΙΟΥ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ 1. Πως ορίζεται ο τμηματικός προγραμματισμός; Τμηματικός προγραμματισμός

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΣΚΗΣΕΙΣ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΡΩΤΗΣΕΙΣ ΣΩΣΤΟ ΛΑΘΟΣ Σημειώστε αν είναι σωστή ή

Διαβάστε περισσότερα

Τεχνολογία Λογισµικού Ι Κεφάλαιο 5

Τεχνολογία Λογισµικού Ι Κεφάλαιο 5 ΕΛΛΗΝΙΚΟ ΑΝΟΙΧΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Πρόγραµµα σπουδών "ΠΛΗΡΟΦΟΡΙΚΗ" - Θ.Ε. ΠΛΗ11 Τεχνολογία Λογισµικού Ι Κεφάλαιο 5 Βασίλειος Βεσκούκης ιδάκτωρ Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών v.vescoukis@cs.ntua.gr

Διαβάστε περισσότερα

Outline. 4 Object-Oriented Programming

Outline. 4 Object-Oriented Programming Προγραμματισμός Ηλεκτρονικών Υπολογιστών Φιλοσοφίες γλωσσών προγραμματισμού Διδάσκων: Στάθης Ζάχος Επιμέλεια Διαφανειών: Μάκης Αρσένης CoReLab ΣΗΜΜΥ - Ε.Μ.Π. Ιανουάριος 2016 ιδάσκων: Στάθης Ζάχος ( CoReLab

Διαβάστε περισσότερα

Περίγραμμα. Διαδικαστικά. Εργαστήρια Τεχνικών Προγραμματισμού 21/2/2017. ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ και Τεχνικές Προγραμματισμού

Περίγραμμα. Διαδικαστικά. Εργαστήρια Τεχνικών Προγραμματισμού 21/2/2017. ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ και Τεχνικές Προγραμματισμού ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ και Τεχνικές Προγραμματισμού http://eclass.di.uoa.gr/d419/ Τμήμα Αρτίων ΑΜ Αίθουσα A2 Τετάρτη 11-13 και Πέμπτη 11-13 Περίγραμμα Διαδικαστικά (Εργασίες, Εξετάσεις, κλπ) Ένταξη στο Πρόγραμμα

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

Διαβάστε περισσότερα

τις αναδρομικές ακολουθίες (recursive sequences) στις οποίες ορίζαμε

τις αναδρομικές ακολουθίες (recursive sequences) στις οποίες ορίζαμε Κεφάλαιο 9: Αναδρομή Ο τρόπος με τον οποίο σκεφτήκαμε και σχεδιάσαμε τις συναρτήσεις στο προηγούμενο κεφάλαιο ακολουθούσε τη φιλοσοφία του προγραμματισμού που είχαμε αναπτύξει σε όλο το προηγούμενο βιβλίο.

Διαβάστε περισσότερα

Σχόλια και υποδείξεις για το Σχέδιο Μαθήματος

Σχόλια και υποδείξεις για το Σχέδιο Μαθήματος Σχόλια και υποδείξεις για το Σχέδιο Μαθήματος Ακολούθως αναπτύσσονται ορισμένα διευκρινιστικά σχόλια για το Σχέδιο Μαθήματος. Αφετηρία για τον ακόλουθο σχολιασμό υπήρξαν οι σχετικές υποδείξεις που μας

Διαβάστε περισσότερα

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος στη δεύτερη έκδοση

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος στη δεύτερη έκδοση Πρόλογος του επιµελητή xiii Πρόλογος στην πρώτη έκδοση xv Προς τους ϕοιτητές.......................... xv Προς τους διδάσκοντες........................ xvii Ηπρώτηέκδοση........................... xviii

Διαβάστε περισσότερα

ΜΕΡΙΚΑ ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΙΣ ΓΛΩΣΣEΣ ΠPOΓPAMMATIΣMOY

ΜΕΡΙΚΑ ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΙΣ ΓΛΩΣΣEΣ ΠPOΓPAMMATIΣMOY ΜΕΡΙΚΑ ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΙΣ ΓΛΩΣΣEΣ ΠPOΓPAMMATIΣMOY Mία γλώσσα προγραμματισμού συνίσταται από ένα περιορισμένο υποσύνολο της αγγλικής γλώσσας και το οποίο αποτελείται από εκφράσεις σαφώς ορισμένες, χωρίς παρερμηνεία.

Διαβάστε περισσότερα

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Δομές Δεδομένων Ενότητα 1 - Εισαγωγή Χρήστος Γκουμόπουλος Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Αντικείμενο μαθήματος Δομές Δεδομένων (ΔΔ): Στην επιστήμη υπολογιστών

Διαβάστε περισσότερα

ΒΙΒΛΙΑ ΒΙΒΛΙΑ

ΒΙΒΛΙΑ ΒΙΒΛΙΑ ΠΑΡΑΡΤΗΜΑ 05 ΠΛΗΡΟΦΟΡΙΚΗ Σύγκριση της Διδακτέας-εξεταστέας ύλης του πανελλαδικώς εξεταζόμενου μαθήματος «ΠΛΗΡΟΦΟΡΙΚΗ» (πρώην Περιβάλλον), της Γ τάξης ημερήσιου Γενικού Λυκείου, μεταξύ του σχολικού έτους

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Συναρτήσεις & Υποπρογράμματα. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Προγραμματισμός Η/Υ. Συναρτήσεις & Υποπρογράμματα. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος Προγραμματισμός Η/Υ Συναρτήσεις & Υποπρογράμματα ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος Τμηματικός Προγραμματισμός Η επίλυση ενός προβλήματος διευκολύνεται

Διαβάστε περισσότερα

ΠΕΡΙΕΧΟΜΕΝΑ. Εντολές επιλογής Εντολές επανάληψης

ΠΕΡΙΕΧΟΜΕΝΑ. Εντολές επιλογής Εντολές επανάληψης ΠΕΡΙΕΧΟΜΕΝΑ Εντολές επιλογής Εντολές επανάληψης Εισαγωγή Στο προηγούμενο κεφάλαιο αναπτύξαμε προγράμματα, τα οποία ήταν πολύ απλά και οι εντολές των οποίων εκτελούνται η μία μετά την άλλη. Αυτή η σειριακή

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Στέφανος Ουγιάρογλου

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Στέφανος Ουγιάρογλου ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Κεφάλαιο 6 «Εισαγωγή στον Προγραμματισμό» Στέφανος Ουγιάρογλου Διαφάνειες από υλικό του Χ. Μουρατίδη Προγραμματισμός Η/Υ Ο προγραμματισμός είναι η διατύπωση

Διαβάστε περισσότερα

Υπολογιστικά & Διακριτά Μαθηματικά

Υπολογιστικά & Διακριτά Μαθηματικά Υπολογιστικά & Διακριτά Μαθηματικά Ενότητα 2:Στοιχεία Μαθηματικής Λογικής Στεφανίδης Γεώργιος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό,

Διαβάστε περισσότερα

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δρ. Κόννης Γιώργος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος και του Προγράμματος/Αλγορίθμου

Διαβάστε περισσότερα

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ και Τεχνικές Προγραμματισμού

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ και Τεχνικές Προγραμματισμού ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ και Τεχνικές Προγραμματισμού http://eclass.di.uoa.gr/d419/ Τμήμα Αρτίων ΑΜ Αίθουσα A2 Τετάρτη 11-13 και Πέμπτη 11-13 Γιάννης Κοτρώνης domes@di.uoa.gr Περίγραμμα Διαδικαστικά (Εργασίες,

Διαβάστε περισσότερα

Ψευδοκώδικας. November 7, 2011

Ψευδοκώδικας. November 7, 2011 Ψευδοκώδικας November 7, 2011 Οι γλώσσες τύπου ψευδοκώδικα είναι ένας τρόπος περιγραφής αλγορίθμων. Δεν υπάρχει κανένας τυπικός ορισμός της έννοιας του ψευδοκώδικα όμως είναι κοινός τόπος ότι οποιαδήποτε

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΚΕΦΑΛΑΙΟ 10 Όπως είδαμε και σε προηγούμενο κεφάλαιο μια από τις βασικότερες τεχνικές στον Δομημένο Προγραμματισμό είναι ο Τμηματικός Προγραμματισμός. Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης

Διαβάστε περισσότερα

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων ΙΙ Σύνολο- Περιεχόμενο Μαθήματος

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων ΙΙ Σύνολο- Περιεχόμενο Μαθήματος Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων ΙΙ Σύνολο- Περιεχόμενο Μαθήματος Χιωτίδης Γεώργιος Τμήμα Λογιστικής και Χρηματοοικονομικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

Διαβάστε περισσότερα

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13 Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13 ΙΣΤΟΡΙΚΑ Παρουσιάστηκε το 1970 από το Niklaus Wirth Προγενέστερη γλώσσα ήταν η Algol 60 Είναι δομημένη γλώσσα προγραμματισμού υψηλού

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 1: Εισαγωγή Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο

Διαβάστε περισσότερα

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ και ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ 2.1 Να δοθεί ο ορισμός

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΠΡΟΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΜΑΘΗΜΑ: ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ ΔΙΑΔΙΚΑΣΙΕΣ ΠΑΡΑΓΩΓΗΣ ΛΟΓΙΣΜΙΚΟΥ Διδάσκων: Γ. Χαραλαμπίδης,

Διαβάστε περισσότερα

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΣΤΟΙΧΕΙΑ ΑΡΧΙΚΗΣ ΕΚ ΟΣΗΣ Ομάδα Συγγραφής Υπεύθυνος για το Παιδαγωγικό Ινστιτούτο Υπεύθυνος Μαθήματος ΑΘΗΝΑ ΒΑΚΑΛΗ, Λέκτωρ Πληροφορικής ΑΠΘ ΗΛΙΑΣ ΓΙΑΝΝΟΠΟΥΛΟΣ,

Διαβάστε περισσότερα

1. Η σκοπιμότητα της ένταξης εργαλείων ψηφιακής τεχνολογίας στη Μαθηματική Εκπαίδευση

1. Η σκοπιμότητα της ένταξης εργαλείων ψηφιακής τεχνολογίας στη Μαθηματική Εκπαίδευση 1. Η σκοπιμότητα της ένταξης εργαλείων ψηφιακής τεχνολογίας στη Μαθηματική Εκπαίδευση Στη βασική παιδεία, τα μαθηματικά διδάσκονται με στατικά μέσα α) πίνακα/χαρτιού β) κιμωλίας/στυλού γ) χάρτινου βιβλίου.

Διαβάστε περισσότερα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΠΡΟΓΡΑΜΜΑ ΠΑΙΔΑΓΩΓΙΚΗΣ ΚΑΤΑΡΤΙΣΗΣ 2 η ΕΡΓΑΣΙΑ ΠΡΑΚΤΙΚΗΣ ΑΣΚΗΣΗΣ ΠΑΡΑΤΗΡΗΣΕΙΣ ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΠΡΟΓΡΑΜΜΑ ΠΑΙΔΑΓΩΓΙΚΗΣ ΚΑΤΑΡΤΙΣΗΣ 2 η ΕΡΓΑΣΙΑ ΠΡΑΚΤΙΚΗΣ ΑΣΚΗΣΗΣ ΠΑΡΑΤΗΡΗΣΕΙΣ ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ ΠΑΡΑΤΗΡΗΣΕΙΣ (υποχρεωτικές για τον/την επόπτη/τρια) ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΠΡΟΓΡΑΜΜΑ ΠΑΙΔΑΓΩΓΙΚΗΣ ΚΑΤΑΡΤΙΣΗΣ 2 η ΕΡΓΑΣΙΑ ΠΡΑΚΤΙΚΗΣ ΑΣΚΗΣΗΣ ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ ΣΤΟΙΧΕΙΑ ΑΣΚΗΣΗΣ Επώνυμο: ΣΕΪΤΑΡΙΔΗΣ Όνομα: ΝΙΚΟΛΑΟΣ

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό 6.1 Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, τρία σημαντικά στάδια: 1. Τον ακριβή προσδιορισμό του προβλήματος. 2. Την ανάπτυξη

Διαβάστε περισσότερα

Γράφοντας ένα σχολικό βιβλίο για τα Μαθηματικά. Μαριάννα Τζεκάκη Αν. Καθηγήτρια Α.Π.Θ. Μ. Καλδρυμίδου Αν. Καθηγήτρια Πανεπιστημίου Ιωαννίνων

Γράφοντας ένα σχολικό βιβλίο για τα Μαθηματικά. Μαριάννα Τζεκάκη Αν. Καθηγήτρια Α.Π.Θ. Μ. Καλδρυμίδου Αν. Καθηγήτρια Πανεπιστημίου Ιωαννίνων Γράφοντας ένα σχολικό βιβλίο για τα Μαθηματικά Μαριάννα Τζεκάκη Αν. Καθηγήτρια Α.Π.Θ. Μ. Καλδρυμίδου Αν. Καθηγήτρια Πανεπιστημίου Ιωαννίνων Εισαγωγή Η χώρα μας απέκτησε Νέα Προγράμματα Σπουδών και Νέα

Διαβάστε περισσότερα

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Κεφάλαιο 6ο Εισαγωγή στον Προγραµµατισµό Μέρος Πρώτο (6.1, 6.2 και 6.3) Α. Ερωτήσεις Σωστού Λάθους 1. Η γλώσσα µηχανής είναι µία γλώσσα υψηλού επιπέδου.

Διαβάστε περισσότερα

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΕΞΕΤΑΣΗΣ

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΕΞΕΤΑΣΗΣ Το αναλυτικό πρόγραμμα στο οποίο βασίζεται η εξέταση είναι το αναλυτικό πρόγραμμα του Μαθήματος Κατεύθυνσης Πληροφορική Επιστήμη Η.Υ της Γ Ενιαίου Λυκείου Γενικός Σκοπός Το μάθημα κατεύθυνσης της στη Γ'

Διαβάστε περισσότερα

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου; 5.1 Επίδοση αλγορίθμων Μέχρι τώρα έχουμε γνωρίσει διάφορους αλγόριθμους (αναζήτησης, ταξινόμησης, κ.α.). Στο σημείο αυτό θα παρουσιάσουμε ένα τρόπο εκτίμησης της επίδοσης (performance) η της αποδοτικότητας

Διαβάστε περισσότερα

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ 2.3.1.1. Παπαγιάννη Νάσια Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών ΕΜΠ 1 περιλαμβάνει: Η έννοια του προγράμματος Επίλυση προβλήματος 1. Ακριβή προσδιορισμό

Διαβάστε περισσότερα

Εισαγωγή στην πληροφορική

Εισαγωγή στην πληροφορική Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόμων Τοπογράφων Μηχανικών Εισαγωγή στην πληροφορική Βασίλειος Βεσκούκης Δρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Η γλώσσα προγραμματισμού

Διαβάστε περισσότερα

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 2 η : Συστήματα τύπων Συστήματα Τύπων (ΣΤ) Το σύστημα τύπων μιας γλώσσας προγραμματισμού με τύπους είναι ένα σύνολο από κανόνες στους οποίους πρέπει να υπακούουν οι τύποι της

Διαβάστε περισσότερα

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1 Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1 Ποιες γλώσσες αναφέρονται ως φυσικές και ποιες ως τεχνητές; Ως φυσικές γλώσσες αναφέρονται εκείνες οι οποίες χρησιμοποιούνται για την επικοινωνία μεταξύ ανθρώπων,

Διαβάστε περισσότερα

Κεφάλαιο 9 Συναρτησιακός προγραμματισμός Υπολογισμός με συναρτήσεις

Κεφάλαιο 9 Συναρτησιακός προγραμματισμός Υπολογισμός με συναρτήσεις Κεφάλαιο 9 Συναρτησιακός προγραμματισμός Υπολογισμός με συναρτήσεις Σύνοψη Σκοπός του κεφαλαίου αυτού είναι η εισαγωγή του αναγνώστη στη φιλοσοφία του συναρτησιακού προγραμματισμού. Ο συναρτησιακός προγραμματισμός

Διαβάστε περισσότερα

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

Διαβάστε περισσότερα

Σχέδια μαθημάτων για την δημιουργία συναρτήσεων υπολογισμού του ΜΚΔ και του ΕΚΠ στην MSWLogo

Σχέδια μαθημάτων για την δημιουργία συναρτήσεων υπολογισμού του ΜΚΔ και του ΕΚΠ στην MSWLogo Σχέδια μαθημάτων για την δημιουργία συναρτήσεων υπολογισμού του Μέγιστου Κοινού Διαιρέτη (ΜΚΔ) και του Ελάχιστου Κοινού Πολλαπλασίου (ΕΚΠ) δύο αριθμών, με την γλώσσα προγραμματισμού Logo Κογχυλάκης Σ.

Διαβάστε περισσότερα

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 3 : Γλώσσες προγραμματισμού. Δρ.

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 3 : Γλώσσες προγραμματισμού. Δρ. 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Πληροφορική II Ενότητα 3 : Γλώσσες προγραμματισμού Δρ. Γκόγκος Χρήστος 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου Τμήμα Χρηματοοικονομικής

Διαβάστε περισσότερα

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2 Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2 1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων Πληροφορικής 2. Ο αλγόριθμος αποτελείται από ένα πεπερασμένο σύνολο εντολών 3. Ο αλγόριθμος

Διαβάστε περισσότερα

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ 1ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Α ΑΝΑΚΕΦΑΛΑΙΩΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ Γ' ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΠΕΜΠΤΗ 26 ΑΠΡΙΛΙΟΥ 2012 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ

Διαβάστε περισσότερα