Pascal. 1 Γλώσσες προγραμματισμού. 21 Οκτωβρίου 2011

Σχετικά έγγραφα
Pascal. 15 Νοεμβρίου 2011

Σημειώσεις για την Pascal

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

Εντολές ελέγχου ροής if, for, while, do-while

Pascal. 26 Οκτωβρίου 2011

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

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

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

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

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

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

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

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

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

Ενότητα 1: «Εισαγωγή στην Αλγοριθμική και τον Προγραμματισμό. Απλές ασκήσεις με γλώσσα Pascal»

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

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

A2. Να γράψετε για κάθε περίπτωση τον αριθμό της πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

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

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

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

ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης)

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

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

Προγραμματισμός με FORTRAN Συνοπτικός Οδηγός Α. Σπυρόπουλος Α. Μπουντουβής

for for for for( . */

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

Γραπτές εξετάσεις στο μάθημα: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Θ) Εισηγητής: Γεωργίου Χρήστος ΘΕΜΑΤΑ & ΑΠΑΝΤΗΣΕΙΣ. Β. Χαρακτήρας(Αλφαριθμητικά)

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

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

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

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

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

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

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

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

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

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

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

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

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

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

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τι χρειάζεται η εντολή DO ; ΕΠΑΝΑΛΗΨΕΙΣ ΕΝΤΟΛΗ DO. Όταν απαιτείται να εκτελεστεί πολλές φορές το ίδιο τμήμα ενός προγράμματος.

2. β. Συνθήκη ή επιλογή. 4. δ. Υποπρόγραμμα. 5. ε. ιαδικασία εισόδου ή εξόδου

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

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

ΘΕΜΑ Α / Η λογική έκφραση Χ KAI (ΟΧΙ Χ) είναι πάντα ψευδής κάθε τιμή της λογικής μεταβλητής Χ.

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

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

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

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

Προγραμματισμός ΗΥ και Υπολογιστική Φυσική. Χρήστος Γκουμόπουλος

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

ΔΙΑΛΕΞΗ ΙΙ ΕΝΑ ΒΗΜΑ ΠΑΡΑΠΑΝΩ ΜΕ SCRATCH ΕΠΙΛΕΓΩΝΤΑΣ & ΕΠΑΝΑΛΑΜΒΑΝΟΝΤΑΣ

Υπολογισμός - Εντολές Επανάληψης

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

8 FORTRAN 77/90/95/2003

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

5ο σετ σημειώσεων - Δείκτες

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

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

Θεωρία Προγραμματισμού

Εισαγωγή στον Προγραμματισμό Python Μάθημα 1: Μεταβλητές, τελεστές, είσοδος/έξοδος προγράμματος, συνθήκη ελέγχου if Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

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

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

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

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

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

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

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

Transcript:

Pascal 21 Οκτωβρίου 2011 1 Γλώσσες προγραμματισμού Οι μικροεπεξεργαστές των υπολογιστών μπορούν μεταξύ άλλων να εκτελούν αριθμητικές και λογικές πράξεις και να διαβάζουν και γράφουν στη μνήμη του υπολογιστή. Για να γίνει αυτό πρέπει να τους δωθούν οι ανάλογες εντολές. Οι εντολές είναι κωδικοποιημένες ως αριθμοί. Για παράδειγμα οι παρακάτω εντολές βάζουν σε μια θέση μνήμης τον αριθμό 5, σε μια άλλη τον αριθμό 7, προσθέτουν τους δύο αριθμούς και αποθηκεύουν το αποτέλεσμα σε μια τρίτη θέση μνήμης (για έναν επεξεργαστή Pentium). 457f 464c 0101 0001 0000 0000 0000 0000 0001 0003 0001 0000 0000 0000 0000 0000 00d0 0000 0000 0000 0034 0000 0000 0028 0009 0006 8955 83e5 10ec 45c7 05fc 0000 c700 f845 0007 0000 458b 8bf8 fc55 048d 8902 f445 00b8 0000 c900 00c3 4700 4343 203a 5528 7562 746e 2f75 694c 616e 6f72 3420 342e 342e 312d 7534 7562 746e 3575 2029 2e34 2e34 0035 2e00 7973 746d 6261 2e00 7473 7472 6261 2e00 6873 7473 7472 6261 2e00 6574 7478 2e00 6164 6174 2e00 7362 0073 632e 6d6f 656d 746e 2e00 6f6e 6574 472e 554e 732d 6174 6b63 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 Είναι προφανώς ακατανόητο. Ο λόγος δεν είναι απλώς ότι οι εντολές είναι κωδικοποιημένες ως αριθμοί αλλά και ότι πρέπει να τοποθετούνται σε μια συγκεκριμένη σειρά σε σχέση με τις παραμέτρους τους, να εκτελούνται κάποιες προπαρασκευαστικές λειτουργίες πριν εκτελεστού αυτές καθαυτές οι εντολές κτλ. Για να απλουστεύσουν τα πράγματα οι κατασκευαστές μικροεπεξεργαστών αναθέτουν σε κάθε εντολή ένα μνημονικό (mnemonic) και έτσι μπορεί κανείς να καταλάβει ευκολότερα το παρακάτω 1 movl $5, -4(% ebp) 2 movl $7, -8(% ebp) 3 movl -8(%ebp), %eax 4 movl -4(%ebp), %edx 1

5 leal (%edx,%eax), %eax 6 movl %eax, -12(%ebp) σε σχέση με το προηγούμενο. Συνεχίζει όμως να μην είναι ευανάγνωστο και αυτό είναι ένα σημαντικό μειονέκτημα. Άλλο μειονέκτημα είναι ότι το πρόγραμμα αυτό θα ισχύει μόνο για μικροεπεξεργαστές ενός συγκεκριμένου τύπου. Όταν αναπόφευκτα αυτοί αποσυρθούν θα πρέπει και το πρόγραμμα να επικαιροποιηθεί. Προκειμένου να αντιμετωπίσουν τα παραπάνω προβλήματα, οι επιστήμονες πληροφορικής ανέπτυξαν γλώσσες προγραμματισμού δηλαδή γλώσσες με συγκεκριμένη σημασιολογία, ανεξάρτητες από συγκεκριμένο τύπο επεξεργαστή οι οποίες όμως θα μπορούσαν με κάποιο μηχανικό και σαφή τρόπο να μετατραπούν σε εντολές εκτελέσιμες από κάποιο μικροεπεξεργαστή. Έτσι, ένα πρόγραμμα μιας κάποιας γλώσσας προγραμματισμού θα σήμαινε κάποια συγκεκριμένα πράγματα ανεξάρτητα από τον επεξεργαστή στον οποίο τελικά θα εκτελείτο. Για να δουλέψει το παραπάνω σχήμα χρειάζονται κάποια προγράμματα τα οποία θα κάνουν αυτοματοποιημένα κάποιες απαραίτητες μετατροπές. Για παράδειγμα, το παραπάνω πρόγραμμα πρόσθεσης του 5 και του 7, στην Pascal θα γραφόταν ως εξής: 1 a := 5; 2 b := 7; 3 c := a + b; Στην ορολογία των γλωσσών προγραμματισμού, εντολές σαν τις παραπάνω, γραμμένες σε κάποια γλώσσα προγραμματισμού ονομάζονται πηγαίος κώδικας (source code). Οι παραπάνω εντολές είναι προφανώς πιο ευανάγνωστες από τον κώδικα μηχανής ή την assembly. Δεν μπορούν όμως να εκτελεστούν από κάποιον επεξεργαστή. Οπότε πρέπει να υπάρξει ένα πρόγραμμα το οποίο να μετατρέπει τις παραπάνω εντολές σε κώδικα μηχανής. Το πρόγραμμα αυτό ονομάζεται μεταγλωττιστής (compiler). Ένας μεταγλωττιστής προορίζεται για μία συγκεκριμένη γλώσσα προγραμματισμού. Επίσης, αφού ο ίδιος ο μεταγλωττιστής είναι πρόγραμμα οπότε αποτελείται από εντολές που εκτελούνται από έναν συγκεκριμένο τύπο επεξεργαστή και όχι από άλλους. Για κάθε συνδυασμό γλώσσας προγραμματισμού και τύπου επεξεργαστή, χρειαζόμαστε διαφορετικό μεταγλωττιστή¹. Ένας μεταγλωττιστής γενικά διαβάζει ένα κομμάτι πηγαίου κώδικα και το μετατρέπει σε αριθμητικές εντολές για ένα συγκεκριμένο τύπο επεξεργαστή. Οι εντολές αυτές ονομάζονται αντικειμενικός κώδικας (objective code). Επιπρόσθετα, εκτός από τη μεταγλώττιση κάποιων εντολών μιας γλώσσας προγραμματισμού, κατά κανόνα χρειάζεται και η συνένωση του αντικειμενικού κώδικα με διάφορα άλλα κομμάτια αντικειμενικού κώδικα, π.χ. βιβλιοθήκες κώδικα. Αυτή τη δουλειά την κάνει ο λεγόμενος linker. Ο linker διαβάζει διάφορα κομμάτια αντικειμενικού κώδικα και τα συνενώνει σε ένα εκτελέσιμο πρόγραμμα (executable program) ή απλώς πρόγραμμα. Τελικά, η διαδικασία έχει ως εξής: Ένας προγραμματιστής γράφει ένα πρόγραμμα σε πηγαίο κώδικα για κάποια γλώσσα προγραμματισμού. Δεν έχει σημασία ο τύπος επεξεργαστή στον οποίο εργάζεται. Με το μεταγλωττιστή και το linker δημιουργεί ένα πρόγραμμα το οποίο μπορεί να δώσει σε οποιονδήποτε χρησιμοποιεί το ίδιο λειτουργικό σύστημα. Ο πηγαίος κώδικας γίνεται κατανοητός με τον ίδιο τρόπο από οποιονδήποτε προγραμματιστή τον διαβάζει. Αν και από μόνος του δεν ¹Είναι όμως εφικτό ένας μεταγλωττιστής που προορίζεται να τρέξει σε ένα συγκεκριμένο τύπο μικροεπεξεργαστή να παράξει κώδικα μηχανής για κάποιον άλλο τύπο μικροεπεξεργαστή 2

είναι εκτελέσιμος, μπορεί να μετατραπεί σε ένα εκτελέσιμο πρόγραμμα από οποιονδήποτε διαθέτει κατάλληλο μεταγλωττιστή. 2 Εισαγωγή στον προγραμματισμό σε Pascal ² Για κάθε γλώσσα προγραμματισμού το πιο διάσημο πρόγραμμα είναι εκείνο που τυπώνει στην οθόνη το μήνυμα Hello, world!. Στην Pascal ένα τέτοιο πρόγραμμα θα ήταν κάπως έτσι: 1 program hello; 2 begin 3 writeln('hello, world!'); 4 end. Αν κανείς μεταγλωττίσει τον πηγαίο κώδικα και τρέξει το εκτελέσιμο θα δει στην οθόνη του το μήνυμα Hello, world!. Το παραπάνω αν και μικρό μας δείχνει μερικά στοιχεία τα οποία θα βρίσκουμε σχεδόν σε κάθε πρόγραμμα Pascal: Η δεσμευμένη λέξη program στην πρώτη γραμμή του προγράμματος. Αν και δεν είναι κανόνας, τα περισσότερα προγράμματα με τα οποία θα ασχοληθούμε ξεκινούν με αυτήν τη δεσμευμένη λέξη, μετά το όνομα του προγράμματος (το οποίο δεν είναι κατ' ανάγκη ίδιο με το όνομα του αρχείου στο οποίο θα σώσουμε το πρόγραμμα) και στο τέλος το ελληνικό ερωτηματικό. Στις γραμμές 2 και 4 υπάρχουν οι δεσμευμένες λέξεις begin και end. Στην Pascal κάθε εκτελέσιμο πρόγραμμα πρέπει να έχει ένα μπλοκ (block) εντολών το οποίο να ξεκινάει με ένα begin και να τελειώνει με ένα end. Η εκτέλεση του προγράμματος ξεκινάει από την πρώτη εντολή αυτού του μπλοκ και συνεχίζεται με τις επόμενες μέχρις να φτάσει στην τελευταία εντολή πριν το αντίστοιχο end όπου ολοκληρώνεται η εκτέλεση του προγράμματος. Ενώ οι εντολές της Pascal συνήθως ακολουθούνται από το ελληνικό ερωτηματικό, μετά το end που ορίζει το τέλος του προγράμματος ακολουθεί η τελεία, όπως στη γραμμή 4 παραπάνω. Ένας καλός πρακτικός κανόνας είναι ότι μετά από κάθε εντολή της Pascal ακολουθεί το ελληνικό ερωτηματικό όπως στις γραμμές 1 και 3 παραπάνω. Αυτό δεν είναι απόλυτα αληθές γιατί στην πραγματικότητα το ελληνικό ερωτηματικό είναι ο χαρακτήρας διαχωρισμού και όχι τερματισμού εντολών. Στην πραγματικότητα δηλαδή το ελληνικό ερωτηματικό πρέπει να μπαίνει ανάμεσα από οποιεσδήποτε δύο εντολές της Pascal και όχι μετά από κάθε μία. Μερικές παρατηρήσεις σχετικά με αυτό το σημείο είναι χρήσιμο να γίνουν: Η λέξη begin στη γραμμή 2 δεν είναι εντολή. Απλώς σηματοδοτεί την αρχή μιας ομάδας εντολών που ξεκινάει από το begin και τελειώνει με το αντίστοιχο end. Η Pascal θεωρεί όλο αυτόν τον κώδικά ως μία σύνθετη εντολή. Οπότε δεν τίθεται θέμα να μπει ερωτηματικό μετά το begin γιατί η σύνθετη εντολή που ξεκινάει με αυτό δεν τελειώνει εκεί αλλά τελειώνει στο end. Μια άλλη παρατήρηση είναι ότι το ερωτηματικό στο τέλος της γραμμής 3 θα μπορούσε να παραληφθεί. Αναφέραμε ότι το ερωτηματικό είναι ο χαρακτήρας διαχωρισμού εντολών, δηλαδή χωρίζει μία εντολή από την επόμενή της. Στη συγκεκριμένη περίπτωση δεν υπάρχει άλλη εντολή από την writeln ²Οι παρούσες σημειώσεις δεν έχουν σκοπό να αποτελέσουν ένα πλήρη και εξαντλητικό εγχειρίδιο της Pascal αλλά να λειτουργήσουν ως βοήθημα στο εργαστηριακό μάθημα 3

της γραμμής 3 μέσα στο μπλοκ που ορίζεται από τα begin-end οπότε το ερωτηματικό δεν είναι απαραίτητο. 3 Μεταβλητές Είναι απαραίτητο στον προγραμματισμό να μπορούμε να αναφερθούμε σε θέσεις μνήμης του υπολογιστή στις οποίες να μπορούμε να αποθηκεύσουμε αποτελέσματα ή να διαβάσουμε τα περιεχόμενά τους. Οι θέσεις μνήμης σε κάθε υπολογιστή είναι διατεταγμένες (οπότε και αριθμημένες). Είναι πρακτικά δύσκολο για έναν προγραμματιστή να αναφέρεται σε θέσεις μνήμης βάσει του αύξοντα αριθμού τους. Οι άνθρωποι θυμούνται ονόματα ευκολότερα από ότι αριθμούς. Επίσης είναι πιο εύκολο να γράψει κανείς λανθασμένα έναν αριθμό από ότι ένα όνομα. Για αυτούς τους λόγους κάθε γλώσσα προγραμματισμού δίνει τη δυνατότητα ορισμού μεταβλητών (variables). Ο προγραμματιστής χρησιμοποιεί μεταβλητές απλώς αναφέροντας το όνομά τους. Ο μεταγλωττιστής αναλαμβάνει να αντιστοιχίσει τις μεταβλητές σε θέσεις μνήμης. Έτσι όποτε ο προγραμματιστής γράφει το όνομα μιας μεταβλητής ο μεταγλωττιστής δημιουργεί κώδικα μηχανής που αναφέρεται στη θέση μνήμης που αντιστοίχισε στη μεταβλητή χωρίς ο προγραμματιστής να ασχολείται με τις τεχνικές λεπτομέρειες. Στην Pascal πρέπει πριν χρησιμοποιήσουμε μια μεταβλητή να τη δηλώσουμε (declare). Αυτό γίνεται όπως στο παρακάτω πρόγραμμα στη γραμμή 3. Μία δήλωση μεταβλητής έχει τη μορφή onoma_metavlitis: typos_metavlitis;. Ως όνομα μπορούμε να χρησιμοποιήσουμε οποιοδήποτε νόμιμο όνομα (identifier) δηλαδή μια ακολουθία γραμμάτων ή/και αριθμών η οποία δεν ξεκινάει με αριθμό. Μετά ακολουθεί μία άνω-κάτω τελεία και τέλος ο τύπος της μεταβλητής που στην Pascal μπορεί να είναι integer, real, boolean ή string ³. Στο τέλος μπαίνει το ελληνικό ερωτηματικό. Όλες οι δηλώσεις πρέπει να είναι γραμμένες πριν από το begin με το οποίο ξεκινάει το πρόγραμμα. Πριν από τις δηλώσεις πρέπει να υπάρχει η δεσμευμένη λέξη var. Μπορεί κανείς να δηλώσει τις μεταβλητές που θα χρησιμοποιηθούν σε κάποιο πρόγραμμα είτε μία-μία είτε περισσότερες χωρισμένες με κόμματα αρκεί να είναι ίδιου τύπου: i, j, k: integer. Στο παράδειγμά μας στη γραμμή 7 βλέπουμε επίσης πώς μπορούμε να τυπώσουμε την τιμή μιας μεταβλητής χρησιμοποιώντας την `εντολή' writeln⁴. Η writeln ακολουθείται από ένα ζευγάρι παρενθέσεων μέσα στο οποίο βάζουμε ότι θέλουμε να τυπωθεί στην οθόνη. Μπορούμε να βάλουμε ονόματα μεταβλητών είτε μηνύματα μέσα σε μονά εισαγωγικά. Επίσης μπορούμε να βάλουμε περισσότερα από ένα ορίσματα στις παρενθέσεις αρκεί να τα χωρίζουμε με κόμματα. Στη γραμμή 6 του παραδείγματός μας βλέπουμε πώς μπορούμε να δώσουμε σε μία μεταβλητή την τιμή που θα δώσει ο χρήστης του προγράμματος στο πληκτρολόγιο. Η εντολή readln συντάσσεται όπως και η writeln δηλαδή ακολουθείται από ένα ζευγάρι παρενθέσεων μέσα στο οποίο αναφέρονται τα ορίσματά της δηλαδή οι μεταβλητές που θα πάρουν τιμή από το πληκτρολόγιο. Και σε αυτήν την περίπτωση μπορούμε να χρησιμοποιήσουμε περισσότερα από ένα ορίσματα χωρισμένα με κόμματα αλλά προς το παρόν στα παραδείγματά μας θα χρησιμοποιούμε ένα και μόνο όνομα μεταβλητής. Τέλος, στη γραμμή 8 φαίνεται πώς μπορούμε να δώσουμε μία τιμή σε κάποια μεταβλητή. Ο τελεστής απόδοσης τιμής := συντάσσεται ως εξής: Στα αριστερά του μπαίνει το όνομα της μεταβλητής στην οποία θα δοθεί τιμή. Στα δεξιά του μπαίνει μια οποιαδήποτε παράσταση που δίνει απότέλεσμα ³Θα δούμε στη συνέχεια ότι υπάρχουν και άλλες δυνατότητες πέρα από αυτούς τους βασικούς τύπους ⁴Στην πραγματικότητα η writeln δεν είναι εντολή αλλά διαδικασία. Θα δούμε λεπτομέρειες στη συνέχεια. 4

ίδιου τύπου με τη μεταβλητή. Στο παράδειγμά μας όπου η μεταβλητή i είναι ακέραια, πρέπει και η έκφραση δεξιά από το := να είναι ακέραια. Η λειτουργία της είναι η εξής: Πρώτα υπολογίζεται η τιμή της παράστασης δεξιά από το :=. Η παράσταση μπορεί να περιέχει και την ίδια τη μεταβλητή. Όταν τελειώσουν οι υπολογισμοί, το αποτέλεσμα που προκύπτει αποθηκεύεται στη μεταβλητή αριστερά από το :=. 1 program var1; 3 i: integer; 4 begin 5 write(' Dose tin timi tis i: '); 6 readln(i); 7 writeln('h timi poy edoses einai ', i); 8 i := i + 5; 9 writeln('an tou pros8eseis to 5 givetai ', i); 10 end. 4 Εντολή if Μία άλλη συνηθισμένη δομή στον προγραμματισμό είναι η εκτέλεση εντολών υπο συνθήκη. Δηλαδή κάποιες εντολές εκτελούνται αν ισχύει κάποια συγκεκριμένη προϋπόθεση. Στην Pascal η απλή μορφή αυτής της εντολής είναι η παρακάτω 1 if synthiki then 2 entoli; 3... Ο τρόπος λειτουργίας είναι ο εξής: Αρχικά υπολογίζεται η τιμή της συνθήκης της γραμμής 1. Αν είναι αληθής τότε εκτελείται η εντολή της γραμμής 2 και η εκτέλεση του προγράμματος συνεχίζεται στη γραμμή 4. Αν η συνθήκη δεν είναι αληθής, τότε η εντολή της γραμμής 3 παρακάμπτεται και η εκτέλεση του προγράμματος συνεχίζεται με τη γραμμή 4. Ως λογική συνθήκη μπορεί να χρησιμοποιηθεί οποιαδήποτε έκφραση μπορεί να αποτιμηθεί ως αληθής ή ψευδής, π.χ. 7 > 5, i <= 10, i > j ⁵. Στη δεύτερή της μορφή η εντολή if δίνει τη δυνατότητα εκτέλεσης μιας εναλλακτικής εντολής στην περίπτωση που η συνθήκη δεν ισχύει. 1 if synthiki then 2 entoli 3 else 4 entoli2; 5... Σε αυτήν τη μορφή αν η συνθήκη ισχύει τότε εκτελείται η εντολή της γραμμής 2 και η εντολή μετά το else παρακάμπτεται οπότε η εκτέλεση του προγράμματος προχωράει με τη γραμμή 5. Αν ⁵Θα δούμε στη συνέχεια αναλυτικά όλα τα είδη τελεστών που μπορούν να χρησιμοποιηθούν σε τέτοιου είδους εκφράσεις. 5

όμως η συνθήκη δεν ισχύει τότε παρακάμπτεται η εντολή της γραμμής 2 και εκτελείται εκείνη της γραμμής 4. Και σε αυτήν την περίπτωση η εκτέλεση συνεχίζεται από τη γραμμή 5. Είναι σημαντικό να παρατηρήσετε ότι στην δεύτερη περίπτωση δεν μπαίνει ερωτηματικό μετά την εντολή της γραμμής 2. Επίσης πρέπει να πούμε ότι συντακτικά η Pascal θεωρεί ολόκληρο το σχήμα των γραμμών 1 και 2 στο πρώτο παράδειγμα ή το σχήμα των γραμμών 1 έως 4 στο δεύτερο ως μία (σύνθετη) εντολή. Οπότε μία if μπορεί να χρησιμοποιηθεί όπου θα έμπαινε μια απλή εντολή μέσα σε μια άλλη if. Δείτε το παρακάτω παράδειγμα υπολογισμού φόρου στο οποίο υπολογίζεται η φορολογία κάποιου σύμφωνα με τους εξής κανόνες: Αν έχει εισόδημα κάτω από 5 χιλιάδες ευρώ δεν πληρώνει τίποτα, αν έχει από 5 έως 12 πληρώνει το 10 τοις εκατό του ποσού πάνω από 5000 και αν έχει περισσότερα πληρώνει επιπλέον 20 τοις εκατό για το ποσό πάνω από 12 χιλιάδες. 1 program foros1; 3 eisodima, foros: real; 4 5 begin 6 write(' Dose to etisio eisodima sou: '); 7 readln( eisodima); 8 9 if ( eisodima <= 5000) then 10 foros := 0 11 else 12 if ( eisodima <= 12000) then 13 foros := ( eisodima - 5000) * 0.1 14 else 15 foros := 7000 * 0.1 + ( eisodima - 12000) * 0.2; 16 writeln('tha pliroseis foro ', foros :0:2); 17 end. Στο προηγούμενο χρησιμοποιήσαμε μεταβλητές τύπου real προκειμένου να μπορέσουμε να πραγματοποιήσουμε πράξεις κινητής υποδιαστολής (με δεκαδικά ψηφία). Παρατηρήστε ότι μετά το else της γραμμής 11, δεν ακολουθεί μια απλή εντολή όπως στη γραμμή 10 αλλά μία δεύτερη if. Επίσης παρατηρήστε ότι τόσο στη γραμμή 10 όσο και στη γραμμή 13 οι εντολές δεν ακολουθούνται από ερωτηματικό γιατί βρίσκονται ακριβώς πριν από ένα else. 5 Εντολή for Μια άλλη απαραίτητη δομή στον προγραμματισμό είναι και αυτή της επανάληψης. Παρουσιάζεται η ανάγκη να επαναληφθούν κάποιες εντολές είτε συγκεκριμένο είτε όχι αριθμό φορών. Στην Pascal δίνονται τρεις διαφορετικές εναλλακτικές για αυτό το σκοπό. Η απλούστερη είναι η for που μας δίνει τη δυνατότητα να εκτελέσουμε ένα αριθμό επαναλήψεων, εκ των προτέρων γνωστό. Συντάσσεται όπως εδώ: 1 for variable := start to end do 2 entoli; 6

Σε κάθε εντολή for χρειάζεται μια μεταβλητή ελέγχου (control variable) η οποία θα διατρέξει ένα σύνολο τιμών όπως η variable παραπάνω. Αυτή διατρέχει τις τιμές από start μέχρι end διαδοχικά δηλαδή πραγματοποιούνται end-start+1 επαναλήψεις. Σε κάθε επανάληψη εκτελείται η entoli. Στο παραπάνω παράδειγμα δηλαδή αρχικά η μεταβλητή ελέγχου variable παίρνει την τιμή start και εκτελείται η entoli. Μετά η μεταβλητή παίρνει την τιμή start+1 και εκτελείται η entoli, και ούτω καθεξής μέχρι η μεταβλητή να πάρει την τιμή end (συμπεριλαμβανομένης). Αν η τιμή start είναι μεγαλύτερη από την end δεν εκτελείται καμία επανάληψη. Σε αυτήν την περίπτωση μπορούμε αντί για τη λέξη to στη γραμμή 1 να χρησιμοποιήσουμε τη λέξη downto ώστε η μεταβλητή ελέγχου να προχωράει με βήμα 1 αντί για βήμα +1. Μια εντολή επανάληψης όπως η for παραπάνω στον προγραμματισμό ονομάζεται βρόχος (loop). Η εντολή που επαναλαμβάνεται ονομάζεται σώμα (body) του βρόχου. Το παρακάτω πρόγραμμα εκτελεί μια τέτοια επανάληψη για τις τιμές από 1 μέχρι και n όπου το n δίνεται από το χρήστη, προκειμένου να υπολογίσει το άθροισμα των n όρων μιας αριθμητικής προόδου με πρώτο όρο το 1 και βήμα 1. 1 program progression; 3 total, i, n: integer; 4 5 begin 6 write('dose to n: '); 7 readln(n); 8 9 total := 0; 10 for i := 1 to n do 11 total := total + i; 12 13 writeln('to a8roisma tvn orwv eivai: ', total); 14 end. 6 Εντολή while-do Μια άλλη εντολή με την οποία πραγματοποιούνται επαναλήψεις είναι η while-do. Συντάσσεται όπως εδώ: 1 while synthiki do 2 entoli; 3... Η συνθήκη είναι όπως και στην εντολή if. Η λειτουργία της while είναι η εξής: Αρχικά εκτιμάται η συνθήκη. Αν είναι αληθής τότε εκτελείται η εντολή μία φορά και η ροή του προγράμματος επανέρχεται στη while, ξαναεκτιμάται η συνθήκη και ούτω καθεξής. Η διαδικασία σταματάει όταν κάποια στιγμή η συνθήκη πάψει να ισχύει οπότε η while τερματίζεται και η εκτέλεση του προγράμματος συνεχίζει από την επόμενη ετνολή (στη γραμμή 3 στο παραπάνω). Η εντολή που εκτελείται σε κάθε επανάληψη ονομάζεται και αυτή σώμα του βρόχου while όπως και στην περίπτωση της for 7

παραπάνω. Παρατηρήστε ότι υπάρχει περίπτωση το σώμα της while να μην εκτελεστεί ούτε μία φορά αν στην πρώτη φορά που υπολογιστεί η συνθήκη είναι ψευδής. Η while χρησιμοποιείται σε περιπτώσεις που ο αριθμός των επαναλήψεων που θα πραγματοποιηθούν δεν είναι εκ των προτέρων γνωστός αλλά είναι γνωστή μία συνθήκη τερματισμού. Δείτε και το παρακάτω παράδειγμα υπολογισμού όρων της ακολουθίας Fibonacci. Προσέξτε ότι επειδή στην περίπτωση αυτή χρειάζεται να επαναλαμβάνονται περισσότερες από μία εντολές τις περικλείνουμε σε ένα μπλοκ (block) begin-end. Μέσα στο μπλοκ μπορούμε να έχουμε οσεσδήποτε εντολές. Συντακτικά όμως η Pascal θεωρεί όλο το μπλοκ ως μία εντολή. 1 program fib; 3 a, b, c: integer; 4 limit: integer; 5 6 begin 7 write(' Dose to ano fragma twv orwv poy 8a ypologistouv: '); 8 readln(limit); 9 10 a := 1; 11 b := 1; 12 write(a, ' '); 13 14 while (b < limit) do 15 begin 16 write(b, ' '); 17 c := a + b; 18 a := b; 19 b := c; 20 end; 21 end. 7 Εντολή repeat-until Ακόμα μια εντολή επανάληψης στην Pascal είναι η repeat-until. Η σύνταξή της είναι όπως παρακάτω: 1 repeat 2 entoli1; 3 entoli2; 4... 5 until synthiki; Η λειτουργία είναι η ακόλουθη: Οι εντολές που βρίσκονται από το repeat μέχρι το until εκτελούνται διαδοχικά. Στη συνέχεια υπολογίζεται η τιμής της συνθήκης. Αν η συνθήκη δεν είναι αληθής τότε η ροή εκτέλεσης του προγράμματος μεταφέρεται πάλι στην αρχή του βρόχου, οι εντολές επαναλαμβάνονται διαδοχικά και ούτω καθεξής. Με άλλα λόγια ο βρόχος επαναλαμβάνεται μέχρι να 8

ισχύσει η συνθήκη οπότε και τερματίζεται. Μια παρατήρηση σχετικά με αυτήν τη μορφή επανάληψης σε σχέση με το βρόχο while-do είναι ότι σε αυτήν την περίπτωση οι εντολές του βρόχου θα εκτελεστούν τουλάχιστον μία φορά. Μία δεύτερη παρατήρηση είναι ότι δεν χρειάζεται οι εντολές του βρόχου να κλειστούν μέσα σε ένα begin-end. Δείτε το πρόγραμμα υπολογισμού όρων της ακολουθίας Fibonacci με χρήση της repeat-until. 1 program fib; 3 a: integer; 4 b, c: integer; 5 limit: integer; 6 7 begin 8 a := 1; 9 b := 1; 10 write(' Dose to orio'); 11 readln( limit); 12 13 repeat 14 c := a + b; 15 a := b; 16 b := c; 17 write(c, ' '); 18 until a + b > limit; 19 20 writeln; 21 end. 8 Ασκήσεις Αφού διαβάσετε τα προηγούμενα παραδείγματα προσπαθήστε να τα ξαναγράψετε χωρίς να τα αντιγράφετε. Μπορείτε να κλέψετε λίγο αρκεί να ξαναπροσπαθήσετε μετά. Γράψτε ένα πρόγραμμα που ζητάει από το χρήστη να εισάγει πέντε αριθμούς από το πληκτρολόγιο. Το πρόγραμμα θα μετράει πόσες φορές ο χρήστης έδωσε τον αριθμό 42. Ένας τρόπος θα ήταν να χρησιμοποιήσετε μια εντολή επανάληψης, μία if και ένα μετρητή. Μην ξεχάσετε να τον αρχικοποιήσετε. Γράψτε ένα πρόγραμμα το οποίο ζητάει ξανά και ξανά αριθμούς από το χρηστη και τους αθροίζει. Αν ο χρήστης δώσει έναν αριθμό μεγαλύτερο από το 10, τότε οι επαναλήψεις θα σταματούν και θα τυπώνεται το άθροισμα. Μπορείτε να κάνετε μία έκδοση του προγράμματος που συνυπολογίζει στο άθροισμα τον αριθμό που είναι μεγαλύτερος από 10 και μία που να μην τον υπολογίζει; Γράψτε ένα πρόγραμμα που να ζητάει από το χρήστη τις τιμές δύο μεταβλητών a και b. Αν ο χρήστης δώσει την ίδια τιμή και γαι τις δύο, το πρόγραμμα θα του λέει ότι αυτό 9

δεν επιτρέπεται και θα του λέει να ξαναδώσει δύο άλλες μέχρι να πειστεί να δώσει δύο διαφορετικές. Στη συνέχεια τυπώνει τις τιμές τους και μετά τις ανταλλάσσει. Δηλαδή η τιμή της a πάει στη b και το αντίστροφο. Τέλος το πρόγραμμα ξανατυπώνει τις τιμές (για να μπορέσετε να δείτε ότι δούλεψε). Μάλλον θα χρειαστείτε λίγο παραπάνω χώρο. Ίσως δύσκολη... Γράψτε ένα πρόγραμμα που θα ζητάει από το χρήστη να εισάγει πέντε αριθμούς από το πληκτρολόγιο. Το πρόγραμμα θα μετράει πόσοι είναι από το ένα μέχρι και το πέντε και πόσοι είναι από το 6 μέχρι και το 10. Αν ο χρήστης δώσει έναν αριθμό μεγαλύτερο από 10 το πρόγραμμα δε θα τον μετράει και θα λέει στο χρήστη να ξαναπροσπαθήσει. Το άθροισμα των δύο αριθμών που θα τυπώσει το πρόγραμμα θα πρέπει να είναι πέντε άσχετα από το πόσες φορές ο χρήστης θα δώσει `λάθος' νούμερα, δηλαδή μεγαλύτερα από το δέκα. Μια while ή μια repeat θα ήταν βολικότερη από μια for. Θα πρέπει να έχετε επίσης δύο μετρητές που θα αυξάνονται στη μία (n 5) ή στην άλλη (5 < n 10) περίπτωση και φυσικά τα μεγαλύτερα από 10 δεν πιάνονται. Θα πρέπει να βάλετε και μία if που θα τσεκάρει τις περιπτώσεις αριθμών μεγαλύτερων του δέκα και θα τυπώνει το ανάλογο μήνυμα. Επίσης θα πρέπει να βρείτε ένα τρόπο να σταματήσετε τη διαδικασία όταν δοθούν πέντε αριθμοί μέσα στα όρια. Το παρακάτω πρόγραμμα τυπώνει ένα ωραίο τριγωνάκι. 1 program test1; 3 i, j, k : integer; 4 5 begin 6 for i := 1 to 5 do 7 begin 8 for j := 1 to i do 9 write(j); 10 writeln; 11 end; 12 end. Μπορείτε να γράψετε ένα πρόγραμμα το οποίο θα τυπώνει το παρακάτω; 1 21 321 4321 54321 10