Σπουδαίες ιδέες στην Επιστήµη των Υπολογιστών



Σχετικά έγγραφα
Α. Ερωτήσεις Ανάπτυξης

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραµµατισµός Ι (ΗΥ120)

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

Οδηγίες για τη διδασκαλία µαθηµάτων Πληροφορικής του Ενιαίου Λυκείου

1

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

Μητρώο Τεκµηρίων Εκπαιδευτή ΕΝΟΤΗΤΑ/ΣΤΟΙΧΕΙΟ E/15 ΑΝΑΦΟΡΑ ΧΑΡΤΟΦΥΛΑΚΙΟΥ 15 ΕΚΠΑΙ ΕΥΤΗΣ Χρίστου Χρίστος

Κωδικοποίηση δένδρων απόφασης

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

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

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

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

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

Σύνοψη Θεωρίας ΟΡΙΣΜΟΣ ΚΑΙ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΑΛΓΟΡΙΘΜΩΝ

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

Άξονας ανάπτυξης του µαθήµατος 3. Γενικός σκοπός του µαθήµατος. Το µάθηµα της Πληροφορικής στο Γυµνάσιο

Διδάσκων:Μ.Χατζόπουλος, Παραδόσεις:Τρίτη 4-6, Τετάρτη 1-3; (Αμφιθέατρο Α15) Πληροφορίες στην ιστοσελίδα του μαθήματος

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

Περιεχόμενα. Ανάλυση προβλήματος. Δομή ακολουθίας. Δομή επιλογής. Δομή επανάληψης. Απαντήσεις. 1. Η έννοια πρόβλημα Επίλυση προβλημάτων...

Αγαπητές/οί συνάδελφοι, σε αυτό το τεύχος σας προτείνουµε µερικά ενδιαφέροντα βιβλία που αφορούν βασικές αρχές της Συµβουλευτικής.

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

ΠΛΗΡΟΦΟΡΙΚΗ ΣΤΟ ΕΝΙΑΙΟ ΛΥΚΕΙΟ

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

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗ

Γνωστική Ψυχολογία: Οι ανώτερες γνωστικές διεργασίες

ΠΛΗΡΟΦΟΡΙΚΗ ΣΤΟ ΕΝΙΑΙΟ ΛΥΚΕΙΟ

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

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

6. Εισαγωγή στον προγραµµατισµό

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

Α ΤΑΞΗ. 1 η ΕΝΟΤΗΤΑ: Γνωρίζω τον υπολογιστή. Θα παρουσιαστεί µε τρόπο απλό και κατανοητό,

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

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

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

Τμήμα Μηχανικών Πληροφορικής & Υπολογιστών

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

κεφάλαιο Βασικές Έννοιες Επιστήμη των Υπολογιστών

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

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

ΠΕΡΙΓΡΑΜΜΑ ΜΑΘΗΜΑΤΟΣ. Τμήμα Μηχανικών Οικονομίας και Διοίκησης ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ ΓΕ0175 ΕΞΑΜΗΝΟ ΣΠΟΥΔΩΝ 9

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

Πρόλογος των Συγγραφέων

Βοηθήστε τη ΕΗ. Ένα µικρό νησί απέχει 4 χιλιόµετρα από την ακτή και πρόκειται να συνδεθεί µε τον υποσταθµό της ΕΗ που βλέπετε στην παρακάτω εικόνα.

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

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

Κεφ. 1: Εισαγωγή στην έννοια του Αλγορίθμου και στον Προγραμματισμό. Η έννοια του προβλήματος

Εισαγωγή στην έννοια του Αλγορίθμου

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

Διδακτική Προγραμματισμού. Χαρίκλεια Τσαλαπάτα 20/2/2012

Γεώργιος Φίλιππας 23/8/2015

Εφαρμογές Προσομοίωσης

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

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

Η διάρκεια πραγματοποίησης της ανοιχτής εκπαιδευτικής πρακτικής ήταν 2 διδακτικές ώρες

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕ ΟΝΙΑΣ

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

Περιεχόµενα. Πληροφοριακά Συστήµατα: Κατηγορίες και Κύκλος Ζωής. Π.Σ. ιαχείρισης Πράξεων. Π.Σ. ιοίκησης. Κατηγορίες Π.Σ. Ο κύκλος ζωής Π.Σ.

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

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

6 Εισαγωγή στα Συστήματα Ηλεκτρικής Ενέργειας

Γεωµετρία Β' Λυκείου. Συµµεταβολή µεγεθών. Εµβαδόν ισοσκελούς τριγώνου. Σύστηµα. συντεταγµένων. Γραφική παράσταση συνάρτησης. Μέγιστη - ελάχιστη τιµή.

ΚΡΥΠΤΟΓΡΑΦΙΑ Α. ΑΠΟ ΤΟ ΒΙΒΛΙΟ «Η ΦΥΣΗ ΚΑΙ Η ΔΥΝΑΜΗ ΤΩΝ ΜΑΘΗΜΑΤΙΚΩΝ»

Θεωρητικές αρχές σχεδιασµού µιας ενότητας στα Μαθηµατικά. Ε. Κολέζα

ΠΛΗΡΟΦΟΡΙΚΗ ΣΤΟ ΕΝΙΑΙΟ ΛΥΚΕΙΟ

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

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

Ασαφής Λογική Παράδειγµα. Νίκος Καραδήµας

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

Συγγραφή Τεχνικών Κειμένων

Ανάλυση Απαιτήσεων Απαιτήσεις Λογισµικού

Αριθμητική Ανάλυση & Εφαρμογές

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

Προσφερόμενα Διπλώματα (Προσφερόμενοι Τίτλοι)

Εκτίμηση Αξιολόγηση της Μάθησης

Ανάπτυξη εφαρµογών σε προγραµµατιστικό περιβάλλον (στοιχεία θεωρίας)

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 1 ο

Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD

Εισαγωγή στην Επιστήµη των Η/Υ

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Πληροφορική (BSc & MSc)

Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις

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

Transcript:

Alan W. Biermann Σπουδαίες ιδέες στην Επιστήµη των Υπολογιστών Μια προσιτή εισαγωγή Μετάφραση - Επιστηµονική επιµέλεια: Στ. Νικολόπουλος Λ. Παληός Πανεπιστηµιακές Εκδόσεις Κρήτης Ιδρυτική δωρεά Παγκρητικής Ενώσεως Αµερικής Ηράκλειο 2008

ΠΑΝΕΠΙΣΤΗΜΙΑΚΕΣ ΕΚ ΟΣΕΙΣ ΚΡΗΤΗΣ Ι ΡΥΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΡΕΥΝΑΣ Ηράκλειο Κρήτης: Τ.Θ. 1527, 711 10. Τηλ. 2810-391083, 2810 391097, Fax: 2810-391085 Αθήνα: Μάνης 5, 106 81. Τηλ. 210-3849020-22. Fax: 210-3301583 e-mail: info@cup.gr www.cup.gr ΣΕΙΡΑ: ΠΑΝΕΠΙΣΤΗΜΙΑΚΗ ΒΙΒΛΙΟΘΗΚΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ Διευθυντές Σειράς: Γεώργιος Φρ. Γεωργακόπουλος, Ιωάννης Παπαδόγγονας Τίτλος πρωτοτύπου: c 1990, 1997: c για την ελληνική γλώσσα: Μετάφραση - Επιστηµονική επιµέλεια: Επιµέλεια κειµένου, σελιδοποίηση, επιµέλεια έκδοσης: Στοιχειοθεσία: Εφαρµογή L A TEX: Σχεδίαση σχηµάτων: Σχεδίαση εξωφύλλου: Great Ideas in Computer Science. A Gentle Introduction, 2nd edition Massachusetts Institute of Technology MIT Press 1997, Πανεπιστηµιακές Εκδόσεις Κρήτης Σταύρος Νικολόπουλος, Λεωνίδας Παληός Ιωάννης Παπαδόγγονας (ΠΕΚ) Σοφία Βλάχου David James McClurkin Νίκος αλαµάγκας Θεόδωρος Μίχος Βάσω Αβραµοπούλου ISBN 978-960-524-232-9

Στους γονείς µου, David και Ruth Biermann

Περιεχόµενα Πρόλογος µεταφραστών - επιµελητών Πρόλογος δεύτερης έκδοσης Πρόλογος xi xiii xv Πανεπιστηµιακές σπουδές στην ΕπιστήµηΥπολογιστών: Μια εισαγωγή xix Φήµες... xix ΣπουδέςστηνΕπιστήµη Υπολογιστών... xx Ειδικό λογισµικό για τη διευκόλυνση της µελέτης... xxi Μια προσέγγιση για αναγνώστες µε περιορισµένο µαθηµατικό υπόβαθρο... xxii 1 Εισαγωγήστον προγραµµατισµό: Κωδικοποίηση δένδρων απόφασης 1 1.1 Καλάνέα (A)..... 1 1.2 ένδρα απόφασης(b)... 2 1.3 Ταπρώτα βήµατα στον προγραµµατισµό (B).... 7 1.4 Ανάγνωση και αποθήκευσηδεδοµένων(b)... 12 1.5 Προγραµµατισµός δένδρων απόφασης(b)... 18 1.6 Ο συµβολισµός βέλουςκαι οι χρήσειςτου (C)... 27 1.7 Σύνοψη(B)... 32 2 ιαχ είρισηκειµένου και σχεδίαση αλγορίθµων 35 2.1 Τιείναι ηδιαχείριση κειµένου; (A)... 35 2.2 Σχεδίαση αλγορίθµων και προγραµµάτων για διαχείριση κειµένου (B). 37 2.3 Τύποι δεδοµένων: συµβολοσειρές και ακέραιοι (B)........... 41 2.4 Περισσότερα γιατηδιαχείριση κειµένου (B).... 44 2.5 Προγραµµατισµός λειτουργιών επεξεργασίας κειµένου (B)....... 49 2.6 Πρώτες προσπάθειες χρήσης βρόχων (B)... 53 2.7 Κατασκευή του επεξεργαστή κειµένου (B)..... 55 2.8 Σχεδίασηενόςπρογράµµατοςσυνοµιλίας (C)... 61 2.9 Σύνοψητης TurboPascal (C)... 63 2.10 Σύνοψη (B)... 65 3 Αριθµητικοίυπολογισµοί και µελέτη συναρτήσεων 67 3.1 Υπολογισµός αριθµητικών ποσοτήτων(a)... 67 3.2 Απλοί υπολογισµοί(b)... 68 3.3 Συναρτήσεις (B).... 75 3.4 Επαναληπτικοί βρόχοι και µελέτησυναρτήσεων(b).... 77 3.5 Εύρεση βέλτιστης τιµής(b)... 81 3.6 Καταχώριση πληροφοριών σε πίνακες(b)... 85

viii Περιεχόµενα 3.7 Υπολογισµός αθροισµάτων, ελαχίστων και µεγίστων (B)........ 91 3.8 Πρότυπα κώδικα (B).... 95 3.9 Τοποθέτηση πραγµάτων σε σειρά και ένα ιδιαίτερο χαρακτηριστικό των συναρτήσεων (B)... 97 3.10 Τοποθέτηση των συναρτήσεωνσεσειρά (C).... 98 3.11 Σύνοψη (B)...100 4 Καθοδικός προγραµµατισµός, υποπρογράµµατα, εφαρµογή βάσης δεδοµένων 103 4.1 Ένα αστυνοµικό πρόβληµα (A).....103 4.2 Καθοδικός προγραµµατισµός και ένα πρόγραµµα βάσης δεδοµένων (B) 104 4.3 Υποπρογράµµατα (B)...107 4.4 Υποπρογράµµατα µε εσωτερικές µεταβλητές (B).....113 4.5 Υποπρογράµµατα µε πίνακες ως παραµέτρους (B).....116 4.6 Παραδείγµατα επικοινωνίας υποπρογραµµάτων (B)........... 119 4.7 Αποθήκευση και εκτύπωση των γεγονότων µιας βάσης δεδοµένων (B). 122 4.8 Αναπαράσταση ερωτήσεων και εύρεση των απαντήσεών τους (B)... 124 4.9 Σύνθεση του προγράµµατος βάσης δεδοµένων και προσθήκη σχολίων (B)129 4.10 Μια άλλη εφαρµογή: σχεδίαση εικόνας µε την Pascal (C)........ 134 4.11 Αναδροµή (C)...142 4.12 Αντικειµενοστρεφής προγραµµατισµός (C)...147 4.13 Σύνοψη (B)...151 5 Προσοµοίωση 155 5.1 Προβλέποντας τοµέλλον(a)...155 5.2 Κερδίζοντας έναν αγώνα ταχύτητας αυτοκινήτων (B).......... 156 5.3 Αποφεύγονταςένανλοιµό (C)...160 5.4 Παρατηρώντας την εξέλιξηενόςείδους(c)... 163 5.5 Τιµορφή θα έχει;(c)....166 5.6 Σύνοψη(A)...170 6 Τεχ νολογία λογισµικού 173 6.1 Ο πραγµατικόςκόσµος(a)....173 6.2 ιδάγµατα από προγραµµατιστικά έργα µεγάλης κλίµακας (B)..... 174 6.3 Μεθοδολογίεςτεχνολογίας λογισµικού (B).....176 6.4 Ο κύκλος ζωής ενός προγράµµατος(b).... 180 6.5 Σύνοψη(B)...183 7 Ηλεκτρικά κυκλώµατα 185 7.1 Πώς λειτουργούνοιυπολογιστές;(a)...185 7.2 Η δοµή του υπολογιστή(b)...186 7.3 Κυκλώµατα υπολογισµού απλών συναρτήσεων (B)........... 187 7.4 Κυκλώµατα υπολογισµού σύνθετων συναρτήσεων (B)...192 7.5 Ηλεκτρονόµοι(B)...197 7.6 Τοδυαδικό σύστηµααρίθµησης (B)... 199 7.7 Τα κυκλώµατα για την πρόσθεση δύο ψηφίων (B)...203 7.8 Τοκύκλωµα πρόσθεσης(b)...206 7.9 Αποθήκευση αλφαριθµητικών χαρακτήρων στη µνήµη (C)....... 210 7.10 Τρανζίστορ και ολοκλήρωση πολύ µεγάλης κλίµακας (B)........ 211 7.11 Σύνοψη (B)...212

Περιεχόµενα ix 8 Αρχ ιτεκτονική υπολογιστών 215 8.1 Η δοµή ενός υπολογιστή (A)...215 8.2 Παράδειγµα αρχιτεκτονικής: ο υπολογιστής P88 (B)....217 8.3 Προγραµµατίζοντας τονυπολογιστήp88 (B)...219 8.4 Σύνοψη(B)...224 9 Μεταγλώττιση 227 9.1 «Μεταφράζοντας» την Pascal στη γλώσσα του υπολογιστή (A)....227 9.2 Συντακτικοί κανόνεςπαραγωγής(b)...228 9.3 Απόδοση σηµασιολογικού περιεχοµένου στους κανόνες παραγωγής (B) 233 9.4 Η σηµαντική της Pascal (B)...235 9.5 Η µεταγλώττιση προγραµµάτων που περιέχουν βρόχους (C)...... 243 9.6 Γλώσσες προγραµµατισµού (B).....250 9.7 Σύνοψη(B)...255 10 Εικονικά υπολογιστικά περιβάλλοντα 261 10.1 Χρησιµοποιήστε τηφαντασία σας (A).....261 10.2 Ένα εικονικό υπολογιστικό περιβάλλον (B)... 264 10.3 Τουλισµικό (A)....268 10.4 Τολειτουργικό σύστηµα(b)...269 10.5 Ο χρονοµερισµός ενδράσει (B)...274 10.6 Αρχεία (B)....278 10.7 Εξερευνώντας τοσύστηµα αρχείων (B).... 281 10.8 Ο διερµηνέας εντολών (B).... 282 10.9 ιεκδίκηση µνήµηςκαι σελιδοποίηση (C)... 285 10.10 Σύνοψη (B)...287 11 Επικοινωνία υπολογιστών 291 11.1 Οι δυνατότητεςπου παρέχειτο ιαδίκτυο (A)...291 11.2 Στρώµατα καιτοπικάδίκτυα (B)... 292 11.3 ίκτυα ευρείας περιοχής(b)...295 11.4 Το στρώµα του διαδικτυακού πρωτοκόλλου(b)...296 11.5 Περισσότερα γιατηδιευθυνσιοδότηση(c)...297 11.6 Άλλες εφαρµογές (A)....298 11.7 Εξερευνώντας το ιαδίκτυο (A)...299 11.8 Προβλήµατα (C)...300 11.9 Σύνοψη (B)...302 12 Χρόνος εκτέλεσης προγράµµατος 305 12.1 Περιορισµοί στην επιστήµη των υπολογιστών (A)............ 305 12.2 Χρόνος εκτέλεσης προγράµµατος(a)...306 12.3 Ευχερείς υπολογισµοί (B)....307 12.4 υσχερείς υπολογισµοί(b)....313 12.5 Μερικά πρακτικά προβλήµατα µε πολύ δαπανηρές λύσεις (B)..... 316 12.6 Αναγνώριση ευεπίλυτων και δυσεπίλυτων προβληµάτων (B)...... 321 12.7 Προσεγγιστικές λύσεις σε δυσεπίλυτα προβλήµατα (C)......... 323 12.8 Σύνοψη(B)...324 13 Παράλληλοι υπολογισµοί 327 13.1 Χρησιµοποιώντας πολλούς επεξεργαστές µαζί (A)...327 13.2 Παράλληλοιυπολογισµοί (B)...328 13.3 Επικοινωνία µεταξύεπεξεργαστών(b).... 332 13.4 Παράλληλοι υπολογισµοί σε κορεσµένο υπολογιστή(b)....337 13.5 Παραλλαγές στην αρχιτεκτονική του παράλληλου υπολογιστή (B)... 339

x Περιεχόµενα 13.6 Πολυσυνδετική αρχιτεκτονική(c).... 341 13.7 Εκµάθηση βαρών σε πολυσυνδετικές µηχανές (C)...347 13.8 Σύνοψη(B)...352 14 Μη επιλυσιµότητα 355 14.1 εν αρκείηταχύτητα (A)....355 14.2 Ύπαρξη µηυπολογίσιµων συναρτήσεων (B).... 355 14.3 Προγράµµατα που διαβάζουν προγράµµατα (B)...360 14.4 Επίλυση του προβλήµατος τερµατισµού (B).... 363 14.5 Παραδείγµατα µη επιλύσιµων προβληµάτων (B)...367 14.6 Απόδειξηµηεπιλυσιµότητας (C).... 371 14.7 Σύνοψη(B)...374 15 Τεχνητή νοηµοσύνη 377 15.1 Τοόραµα (A).....377 15.2 Αναπαράστασητης γνώσης (B).....379 15.3 Κατανόηση(B)....381 15.4 Εκµάθηση(B)...386 15.5 Πλαίσια (B)...390 15.6 Μια εφαρµογή: επεξεργασία φυσικής γλώσσας (B)....392 15.7 Συλλογισµός (B)...398 15.8 Παίγνια (B)...407 15.9 Παίγνια: Παρατηρήσεις ιστορικού χαρακτήρα (C)............ 412 15.10 Έµπειρα συστήµατα (B).....414 15.11 Σηµερινή κατάσταση Προοπτικές(B).... 420 15.12 Σύνοψη (A)...425 Παράρτηµα Α 427 Παράρτηµα Β 431 Βιβλιογραφία 437 Ευρετήριο 439

Πρόλογος µεταφραστών - επιµελητών Με χαρά παρουσιάζουµε, µέσω των Πανεπιστηµιακών Εκδόσεων Κρήτης, το βιβλίο µε τίτλο Σπουδαίεςιδέες στην Επιστήµη των Υπολογιστών: Μια προσιτή εισαγωγή,πουαποτελεί την ελληνική µετάφραση του βιβλίου Great Ideas in Computer Science: A Gentle Introduction,τουAlanW.Biermann. Το βιβλίο καλύπτει µε απλό, κατανοητό, αλλά ταυτόχρονα και επιστηµονικό τρόπο τους κυριότερους τοµείς µελέτης της επιστήµης των υπολογιστών, οι οποίοι έχουν συµβάλει στην έως τώρα εξελικτική της πορεία και αποτελούν τη βάση για την περαιτέρω ανάπτυξη και παρουσία της στον χώρο των επιστηµών του µέλλοντος. Παρουσιάζονται οι θεµελιώδεις ιδέες της επιστήµης και καλύπτονται τοµείς όπως οι γλώσσες προγραµ- µατισµού και η δηµιουργία µεταγλωττιστών, η αρχιτεκτονική υπολογιστών, η θεωρία αλγορίθµων και οι επεκτάσεις της σε όλο το υπολογιστικό φάσµα, τα δίκτυα υπολογιστών, τα κατανεµηµένα συστήµατα πληροφοριών και βάσεων δεδοµένων, οι παράλληλοι υπολογισµοί και η λειτουργία των παραλλήλων υπολογιστών, η αυτοµατοποίηση του τυπικού συλλογισµού και της λογικής, η τεχνητή νοηµοσύνη. Το βιβλίο απευθύνεται σε διδάσκοντες και φοιτητές πανεπιστηµιακών και πολυτεχνικών τµηµάτων πληροφορικής και σε φοιτητές τµηµάτων θετικών και οικονοµικών σχολών. Επιπρόσθετα, λόγωτου ιδιαίτερου τρόπου αντιµετώπισης των επιστηµονικών θεµάτων που πραγµατεύεται, µπορεί κάλλιστα να αποτελέσει βασικό εγχειρίδιο για φοιτητές θεωρητικών επιστηµών, αλλά και χρήσιµο οδηγό για οποιονδήποτε επιθυµεί να προσεγγίσει µε απλό τρόπο την επιστήµη των υπολογιστών. Το εγχείρηµα της µετάφρασης και της επιστηµονικής επιµέλειας ενός τεχνικού εγχειριδίου δεν είναι εύκολο έργο.το έργο αυτό γίνεται ακόµη πιο δύσκολο όταν τεχνικές έννοιες περιγράφονται και επεξηγούνται σε ένα απλουστευµένο πλαίσιο µάθησης και µεταφοράς της γνώσης. Ένα τέτοιοέργο είχαµε να φέρουµε εις πέρας και εµείς. Εργαστήκαµε µε γνώµονα να µεταφέρουµε πιστά το πνεύµα του συγγραφέα, και να αποδώσουµε µε δόκιµους αλλά και εύχρηστους όρους την ορολογία του πρωτοτύπου θα έχουµε επιτύχει εάν η προσπάθειά µας συµβάλει στην ευρύτερη και καλύτερη κατανόηση των πεδίων της επιστήµης των υπολογιστών. Θα θέλαµε να ευχαριστήσουµε θερµά τον ιευθυντή των Πανεπιστηµιακών Εκδόσεων Κρήτης, κ. Στέφανο Τραχανά, για την ανάθεση του έργου, καθώς και όλους όσους εργάστηκαν για την έκδοση αυτή. Σταύρος. Νικολόπουλος Λεωνίδας Παληός Ιωάννινα, Μάιος 2007

Πρόλογος δεύτερης έκδοσης Ηδεύτερηαυτή έκδοση του βιβλίου περιλαµβάνει νέα κεφάλαια σχετικά µε την προσο- µοίωση, τα λειτουργικά συστήµατα και τα δίκτυα. ύο κεφάλαια της αρχικής έκδοσης, τα οποία αφορούσαν τη θεωρία τρανζίστορ και την ολοκλήρωση πολύ µεγάλης κλίµακας, έχουν παραληφθεί, ενώ πολλά από τα αρχικά κεφάλαια έχουν αναθεωρηθεί. Το έργο αυτό είναι προϊόν συλλογικής και πολυετούς προσπάθειας, στην οποία έχουν συµβάλει αρκετοί συντελεστές. Πολλές διευκρινήσεις προτάθηκαν από φίλους, διδάσκοντες, και µεταπτυχιακούς φοιτητές που συµµετείχαν στη διδασκαλία του µαθήµατος. Θα ήθελα να ευχαριστήσωιδιαίτερα τον Dietolf Ramm, ο οποίος συνέταξε το κεφάλαιο σχετικά µε τα δίκτυα. Σηµαντική ήτανεπίσης η συµβολή των Eric Anderson,Curry Guinn, Mark Holliday, Sally Mason, Peter Wu, Mimi Lee, Benjamin Hardekopf, καθώς και των ανώνυµων κριτών που επιλέχθηκαν από τον εκδοτικό οίκο. Το συνοδευτικό λογισµικό αναπτύχθηκε από τους Josh Carter, Chris Connelly, Amr Fahmy, Curry Guinn, D.J. Miller, David Pennock, Steve Wolfman, και Peter Wu. Η ανάπτυξη του λογισµικού υποστηρίχθηκε οικονοµικά από το Πανεπιστήµιο Duke και το Εθνικό Ίδρυµα Επιστη- µώντωνηπα (NSF), µέσω των επιχορηγήσεων USE 9155897, DUE 9354643 και DUE 9455507. Θα ήθελα επίσης να ευχαριστήσωθερµά για τη συµβολή τους σε αυτήν την έκδοση την Anna Drozdowski, διαχειρίστρια των υπολογιστικών συστηµάτων του Τµήµατός µας επί σειρά ετών, και την πάντα ενθουσιώδη βοηθό µου Denita Thomas, η οποία σχεδίασε πολλά από τα σχήµατα και στοιχειοθέτησε πολλά από τα κεφάλαια του βιβλίου.

Πρόλογος Το βιβλίο αυτό αφορά τους υπολογιστές τι είναι, πώς λειτουργούν, τι µπορούν και τι δεν µπορούν να κάνουν. Απευθύνεται σε αναγνώστες που θέλουν να είναι σε θέση να κατανοούν θέµατα που αφορούν, π.χ., τα δίκτυα υπολογιστών ή την τεχνητή νοηµοσύνη, σε αναγνώστες των οποίων η εργασία απαιτεί επεξεργασία δεδοµένων και θέλουν να γνωρίζουν τις σχετικές δυνατότητες των υπολογιστών,καθώς και σεαναγνώστες πουπαρατηρούν την ευρύτατη διείσδυση των υπολογιστών σε όλες τις πτυχές της κοινωνικής ζωής και αναρωτιούνται για τις ενδεχόµενες επιπτώσεις της. Απευθύνεται σε γιατρούς, δικηγόρους, κληρικούς, εκπαιδευτικούς, στελέχη επιχειρήσεων, σπουδαστές, και όλους όσους έχουν την περιέργεια να γνωρίσουν τους υπολογιστές. Απευθύνεται επίσης σε φοιτητές της επιστήµης υπολογιστών, αλλά και σε επαγγελµατίες του κλάδου αυτού των οποίων ηβασικήεκπαίδευσηπιθανόν να µην έχει καλύψειόλους τους σηµαντικούς τοµείς του αντικειµένου, και οι οποίοι θα ήθελαν να διευρύνουν τις γνώσεις τους. Όταν το 1985 µου ζητήθηκε να καταστρώσωένα µάθηµα επιστήµης υπολογιστών για φοιτητές ανθρωπιστικών επιστηµών, έκρινα ότι όφειλα να παρουσιάσω όσο καλύτερα µπορούσα τα µεγάλα διανοητικά επιτεύγµατα του συγκεκριµένου κλάδου. Πρόκειται για τις «σπουδαίες ιδέες»πουπροσελκύουντοενδιαφέρονόλωνόσωνπροσεγγίζουν το γνωστικό αυτό αντικείµενο, και που συναποτελούν τον πυρήνα τηςεπιστήµηςυπολογιστών. Ηπρώτηκαιπιοσηµαντική από αυτές τις ιδέες είναι η έννοια του αλγορίθµου µια διαδικασία ή «συνταγή» η οποία µπορεί να δοθεί σε έναν άνθρωπο ή σε µια µηχανή µε σκοπό την εκτέλεση κάποιας εργασίας. Οι υπόλοιπες σπουδαίες ιδέες περιστρέφονται γύρωαπό αυτήν τη θεµελιώδη έννοια παρέχουν µεθόδους για την κωδικοποίηση αλγορίθµων σε µορφή αναγνωρίσιµη από τους υπολογιστές, και περιγράφουν τι µπορεί και τι δεν µπορεί να κωδικοποιηθεί σε µορφή κατάλληλη για να εκτελεστεί από αυτούς. Υποδεικνύουν µε ποιον τρόπο έννοιες της καθηµερινής ζωής µπορούν να αναπαρασταθούν από την ηλεκτρική τάση και το ρεύµα µέσα σε έναν υπολογιστή, και µε ποιον τρόπο µπορούν να κατασκευαστούν µηχανισµοί που να εκτελούν αυτούς τους υπολογισµούς. Επιπλέον, καταδεικνύουν µε ποιον τρόπο µπορούν να µεταφραστούν γλώσσες προσιτές στον άνθρωπο στις γλώσσες πουχρησιµοποιούν οι µηχανές, προκειµένου να αξιοποιηθούν οι δυνατότητες των µηχανών αυτών. Αποκαλύπτουν ακόµη µε ποιον τρόπο «ανθρώπινου» τύπου συλλογιστικές διεργασίες µπορούν να προγραµµατιστούν ώστε να εκτελεστούν από έναν υπολογιστή, και µας βοηθούν να κατανοήσουµε ποιες µπορεί να είναι οι έσχατες δυνατότητες των µηχανών. Πιθανόν αυτές οι σπουδαίες ιδέες να φαίνονται υπερβολικά περίπλοκες και εξειδικευ- µένες για να τις κατανοήσει κάποιος µη ειδικός. Κατάκανόνα, ένας φοιτητής της επιστή- µης υπολογιστών θα πρέπει να µελετήσει επί αρκετά χρόνια µαθηµατικά και µαθήµατα υπολογιστών για να τις εµπεδώσει, και δεν θα έπρεπε να περιµένει κανείς από τον µέσο αναγνώστη να µπορεί να τις κατανοήσει διαβάζοντας ένα και µόνο βιβλίο. Προκειµένου να συµπτυχθεί ένα τέτοιο «πρόγραµµα σπουδών» σε έναν τόµο κατανοητό από κάποιο ευρύτερο αναγνωστικό κοινό, οι βασικές έννοιες έχουν αναδιατυπωθεί σηµαντικά από

xvi Πρόλογος αρκετές πλευρές οι επουσιώδεις λεπτοµέρειες έχουν παραλειφθεί, ενώ και η ορολογία που χρησιµοποιείται έχει επιλεγεί προσεκτικά. Ας εξετάσουµε, παραδείγµατος χάριν, την τυπική ύλη που καλύπτει το µάθηµα του προγραµµατισµού σε ένα πρόγραµµα σπουδών της επιστήµης υπολογιστών. Οι φοιτητές διδάσκονται όλα τα χαρακτηριστικά του συντακτικού κάποιας γλώσσας προγραµµατισµού, πολλές λεπτοµέρειες υλοποίησης και µια πλειάδα εφαρµογών. Καθώς ο διαθέσι- µος χρόνος του µαθήµατος δεν αφήνει περιθώρια για τίποτε άλλο, αυτοί που θα ήθελαν να αποκτήσουν µια ευρύτερη θεώρηση του γνωστικού αντικειµένου, πέραν του αµιγούς προγραµµατισµού, δενέχουναυτήντηδυνατότητα. Στο βιβλίο αυτό, αντίθετα, εισάγονται λίγα µόνο στοιχεία της Pascal, και όλα τα προγράµµατα περιορίζονται σε αυτές τις λίγες δοµές. Καθώς οι περισσότερες και οι σηµαντικότερες έννοιες του προγραµµατισµού µπορούν να διδαχθούν σε αυτό το περιορισµένο πλαίσιο, η σύγχυση που µπορεί να προκαλέσει στον αναγνώστη η µεγάλη ποικιλία στο συντακτικό των γλωσσών προγραµµατισµού µειώνεται. Ένα δεύτερο παράδειγµα αφορά τη σχεδίασηµεταγωγικών κυκλωµάτων, η διδασκαλία της οποίας περιλαµβάνει συνήθως διεξοδική µελέτη της άλγεβρας Boole εξισώσεις, ελαχιστοποίηση και σύνθεση κυκλωµάτων. Εντούτοις, ακόµη και χωρίς καµία αναφορά στην άλγεβρα Boole, ο ενδιαφερόµενος αναγνώστης µπορεί να διδαχθεί τις βασικές αρχές, οι οποίες θα του επιτρέψουν να καταπιαστεί µε ένα πρόβληµα σχεδιασµού, να συντάξει έναν πίνακα αληθείας για την επιθυµητή συµπεριφορά, και να δηµιουργήσει ένα κύκλωµα το οποίο, χωρίς να είναι το ελάχιστο δυνατό, θα εκτελεί τον ζητούµενο υπολογισµό. Το όλο ζήτηµα της ελαχιστοποίησης κυκλώµατων στο οποίο δίνουν τόση έµφαση οι ηλεκτρολόγοι µηχανικοί δεν χρειάζεται να απασχολεί καθόλου τον αναγνώστη που επιθυµεί απλώς να αποκτήσει κάποιες γνώσεις για τους υπολογιστές. Η ίδια προσέγγιση έχει εφαρµοστεί σε όλα τα θέµατα της επιστήµης των υπολογιστών. Έτσι, η γλώσσα προγραµµατισµού Pascalπαρουσιάζεται χω ρίς δείκτες, η µεταγλώττιση κώδικα χωρίς τη βελτιστοποίησή του, η θεωρία υπολογισιµότητας χωρίς τις µηχανές Turing, η τεχνητή νοηµοσύνη χωρίς τη LISP, κ.ο.κ. Ηπροσέγγιση αυτή έχει επιλεγεί ούτως ώστε ο αναγνώστης να µπορέσει, µέσω ενός µόνο βιβλίου, να έλθει σε επαφή µε τον πυρήνα των σπουδαίων ιδεών της επιστήµης υπολογιστών: να µάθει να συντάσσει διάφορα προγράµµατα σε Pascal, να σχεδιάσει µεταγωγικά κυκλώµατα, να µελετήσει αρχιτεκτονικές Von Neumann και παράλληλες αρχιτεκτονικές, να προσοµοιώσει έναν µεταγλωττιστή για να δει πώς λειτουργεί, να εξετάσει τους µηχανισµούς ενός λειτουργικού συστήµατος, να µάθει να χαρακτηρίζει τους διάφορους υπολογισµούς ως ευχερείς και δυσχερείς, να κατανοήσει την έννοια της µη υπολογισιµότητας, και να γνωρίσει πολλές από τις βασικές έννοιες της τεχνητής νοηµοσύνης. Τα πρώτα κεφάλαια πραγµατεύονταιθέµαταπουέχουνστόχονα διεγείρουντο ενδιαφέρον του αναγνώστη, ενώ κάθε κεφάλαιο που αφορά τον προγραµµατισµό ξεκινάει µε ένα υπολογιστικό πρόβληµα, και παρουσιάζει τα θέµατα µελέτης µέσωµιας µεθόδου επίλυσης αυτού του προβλήµατος. Η ορολογία έχειεπίσηςεπιλεγεί ώστε να απευθύνεται στον µέσο αναγνώστη. Παραδείγµατος χάριν, οι επιστήµονες υπολογιστών συνηθίζουν να χρησιµοποιούν στη θέση του όρου «αντιγραφή» («copy») της καθοµιλούµενης τον όρο «µετακίνηση» («move»), ο οποίος ως εκ τούτου είναι πιθανό να προκαλέσει σύγχυση. Για τον λόγο αυτό, η χρήση του συγκεκριµένου όρου έχει αποφευχθεί, εκτός φυσικά από τις περιπτώσεις όπου είναι η µόνη κατάλληλη λέξη. εκάδες άλλοι τέτοιοι συνήθεις όροι που θα µπορούσαν να προκαλέσουν σύγχυση έχουν επίσης αποκλειστεί, ήέχουνοριστείπροσεκτικά στα σηµεία όπου είναι απολύτως αναγκαίοι. Ο µαθηµατικός συµβολισµός δεν θα µπορούσε να αποφευχθεί, αφού είναι τελείως απαραίτητος για τη µελέτη της επιστήµης υπολογιστών. Ωστόσο, τα σχετικά ολιγάριθµα σύµβολα πουεισάγονται εξηγούνται λεπτοµερώς και χρησιµοποιούνται επανειληµµένα, ώστε ακόµη και ο αναγνώστης χωρίς µαθηµατική εµπειρία να µπορέσει να εξοικειωθεί µε αυτά. Τέλος, ο αναγνώστης ίσως να αναρωτηθεί κατά πόσο οι σπουδαίες ιδέες που παρου-

Πρόλογος xvii σιάζονται σε αυτό τοβιβλίοσυµπίπτουνµεεκείνεςπου θα επέλεγαν άλλοι συγγραφείς. Ουσιαστικά, ενώ θα περίµενε κανείς µια κάποια διάσταση απόψεων, υπάρχει αξιοση- µείωτη οµοθυµία όσον αφορά τα «συστατικά στοιχεία» της επιστήµης υπολογιστών. Οι περισσότεροι ειδικοί του κλάδου θα είχαν πιθανότατα συµφωνήσει µε την επιλογή των κεντρικών εννοιών σε αυτό το βιβλίο. Ας εξετάσουµε ενδεικτικά το «γνωστικό πλαίσιο της επιστήµης υπολογιστών», όπως περιγράφεται στην αναφορά της Οµάδας Εργασίας για τον Πυρήνα της Επιστήµης Υπολογιστών (Task Force on the Core of Computer Science) 1 µε τίτλο «Computing as a Discipline» («η υπολογιστική ως επιστηµονικός κλάδος»). Η αναφορά αυτή παρουσιάζει µια γενική εικόνα του κλάδου και περιλαµβάνει υποδείξεις σχετικά µε την εκπαίδευση στην επιστήµη υπολογιστών. Μεταξύ άλλων, η αναφορά περιγράφει τα εξήςεννέα επιµέρους γνωστικά αντικείµενα, τα οποία κατά τους συγγραφείς καλύπτουν τον πυρήνα της επιστήµης: 1. Αλγόριθµοι και δοµές δεδοµένων 2. Γλώσσες προγραµµατισµού 3. Αρχιτεκτονική 4. Αριθµητικοί και συµβολικοί υπολογισµοί 5. Λειτουργικά συστήµατα 6. Τεχνολογία λογισµικού 7. Βάσεις δεδοµένων και συστήµατα ανάκτησης πληροφοριών 8. Τεχνητή νοηµοσύνη και ροµποτική 9. Επικοινωνία ανθρώπου-µηχανής Το βιβλίο πραγµατεύεται σε εισαγωγικό επίπεδο τα περισσότερα από τα γνωστικά αυτά αντικείµενα. Αν και δεν ισχυρίζοµαι ότι τα καλύπτει όλα ισοµερώς και πλήρως, ωστόσο προσεγγίζει την ουσία των περισσότερων από αυτά και παρουσιάζει κάποιες από τις σηµαντικότερες έννοιές τους. Κάποιοι διδάσκοντες ίσως κρίνουν ότι η ύλη του συγγράµατος υπερβαίνει αυτήν που µπορεί να διδαχθεί σε ένα εξαµηνιαίο µάθηµα. Σε αυτήν την περίπτωση, η διδασκαλία µπορεί να περιοριστεί, π.χ. στα πρώτα 2/3 του βιβλίου, και να ολοκληρωθεί µε µία ή δύο διαλέξεις αφιερωµένες σε προχωρηµένα θέµατα στο τέλος του εξαµήνου, ώστε να διαµορφωθεί ένα µάθηµα επικεντρωµένο στον προγραµµατισµό και στον µηχανισµό λειτουργίας του υπολογιστή. Ένας άλλος τρόπος σύµπτυξης της ύλης είναι να παρουσιαστούν τα κυκλώµατα, η αρχιτεκτονική και οι µεταγλωττιστές σε µία ενιαία διάλεξη, και να διατεθούν οι µισές περίπου διαλέξεις για τη µελέτη των κεφαλαίων 10 έως 15. Υπάρχει και ένας τρίτος εναλλακτικός τρόπος διδασκαλίας του βιβλίου, ο οποίος αφορά φοιτητές που έχουν ήδηδιδαχθεί προγραµµατισµό. Σε αυτήν την περίπτωση, η διδασκαλία µπορεί να ξεκινήσει από τοκεφάλαιο 7 και να συνεχιστεί µέχρι το τέλος. Προσωπικά, έχωχρησιµοποιήσειπολλέςπαραλλαγέςαυτών των εναλλακτικών τρόπων διδασκαλίας. Συνήθως παραλείπω την αναδροµή ή τις ενότητες µε την ένδειξη «C» από τα κεφάλαια που αναφέρονται στη µεταγλώττιση και τη µη υπολογισιµότητα, καθώς παρουσιάζουν υψηλότερο βαθµό δυσκολίας για τους φοιτητές µου. Θα ήθελα να εκφράσωτις θερµές µου ευχαριστίες σε όσους συνέβαλαν στην ολοκλήρωση αυτού του βιβλίου. Θέλω πρωτίστως να ευχαριστήσω το Τµήµα Επιστήµης Υπολογιστών του Πανεπιστηµίου Duke, το οποίο µου προσέφερε ένα εξαιρετικό περιβάλλον εργασίας και απεριόριστη υποστήριξη στις ακαδηµαϊκές µου αναζητήσεις κατά τη διάρκεια των τελευταίων είκοσι ετών. Θα ήθελα επίσης να ευχαριστήσω τους εκατοντάδες φοιτητές µου σε αυτό το µάθηµα, οι οποίοι δίδαξαν στον καθηγητή τους ότι δεν ήταν δυνατόν να συµπεριλάβει στο βιβλίο αυτό όλα όσα θα ήθελε. Με έπεισαν ότι, εάν ήθελα το τελικό αποτέλεσµα να είναι κατανοητό, θα έπρεπε να αφαιρέσωµεγάλο µέρος της ύλης που τόσο αγαπούσα, και µε έκαναν να καταλάβωτη σηµασία του λεξιλογίου: 1 Peter J. Denning (Chairman), Douglas E. Comer, David Gries, Michael C. Mulder, Allen Tucher, A. Joe Turner, Paul R. Young, «Computing as a Discipline», Communications of the ACM,τόµος 32, τεύχος 1, Ιανουάριος 1989 επίσης, στο Computer, τόµος 22, τεύχος 2, Φεβρουάριος 1989.

xviii Πρόλογος αν και θεωρούσα ότι οι όροι που χρησιµοποιούσα ήταν απλοί και µη τεχνικοί, ωστόσο αυτοί δεν είχαν το ίδιο νόηµα για τους φοιτητές µου. Όλοι αυτοί οι υποµονετικοί νέοι άνθρωποι έχουν συνεισφέρει στη διαµόρφωση αυτού του βιβλίου όσο και εγώ. Ιδιαίτερα εκτιµώ τις προσπάθειες του Craig Singer, ο οποίος υπήρξε ένας εξαίρετος βοηθός καθηγητού στο µάθηµά µου για δύο χρόνια, και των Michael Hines και Jothy Rosenberg, οι οποίοι δίδαξαν επίσης το µάθηµα. Όλοι τους προσέγγισαν µε ευαισθησία τις δυσκολίες των φοιτητών, και διατύπωσαν εξαιρετικές υποδείξεις για τη βελτίω ση της παρουσίασης της ύλης. Μια προκαταρκτική έκδοση του βιβλίου εστάλη για κριτική ανάγνωση σε καθηγητές άλλων ιδρυµάτων κατά το ακαδηµαϊκό έτος 1987-88. Θα ήθελα να ευχαριστήσω, για τα πολλά χρήσιµα σχόλιά τους, τους Shan Chi (Πανεπιστήµιο Northwestern), David Frisque (Πανεπιστήµιο του Michigan), Rhys Price Jones (Κολέγιο Oberlin), Emily Moore (Κολέγιο Grinnel), Richard E. Pattis (Πανεπιστήµιο της Washington), Harvey Lee Shapiro (Κολέγιο Lewis and Clark), Jill Smudski (τότε στο Πανεπιστήµιο της Pennsylvania), και οκτώ ανώνυµους κριτές. Με βάση αυτές τις κρίσεις και την εµπειρία από τη διδασκαλία στην τάξη, το βιβλίο αναδιοργανώθηκε και γράφηκε εκ νέου. Η νέα µορφή του βιβλίου χρησιµοποιήθηκε για πρώτη φορά στην τάξη το χειµερινό εξάµηνο του ακαδηµαϊκού έτους 1988-89, και θα ήθελα και πάλι να εκφράσωτις ευχαριστίες µου στους φοιτητές µου, οι οποίοι συµπλήρωσαν ερωτηµατολόγια που µε βοήθησαν να εντοπίσω αδύνατα σηµεία στην παρουσίαση των θεµάτων, καθώς και στον βοηθό καθηγητού Albert Nigrin, για τη βοήθειά του. Θα ήθελα επίσης να ευχαριστήσω ιδιαίτερα την Elina Kaplan, η οποία εργάστηκε αµέτρητες ώρες σε κάποια από τα πρώτα κεφάλαια προκειµένου να βρειτρόπουςβελτίωσηςτηςπαρουσίασης.ηόποιααπλότητα και σαφήνεια αυτών των κεφαλαίων οφείλεται εν πολλοίς στην Elina. Πολλοί άλλοι έχουν συµβάλει στο τελικό αποτέλεσµα διαβάζοντας κεφάλαια και προτείνοντας βελτιώσεις. Μεταξύ αυτών συγκαταλέγονται οι Heidi Brubaker, Dania Egedi, Linda Fineman, Chris Gandy, Curry Guinn, Tim Gegg-Harrison, Barry Koster, Anselmo Lastra, Ken Lang, Albert Nigrin, Lorrie Tomek, Tom Truscott και Doreen Yen. Ιδιαίτερα σηµαντικές ήταν οι διορθώσεις και οι υποδείξεις των David M. Gordon, Henry Greenside, Donald Loveland, και Charlie Martin. Πολλοί άλλοι φίλοι διατύπωσαν παρατηρήσεις και σχόλια σε διάφορα κεφάλαια. Το βιβλίο οφείλει κατά µεγάλο µέρος την «προσωπικότητά» του στον Matt Evans, ο οποίος σχεδίασε τα σκίτσα που εµφανίζονται στην αρχή κάθε κεφαλαίου. Εκτιµώ απεριόριστα την προσπάθειά του. Είµαι επίσης υπόχρεος στην Ann Davis, η οποία στοιχειοθέτησε το κείµενο από το χειρόγραφό µου. Η επιµέλεια και η προσοχή που επέδειξε συνέβαλαν σηµαντικά στο έργο της παραγωγής του βιβλίου. Θα ήθελα επίσης να ευχαριστήσω την Marie Cunninghan για τη στοιχειοθέτηση κάποιων κεφαλαίων, και την Denita Thomas για τη σύνταξη του ευρετηρίου. Ο Barry Koster σχεδίασε πρόθυµα πολλά από τα σχήµατα, και ο Eric Smith µε βοήθησε σε πολλές περιπτώσεις στη βιβλιογραφική εργασία. Οφείλωεπίσης εγκάρδιες ευχαριστίες στους Robert Prior, Harry Stanton και τα άλλα στελέχη του εκδοτικού οίκου The MIT Press, που κατανόησαν από την πρώτη στιγµή το όραµα του βιβλίου µου και υποστήριξαν µε θέρµη τις προσπάθειές µου. Τέλος, θα ήθελα να ευχαριστήσωτη σύζυγό µου Alice, την κόρηµουjennifer, και τον γιο µου David, για την ενθουσιώδη ενθάρρυνσή τους σε αυτή µου την προσπάθεια.

Πανεπιστηµιακές σπουδές στην Επιστήµη Υπολογιστών: Μια εισαγωγή Φήµες Γύρωαπό τους υπολογιστές κυκλοφορούν πολλές φήµες, και αναρωτιέται κανείς τι θα πρέπει να πιστέψει απ όλα αυτά. Λέγεται ότι στο µέλλον οι υπολογιστές θα διεκπεραιώνουν όλες τις γραφειοκρατικές εργασίες, και µάλιστα ότι θα µπορούν να αντικαταστήσουν ορισµένους άρτια εκπαιδευµένους επαγγελµατίες. Λέγεται ότι οι υπολογιστές έχουν αρχίσει να προσοµοιώνουν τη λειτουργία του ανθρώπινου εγκεφάλου, να δηµιουργούν έργα τέχνης, να αποδεικνύουν θεωρήµατα, να µαθαίνουν, και να εκφέρουν αξιολογικές κρίσεις. Λέγεται ότι οι υπολογιστές θα διεισδύσουν σε κάθε πτυχή της ζωής µας, ρυθµίζοντας τις επικοινωνίες, διαχειριζόµενοι πληροφορίες,και παρέχοντας ψυχαγωγία.λέγεται ότι ακόµη και τα πολιτικά µας συστήµατα θα αλλάξουν: σε µέχρι πρότινος κλειστές κοινωνίες, οι υπολογιστές θα απειλήσουν την υπάρχουσα τάξη πραγµάτων,επιτρέποντας την παγκόσµια επικοινωνία, ενώ στις ελεύθερες κοινωνίες θα φέρουν αύξηση της παρακολούθησης και του ελέγχου των πολιτών. Από την άλλη πλευρά, υπάρχουν δύσπιστοι οι οποίοι επισηµαίνουν ότι η επιστήµη των υπολογιστών έχει πολλούς περιορισµούς και ότι η σηµασία των µηχανών έχει υπερεκτιµηθεί. Κάποιεςαπόαυτές τις φήµες ευσταθούν, και µας δίνουν µια σωστή ένδειξη των επερχόµενων εξελίξεων. Κάποιες άλλες είναι εκτός πραγµατικότητας, και προκαλούν αβάσι- µες ανησυχίες για το µέλλον. Άλλες πάλι εγείρουν ερωτήµατα για τα οποία ενδέχεται να συζητάµε επί χρόνια χωρίς να καταλήξουµε σε καµία απάντηση. Σε κάθε περίπτωση, το σίγουρο είναι ότι πολλά από τα ζητήµατα που αφορούν τους υπολογιστές είναι ιδιαίτερα σηµαντικά, και αξίζει τον κόπο να προσπαθήσουµε να τα κατανοήσουµε. Στόχος αυτού του βιβλίου είναι να βοηθήσει τον αναγνώστη να κατανοήσει τους υπολογιστές και την επιστήµη των υπολογιστών. Ξεκινά από τη µελέτη του προγραµµατισµού, διότι ο έλεγχοςκαιο χειρισµός των υπολογιστών είναι απαραίτητα στοιχεία για την κατανόησή τους. Στη συνέχεια, ξεναγεί τον αναγνώστη στο εσωτερικό του υπολογιστή, εξερευνώντας τις στοιχειώδεις λειτουργίες του, από τη µετάδοση των ηλεκτρικών σηµάτων µέσω των κυκλωµάτων έως την αρχιτεκτονική και το λογισµικό που τον καθοδηγεί. Τέλος, το βιβλίο διερευνά τους περιορισµούς που διέπουν την εκτέλεση υπολογισµών, και τα όρια τηςεπιστήµηςσύµφωνα µε τις τρέχουσες απόψεις. Συνοπτικά, το βιβλίο προσπαθεί να προσφέρει µια πλήρη εισαγωγή στο γνωστικό αυτό αντικείµενο, µε έµφαση στους θεµελιώδεις µηχανισµούς στους οποίους βασίζεται η λειτουργία τω ν υπολογιστών. Στο πλαίσιο αυτό, παρουσιάζει πολλές από τις «σπουδαίες ιδέες» της επιστήµης υπολογιστών, δηλαδή τα διανοητικά πρότυπα που χρησιµοποιούν οι επιστήµονες στην εργασία τους, τα οποία θα επιτρέψουν και στον αναγνώστη να κατανοήσει τους υπολογιστές.

xx Πανεπιστηµιακές σπουδές στην Επιστήµη Υπολογιστών: Μια εισαγωγή Σπουδές στην Επιστήµη Υπολογιστών ΗΕπιστήµηΥπολογιστών συνίσταται στη µελέτη κάποιων συνταγών και των τρόπων εφαρµογής τους. Ο όρος «συνταγή» αναφέρεται σε κάποια διαδικασία ή µέθοδο για την εκτέλεση µιας εργασίας. Η επιστήµη µελετά τα διάφορα είδη συνταγών, τις ιδιότητές τους, τις γλώσσες καταγραφής τους, τις µεθόδους δηµιουργίας τους, και τον σχεδιασµό µηχανών για την αποτελεσµατική διεκπεραίωσή τους. Βέβαια, οι επιστήµονες των υπολογιστών δεν θέλουν να συγχέονταιµετουςσεφ µαγειρικής, και για τον λόγοαυτόέχουν ένα δικό τους όνοµα για τις συνταγές τις ονοµάζουν αλγορίθµους. Για να κατανοήσει κανείς την επιστήµη υπολογιστών, θα πρέπει να µελετήσει συνταγές (ή, αλλιώς, αλγορίθµους). Το πρώτο θέµα µελέτης είναι το πώς επινοούµε και καταγράφουµε αυτές τις συνταγές. Παραδείγµατος χάριν, πιθανόν να θέλουµε να καταστρώσουµε µια συνταγή για τη θεραπεία κάποιας ασθένειας, ή για την ταξινόµηση κάποιων πουλιών µε βάση τα µορφολογικά χαρακτηριστικά τους, ή για τη διαµόρφωση ενός προγράµµατος αποταµίευσης. Θα χρειαστεί, κατ αρχάς, να µελετήσουµε κάποιες ενδεικτικές συνταγές, ώστε να δούµε πώς είναι δοµηµένες, και στη συνέχεια να εξασκηθούµε στη σύνταξη δικών µας συνταγών. Η προσπάθεια αυτή απαιτεί κάποια εµπειρία στον εντοπισµό των ουσιωδών στοιχείων των καταστάσεων του πραγµατικού κόσµου, και στην οργάνωση της γνώσης αυτής σε µια ακολουθία βηµάτων που οδηγούν στην επίτευξη του στόχου µας. Από τη στιγµή που θα έχουµε επινοήσει µια µέθοδο για την επίλυση κάποιου προβλή- µατος, θα πρέπει να την κωδικοποιήσουµε σε µια υπολογιστική γλώσσα προκειµένου να διαβιβάσουµε τις «επιθυµίες» µας στον υπολογιστή. Εποµένως, είναι απαραίτητο να µάθουµε να χειριζόµαστε µια υπολογιστική γλώσσα και να µετατρέπουµε τα βήµατα µιας συνταγής σε εντολές που µπορούν να εκτελεστούν από έναν υπολογιστή. Το βιβλίο αυτό εισάγει τον αναγνώστη στη γλώσσα προγραµµατισµού Pascal, η οποία είναι αφ ενός εύκολη στην εκµάθησή της και αφ ετέρου επαρκής για την περιγραφή των ενδεικτικών προγραµµάτων του βιβλίου. Οσυνδυασµόςτηςδηµιουργίαςµιαςσυνταγήςκαιτηςκωδικοποίησήςτηςσεκάποια υπολογιστική γλώσσα ονοµάζεται προγραµµατισµός, καιαποτελεί το αντικείµενο µελέτης του πρώτου τµήµατος του βιβλίου, των κεφαλαίων 1 έως 6. Στα κεφάλαια αυτά παρουσιάζονται διάφοροι τύποι προβληµάτων, οι αντίστοιχες µέθοδοι επίλυσής τους, και ο κώδικας Pascal, δηλαδή το πρόγραµµα, που απαιτείται για την επίλυσή τους. Το τελευταίο από αυτά τα κεφάλαια πραγµατεύεται τα προβλήµατα που ανακύπτουν όταν οι τεχνικές που παρουσιάζονται στα πρώτα πέντε κεφάλαια εφαρµόζονται στην ανάπτυξη προγραµµάτων εµπορικής κλίµακας. Αν και µετά τη µελέτη των κεφαλαίων του προγραµµατισµού ο αναγνώστης θα είναι σε θέση να δηµιουργεί χρήσιµα προγράµµατα, πιθανόν να εξακολουθεί να αντιµετωπίζει τον υπολογιστή σαν ένα µαγικό κουτί που εκτελεί αποτελεσµατικά εντολές. Για να γίνει κατανοητό γιατί οι υπολογιστές λειτουργούν όπως λειτουργούν, ποιοι είναι οι περιορισµοί τους, και ποιες βελτιώσεις µπορούν να αναµένονται στο µέλλον, το δεύτερο τµήµα του βιβλίου πραγµατεύεται το πώς και γιατί οι υπολογιστές είναι σε θέση να εκτελούν υπολογισµούς. Στο κεφαλαίο 7 παρουσιάζονται µεθόδοι σχεδίασης ηλεκτρικών κυκλωµάτων και εξετάζεται η εφαρµογή των µεθόδων αυτών στη σχεδίαση υπολογιστικών µηχανισµών. Παραδείγµατος χάριν, περιγράφεται ο τρόπος κατασκευής ενός κυκλώµατος για πρόσθεση αριθµών. Στο κεφάλαιο 8 περιγράφεται ηαρχιτεκτονικήτωνυπολογιστώνκαιη δοµή ενός τυπικού υπολογιστή. Το κεφάλαιο 9 πραγµατεύεται τη µετάφραση µιας γλώσσας προγραµµατισµού υψηλού επιπέδου, όπως είναι η Pascal, σε γλώσσα µηχανής, έτσι ώστε οι εντολές της να µπορούν να εκτελεστούν από έναν υπολογιστή κάποιας δεδοµένης αρχιτεκτονικής. Το παράδειγµα που παρατίθεται στο τέλος του κεφαλαίου9 διατρέχει τα κύρια βήµατα επεξεργασίας µιας εντολής της Pascal, από τη µετάφρασή της σε

Σπουδές στην Επιστήµη Υπολογιστών xxi γλώσσα µηχανής µέχρι τη λεπτοµερή λειτουργία των υπολογιστικών κυκλωµάτων. Στο κεφάλαιο 10 εισάγονται έννοιες σχετικές µε τα λειτουργικά συστήµατα, δηλαδή τα προγράµµατα που γεφυρώνουν το χάσµα µεταξύ του χρήστη και των πολλών υλισµικών και λογισµικών στοιχείων του υπολογιστή. Τα προγράµµατα αυτά επιτρέπουν στον χρήστη να χρησιµοποιεί εύκολα τις υπολογιστικές υπηρεσίες που ο ίδιος επιθυµεί. Το κεφάλαιο 11 αποτελεί µια εισαγωγή στα δίκτυα υπολογιστών και τις έννοιες που σχετίζονται µε την επικοινωνία µεταξύ υπολογιστικών συστηµάτων. Τα τελευταία κεφάλαια του βιβλίου ασχολούνταιµε τους περιορισµούς των υπολογιστών και τα όρια της επιστήµης. Το κεφάλαιο 12 πραγµατεύεται προβλήµατα που αφορούν τον χρόνο εκτέλεσης των προγραµµάτων, και υπολογισµούς µε µεγάλες χρονικές απαιτήσεις. Στο κεφάλαιο 13 περιγράφεται ένας τρόπος επίσπευσης της επίλυσης υπολογιστικών προβληµάτων, µέσωτης χρήσης παράλληλων αρχιτεκτονικών. Το κεφάλαιο 14 µελετά την ύπαρξη των λεγόµενων µη υπολογίσιµων συναρτήσεων, και τέλος το κεφάλαιο 15 αποτελεί µια εισαγωγή στο πεδίο της τεχνητής νοηµοσύνης. Ειδικό λογισµικό για τη διευκόλυνση της µελέτης Για την καλύτερη εµπέδωση των εννοιών που παρουσιάζονται στο βιβλίο, έχουν αναπτυχθεί ειδικά προγράµµατα τα οποία µπορείτε να αποκτήσετε µέσωτου ιαδικτύου. Τα προγράµµατα αυτά είναι αναρτηµένα στον δικτυότοπο του εκδοτικού οργανισµού The MIT Press και στην ιστοσελίδα του συγγραφέα στο Τµήµα Επιστήµης Υπολογιστών του Πανεπιστηµίου Duke. 2 Στα προγράµµατα που µπορείτε να αναζητήσετε και να δοκιµάσετε περιλαµβάνονται τα εξής: ύο προγράµµατα που αφορούν το κεφάλαιο περί προσοµοίωσης. Το πρώτο είναι µια προσοµοίωση ενός αγώνα ταχύτητας αυτοκινήτων που σας επιτρέπει να περιγράψετε µια στρατηγική για να διατρέξετε την πίστα και να ελέγξετε την επίδοσή σας. Το δεύτερο είναι µια προσοµοίωση της βιολογικής εξέλιξης, που σας επιτρέπει να µελετήσετε διαδοχικές γενιές κάποιων απλώνόντωνκαθώςαυτά εξελίσσονται σε ένα εικονικό περιβάλλον. Ένα συνοδευτικό πρόγραµµα για τα κεφάλαια που αφορούν το υλισµικό και το λογισµικό του υπολογιστή, το οποίο ονοµάζεται «This-is-how-a-computer-works», και σας δίνει τη δυνατότητα να δείτε τις διεργασίες που πραγµατοποιούνται σε έναν εικονικό υπολογιστή, καθώς αυτός µεταγλωττίζει και εκτελεί ένα µικρό πρόγραµµα. Η απεικόνιση είναι αρκετά λεπτοµερής, δίνοντας στον χρήστη την ευκαιρία να παρακολουθήσει τους µεταγωγείς στον κεντρικό επεξεργαστή να ανοιγοκλείνουν και το ηλεκτρικό ρεύµα να διατρέχει τα καλώδια κατά τη διάρκεια του υπολογισµού. Τέλος, το Κεφάλαιο 10 συνοδεύεται από ένα λειτουργικό σύστηµα γραµµένο σε Pascal, το οποίο µπορείτε να µελετήσετε, να εκτελέσετε και να τροποποιήσετε εάν το επιθυµείτε. Τα περισσότερα από τα υπόλοιπα προγράµµατα που αναφέρονται στο βιβλίο παρατίθενται αυτούσια στο κείµενο. 2 Σ.τ.Ε.: Όπως µας ενηµέρωσε ο συγγραφέας, τα συγκεκριµένα προγράµµατα δεν είναι διαθέσιµα στην παρούσα φάση. Παρ όλα αυτά,κρίναµε ότι θα έπρεπε να διατηρήσουµε τις αναφορέςτου συγγραφέα σε αυτά, για το ενδεχόµενο να αναρτηθούν στο ιαδίκτυο στο µέλλον.

xxii Πανεπιστηµιακές σπουδές στην Επιστήµη Υπολογιστών: Μια εισαγωγή Μια προσέγγιση για αναγνώστες µε περιορισµένο µαθηµατικό υπόβαθρο Καθώς οι γνώστες της επιστήµης υπολογιστών χρησιµοποιούν συνήθως τη δική τους ορολογία και ειδικό µαθηµατικό συµβολισµό, οι δυσκολίες στην επικοινωνία οδηγούν τους διδάσκοντες στο συµπέρασµα ότι ο µέσος άνθρωπος δεν είναι σε θέση να κατανοήσει αυτό το αντικείµενο. Για τον λόγο αυτό, τα σχετικά βιβλία και µαθήµατα πανεπιστη- µιακών τµηµάτων συχνά παρακάµπτουν τα θεµελιώδη ζητήµατα, και επικεντρώνονται αντ αυτών στη διδασκαλία της χρήσης προγραµµάτων λογισµικού, και στην ιστορική και κοινωνιολογική διάσταση της υπολογιστικής επιστήµης. Το βιβλίο αυτό έχει γραφτεί µε την πεποίθηση ότι οποιοσδήποτε νοήµων άνθρωπος µπορεί να κατανοήσει όλες τις θεµελιώδεις έννοιες της επιστήµης υπολογιστών, εάν αυτές εισαχθούν και εξηγηθούν µε τον κατάλληλο τρόπο. εν έχει παραλειφθεί κανένα σηµαντικό θέµα, όσο «δύσκολο» και αν θεωρείται. Ωστόσο, έχει καταβληθεί σηµαντική προσπάθεια να αποφευχθούν οι επουσιώδεις λεπτοµέρειες και η εξειδικευµένη ορολογία, εκτός από τις περιπτώσεις που ήταν δυνατόν να δοθούν σαφείς καιπλήρειςορισµοί. Επειδή κάποιοι αναγνώστες ίσως να µην επιθυµούν να µελετήσουνόλατα κεφάλαια, το βιβλίο έχει σχεδιαστεί έτσι ώστε να ευνοεί την επιλεκτική µελέτη. Οι αναγνώστες ενθαρρύνονται να επιλέξουν όποιο κεφάλαιο επιθυµούν κάθε φορά, και να το µελετήσουν για όσο τους κινεί το ενδιαφέρον. Φυσικά, τα περισσότερα κεφάλαια χρησιµοποιούν έννοιες από τα προηγούµενα και, όπως είναι ευνόητο, όπου συµβαίνει αυτό η κατανόηση θα είναι ελλιπέστερη. Τα κεφάλαια του προγραµµατισµού (1 έως 5) αλληλοεξαρτώνται σε σηµαντικό βαθµό, ενώ το κεφάλαιο περί αρχιτεκτονικής (8) θα πρέπει να µελετηθεί πριν από το κεφάλαιο για τη µεταγλώττιση (9). Επίσης, κάποια από τα απαιτητικότερα κεφάλαια (12 έως 15) χρησιµοποιούν στοιχεία προγραµµατισµού από τα πρώτα κεφάλαια (1 έως 5). Αν εξαιρέσουµε αυτούς τους περιορισµούς, όλα τα άλλα θέµαταπιθανόταταµπορούννα µελετηθούνµεοποιαδήποτεσειρά χωρίς ιδιαίτερες γνωστικές απώλειες. Οι ενότητες των κεφαλαίων έχουν ταξινοµηθεί σε τρεις κατηγορίες, που δηλώνονται µε τα λατινικά γράµµατα A, B και C, έτσι ώστε οι αναγνώστες να µπορούν να πάρουν µια «γεύση» για πολλά ζητήµατα, και να εντρυφήσουν µόνο σε ό,τι επιλέξουν. Οι ενότητες µε την ένδειξη A περιλαµβάνουν µόνο εισαγωγικές έννοιες και απαιτούν µικρή προσπάθεια από τον αναγνώστη. Μελετώντας κανείς µόνο τις ενότητες αυτές, µπορεί να αποκτήσει µια γενική εικόνα του βιβλίου µέσα σε λίγες ώρες. Οι ενότητες µε την ένδειξη Bπεριλαµβάνουντηνκύρια ύλη του βιβλίου, και ίσως απαιτούν σηµαντική προσπάθεια και χρόνο ο αναγνώστης, όµως, που θα µελετήσει µια τέτοια ενότητα θα κατανοήσει σε βάθος την ουσία του αντικειµένου που αυτή πραγµατεύεται. Τέλος, οι ενότητες µε την ένδειξη C απαντούν σε ερωτήµατα που µπορεί ναγεννηθούν σε προσεκτικούς αναγνώστες και συµπληρώνουν την ύλη των κύριων τµηµάτων του βιβλίου.

1 Εισαγωγή στον προγραµµατισµό: Κωδικοποίηση δένδρων απόφασης 1.1 Καλά νέα (A) Παλαιότερα, πριν από την εµφάνιση των υπολογιστών,η διεκπεραίωση κάθε εργασίας απαιτούσε την εκτέλεσή της από εµάς τους ίδιους. Σήµερα, όµως, µε τους υπολογιστές, µπορούµε πλέον να εκτελούµε πολλές εργασίες απλώς καταγράφοντας τις ενέργειες που πρέπει να γίνουν. Την υλοποίηση των ενεργειών αναλαµβάνει να την φέρει σε πέρας ένας υπολογιστής. Για παράδειγµα, εάν θέλουµε να προσθέσουµε αριθµούς, να αναζητήσουµε κάποια δεδοµένα, να συντάξουµε και να εκτυπώσουµε ένα έγγραφο, να στείλουµε µηνύµατα σε συναδέλφους, να ελέγξουµε µια βιοµηχανική διεργασία, ή να φέρουµε σε πέρας άλλες εργασίες, µπορούµε να συντάξουµε ένα σύνολο οδηγιών, δηλαδή µια ακολουθία από ενέργειες που πρέπει να γίνουν, και να αναθέσουµε την εκτέλεσή τους σε έναν υπάκουο και ακούραστο υπολογιστή. Μπορούµε επίσης να µοιράσουµε αυτό το σύνολο οδηγιών σε πολλούς υπολογιστές, οι οποίοι θα συνεργαστούν για την υλοποίησή τους. Ακόµη και όταν χρειαστεί οι υπολογιστές να εργαστούν χωρίς την επίβλεψή µας, θα συνεχίσουν να εκτελούν τις ίδιες εργασίες,ακολουθώνταςπιστάτις εντολές που τους έχουµε δώσει. Ηπροετοιµασίακαιησύνταξη ενός τέτοιου συνόλου οδηγιών ονοµάζεται προγραµ- µατισµός (programming), και οδηγεί σε «πολλαπλασιασµό εργασίας» ο οποίος αλλάζει ριζικά τις δοµές της ανθρώπινης κοινωνίας. ίνει τη δυνατότητα σε ένα µόνο άτοµο να παραγάγει µε τη βοήθεια των υπολογιστών απεριόριστο πλήθος αποτελεσµάτων καταβάλλοντας πεπερασµένη προσπάθεια (για τη δηµιουργία του σχετικού υπολογιστικού προγράµµατος). Γίνεται λοιπόν φανερό ότι η παραγωγικότητά µας δεν είναι πλέον συνάρτηση µόνον του πλήθους των απασχολούµενων προσώπων είναι συνάρτηση και του πλήθους των διαθέσιµων υπολογιστών. Τα καλά νέα, όµως, δεντελειώνουν εδώ: οι υπολογιστές είναι πλέον σχετικά φθηνοί και επιπλέον το κόστος τους συνεχώς µειώνεται. Πριν από τρεις δεκαετίες, υπολογιστές µε µνήµη 64000 λέξεις και χρόνο εκτέλεσης εντολών 1 µικροδευτερόλεπτο (µsec) κόστιζαν 1 εκατοµµύριο δολάρια. Σήµερα µπορούµε να αγοράσουµε έναν υπολογιστή µε εκατονταπλάσια µνήµη και ταχύτητα, µε λίγες χιλιάδες δολάρια. Πληρώνοντας ποσό ίσο µε τον µισθό ενός ανειδίκευτου εργάτη, µπορούµε να αποκτήσουµε έναν υπολογιστή που έχει τη δυνατότητα να διεκπεραιώνει ορισµένες εργασίες ταχύτερα από χίλιους ανθρώπους µαζί. Με τη µελέτη του προγραµµατισµού µέσα από τις σελίδες αυτού του βιβλίου θα κατανοήσουµε πώς µπορεί να επιτευχθεί αυτός ο πολλαπλασιασµός της εργασίας µέσω των υπολογιστών. Θα µελετήσουµε θεµελιώδεις δοµές πληροφοριών και τεχνικές επε-

2 1. Εισαγωγή στον προγραµµατισµό: Κωδικοποίηση δένδρων απόφασης ξεργασίας µε στόχο να αναπτύξουµε την ικανότητά µας να επισηµαίνουµε και να απο- µονώνουµε την ουσία των προβληµάτων, και να µεταγράφουµετα προβλήµατα αυτάσε κώδικα µηχανής ώστε οι εργασίεςµαςναγίνονται αυτόµατα. εν θα µελετήσουµε τον προγραµµατισµό µε τον συνήθη τρόπο, δηλαδή µέσωτης εκµάθησης όλων των λεπτοµερειών µιας συγκεκριµένης γλώσσας προγραµµατισµού. εν θα αναφερθούµε, για παράδειγµα, στο σύνολο των κανόνων για την τοποθέτηση των σηµείων στίξης, ή στη γενικότερη µορφή κάθε γλωσσικής δοµής, ούτε θα εξετάσουµε το µέγιστο πλήθος χαρακτήρων που επιτρέπονται στα ονόµατα µεταβλητών, ή τα µέγιστα επιτρεπόµενα µεγέθη αριθµών και συµβολοσειρών. Αντίθετα, θα προσπαθήσουµε να αποκοµίσουµε όλη την απόλαυση που πηγάζει από τη µελέτη και τη δηµιουργία απλών προγραµµάτων, παρακάµπτοντας κατά το δυνατόν την κουραστική εµµονή στη συντακτική ακρίβεια και την εξαντλητική περιγραφή. Στα παραδείγµατακαι στις ασκήσειςχρησιµοποιούµε τη γλώσσα προγραµµατισµού Pascal. Ωστόσο, θα περιοριστούµε σε ένα υποσύνολο των στοιχείων της γλώσσας αυτής, ώστε ο φόρτος της εκµάθησής της από τον αναγνώστη να παραµείνει σε λογικά πλαίσια. Εάν καλύπταµε το σύνολο των δυνατοτήτων της Pascal, δεν θα µας έµενε καθόλου χρόνος να αναφερθούµε στο κεντρικό θέµα αυτού του βιβλίου, τις σπουδαίες ιδέες στην επιστήµη των υπολογιστών. Μιας και στο βιβλίο αυτό δίνονται µόνον οι έννοιες που είναι απαραίτητες για την κατανόηση των παρατιθέµενων προγραµµάτων και για τη δηµιουργία προγραµµάτων ανάλογηςδυσκολίας, συνιστάται σε όσους σκοπεύουν να δηµιουργήσουν πιο πολύπλοκα προγράµµατα να προµηθευτούν ένα εγχειρίδιο της Pascal ως βιβλίο µελέτης και αναφοράς. Αφού πρόκειται να µελετήσουµε προγραµµατισµό, θα πρέπει προφανώς να προγραµ- µατίσουµε κάτι. Θα ήταν καλό να γράψουµε προγράµµατα που να περιλαµβάνουν κάποιες χρήσιµες δοµές επεξεργασίας πληροφοριών. Θα ήταν επίσης σκόπιµο και χρήσιµο να γράψουµε πολλά είδη προγραµµάτων, φροντίζοντας όµως να έχουν αρκετά απλή δοµή ώστε να µπορεί να τα κατανοήσει και να τα συντάξει εύκολα ένας αρχάριος. Θα θέλαµε ακόµη να εξοικειωθούµε µε ορισµένες θεµελιώδεις έννοιες που είναι απαραίτητες για µια πιο προχωρηµένη µελέτη. Με βάση αυτά, επιλέγουµε ως πρώτο πεδίο της µελέτης µας τα δένδρα απόφασης (decision trees). Τα δένδρα αυτά µπορούν να χρησιµοποιηθούν για ταξινόµηση αντικειµένων σε κατηγορίες, για τυπική αξιολόγηση προσώπων υπό τη µορφή συνέντευξης και για πολλά άλλα πράγµατα. Αρχικά θα µελετήσουµε τα δένδρα απόφασης, και στη συνέχεια θα µάθουµε πώς να συντάσσουµε προγράµµατα γι αυτά. 1.2 ένδρα απόφασης (B) Ας υποθέσουµε ότι θέλουµε να αποφασίσουµε ποιο βιβλίο να υποδείξουµε σε κάποιον που ενδιαφέρεται να αρχίσει σπουδές στην επιστήµη των υπολογιστών. Ένας καλός τρόπος να καταλήξουµε σε µια απόφαση είναι να απευθύνουµε στον ενδιαφερόµενο µια σειρά από ερωτήσεις µέσω των οποίων θα καταλήξουµε στο κατάλληλο βιβλίο. Η πρώτη ερώτηση θα µπορούσε να αφορά τον προτιµώµενο τρόπο προσέγγισης των θεµάτων της επιστήµης των υπολογιστών, π.χ. αν θα ήθελε να ακολουθήσει µια µαθηµατική προσέγγιση. ιατυπώνουµε, λοιπόν, τη σχετική ερώτηση και στη συνέχεια δηλώνουµε µε βέλη την κατεύθυνση που θα ακολουθήσουµε για την επόµενη ερώτηση: Δένδρο απόφασης για υπόδειξη βιβλίου:

1.2. ένδρα απόφασης 3 Στη συνέχεια, ανάλογα µε την πρώτη απάντηση, αποφασίζουµε τι ερωτήσεις θα πρέπει να τεθούν αµέσως µετά: Δένδρο απόφασης για υπόδειξη βιβλίου: Ας υποθέσουµε ότι µετά από δύο ερωτήσεις είµαστε σε θέση να υποδείξουµε το κατάλληλο βιβλίο. Στην περίπτωση αυτή, το δένδρο απόφασης µπορεί να συµπληρωθεί ως εξής: Δένδρο απόφασης για υπόδειξη βιβλίου: Ακολουθώντας µια διαδροµή στο δένδρο απόφασης, µπορούµε να καταστρώσουµε έναν ενδεικτικό «διάλογο». Εάν το συγκεκριµένο πρόσωπο έχει µαθηµατικό προσανατολισµό µε ενδιαφέρον στα θεωρητικά θέµατα, η διαδροµή διά µέσου του δένδρου έχει ως εξής: Επιλογή βιβλίου µε θέµα την επιστήµη των υπολογιστών: Ερώτηση του δένδρου απόφασης: Απάντηση: Ερώτηση του δένδρου απόφασης: Απάντηση: Υπόδειξη του δένδρου απόφασης: Επιθυµείτε µια µαθηµατική προσέγγιση; Ναι Σας ενδιαφέρει ο προγραµµατισµός ή τα θεωρητικά θέµατα; Θεωρητικά θέµατα Μια καλή επισκόπηση δίδεται στο βιβλίο Algorithmics του D. Harel. Το παραπάνωδένδρο µάς οδηγεί στην τελική απόφαση µετά από δύο µόνο διαδοχικές ερωτήσεις. Εύκολα όµως µπορεί να φανταστεί κανείς ένα µεγάλο δένδρο µε πολλές ερωτήσεις και µεγάληποικιλία συνιστώµενων βιβλίω ν στο τέλος των διαφόρων διαδρο- µών. Είναι επίσης προφανές ότι δένδρα αυτού τουτύπουµπορούν να χρησιµοποιηθούν

4 1. Εισαγωγή στον προγραµµατισµό: Κωδικοποίηση δένδρων απόφασης για παροχή συµβουλών σχεδόν για οποιοδήποτε ζήτηµα, από την υπόδειξη µιας θεραπευτικής αγωγής µέχρι την πρόβλεψη του µέλλοντος. Ιδού µερικά παραδείγµατα: Δένδρο απόφασης για την παροχή ιατρικής συµβουλής: Δένδρο απόφασης για πρόβλεψη του µέλλοντος: Τα δένδρα απόφασης µπορούν επίσης να χρησιµοποιηθούν για την ταξινόµηση διαφόρων πραγµάτων σε κατηγορίες. Ας υποθέσουµε ότι γνωρίζουµε τα ταξινοµικά χαρα-

1.2. ένδρα απόφασης 5 κτηριστικά των διαφόρων ειδών γλάρων και επιθυµούµε να προσδιορίσουµε µε ακρίβεια το είδος οποιουδήποτε ατόµου µε βάση τα χαρακτηριστικά του. Θα µπορούσαµε να κατασκευάσουµε ένα δένδρο της παρακάτωµορφής: Δένδρο απόφασης για ταξινόµηση γλάρων: Μπορούµε ακόµη να κατασκευάσουµε έναν οδηγό για τη συµπλήρωση της φορολογικής µας δήλωσης, µε τη µορφή δένδρου απόφασης. Ας δούµε τι µορφή θα είχε ένα µικρό τµήµα του: Οδηγός για τη συµπλήρωση φορολογικής δήλωσης: Τι θα λέγατε να κατασκευάσουµε ένα δένδρο απόφασης για ένα παιγνίδι; Ένα καλό παράδειγµα είναι το απλό παιγνίδι Nim, το οποίο έχει τους εξής κανόνες: Το παιγνίδι παίζεται από δύο παίκτες. Ο πρώτος παίκτης µπορεί να τοποθετήσει από ένα έως τρία Χστοαριστερό άκρο µιας οριζόντιας σειράς από τετράγωνα, την οποία θα ονοµάζουµε πίνακα. Ο αντίπαλος µπορεί να τοποθετήσει από ένα έως τρία Ο στα αµέσως επόµενα τετράγωνα του πίνακα. Αυτή η διαδοχή κινήσεων επαναλαµβάνεται συνεχώς, µέχρι να συµπληρωθεί ο πίνακας από αριστερά προς τα δεξιά µε Χ και Ο. Νικητής είναι ο παίκτης που θα καταφέρει να τοποθετήσει το δικό του σύµβολο στο τελευταίο τετράγωνο

6 1. Εισαγωγή στον προγραµµατισµό: Κωδικοποίηση δένδρων απόφασης του πίνακα. Για παράδειγµα, ας θεωρήσουµε ένα παιγνίδι Nim µε πίνακα µήκους επτά τετραγώνων: Έστωότι ο πρώτος παίκτης παίζει τρία Χ: Ας υποθέσουµε ότι ο δεύτερος παίκτης παίζει δύο Ο: Τότε ο πρώτος παίκτης µπορεί να κερδίσει το παιγνίδι τοποθετώντας δύο Χ στα δύο τελευταία τετράγωνα: Ας δούµε τώρα ένα δένδρο απόφασης που θα παίξει τον ρόλο του δεύτερου παίκτη για ένα παιγνίδι Nim µε επτά τετράγωνα: Δένδρο απόφασης για το παιγνίδι Nim:

1.3. Τα πρώτα βήµατα στον προγραµµατισµό 7 Στη φύση, τα δένδρα φυτρώνουν από το έδαφος και αναπτύσσονται απλώνοντας τα κλαδιά τους προς τον ουρανό. Τα δένδρα αυτού του κεφαλαίου, για λόγους καλύτερης εποπτείας, αναπτύσσονται από τα αριστερά προς τα δεξιά. Οι διαδροµές που θα εξετάσουµε σε αυτά τα δένδρα ξεκινούν από το ακραίο αριστερό παραλληλόγραµµο, τη ρίζα (root node), και συνεχίζονται προς τα δεξιά. Σε κάθε κόµβο (node) του δένδρου υποβάλλεται µια ερώτηση στον χρήστη, και µε βάση την απάντηση που δίνεται επιλέγεται οεπόµενοςκλάδοςπουθα ακολουθηθεί. Η διαδροµή συνεχίζεται προς τα δεξιά µέχρι την άφιξη σε κάποιον τερµατικό κόµβο ή φύλλο (leaf node), δηλαδή έναν κόµβο που δεν έχει διακλαδώσεις προςταδεξιά.αυτόςοκόµβοςπεριέχει ένα µήνυµα το οποίο δίνει το αποτέλεσµα της ακολουθίας των ερωταποκρίσεων και σηµατοδοτεί το τέλος της διαδικασίας. Τέτοια δένδρα απόφασης έχουν πληθώρα εφαρµογών σε δραστηριότητες που απαιτούν επεξεργασία πληροφοριών, όπως είναι η παροχή συµβουλών, η ταξινόµηση αντικειµένων, η διδασκαλία, ακόµη και η ψυχαγωγία (παιχνίδια). Ο στόχος µας στο κεφάλαιο αυτό είναι η σύνταξη προγραµµάτων τα οποία θα καταγράφουν τη δοµή κάποιου δένδρου απόφασης, θα κατευθύνουν τον χρήστη στις σωστές διαδροµές και θα εκτυπώνουν τα αποτελέσµατα. Η ικανότητα σχεδιασµού και προγραµµατισµού τέτοιων δένδρων είναι ένα σηµαντικό προσόν για ένα µεγάλο πλήθος εφαρµογών. Ασκήσεις 1. Συµπληρώστε ένα από τα ηµιτελή δένδρα απόφασης αυτής της ενότητας. 2. Σχεδιάστε ένα πλήρες δένδρο απόφασης που να υποδύεται τον δεύτερο παίκτη σε ένα παιγνίδι Nim µε εννέα τετράγωνα. 3. Εντοπίστε ένα πρόβληµα σε κάποιον τοµέα των προσωπικών σας ενδιαφερόντων και σχεδιάστε ένα δένδρο απόφασης που να επιλύει το πρόβληµα αυτό. 1.3 Τα πρώτα βήµατα στον προγραµµατισµό (B) Ένα πρόγραµµα (computer program) είναι µια ακολουθία εντολών που µπορεί να εκτελέσει ένας υπολογιστής. Πρόκειται για µια αλληλουχία ενεργειών τις οποίες θα φέρει σε πέρας ο υπολογιστής και, εποµένως, θα πρέπει να είναι γραµµένες σε γλώσσα κατανοητή από τον υπολογιστή. Τα περισσότερα προγράµµατα αυτού του βιβλίου είναι γραµ- µένα στην Pascal, µια γλώσσα αρκετά διαδεδοµένη και εύχρηστη. Ένα πρόγραµµα ή ένα τµήµα προγράµµατος ονοµάζεται επίσης κώδικας (code). Στο βιβλίο αυτό χρησιµοποιούµε και τους δύο όρους. Ας δούµε ένα παράδειγµα προγράµµατος γραµµένου σε Pascal. program FirstCode; writeln(' Σπουδαίες ιδέες '); writeln(' στην '); writeln('επιστήµη των υπολογιστών'); readln; end. Εάν θέλουµε να πραγµατοποιηθούν οι ενέργειες που περιγράφονται στο παραπάνω πρόγραµµα, εκτελούµε (ή τρέχουµε, όπω ς επίσης λέγεται) το πρόγραµµα στον υπολογιστή. Για την εκτέλεση του προγράµµατος απαιτούνται τα εξής: ένας υπολογιστής, λογισµικό (software) που επιτρέπει στον υπολογιστήµαςνα«καταλαβαίνει» και να επεξεργάζεται προγράµµατα Pascal,