ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β. Καβακλή Χειμερινό Εξάμηνο 2001 1 Σύνολο χαρακτήρων της Pascal Για να κωδικοποιήσουμε στον ΗΥ ένα πρόγραμμα χρησιμοποιούμε : το αλφάβητο της γλώσσας τους συντακτικούς της κανόνες Το σύνολο χαρακτήρων καθορίζει το ποιους χαρακτήρες μπορούμε να χρησιμοποιήσουμε όταν γράφουμε τα προγράμματά μας Η Pascal χρησιμοποιεί τα γράμματα του λατινικού αλφάβητου, κεφαλαία: 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 και μικρά: a b c d e f g h i j k l m n p q r s t u v w x y z τα ψηφία του δεκαδικού συστήματος: 0 1 2 3 4 5 6 7 8 9 το κενό (blank) ορισμένους ειδικούς χαρακτήρες: + - * / = < > [ ]., : ; ^ ( ) 2 1
Παράδειγμα: ένα απλό πρόγραμμα επικεφαλίδα (heading) κορμός (blck) prgram hell (utput); {τυπώνει Hell there} begin write(utput, Hell there ); writeln(utput) end {hell}. 3 Ανατομία ενός προγράμματος prgram: δεσμευμένη λέξη (πρόγραμμα) hell: αναγνωριστικό (identifier) καθορίζει το όνομα του προγράμματος τα αναγνωριστικά εκλέγονται από τον προγραμματιστή και δηλώνουν τη σημασία του αφηρημένου αντικειμένου που αντιπροσωπεύουν πχ SALUTE, first, prg1pas, P007 (utput): παράμετρος του προγράμματος οι παράμετροι του προγράμματος προσδιορίζουν από πού παίρνει τα δεδομένα ένα πρόγραμμα και που στέλνει τα αποτελέσματα η λέξη utput (έξοδος) προσδιορίζει ότι τα αποτελέσματα θα σταλούν στην οθόνη του τερματικού μας ; : διαχωριστικό {τυπώνει Hell there} : σχόλιο ακολουθία χαρακτήρων που περιγράφουν τι κάνει το πρόγραμμα αγνοούνται από το μεταγλωττιστή επεκτείνονται σε περισσότερες της μιας γραμμής 4 2
Συντακτικός κανόνας Συντακτικός κανόνας στην Ελληνική γλώσσα: Ένα αναγνωριστικό (όνομα) πρέπει να αρχίζει με ένα γράμμα του λατινικού αλφάβητου και μπορεί να ακολουθείται μ ένα ή περισσότερα γράμματα του λατινικού αλφαβήτου ή ψηφίο Σε BNF μορφή <αναγνωριστικό>::=<γράμμα>{<γράμμα> <ψηφίο>} Συντακτικό διάγραμμα: αναγνωριστικό γράμμα γράμμα ψηφίο 5 Backus Naur Frm Backus Naur frm: μια μεταγλώσσα, δηλ. μια γλώσσα που μπορεί να χρησιμοποιηθεί για να περιγράψει συνοπτικά μια άλλη γλώσσα μετασύμβολο ::= < > { } σημασία ορίζεται ως η συντακτική κατηγορία ή διαζευκτικό μηδέν ή περισσότερες φορές ότι περικλείεται στα άγκιστρα 6 3
Σύνταξη γραμμάτων και ψηφίων <γράμμα>::= 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 a b c d e f g h i j k l m n p q r s t u v w x y z <ψηφίο>::= 0 1 2 3 4 5 6 7 8 9 ψηφίο 0 1 2 3 4 5 6 7 8 9 7 Κορμός προγράμματος Ο κορμός του προγράμματος αποτελείται από: μέρος ορισμών μέρος δηλώσεων μέρος εντολών (σώμα προγράμματος) Το σώμα ενός προγράμματος αρχίζει με την ειδική λέξη begin τελειώνει με την ειδική λέξη end μεταξύ των begin και end μπορούν να υπάρχουν εντολές που διαχωρίζονται μεταξύ τους με το ; Η εντολή write (utput, Hell there ) γράφει στην έξοδο (utput) ότι βρίσκεται ανάμεσα στις αποστρόφους, όπως ακριβώς είναι Η εντολή writeln (utput) αλλάζει γραμμή (γράφει μια νέα γραμμή στην έξοδο) Η ειδική λέξη end στο τέλος του προγράμματος ακολουθείται από μια τελεία (.) 8 4
Σύνταξη ενός προγράμματος της Pascal (BNF) <πρόγραμμα>::= <επικεφαλίδα προγράμματος>; <κορμός προγράμματος>. <επικεφαλίδα προγράμματος>::= prgram <αναγνωριστικό>(<παράμετροι προγράμματος>) <κορμός προγράμματος>::= <μέρος ορισμών και δηλώσεων> <μέρος εντολών> <μέρος εντολών>::= <σύνθετη εντολή> <σύνθετη εντολή> ::= begin <εντολή> {; <εντολή> }end <παράμετροι προγράμματος> ::= <αναγνωριστικό> {, <αναγνωριστικό>} 9 πρόγραμμα Σύνταξη ενός προγράμματος της Pascal (Συντακτικό διάγραμμα) prgram αναγνωριστικό ( παράμετροι προγράμματος ) κορμός προγράμματος. κορμός προγράμματος μέρος ορισμών και δηλώσεων μέρος εντολών μέρος εντολών σύνθετη εντολή σύνθετη εντολή begin εντολή end ; παράμετροι προγράμματος αναγνωριστικό, 10 5
Παράδειγμα: απλό πρόγραμμα 2 prgram manyhells (utput); {τυπώνει πολλά χαιρετίσματα} begin write (utput, Hell there ); write (utput,!hell my friend hell. ); writeln (utput); write (utput, Hw are yu? ); writeln (utput) end {manyhells}. Hell there!hell my friend hell. Hw are yu? 11 Δεδομένα Τα δεδομένα παριστάνουν πληροφορίες που πρέπει να δοθούν σε ένα πρόγραμμα. Το πρόγραμμα επεξεργάζεται τα δεδομένα για να παράγει αποτελέσματα Τα δεδομένα προέρχονται από το εξωτερικό περιβάλλον (συσκευές εισόδου) ή τη βοηθητική μνήμη του υπολογιστή (συσκευές μαγνητικών δίσκων) Αντιπροσωπεύουν γεγονότα, παρατηρήσεις, μετρήσεις, ιδέες για τον κόσμο κ.α. 12 6
Τύποι Δεδομένων Τα δεδομένα έχουν κάποιο τύπο (type) που ορίζει τη σημασία τους, το σύνολο των τιμών (values) που μπορούν να πάρουν και περιορίζει τι μπορεί να γίνει με αυτές. Η Pascal υποστηρίζει 4 βασικούς απλούς τύπους (simple types) δεδομένων: integer: υποσύνολο των ακεραίων αριθμών real: υποσύνολο των πραγματικών αριθμών blean: παίρνουν τιμές αλήθεια ή ψέμα char: υποσύνολο των χαρακτήρων Η Pascal εφαρμόζει αυστηρό έλεγχο τύπων, δεν επιτρέπει την ανάμειξη δεδομένων διαφόρων τύπων πχ δεν μπορεί να γίνει πολλαπλασιασμός ενός δεδομένου τύπου integer με ένα δεδομένου τύπου char 13 Σταθερές Μερικά από τα δεδομένα που χρησιμοποιούνται σε ένα πρόγραμμα δεν αλλάζουν ποτέ Τα δεδομένα αυτά μπορούν να παρασταθούν με σταθερές (cnstants) Οι ορισμοί των σταθερών ενός προγράμματος ακολουθούν την επικεφαλίδα του και αρχίζουν με την ειδική λέξη cnst cnst meresergasias = 5; asterisks = * ; nai = true; pi = 3.14159265368; Ο μεταγλωττιστής κατά τη διάρκεια της μεταγλώττισης αντικαθιστά όλα τα ονόματα των σταθερών του προγράμματος με τις αντίστοιχες τιμές τους 14 7
Μεταβλητές Μεταβλητές (variables): δεδομένα τα οποία υπόκεινται σε αλλαγή π.χ. τρέχον άθροισμα σ ένα υπολογιστή τσέπης Οι μεταβλητές παριστάνουν θέσεις της κύριας μνήμης του υπολογιστή Η «τιμή» μιας μεταβλητής αναφέρεται στο περιεχόμενο της θέσης μνήμης που αντιστοιχεί στη μεταβλητή αυτή Μπορούμε να χρησιμοποιήσουμε όσες μεταβλητές χρειαζόμαστε και να τις ονομάσουμε όπως μας βολεύει 15 Δήλωση μεταβλητών Οι δηλώσεις των μεταβλητών ακολουθούν τους ορισμούς των σταθερών (αν αυτοί υπάρχουν) var merkamat: integer; aktina, periferia, emvadn: real; simi_stixis: char; vrethike, petixe: blean; Η δήλωση μιας μεταβλητής αντιστοιχίζει απλά το αναγνωριστικό της με τη διεύθυνση μιας θέσης της μνήμης του υπολογιστή και περιγράφει τον τύπο των τιμών που μπορούν να αποθηκευτούν στη θέση αυτή Κατά τη δημιουργία της, η τιμή μιας μεταβλητής είναι αόριστη (το τυχαίο περιεχόμενο της θέσης μνήμης του υπολογιστή τη στιγμή που δημιουργείται η μεταβλητή). 16 8
Παράδειγμα merkamat aktina periferia emvadn simi_stixis vrethike petixe αόριστη τιμή τύπου integer αόριστη τιμή τύπου real αόριστη τιμή τύπου real αόριστη τιμή τύπου real αόριστη τιμή τύπου char αόριστη τιμή τύπου blean αόριστη τιμή τύπου blean 17 Εντολές εκχώρησης Οι μεταβλητές ενός προγράμματος παίρνουν τιμές μέσω εντολών εκχώρησης aktina := 3.0; periferia := 2 * pi * aktina; simi_stixis :=! ; merkamat := 5000*meresergasias; vrethike := alhthia; Η εκτέλεση μιας εντολής εκχώρησης αλλάζει την τιμή της μεταβλητής που βρίσκεται στο αριστερό σκέλος της εντολής Η τιμή που είχε η μεταβλητή πριν από την εκτέλεση της εντολής εκχώρησης χάνεται για πάντα Όλες οι μεταβλητές μιας εντολής εκχώρησης πρέπει να έχουν δηλωθεί. Όλες οι μεταβλητές που βρίσκονται στο δεξί μέλος μιας εντολής εκχώρησης πρέπει οπωσδήποτε να έχουν ήδη πάρει (ορισμένες) τιμές 18 9
Παράδειγμα: άθροισμα ακεραίων prgram athrisma (utput); {βρίσκει το άθροισμα 2 ακεραίων} var a, b, c: integer; begin a:= 357; b:= -186; c:= a+b; write(utput, t athrisma tvn 357 kai 186 ); write(utput, einai is me, c); writeln(utput) end {athrisma}. t athrisma tvn 357 kai 186 einai is me 171. 19 Τιμές τύπου Integer Ο τύπος integer μας επιτρέπει να διαβάζουμε να επεξεργαζόμαστε και να τυπώνουμε τους ακέραιους αριθμούς που μπορούν να αποθηκευτούν σε έναν υπολογιστή Το σύνολο των ακεραίων τιμών που μπορούν να αποθηκευτούν σε έναν υπολογιστή είναι ένα γνήσιο υποσύνολο των ακεραίων: -maxint, -maxint + 1,, -1, 0, 1,, +maxint - 1, +maxint Η τομή της σταθεράς maxint εξαρτάται από το μήκος της λέξης του ΗΥ που χρησιμοποιούμε μήκος λέξης 16: maxint = 32726 μήκος λέξης 32: maxint = 2147483647 Οι αριθμητικές πράξεις σε αντικείμενα τύπου integer εκτελούνται ορθά μόνον όταν όλοι οι όροι, τα ενδιάμεσα αποτελέσματα και το τελικό αποτέλεσμα βρίσκονται στην περιοχή [-maxint,, maxint] Το φαινόμενο όπου ένας από τους τελεστέους βρίσκεται έξω από την περιοχή αυτή ονομάζεται υπερχείλιση (verflw) 20 10
Σύνταξη ακεραίων στην Pascal ακέραιος δεκαδικό ψηφίο + - <ακέραιος>::=<απρόσημος ακέραιος> +<απρόσημος ακέραιος> -<απρόσημος ακέραιος> <απρόσημος ακέραιος>::=<δεκαδικό ψηφίο>{<δεκαδικό ψηφίο>} cnst thetiks = +1; arnitiks = -thetiks; megists = maxint; elaxists = -maxint; amessdrash = 100; bhma = -15 Οι Οι ακέραιοι ακέραιοι δεν δεν επιτρέπεται επιτρέπεται να να περιέχουν περιέχουν κόμματα κόμματα var x,y,z: integer; akerais1, akerais2, athrisma: integer; 21 Παραστάσεις τύπου integer Αριθμητικοί τελεστές: + άθροισμα - διαφορά * γινόμενο div (ακέραιο) πηλίκο md (ακέραιο) υπόλοιπο Άλγεβρα (-a + b)c ab c a + b c x(y+w(3-v)) y+2 x+4 Pascal (-a+b) *c a*b div c a+b div c x*(y+w*(3-v)) (y+2) div (x+4) 22 11
Προκαθορισμένες συναρτήσεις H Pascal διαθέτει προκαθορισμένες συναρτήσεις που παίρνουν ως παράμετρο (όρισμα) ένα αντικείμενο τύπου integer και επιστρέφουν αποτέλεσμα επίσης τύπου integer sqr(x) δίνει το τετράγωνο του x, δηλ x*x abs(x) δίνει την απόλυτη τιμή του x, δηλ. τον x αν ο x >= 0 και τον x αν x < 0 Παράδειγμα: Άλγεβρα y 4 y 7 x 2 x + 3 Pascal sqr(sqr(y)) ή sqr(y*y) ή y*y*y*y abs(y 7) abs(sqr(x) x +3) 23 Είσοδος αντικειμένων τύπου integer Η είσοδος των δεδομένων τύπου integer επιτυγχάνεται με την εντολή read (διάβασε) που έχει τη γενική μορφή: read (input, λίστα μεταβλητών τύπου integer) <λίστα μετμαβλητών>::=<μεταβλητή>{,<μεταβλητή>} Παράδειγμα: read (input, a); read (input, alpha, beta, gama); οι τιμές που πληκτρολογούνται πρέπει να ξεχωρίζονται μεταξύ τους με ένα ή περισσότερα διαστήματα ή κενές γραμμές Η εκτέλεση της εντολής read έχει ως αποτέλεσμα την ανάγνωση των διαδοχικών τιμών που πληκτρολογούνται και την εκχώρηση των τιμών αυτών στις μεταβλητές της λίστας Για να μπορεί ένα πρόγραμμα να διαβάσει δεδομένα που πληκτρολογούνται πρέπει να περιλαμβάνει τη λέξη inut (είσοδος) στις παραμέτρους του: prgram hell (input); 24 12
Έξοδος αντικειμένων τύπου integer Για να μπορέσει ένα πρόγραμμα να εμφανίσει τα αποτελέσματά του στην οθόνη πρέπει να περιλαμβάνει τη λέξη utput (έξοδος) στις παραμέτρους του prgram hell (utput); Η έξοδος των δεδομένων γίνεται με την εντολή write (γράψε): write(utput, λίστα παραστάσεων και συμβολοσειρών) Η εκτέλεση της εντολής write έχει σαν αποτέλεσμα τον υπολογισμό των παραστάσεων και την εμφάνιση των τιμών τους και των συμβολοσειρών στην οθόνη Τα αποτελέσματα εμφανίζονται στην οθόνη από αριστερά προς τα δεξιά και από πάνω προς τα κάτω Η εντολή writeln(utput) αλλάζει γραμμή 25 Παράδειγμα: υπολογισμός αθροίσματος prgram athrisma (input, utput); {βρίσκει το άθροισμα δυο οποιωνδήποτε ακεραίων} var a, b: integer; begin write (utput, parakalv plhktrlghsete 2 akeraiys ); writeln (utput); read (input, a, b); writeln (utput); write (utput, t athrisma tvn a, kai, b); writeln (utput); write (utput, einai is me, a+b); writeln (utput) end {athrisma}. parakalv plhktrlghsete 2 akeraiys 15 20 t athrisma tvn 15 kai 20 einai is me 35 26 13
Εμφάνιση ακέραιων παραστάσεων παραστάσεων Οι ακέραιες παραστάσεις εμφανίζονται σ ένα ορισμένο πλάτος πεδίου (πχ 8 χαρακτήρες) Αν το αντικείμενο που πρόκειται να εμφανιστεί έχει λιγότερους χαρακτήρες από το πλάτος πεδίου τότε εμφανίζεται στο δεξιότερο μέρος του πεδίου Η Pascal μας δίνει τη δυνατότητα να καθορίζουμε οι ίδιοι το πλάτος του πεδίου ως εξής: write (utput, 2*x+7:5) θα τυπώσει την τιμή της ακέραιας παράστασης 2*x+7 σε πλάτος πεδίου ίσο με 5 αν το πλάτος πεδίου είναι μικρότερο απ όσο χωράει η τιμή της παράστασης τότε εμφανίζεται ολόκληρη η τιμή Δεν επιτρέπεται να διασπάμε μια συμβολοσειρά μεταξύ δύο διαφορετικών γραμμών write (utput, A KAI B ); 27 Παράδειγμα prgram asterakia (utput); begin writeln (utput, * :1); writeln (utput, * :2); writeln (utput, * :3); writeln (utput, * :4); writeln (utput, * :5); writeln (utput, * :6); end {asterakia}. * * * * * * 28 14