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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8 FORTRAN 77/90/95/2003

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μονάδες 12 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

- program p_name(output); - uses crt;

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Σκοπός. Εργαστήριο 5 Εντολές Επιλογής

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΚΑΙ ΕΞΕΤΑΣΤΕΑ ΥΛΗ. ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Με τις Γλώσσες Προγραμματισμού Pascal, C, C++, Java

Computing. Νοέμβριος Έκδοση 1.0

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

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

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

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

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

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

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Ένα πρώτο πρόγραμμα ΔΟΜΗ TOY ΠΡΟΓΡΑΜΜΑΤΟΣ. Τι σημαίνουν οι εντολές. Από τι αποτελείται ένα πρόγραμμα

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

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

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ-ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΠΑΛ- ΚΑΝΙΓΓΟΣ 13- ΤΗΛ

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

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

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

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 Όπως και στην περίπτωση των ανθρώπων, τα δεδομένα δεν αντιπροσωπεύουν ακριβώς το φυσικό κόσμο. Παρέχουν απλά προσεγγιστικά μοντέλα τμημάτων αυτού.