ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ I: ΕΙΣΑΓΩΓΗ, ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΔΟΜΕΣ ΕΛΕΓΧΟΥ... 1 ΚΕΦΑΛΑΙΟ 0 ΕΙΣΑΓΩΓΗ... 3



Σχετικά έγγραφα
ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ I: ΕΙΣΑΓΩΓΗ, ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΔΟΜΕΣ ΕΛΕΓΧΟΥ... 1 ΚΕΦΑΛΑΙΟ 0 ΕΙΣΑΓΩΓΗ... 3

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

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

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

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

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

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

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

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

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

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL


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

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

Pascal. 15 Νοεμβρίου 2011

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Προγραμματισμός PASCAL

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Εργαστήριο 10 Πίνακες. Πίνακες. Η έννοια της δόμησης δεδομένων στη PASCAL. Σκοπός

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

Pascal - Βασικές Έννοιες

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

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

1. Τι ονομάζουμε αλγόριθμο; Δώστε παράδειγμα.

Πρόβλημα 29 / σελίδα 28

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

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

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

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Δομή Επανάληψης. Κεφάλαιο 7 Mike Trimos

Διαδικασιακός Προγραμματισμός

ΕΠΑ.Λ ΧΡΥΣΟΥΠΟΛΗΣ Γ Πληροφορική Προγραµµατισµός Υπολογιστών Κεφάλαιο 9 Σηµειώσεις 03. Εντολή Εκχώρησης - Αντικατάστασης

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

8 FORTRAN 77/90/95/2003

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

Εισαγωγή στο Προγραμματισμό για Μηχανολόγους Οδηγός Προετοιμασίας για τη Τελική Εξέταση

Βασικές Αρχές Προγραμματισμού

Στοιχειώδης προγραμματισμός σε C++

Τύποι Δεδομένων. Κατηγορίες Τύπων Δεδομένων ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός Κων/νος Φλώρος

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

Αρχές Προγραμματισμού Η/Υ Μέθοδοι παρουσίασης του αλγόριθμου και Βασικές έννοιες

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

ΠΕΡΙΕΧΟΜΕΝΑ Αλφάβητο και τύποι δεδομένων Σταθερές και μεταβλητές Τελεστές, συναρτήσεις και εκφράσεις Εντολή εκχώρησης Εντολές εισόδου - εξόδου Δομή

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ:

Περιεχόμενα. Πρόλογος... 21

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Εισαγωγή στη Fortran. Μάθημα 1 ο. Ελευθερία Λιούκα

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην αναγκαιότητα ύπαρξης των μεταγλωττιστών

- program p_name(output); - uses crt;

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Τύποι, Σταθερές και Μεταβλητές

Εισαγωγή στη γλώσσα προγραμματισμού C++14

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

Visual Basic Βασικές Έννοιες

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

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

// MATHIMA 2, // s.boot; s.makewindow.boot; // boot server!

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

Φυσικές και τεχνητές γλώσσες. Το αλφάβητο της ΓΛΩΣΣΑΣ, Τύποι Δεδομένων. Σταθερές, Μεταβλητές, Τελεστές, Συναρτήσεις, Δομή Προγράμματος

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

ιαφάνειες παρουσίασης #5

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

ΚΕΦΑΛΑΙΟ 2 ΑΛΓΟΡΙΘΜΟΙ ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ ΘΕΩΡΙΑ

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

7. Βασικά στοιχεία προγραμματισμού

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

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

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Εισαγωγή στη γλώσσα προγραμματισμού Fortran 95

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

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Πρόβλημα 37 / σελίδα 207

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Δομημένος Προγραμματισμός (ΤΛ1006)

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Διαδικασιακός Προγραμματισμός

Transcript:

ΠΕΡΙΕΧΟΜΕΝΑ ΠΡΟΛΟΓΟΣ...xxi Σημείωση προς τον αναγνώστη... xxiii Σημείωση προς το διδάσκοντα...xxiv ΜΕΡΟΣ I: ΕΙΣΑΓΩΓΗ, ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΔΟΜΕΣ ΕΛΕΓΧΟΥ... 1 ΚΕΦΑΛΑΙΟ 0 ΕΙΣΑΓΩΓΗ... 3 0.1 Ιστορία των υπολογιστικών μηχανών...3 0.1.1 Αρχαιότητα...3 0.1.2 Αναγέννηση...4 0.1.3 Δέκατος Ένατος Αιώνας...5 0.1.4 Πρώτος και Δεύτερος Παγκόσμιος Πόλεμος...6 0.1.5 Υπολογιστές πρώτης γενιάς...8 0.1.6 Υπολογιστές δεύτερης γενιάς...11 0.1.7 Υπολογιστές τρίτης γενιάς...12 0.1.8 Υπολογιστές τέταρτης γενιάς...14 0.1.9 Πέμπτη και έκτη γενιά...14 0.2 Οργάνωση υπολογιστών...15 0.3 Ιστορία του προγραμματισμού...18 0.3.1 Πρώτη γενιά...18 0.3.2 Δεύτερη γενιά...20 0.3.3 Τρίτη γενιά...22 0.3.4 Τέταρτη γενιά...24 0.4 Αλγόριθμοι...25 Aσκήσεις 0.1*...28 Προγράμματα 0...29

viii Δομημένος Προγραμματισμός με Pascal ΚΕΦΑΛΑΙΟ 1 ΠΡΟΓΡΑΜΜΑΤΑ, ΔΕΔΟΜΕΝΑ ΚΑΙ ΤΥΠΟΙ... 31 1.1 Προγράμματα εξόδου...31 Aσκήσεις 1.1...36 1.2 Δεδομένα (Data)...36 1.3 Εντολές εκχώρησης...39 Προγράμματα 1...40 Aπαντήσεις 1.1...41 ΚΕΦΑΛΑΙΟ 2 Ο ΤΥΠΟΣ INTEGER ΚΑΙ Η ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ... 43 2.1 Τιμές τύπου integer...43 2.2 Παραστάσεις τύπου integer...44 2.2.1 Τελεστές...44 2.2.2 Προκαθορισμένες συναρτήσεις...47 Ασκήσεις 2.1...47 2.3 Είσοδος και έξοδος αντικειμένων τύπου integer...48 2.3.1 Είσοδος αντικειμένων τύπου integer...49 2.3.2 Έξοδος αντικειμένων τύπου integer...50 Aσκήσεις 2.2...52 2.4 Σφάλματα Προγραμματισμού (Programming Errors)...52 2.4.1 Συντακτικά σφάλματα...53 2.4.2 Σημασιολογικά σφάλματα...53 Προγράμματα 2...55 Απαντήσεις 2.1...56 Aπαντήσεις 2.2...56 ΚΕΦΑΛΑΙΟ 3 Ο ΤΥΠΟΣ BOOLEAN, Η ΑΛΓΕΒΡΑ ΤΟΥ ΚΑΙ OΙ ΒΑΣΙΚΕΣ ΔΟΜΕΣ ΕΛΕΓΧΟΥ... 59 3.1 Eισαγωγή...59 3.2 Άλγεβρα Boole...60

Περιεχόμενα ix 3.2.1 Αρχή του Δυϊσμού (Duality Principle)...60 3.2.2 Βασικά Θεωρήματα...61 3.2.3 Συναρτήσεις Boole...63 Ορισμός...63 3.3 Συγκρίσεις...64 3.4 Παραστάσεις τύπου boolean...66 3.4.1 Συγκρίσεις...68 3.4.2 Έξοδος αντικειμένων τύπου boolean...68 3.5 Χρήσιμοι νόμοι της άλγεβρας του Boole...69 Ασκήσεις 3.1...69 3.6 H εντολή while...70 Παραδείγματα 3.1...72 Ασκήσεις 3.2...74 3.7 H εντολή if...75 Παραδείγματα 3.2...77 Ασκήσεις 3.3...78 Προγράμματα 3...80 Απαντήσεις 3.1...80 Απαντήσεις 3.2...82 Aπαντήσεις 3.3...83 ΚΕΦΑΛΑΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ... 87 4.1 Δομημένος προγραμματισμός...87 4.2 Eντοπισμός και άρση σφαλμάτων (Debugging)...94 Πρoγράμματα 4...96 ΚΕΦΑΛΑΙΟ 5 ΟΙ ΤΥΠΟΙ CHAR ΚΑΙ TEXT... 99 5.1 O τύπος char...99 5.1.1 Eντολές εκχώρησης...99 5.1.2 Συγκρίσεις...101

x Δομημένος Προγραμματισμός με Pascal 5.1.3 Είσοδος και έξοδος αντικειμένων τύπου char...102 Aσκήσεις 5.1...105 5.2 O τύπος text...107 5.2.1 Παράμετροι προγράμματος...113 Ασκήσεις 5.2...114 Πρoγράμματα 5...117 Απαντήσεις 5.1...118 Απαντήσεις 5.2...119 ΚΕΦΑΛΑΙΟ 6 ΤΥΠΟΙ ΠΟΥ ΟΡΙΖΟΝΤΑΙ ΑΠΟ ΤΟ ΧΡΗΣΤΗ ΚΑΙ ΑΛΛΕΣ ΔΟΜΕΣ ΕΛΕΓΧΟΥ... 123 6.1 Απαριθμητοί τύποι...123 6.2 Τύποι υποπεριοχής...125 6.3 Συμβατοί τύποι...126 6.4 Τακτικοί τύποι...127 6.5 Η επαναληπτική εντολή for...128 6.6 Η επαναληπτική εντολή repeat...131 6.7 Η εντολή case...133 Ασκήσεις 6.1...136 Πρoγράμματα 6...138 Aπαντήσεις 6.1...139 ΚEΦΑΛΑΙΟ 7 Ο ΤΥΠΟΣ REAL ΚΑΙ ΤΑ ΣΦΑΛΜΑΤΑ ΤΟΥ... 141 7.1 O τύπος real...141 7.2 Παραστάσεις τύπου real...142 7.2.1 Tελεστές...142 7.2.2 Προκαθορισμένες συναρτήσεις...142 7.2.3 Συγκρίσεις...143 7.3 Συμβατότητα εκχώρησης...143 7.4 Είσοδος και έξοδος αντικειμένων τύπου real...144 7.5 Σφάλματα τιμών των αντικειμένων τύπου real...145

Περιεχόμενα xi 7.5.1 Σφάλματα παρατήρησης (observation errors)...145 7.5.2 Σφάλματα μέτρησης (measurement errors)...145 7.5.3 Σφάλματα παράστασης (representation errors)...145 7.5.4 Σφάλματα υπολογισμών...146 Aσκήσεις 7.1...150 Προγράμματα 7...151 Απαντήσεις 7.1...153 ΚΕΦΑΛΑΙΟ 8 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ... 157 8.1 Εισαγωγή...157 8.2 Συναρτήσεις που ορίζονται από το χρήστη...159 Ασκήσεις 8.1...165 8.3 Διαδικασίες που ορίζονται από το χρήστη...166 8.4 Μηχανισμοί περάσματος (μεταβίβασης) παραμέτρων (parameter passing mechanisms)171 8.4.1 Τύποι παραμέτρων...171 8.4.2 Κανόνες πεδίων επιρροής ή εμβέλειας (scope rules)...172 Ασκήσεις 8.2...174 Προγράμματα 8...176 Απαντήσεις 8.1...176 Aπαντήσεις 8.2...178 ΚΕΦΑΛΑΙΟ 9 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ... 181 9.1 Σχεδιασμός και ανάπτυξη προγραμμάτων...181 9.2 Χρήση υποπρογραμμάτων σε μεγάλα προγράμματα...183 9.2.1 Εργαλεία...184 Ασκήσεις 9.1...184 9.2.2 Φίλτρα...184 Ασκήσεις 9.2...184 9.3 Υλοποίηση και δοκιμή προγραμμάτων...185 9.3.1 Από πάνω προς τα κάτω δοκιμή (Top-down testing)...186

xii Δομημένος Προγραμματισμός με Pascal 9.3.2 Από κάτω προς τα πάνω δοκιμή (Bottom-up testing)...188 9.4 Παραγωγή ψευδοτυχαίων αριθμών...190 Ασκήσεις 9.3...192 9.5 Στυλ προγραμματισμού...192 Προγράμματα 9...196 Απαντήσεις 9.1...198 Απαντήσεις 9.2...200 Απαντήσεις 9.3...202 ΜΕΡΟΣ II ΔΟΜΗΜΕΝΟΙ ΤΥΠΟΙ ΚΑΙ ΕΦΑΡΜΟΓΕΣ... 205 ΚΕΦΑΛΑΙΟ 10 ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ... 209 10.1 Εισαγωγή...209 10.2 Ο τύπος array...210 Ασκήσεις 10.1...215 10.3 Aντικείμενα τύπου array...217 10.3.1 Συμβατότητα εκχώρησης...217 10.3.2 Πίνακες ως παράμετροι υποπρογραμμάτων...218 Ασκήσεις 10.2...219 Πρoγράμματα 10...221 Απαντήσεις 10.1...223 Απαντήσεις 10.2...225 ΚΕΦΑΛΑΙΟ 11 ΣΥΜΒΟΛΟΣΕΙΡΕΣ ΚΑΙ ΠΙΝΑΚΕΣ ΠΕΡΙΣΣΟΤΕΡΩΝ ΤΗΣ ΜΙΑΣ ΔΙΑΣΤΑΣΕΩΝ... 229 11.1 Πυκνωμένοι πίνακες...229 11.2 Συμβολοσειρές...231 Ασκήσεις 11.1...234 11.3 Πίνακες δύο διαστάσεων...235 Ασκήσεις 11.2...237 Ασκήσεις 11.3...239

Περιεχόμενα xiii 11.4 Πολυδιάστατοι πίνακες...239 Ασκήσεις 11.4...242 Προγράμματα 11...243 Απαντήσεις 11.1...244 Απαντήσεις 11.2...247 Απαντήσεις 11.3...249 Απαντήσεις 11.4...250 ΚΕΦΑΛΑΙΟ 12 ΕΓΓΡΑΦΕΣ... 251 12.1 Eγγραφές...251 12.2 Η εντολή with...254 12.3 Αντικείμενα τύπου record...255 Aσκήσεις 12.1...256 12.4 Πυκνωμένες εγγραφές...256 12.5 Σύνθετες δομές...257 12.6 Εγγραφές με παραλλαγές...263 Απαντήσεις 12.1...269 ΚΕΦΑΛΑΙΟ 13 ΣΥΝΟΛΑ... 273 13.1 Eισαγωγή...273 13.2 Ορισμοί, δηλώσεις και εκχώρηση...273 13.3 Τελεστές και παραστάσεις...275 13.3.1 Παραστάσεις τύπου boolean...275 13.3.2 Παραστάσεις τύπου set...277 Ασκήσεις 13.1...280 13.4 Νόμοι της άλγεβρας των συνόλων...281 Προγράμματα 13...282 Aπαντήσεις 13.1...283

xiv Δομημένος Προγραμματισμός με Pascal KEΦΑΛΑΙΟ 14 ΑΚΟΛΟΥΘΙΑΚΑ ΑΡΧΕΙΑ... 289 14.1 Αρχεία...289 14.2 Ακολουθιακά αρχεία στην Pascal...291 14.3 Ενταμιευτές αρχείων...293 14.4 Aρχεία χαρακτήρων...296 14.5 Ιδιομορφίες υλοποιήσεων και πιθανά σφάλματα...299 Aσκήσεις 14.1...301 Προγράμματα 14...302 Απαντήσεις 14.1...303 ΚΕΦΑΛΑΙΟ 15 ΕΦΑΡΜΟΓΕΣ Ι... 309 15.1 Εργαλεία και φίλτρα...309 15.2 Εσωτερική ταξινόμηση...310 15.3 Eξωτερική ταξινόμηση...311 15.4 Κωδικοποίηση...313 15.5 Εμπορικές εφαρμογές...314 15.6 Δημοκρατικές διαδικασίες...316 15.7 Οικολογία...317 15.8 Στατιστική...318 15.9 Λογιστική...323 Απαντήσεις 15.1...324 Απαντήσεις 15.2...327 Απαντήσεις 15.3...329 Απαντήσεις 15.4...331 Απαντήσεις 15.5...332 Απαντήσεις 15.6...334 Απαντήσεις 15.7...334 Απαντήσεις 15.8...335 Απαντήσεις 15.9...335

Περιεχόμενα xv ΚΕΦΑΛΑΙΟ 16 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΩΣ ΠΑΡΑΜΕΤΡΟΙ... 339 16.1 Υποπρογράμματα ως παράμετροι...339 Ασκήσεις 16.1...342 16.2 Aναδρομικά υποπρογράμματα...344 Ασκήσεις 16.2...349 16.3 H συνάρτηση του Ackerman...350 16.4 Αμοιβαία αναδρομή...351 Προγράμματα 16...352 Aπαντήσεις 16.1...354 Απαντήσεις 16.2...356 ΚΕΦΑΛΑΙΟ 17 ΔΕΙΚΤΕΣ ΚΑΙ ΛΙΣΤΕΣ ΜΕ ΣΥΝΔΕΣΗ... 361 17.1 Η έννοια του δείκτη...361 17.2 Δείκτες στην Pascal...363 17.2.1 Προκαθορισμένες διαδικασίες και η προκαθορισμένη σταθερά nil...364 17.2.2 Εντολές εκχώρησης...365 17.2.3 Συγκρίσεις...366 17.2.4 Άλλες δυνατότητες...367 17.3 Γραμμικές λίστες με σύνδεση...369 17.3.1 Δημιουργία κενής λίστας...371 17.3.2 Eισαγωγή ενός στοιχείου στην κεφαλή (αρχή) μιας λίστας...371 17.3.3 Εισαγωγή ενός στοιχείου σε μια λίστα...372 17.3.4 Διαγραφή του στοιχείου που βρίσκεται στην κεφαλή μιας λίστας...373 17.3.5 Διαγραφή ενός ορισμένου στοιχείου μιας λίστας...373 Ασκήσεις 17.1...374 17.4 Oικονομία χώρου...376 Πρoγράμματα 17...377 Απαντήσεις 17.1...379

xvi Δομημένος Προγραμματισμός με Pascal ΚΕΦΑΛΑΙΟ 18 ΕΙΣΑΓΩΓΗ ΣΤΗΝ TURBO PASCAL... 387 18.1 H εντολή goto...387 Παράδειγμα 18.1...388 18.1.1 Κανόνες πεδίων επιρροής...389 18.1.2 Χρήση και κατάχρηση των εντολών goto...391 18.2 Σύμμορφα σχήματα πινάκων...393 18.3 Άλλοι περιορισμοί της Pascal...395 18.4 Ο τύπος string...396 18.4.1 Ορισμοί, δηλώσεις και εκχώρηση...397 18.4.2 Συγκρίσεις...397 18.4.3 Προκαθορισμένες συναρτήσεις και διαδικασίες...397 18.4.4 Eίσοδος και έξοδος αντικειμένων τύπου string...399 18.4.5 Συμβολοσειρές ως παράμετροι υποπρογραμμάτων...400 Ασκήσεις 18.1...400 18.5 Άμεση προσπέλαση αρχείων...401 18.6 Άλλοι τύποι αριθμών...403 18.7 Διαδικασίες μετατροπής μεταξύ αριθμών και συμβολοσειρών...404 Ασκήσεις 18.2...404 Προγράμματα 18...405 Απαντήσεις 18.1...405 Απαντήσεις 18.2...407 ΚΕΦΑΛΑΙΟ 19 ΕΦΑΡΜΟΓΕΣ ΙΙ... 409 19.1 Δομές δεδομένων...409 19.2 Ανάλυση κειμένων...411 19.3 (Επ)Ανάκτηση πληροφοριών...412 19.4 Εργαλεία και φίλτρα...412 19.5 Αναζήτηση (Searching)...414 19.6 Μορφοποίηση Κειμένων (Text Formatting)...415 19.7 Επιχειρησιακή Έρευνα (Operations Research)...416

Περιεχόμενα xvii 19.8 Τεχνητή Νοημοσύνη (Artificial Intelligence)...418 19.9 Διάφορες εφαρμογές*...419 Απαντήσεις 19.1...424 Απαντήσεις 19.2...427 Απαντήσεις 19.3...428 Απαντήσεις 19.4...429 Απαντήσεις 19.5...433 Απαντήσεις 19.6...435 Απαντήσεις 19.7...437 Απαντήσεις 19.8...440 ΚΕΦΑΛΑΙΟ 20 ΑΝΤΙΚΕΙΜΕΝΑ ΚΑΙ ΕΦΑΡΜΟΓΕΣ ΤΟΥΣ... 443 20.1 Αντικείμενα...443 20.2 Κληρονομικότητα...446 20.3 Η παράμετρος self...450 20.4 Αντικειμενοστρεφής Προγραμματισμός...452 20.5 Μονάδες...453 20.6 Ιδεατές μέθοδοι και πολυμορφισμός...458 20.7 Εφαρμογές του αντικειμενοστρεφούς προγραμματισμού...464 20.7.1 Δομές Δεδομένων...464 20.7.2 Οπτικές εφαρμογές (Visual Applications)...466 20.7.3 "Ζωντανά" Γραφικά (Animated Graphics)...467 20.7.4 Τεχνητή Νοημοσύνη...468 20.7.5 Αντικειμενοστρεφείς Σχεσιακές Βάσεις Δεδομένων...469 ΠΑΡΑΡΤΗΜΑ Α ΕΙΣΑΓΩΓΗ ΣΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ UNIX... 471 Α.1 Προκαταρκτικά...471 Α.1.1 Σύνδεση...471

xviii Δομημένος Προγραμματισμός με Pascal Α.1.2 Αποσύνδεση...472 Α.1.3 Χαρακτήρες πληκτρολογίων...472 Α.2 Απλές εντολές...472 Α.2.1 Η εντολή cat...473 Α.2.2 Η εντολή ls...475 Α.2.3 Μετακίνηση αρχείων...476 Α.2.4 Αντιγραφή αρχείων...477 Α.2.5 Διαγραφή αρχείων και ευρετηρίων...477 Α.2.6 Δημιουργία νέων ευρετηρίων...477 Α.2.7 Οι εντολές pwd και cd...477 Α.2.8 Αλλαγή των δικαιωμάτων προσπέλασης αρχείων και ευρετηρίων...478 Α.3 Φλοιός (Shell)...478 Α.3.1 Σωλήνες και φίλτρα...479 Α.3.2 Εκτύπωση Αρχείων...482 Α.3.3 Ταίριασμα χαρακτήρων (pattern matching, "wild cards")...482 Α.4 ed - Ο βασικός συντάκτης του UNIX...483 A.4.1 Αρχή της διαλογικής επικοινωνίας με τον ed...484 A.4.2 Επιπρόσθεση κειμένου...484 A.4.3 Αποταμίευση κειμένου...485 A.4.4 Τέλος της διαλογικής επικοινωνίας με τον ed...486 A.4.5 Σύνταξη με βάση τις γραμμές του κειμένου (line editing)...486 A.4.6 Σύνταξη με βάση τα συμφραζόμενα (context editing)...493 Α.4.7 Οι εντολές u και!...498 A.5 Μεταγλώττιση και εκτέλεση προγραμμάτων Pascal...498 ΠΑΡΑΡΤΗΜΑ Β ΟΙ ΚΥΡΙΟΤΕΡΕΣ ΕΝΤΟΛΕΣ ΤΩΝ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ UNIX, MS-DOS KAI VAX/VMS...501 ΠΑΡΑΡΤΗΜΑ Γ ΠΙΝΑΚΑΣ ΤΩΝ ΧΑΡΑΚΤΗΡΩΝ ΤΟΥ ΚΩΔΙΚΑ ASCII ΚΑΙ Η ΕΠΕΚΤΑΣΗ ΤΟΥ ΓΙΑ ΤΟΥΣ ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ IBM PC ΚΑΙ ΤΟΥΣ ΣΥΜΒΑΤΟΥΣ ΤΟΥΣ ΣΤΗΝ ΕΛΛΑΔΑ... 507

Περιεχόμενα xix ΠΑΡΑΡΤΗΜΑ Δ ΜΑΘΗΜΑΤΙΚΕΣ ΣΤΑΘΕΡΕΣ...509 BIBΛΙΟΓΡΑΦΙΑ... 511 Ξένη Βιβλιογραφία...511 Ελληνική Βιβλιογραφία...513 ΕΥΡΕΤΗΡΙΟ ΟΡΩΝ... 515 ΕΥΡΕΤΗΡΙΟ ΞΕΝΩΝ ΟΝΟΜΑΤΩΝ... 535 ΣΥΝΤΟΜΟΓΡΑΦΙΕΣ... 536

ΚΕΦΑΛΑΙΟ 1 ΠΡΟΓΡΑΜΜΑΤΑ, ΔΕΔΟΜΕΝΑ ΚΑΙ ΤΥΠΟΙ Επιτέλους, ανακάλυψα ότι όλα τα πράγματα είχαν ονόματα. Μετά άρχισα να διερωτάμαι γιατί είχαν τα ονόματα που είχαν. Όταν τελικά εγκατέλειψα την προσπάθεια αυτή, τότε άρχισα ν αναγνωρίζω τον κόσμο και να προσπαθώ να επικοινωνήσω με τους άλλους με τις λέξεις που άκουγα κι είχα μάθει να ξεχωρίζω. "¼ôáí ñçóéìïðïéþ ìéá ëýîç," åßðå ï Humpty Dumpty, óå ìüëëïí ëåõáóôéêü ôüíï, "óçìáßíåé ü,ôé åãþ ôçí åðéëýãù íá óçìáßíåé. ôßðïôá ðåñéóóüôåñï Þ ëéãüôåñï." Lewis Carroll, Through the Looking-Glass Èá ôá êüíáìå ìïýóêåìá, åüí ôá êüíáìå ìáæß. ÂëÝðåéò, åßìáóôå äéáöïñåôéêïß ôýðïé. 1.1 Προγράμματα εξόδου Το παρακάτω είναι ένα απλό πρόγραμμα της Pascal που, αν γνωρίζετε αγγλικά, μπορείτε ίσως να καταλάβετε τη σημασιολογία του. program hello (output); {τυπώνει Hello there} begin write(output,'hello there'); (1.1) writeln (output) end {hello}. Η πρώτη λέξη κάθε προγράμματος της Pascal είναι η ειδική ή δεσμευμένη λέξη (reserved word) program που σημαίνει πρόγραμμα. [Για να είναι ευανάγνωστα τα προγράμματά μας, οι ειδικές λέξεις θα είναι τυπωμένες συχνά με μαύρο τύπο γραμμάτων ή υπογραμμισμένες ή γραμμένες με κεφαλαία γράμματα, σ αυτό το βιβλίο. Όταν πληκτρολογούνται ή εμφανίζονται στο τερματικό, θα είναι με κεφαλαία ή με μικρά γράμματα, ανάλογα με το τι μας προσφέρει το πληκτρολόγιο]. Η επόμενη λέξη είναι το όνομα του προγράμματος. Το όνομα του προγράμματος (1.1) είναι hello. Στην επιστήμη των υπολογιστών, τα ονόματα ονομάζονται αναγνωριστικά (identifiers) και εκλέγονται από τους προγραμματιστές με τέτοιο τρόπο, ώστε να δηλώνουν τη σημασία του αφηρημένου αντικειμένου (abstract object), που αντιπροσωπεύουν. Θα μπορούσατε να εκλέξετε ως όνομα του προγράμματος (1.1) ένα από τα αναγνωριστικά: SALUTE first GeiaSas prog1pas P007

32 Δομημένος Προγραμματισμός με Pascal Είναι ίσως φανερό ότι αν εκλέγατε το αναγνωριστικό SALUTE ή το GeiaSas, η εκλογή σας θα ήταν περισσότερο επιτυχής από του να εκλέγατε ένα από τα αναγνωριστικά first, prog1pas ή P007. Ανεξάρτητα από την επιλογή σας, ένα αναγνωριστικό (όνομα) πρέπει ν αρχίζει μ ένα γράμμα του λατινικού αλφαβήτου, που μπορεί ν ακολουθείται μ ένα ή περισσότερα γράμματα του (λατινικού) αλφαβήτου ή ψηφία. Ο παραπάνω συντακτικός κανόνας (syntax rule) έχει εκφρασθεί στην Ελληνική γλώσσα και χρειάζεται να συμπληρωθεί με προτάσεις που εξηγούν τι είναι τα γράμματα του αλφαβήτου (της Pascal, εννοείται) και τι είναι τα ψηφία. Επειδή περιγραφές αυτής της μορφής μπορεί να είναι μακροσκελείς, ο John Backus επινόησε μια μεταγλώσσα (metalanguage), δηλαδή μια γλώσσα που μπορεί να χρησιμοποιηθεί για να περιγράψει (συνοπτικά) μια άλλη γλώσσα. Η γλώσσα αυτή χρησιμοποιήθηκε πρώτα από τον Peter Naur για την περιγραφή της γλώσσας ALGOL 60 (βλ. Κεφ. 0.3.2) κι έτσι καθιερώθηκε ως BNF (Backus-Naur Form). Αργότερα επεκτάθηκε από άλλους επιστήμονες και στη νέα της μορφή είναι γνωστή ως Extended Backus-Naur Form (EBNF). Στην BNF ο παραπάνω συντακτικός κανόνας γράφεται ως εξής: <αναγνωριστικό> ::= <γράμμα>{<γράμμα> <ψηφίο>} Παρατηρούμε ότι η BNF περιγραφή της σύνταξης ενός αναγνωριστικού είναι κατά πολύ συντομότερη της ελληνικής περιγραφής. Αυτό οφείλεται στο ότι η BNF χρησιμοποιεί μόνο τέσσερα μετασύμβολα (metasymbols), τα εξής: μετασύμβολο σημασία ::= ορίζεται ως <...> η συντακτική κατηγορία... ή (διαζευκτικό) {...} μηδέν ή περισσότερες φορές ότι περικλείεται στα άγκιστρα { και }. Μπορούμε τώρα να περιγράψουμε τη σύνταξη των γραμμάτων και των ψηφίων: <γράμμα> ::= A B C D E F G Η Ι J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z <ψηφίο> ::= 0 1 2 3 4 5 6 7 8 9 Ένας άλλος τρόπος περιγραφής των συντακτικών κανόνων, που είναι ίσως περισσότερο παραστατικός, είναι τα συντακτικά διαγράμματα. Τα διαγράμματα αυτά είναι προσανατολισμένα γραφήματα με ένα σημείο εισόδου κι ένα σημείο εξόδου. Κάθε πλήρης διαδρομή του γραφήματος ορίζει μια επιτρεπτή ακολουθία συμβόλων. Έτσι, οι παραπάνω κανόνες για τα αναγνωριστικά και τα ψηφία μπορούν να περιγραφούν με τα συντακτικά διαγράμματα:

Προγράμματα, δεδομένα και τύποι 33 αναγνωριστικό γράμμα γράμμα ψηφίο ψηφίο 0 1 2 3 4 5 6 7 8 9 [Το συντακτικό διάγραμμα για τα γράμματα αφήνεται ως άσκηση για τον αναγνώστη, γιατί ο συντακτικός κανόνας τους είναι βαρετός σ οποιαδήποτε γλώσσα κι αν περιγραφεί. Αν όλα αυτά σας έχουν λίγο μπερδέψει, μην ανησυχείτε. Θα συνηθίσετε. Ας επιστρέψουμε όμως στο πρόγραμμά μας.] Μετά το όνομα του προγράμματος ακολουθούν οι παράμετροί (parameters) του μέσα σε παρενθέσεις. Οι παράμετροι ενός προγράμματος προσδιορίζουν από πού αυτό παίρνει τα δεδομένα του και πού στέλνει τ αποτελέσματά του. Εφόσον το πρόγραμμά μας τυπώνει, χρησιμοποιείται η λέξη output (έξοδος) που προσδιορίζει ότι τ αποτελέσματά του θα σταλούν στην οθόνη του τερματικού μας. [Αν το πρόγραμμά μας χρειάζονταν και να διαβάσει, τότε οι παράμετροί του θα ήταν input, output όπου η λέξη input (είσοδος) προσδιορίζει ότι τα δεδομένα του προγράμματος θα παρθούν από το πληκτρολόγιο του τερματικού μας (βλ. και Κεφ. 5.2)]. Η πρώτη γραμμή του προγράμματός μας ονομάζεται επικεφαλίδα (heading) και διαχωρίζεται από το υπόλοιπο πρόγραμμα με μια αγγλική άνω τελεία (;). Η επόμενη γραμμή περιέχει ένα σχόλιο. Το σχόλιο (comment) είναι μια ακολουθία χαρακτήρων που περικλείεται μεταξύ των α- γκίστρων { και } και περιγράφει τι κάνει το πρόγραμμα. Τα σχόλια αγνοούνται από το μεταγλωττιστή κι έτσι, αν το πληκτρολόγιό μας μας το επιτρέπει, ίσως μπορούν να γραφούν στα ελληνικά. Μερικά πληκτρολόγια δεν έχουν όμως ούτε τις αγκύλες {και}. Για το λόγο αυτό, η Pascal μας επιτρέπει να γράψουμε σχόλια και μεταξύ των συμβόλων (* και *). Επειδή τα (* και *) στην πραγματικότητα παριστάνουν ένα μόνο σύμβολο, δεν πρέπει να υπάρχει κανένα κενό διάστημα μεταξύ των παρενθέσεων και των αστερίσκων. Τα σχόλια μπορούν, και πολλές φορές χρειάζεται, να επεκτείνονται σε περισσότερες της μιας γραμμής. Έτσι, τα παρακάτω είναι επιτρεπτά σχόλια. {τυπώνει hello there γράφτηκε στις 26/10/87 από το Γ. Κ.} ή (* prints hello there *) MåôÜ την επικεφαλίδα και το σχόλιο του προγράμματος ακολουθεί ο κορμός (block) του, που αποτελείται από το μέρος ορισμών και δηλώσεών του και από το μέρος των εντολών του.

34 Δομημένος Προγραμματισμός με Pascal Στο πρόγραμμα αυτό δε χρειάζονται ορισμοί και δηλώσεις κι έτσι μπορούμε να εξετάσουμε κατευθείαν το μέρος των εντολών του (γνωστό καμιά φορά ως σώμα (body) του προγράμματος). Το μέρος των εντολών ενός προγράμματος αρχίζει με την ειδική λέξη begin (που σημαίνει άρχισε) και τελειώνει με την ειδική λέξη end (που σημαίνει τέλειωσε). Μεταξύ των δύο αυτών ειδικών λέξεων μπορούν να υπάρχουν εντολές που διαχωρίζονται μεταξύ τους με άνω τελεία (;). Οι εντολές αυτές εκτελούνται όταν το πρόγραμμα εκτελεστεί ή "τρέξει" στον υπολογιστή. Στο παράδειγμά μας υπάρχουν δύο εντολές. Η εντολή: write (output, 'Hello there') που γράφει (write) στην έξοδο (output) ότι βρίσκεται ανάμεσα στις αποστρόφους ' και ' όπως α- κριβώς είναι. Η writeln (output) αλλάζει γραμμή (γράφει μια νέα γραμμή (line)) στην έξοδο. Η ειδική λέξη end στο τέλος του προγράμματος πρέπει ν ακολουθείται μ ένα σχόλιο που απλά περιέχει το όνομα του προγράμματος και μια τελεία (.). Αφού γράψουμε το πρόγραμμα στην Pascal χρειάζεται να το μεταγλωττίσουμε. Ο μεταγλωττιστής αγνοεί τα σχόλια του προγράμματος, αντικαθιστά τις ειδικές λέξεις με δικά του ειδικά σύμβολα και τέλος μεταφράζει το πρόγραμμα στη γλώσσα της μηχανής που πρόκειται να εκτελέσει το πρόγραμμα αυτό. Έτσι, αν η μεταγλώττιση είναι επιτυχής και εκτελέσουμε το παραπάνω πρόγραμμα, θα πρέπει να πάρουμε στην οθόνη του τερματικού μας το μήνυμα: Hello there Είναι ίσως φανερό ότι αν θέλαμε να πάρουμε στην οθόνη τα μηνύματα: Hello there! Hello my friend hello. How are you? τότε θα έπρεπε να ετοιμάσουμε (με το συντάκτη), να μεταγλωττίσουμε και να εκτελέσουμε το παρακάτω πρόγραμμα: program manyhellos (output); {τυπώνει πολλά χαιρετίσματα} begin write (output, 'Hello there'); write (output, '! Hello my friend hello.'); writeln (output); write (output, 'How are you?'); writeln (output) end {manyhellos}. Τελειώνοντας θα μπορούσαμε να περιγράψουμε τη σύνταξη (syntax) ενός προγράμματος της Pascal με τους παρακάτω κανόνες της BNF: <πρόγραμμα> ::= <επικεφαλίδα προγράμματος> ; <κορμός προγράμματος>.

Προγράμματα, δεδομένα και τύποι 35 <επικεφαλίδα προγράμματος> ::= program <αναγνωριστικό> (<παράμετροι προγράμματος>) <κορμός προγράμματος> ::= <μέρος ορισμών και δηλώσεων> <μέρος εντολών> <μέρος εντολών> ::= <σύνθετη εντολή> <σύνθετη εντολή> ::= begin <εντολή> {;<εντολή>} end <παράμετροι προγράμματος> ::= <αναγνωριστικό> {,<αναγνωριστικό>} ή με τα παρακάτω συντακτικά διαγράμματα: πρόγραμμα program αναγνωριστικό ( παράμετροι προγράμματος ) κορμός προγράμματος. κορμός προγράμματος μέρος ορισμών και δηλώσεων μέρος εντολών μέρος εντολών σύνθετη εντολή σύνθετη εντολή begin εντολή end ; παράμετροι προγράμματος αναγνωριστικό, Είναι ίσως φανερό ότι οι κανόνες αυτοί θα μπορούσαν να διατυπωθούν με διάφορους (ισοδύναμους) τρόπους. [Για παράδειγμα, θα μπορούσε να παραλειφθεί η "σύνθετη εντολή", αλλά θα τη συμπεριλάβουμε, γιατί θα μας είναι χρήσιμη αργότερα]. Σ όλες τις περιπτώσεις η σημασιολογία (semantics) του προγράμματος είναι η ίδια: Η εκτέλεση των εντολών γίνεται ακολουθιακά (η κάθε εντολή εκτελείται με τη σειρά) αρχίζοντας από την πρώτη εντολή (αυτή που ακολουθεί το πρώτο begin του προγράμματος) και τελειώνοντας στην τελευταία (αυτή που προηγείται του τελευταίου end του προγράμματος). AóêÞóåéò 1.1 1. Ποια από τα παρακάτω αναγνωριστικά είναι ορθά; Εξηγείστε γιατί τα υπόλοιπα δεν είναι.

36 Δομημένος Προγραμματισμός με Pascal (α) omega (â) prog.2 (γ) 5Bez710K (δ) NaCl (ε) H2SO4 (ζ) Backus-Naur (η) εφθ(θ) (θ) begin (ι) Jaws 3 2. Γράψτε παραδείγματα προτάσεων, που μπορούν να παραχθούν από τους παρακάτω συντακτικούς κανόνες. <πρόταση>::= <υποκείμενο> <ρήμα> <αντικείμενο>. <υποκείμενο>::= <άρθρο1>{<επίθετο1>}<ουσιαστικό1> <αντικείμενο>::= <άρθρο2>{<επίθετο2>}<ουσιαστικό2> <επίθετο1>::= μεγάλος μικρός χοντρός λιγνός άγριος <ουσιαστικό1>::= ελέφαντας ποντικός τίγρης άνθρωπος <ρήμα>::= έφαγε σκότωσε είδε <ουσιαστικό2>::= ελέφαντα ποντικό τίγρη καρπό άνθρωπο <επίθετο2>::= μεγάλο μικρό χοντρό λιγνό ήρεμο <άρθρο1>::= Ï <άρθρο2>::= τον 3. Μια αμαξοστοιχία αποτελείται από μια μηχανή, ένα οποιοδήποτε πλήθος βαγονιών α' θέσης, ένα βαγόνι εστιατόριο ή ένα βαγόνι μπαρ, τουλάχιστον ένα βαγόνι β' θέσης και τελειώνει μ ένα βαγόνι αποσκευών. Σχεδιάστε ένα συντακτικό διάγραμμα, που περιγράφει τη δομή μιας τέτοιας αμαξοστοιχίας. 4. Σχεδιάστε ένα συντακτικό διάγραμμα, που να ορίζει ακριβώς και μόνο τη Ρωμαϊκή παράσταση των αριθμών από 1 ως 10, δηλαδή I, II, III, IV, V, VI, VII, VIII, IX, X. 5. Γράψτε συντακτικούς κανόνες στη BNF, που να παράγουν χημικούς τύπους της μορφής: H4, NaCl, H2O, (C2H2)4CLi2 1.2 Δεδομένα (Data) Tá δεδομένα παριστάνουν πληροφορίες που πρέπει να δοθούν σ ένα πρόγραμμα. Το πρόγραμμα επεξεργάζεται τις πληροφορίες αυτές για να παράγει αποτελέσματα. Τα δεδομένα προέρχονται από το εξωτερικό περιβάλλον (συσκευές εισόδου) ή τη βοηθητική μνήμη (συσκευές μαγνητικών δίσκων ή μαγνητικών ταινιών) του υπολογιστή. Αντιπροσωπεύουν γεγονότα, παρατηρήσεις, μετρήσεις, ιδέες για τον κόσμο κ.ά.. Τα ζωντανά όντα αναγνωρίζουν δεδομένα σε εικόνες, κείμενα, ομιλίες κ.ά., μέσω των αισθήσεών τους. Οι ηλεκτρονικοί υπολογιστές αναγνωρίζουν μόνο κείμενα, δηλαδή ακολουθίες χαρακτήρων, που ανήκουν σε κάποιο σύνολο χαρακτήρων (για παράδειγμα το ASCII, βλ. Κεφ.

Προγράμματα, δεδομένα και τύποι 37 5.1) 1. Το πλήθος των χαρακτήρων αυτών είναι περιορισμένο και περιλαμβάνει συνήθως τα γράμματα του λατινικού αλφαβήτου, τα δεκαδικά ψηφία, τα σημεία στίξης και μερικά μαθηματικά και άλλα σύμβολα. Τα δεδομένα έχουν κάποιον τύπο (type) που ορίζει τη σημασία τους, το σύνολο των τιμών (values) που μπορούν να πάρουν και περιορίζει το τι μπορεί να γίνει μ αυτές τις τιμές. Η Pascal υποστηρίζει τέσσερις βασικούς απλούς τύπους (simple types) δεδομένων, που ονομάζονται integer, char, boolean και real. Οι τιμές αυτών των τύπων ανήκουν σε (γνήσια) υποσύνολα των ακεραίων, των χαρακτήρων (συμβόλων), της αλήθειας και του ψέματος και των πραγματικών αριθμών αντίστοιχα. Η Pascal εφαρμόζει αυστηρό έλεγχο των τύπων (strongly typed), δηλαδή επιτρέπει πολύ σπάνια την ανάμειξη δεδομένων διαφόρων τύπων. Έτσι, στην Pascal, δεν μπορεί (κι ούτε έχει νόημα) να γίνει ο πολλαπλασιασμός ενός δεδομένου τύπου integer μ ένα δεδομένο τύπου char. Μερικά από τα δεδομένα που χρησιμοποιούνται σ ένα πρόγραμμα δεν αλλάζουν ποτέ. Τα δεδομένα αυτά μπορούν να παρασταθούν με σταθερές (constants). Οι σταθερές στην Pascal ορίζονται με τη γραφή του (συμβολικού) ονόματος (αναγνωριστικού) τους, του συμβόλου "=" και της τιμής τους. Για παράδειγμα, evdomadesxronou = 52 Όλοι οι ορισμοί των σταθερών (constant definitions) ενός προγράμματος ακολουθούν την επικεφαλίδα (και το κύριο σχόλιο) του και αρχίζουν με την ειδική λέξη const. Για παράδειγμα οι ορισμοί: const meresergasias = 5; asteriskos = '*'; alnthia = true; pi = 3.14159265368 ορίζουν τέσσερις σταθερές των τύπων integer, char, boolean και real αντίστοιχα. Ο ορισμός μιας σταθεράς δίνει ένα όνομα σε μια τιμή [Ο μεταγλωττιστής, κατά τη διάρκεια της μεταγλώττισης ενός προγράμματος, αντικαθιστά όλα τα ονόματα των σταθερών του προγράμματος με τις αντίστοιχες τιμές τους]. ëëá δεδομένα υπόκεινται σε αλλαγή. Για παράδειγμα, σ ένα πρόγραμμα ή σ έναν υ- πολογιστή τσέπης που προσθέτει αριθμούς, το τρέχον άθροισμα μεταβάλλεται κάθε φορά που προστίθεται σ αυτό ένας νέος αριθμός. Δεδομένα αυτής της μορφής παριστάνονται με μεταβλητές (variables). Οι μεταβλητές αυτές, όπως και τα πλήκτρα μνήμης των υπολογιστών τσέπης, παριστάνουν θέσεις της κύριας μνήμης του υπολογιστή. Έτσι, όταν θ αναφερόμαστε στην "τιμή μιας μεταβλητής" θα εννοούμε στην πραγματικότητα τα περιεχόμενα της θέσης της μνήμης, που αντιστοιχεί στη μεταβλητή αυτή. Σε αντίθεση με τους υπολογιστές τσέπης, οι ψηφιακοί υπολογιστές μας επιτρέπουν να χρησιμοποιήσουμε όσες μεταβλητές χρειαζόμαστε και να τις ονομάσουμε, όπως μας βολεύει (δε μας περιορίζουν σε ονόματα όπως Μ, STO1 κ.λπ. που χρησιμοποιούν οι υπολογιστές τσέπης). 1 Όπως και στην περίπτωση των ανθρώπων, τα δεδομένα δεν αντιπροσωπεύουν ακριβώς το φυσικό κόσμο. Παρέχουν απλά προσεγγιστικά μοντέλα τμημάτων αυτού.

38 Δομημένος Προγραμματισμός με Pascal Μια μεταβλητή δημιουργείται κατά την εκτέλεση του προγράμματος με τη δήλωσή της. Η δήλωση πρέπει να περιλαμβάνει το όνομα της μεταβλητής και τον τύπο της. Αυτό γίνεται γράφοντας το αναγνωριστικό της μεταβλητής, το σύμβολο ":" και τον τύπο της. Για παράδειγμα, akeraios: integer Όλες οι δηλώσεις των μεταβλητών (variable declarations) ενός προγράμματος, ακολουθούν τους ορισμούς των σταθερών του (αν αυτοί υπάρχουν) και αρχίζουν με την ειδική λέξη var, για παράδειγμα: var merokamato: integer; aktina, peripheria, emvadon: real; simiostixis: char; vrethike, petixe: boolean Παρατηρούμε ότι σε αντίθεση με τους ορισμούς των σταθερών που έχουν συντακτικό διάγραμμα: ορισμός σταθεράς αναγνωριστικό = σταθερά οι δηλώσεις των μεταβλητών μπορούν να περιλαμβάνουν περισσότερα του ενός αναγνωριστικά πριν από το ":". Έτσι το συντακτικό τους διάγραμμα είναι: δήλωση μεταβλητής αναγνωριστικό : τύπος, Θα υποθέσουμε προς το παρόν ότι οι τύποι είναι οι απλοί τύποι integer, char, boolean και real. Η δήλωση μιας μεταβλητής αντιστοιχίζει απλά το αναγνωριστικό της με τη διεύθυνση μιας θέσης της μνήμης του υπολογιστή και περιγράφει τον τύπο των τιμών που μπορούν να αποθηκευτούν στη θέση αυτή. Όταν δημιουργηθεί μια μεταβλητή (μέσω της δήλωσής της), η τιμή της είναι αόριστη (undefined). Αυτό σημαίνει ότι η τιμή της είναι ίση με την τιμή που τυχαίνει να περιέχει η αντίστοιχη θέση της μνήμης του υπολογιστή τη στιγμή που δημιουργείται η μεταβλητή. Σχηματικά οι παραπάνω δηλώσεις δίνουν την παρακάτω εικόνα της μνήμης του υπολογιστή:.. merokamato aktina peripheria emvadon simiostixis vrethike petixe. αόριστη τιμή τύπου integer αόριστη τιμή τύπου real αόριστη τιμή τύπου real αόριστη τιμή τύπου real αόριστη τιμή τύπου char αόριστη τιμή τύπου boolean αόριστη τιμή τύπου boolean.

Προγράμματα, δεδομένα και τύποι 39 íá πολύ κοινό σφάλμα των προγραμματιστών είναι η χρήση αόριστων μεταβλητών στις εντολές του σώματος ενός προγράμματος. Είναι φανερό ότι αν συμβαίνει αυτό, τ αποτελέσματα του προγράμματος θα είναι απροσδιόριστα. Οι μεταβλητές ενός προγράμματος παίρνουν τιμές ή μέσω εντολών εκχώρησης ή μέσω διαδικασιών, όπως θα δούμε στα παρακάτω. 1.3 Εντολές εκχώρησης Η εντολή εκχώρησης έχει σύνταξη : <εντολή εκχώρησης> ::= <αναγνωριστικό> := <παράσταση> όπου η παράσταση που βρίσκεται στο δεξί μέλος του ειδικού συμβόλου := πρέπει να είναι του ιδίου τύπου με τον τύπο της μεταβλητής που βρίσκεται στο αριστερό μέλος αυτού. Η σημασιολογία της εντολής είναι: "Υπολόγισε την τιμή της παράστασης, που βρίσκεται στο δεξί μέλος της εντολής και αποθήκευσέ (εκχώρησέ) την στη θέση (διεύθυνση), που προσδιορίζει η μεταβλητή του αριστερού μέλους της εντολής". Παραδείγματα, περιλαμβάνουν τα εξής: aktina:= 3.0; peripheria:= 2*pi*aktina; simiostixis:= '!'; merokamato:= 5000*meresergasias; vrethike:= alnthia Η εκτέλεση μιας εντολής εκχώρησης αλλάζει την τιμή της μεταβλητής που βρίσκεται στο αριστερό μέλος της εντολής. Η τιμή που είχε η μεταβλητή αυτή πριν την εκτέλεση της εντολής εκχώρησης χάνεται για πάντα. Οι τιμές των μεταβλητών που βρίσκονται στο δεξί μέλος της εντολής δεν αλλάζουν (εκτός αν μια από αυτές βρίσκεται και στο αριστερό μέρος της εντολής). Όλες οι μεταβλητές μιας εντολής εκχώρησης πρέπει να έχουν δηλωθεί. Όλες οι μεταβλητές, που βρίσκονται στο δεξί μέλος μιας εντολής εκχώρησης πρέπει οπωσδήποτε να έχουν ήδη πάρει (ορισμένες) τιμές.

40 Δομημένος Προγραμματισμός με Pascal Πρέπει να σημειώσουμε ότι παρόλη τη φαινομενική τους ομοιότητα, οι ορισμοί των σταθερών και οι εντολές εκχώρησης διαφέρουν ριζικά. Οι πρώτοι είναι στατικοί: δίνουν ένα όνομα σε μια σταθερή τιμή κατά τη διάρκεια της μεταγλώττισης του προγράμματος και δεν έχουν καμία σχέση με την εκτέλεση του προγράμματος. Αντίθετα, οι εντολές εκχώρησης είναι δυναμικές. Κάθε φορά που εκτελείται μια τέτοια εντολή από τον υπολογιστή (κατά το χρόνο εκτέλεσης του προγράμματος), η τιμή που εκχωρείται στη μεταβλητή μπορεί να διαφέρει. Για το λόγο αυτό, χρησιμοποιείται ο τελεστής := αντί του =. Τελειώνοντας πρέπει να αναφέρουμε ότι: α) ο τύπος μιας μεταβλητής καθορίζει το σύνολο των τιμών, που αυτή μπορεί να πάρει, β) κάθε δεδομένο έχει έναν και μόνο ορισμένο τύπο, γ) ο τύπος μιας μεταβλητής εξαρτάται από τη δήλωσή της και όχι από τις τιμές, που μπορεί να πάρει κατά τη διάρκεια της εκτέλεσής της, δ) κάθε τελεστής χρειάζεται τελεστέους του ιδίου (συνήθως) τύπου και δίνει αποτελέσματα του τύπου αυτού êáé ε) μια παράσταση μπορεί να είναι μια σταθερά, μια μεταβλητή, μια συνάρτηση ή ένας συνδυασμός σταθερών, μεταβλητών και συναρτήσεων μέσω κατάλληλων τελεστών. Ο αναγνώστης θα πρέπει να είναι τώρα σε θέση να καταλάβει το παρακάτω πρόγραμμα: program athroisma (output); {βρίσκει το άθροισμα δύο ορισμένων ακεραίων} var a, b, c: integer; begin a:= 357; b:= -186; c:= a + b; (1.2) write (output, 'to athroisma twv 357 kai -186'); write (output, 'einai iso me ',c); writeln (output) end {athroisma}. Προγράμματα 1 1. Γράψτε ένα πρόγραμμα, που να τυπώνει τα παρακάτω σχήματα, το ένα δίπλα στ άλλο. Αλλάξτε το πρόγραμμά σας έτσι ώστε να τυπώνει τα σχήματα το ένα πάνω από το άλλο. Μήπως η ευκολία της αλλαγής του προγράμματός σας εξαρτάται από τον τρόπο που το έχετε γράψει;

Προγράμματα, δεδομένα και τύποι 41 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 2. Γράψτε ένα πρόγραμμα, που να τυπώνει τα αρχικά σας με "μεγάλα" κεφαλαία γράμματα. Για παράδειγμα, αν το πρόγραμμα γραφόταν από εμένα, τότε θα έπρεπε να τυπώνει: * * * * * * * * * * * * * * * * * * * * 3. Γράψτε ένα πρόγραμμα, που να τυπώνει το όνομα και τη διεύθυνσή σας όπως θα τη γράφατε σ ένα φάκελο. Χρησιμοποιήστε τα περιεχόμενα του αρχείου που ετοιμάσατε με το συντάκτη στο Πρόγραμμα 0.1. AðáíôÞóåéò 1.1 1. Ορθά είναι τα (α), (δ) και (ε). (β) περιέχει μια τελεία (γ) αρχίζει με ψηφίο (ζ) περιέχει μια παύλα (η) περιέχει ελληνικά γράμματα (θ) οι ειδικές λέξεις της Pascal δεν μπορούν να χρησιμοποιηθούν ως αναγνωριστικά (γι αυτό και ονομάζονται "δεσμευμένες") (ι) περιέχει ένα κενό διάστημα. 2. Ο ελέφαντας έφαγε τον καρπό. Ο μεγάλος ελέφαντας σκότωσε τον τίγρη. Ο μικρός ποντικός είδε τον άνθρωπο. Ο χοντρός ποντικός έφαγε τον λιγνό ελέφαντα. κ.ο.κ..

42 Δομημένος Προγραμματισμός με Pascal 3. αμαξοστοιχία μηχανή βαγόνι μπαρ βαγόνι α θέσης βαγόνι β θέσης εστιατόριο βαγόνι αποσκευών 4. Ι ΙΙ ΙΙΙ ΙV V VI VII VIII IX X 5. <χημικός τύπος> ::= <μέρος τύπου>{<μέρος τύπου>} <μέρος τύπου> ::= <στοιχείο>{<ακέραιος>} (<χημικός τύπος>)<ακέραιος> <στοιχείο> ::= Η Ηe Li Βe B C κ.λπ., όλα τα 108 στοιχεία του περιοδικού πίνακα των στοιχείων.