Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεEvangelia Hanno Τροποποιήθηκε πριν 9 χρόνια
1
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος Νικολάου
2
ΕΝΟΤΗΤΑ Ι ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διάλεξη 3η
3
Τύποι μεταβλητών (1/16) Όπως είδαμε, μπορούμε να χρησιμοποιήσουμε θέσεις του τετραδίου με συμβολικά ονόματα. Προφανώς επιλέγουμε ονόματα που είναι αντιπροσωπευτικά του ρόλου ή συμβολισμού που λαμβάνει στο πρόβλημα και στην αντίστοιχη λύση κάθε χρησιμοποιούμενη θέση του τετραδίου –Π.χ. στο προηγούμενο πρόγραμμα, έκδοση Λύση 1, ονομάσαμε το τμήμα των τριών θέσεων Numbers και όχι Names, ή Cars, η οτιδήποτε άλλο, διότι γνωρίζουμε ότι αριθμούς πρόκειται να αποθηκεύσουμε. Η χρήση των συμβολικών ονομάτων βοηθά στην ευκολότερη ανάγνωση και κατανόηση ενός προγράμματος, καθώς υπάρχουν μέσα ονομασίες απευθείας αναγνωρίσιμες από το χώρο του προβλήματος –Ο υπηρέτης δεν ενδιαφέρεται καθόλου για κάτι τέτοιο, αφού ούτως ή άλλως θα αντιστοιχίσει κάθε συμβολικό όνομα σε θέση τετραδίου κατά την εκτέλεση των εντολών του εγγράφου εργασιών
4
Τύποι μεταβλητών (2/16) Στη λύση ενός προβλήματος προγραμματισμού, γνωρίζουμε τι τύπου περιεχόμενο έχει κάθε θέση του τετραδίου εκ των προτέρων (π.χ. αριθμός ή κείμενο). Για το σκοπό αυτό ο υπηρέτης δίνει κάποιες επιπλέον δυνατότητες που κάνουν τη ζωή μας ως προγραμματιστή σημαντικά ευκολότερη –Μπορούμε να δηλώσουμε συμβολικά ονόματα για θέσεις του τετραδίου αναφέροντας και τον τύπο του περιεχομένου –Επίσης, δεν είναι αναγκαίο πια να αναφέρουμε και τη θέση του τετραδίου που θα καταλαμβάνει η κάθε μεταβλητή που χρησιμοποιούμε στο πρόγραμμα Ο υπηρέτης φροντίζει μόνος του να βρίσκει διαθέσιμες σειρές του τετραδίου και να τις αντιστοιχεί στα συμβολικά ονόματα που του υποδεικνύουμε
5
Τύποι μεταβλητών (3/16) Π.χ, όταν θέλουμε να χρησιμοποιήσουμε θέση του τετραδίου για αποθήκευση ακεραίου αριθμού με το συμβολικό όνομα x γράφουμε από τώρα απλώς το εξής: –INTEGER x; –Όταν ο υπηρέτης διαβάσει κάτι τέτοιο: κοιτάει στο τετράδιο και χρησιμοποιεί την πρώτη ελεύθερη θέση για το x (σχεδόν πάντα η θέση είναι και προβλέψιμη) σημειώνοντας επιπλέον ότι πρόκειται για INTEGER (ακέραιο) –αυτό το κάνει για να εφαρμόσει αυστηρό έλεγχο ως προς το περιεχόμενο που πρόκειται να αποθηκευτεί κατά την εκτέλεση του προγράμματος στη θέση αυτή (το οποίο θα πρέπει να είναι ακέραιος)] –εάν κάποια στιγμή πάμε να αποθηκεύσουμε κάτι άλλο, θα οδηγηθούμε σε runtime error –Το παραπάνω συντακτικά και σημασιολογικά ονομάζεται δήλωση μεταβλητή συγκεκριμένου τύπου
6
Ένθετο – δήλωση μεταβλητής Η δήλωση της μεταβλητής. Καθώς ξέρουμε ότι δεν υπάρχει χρήση καμίας άλλης θέσης του τετραδίου μπορούμε να προβλέψουμε ότι θα πάει στη θέση (0,0) Εδώ πρέπει να δώσουμε αριθμό. Αλλιώς ο υπηρέτης θα διακόψει την εκτέλεση. Τι γίνεται εδώ? Προσπαθούμε με πονηριά να γράψουμε στο x κάτι που δεν είναι όμως ακέραιος Ο υπηρέτης μας πληροφορεί ότι η θέση (0,0) είναι «κατειλημμένη» από μεταβλητή (VAR) τύπου INTEGER και ότι η τιμή που πάμε να γράψουμε δεν είναι τύπου INTEGER
7
Τύποι μεταβλητών (4/16) Να δούμε ένα παράδειγμα αρκετών δηλώσεων μεταβλητών, παρουσιάζοντας ακριβώς τι κάνει ο υπηρέτης INTEGER x; INTEGER y; INTEGER a = 10, b = 20; x0INTEGER y0 a10INTEGER b20INTEGER.................. 0,0 0,1 0,2 0,3 0,4 0,5. Θέση Όνομα Περιεχόμενο Χρήση Τύπος Βλέπουμε ότι στο τετράδιο κρατάει και άλλη πληροφορία, κάνοντας αυτόματες «κρατήσεις θέσεων» για τις μεταβλητές.Βλέπουμε ότι στο τετράδιο κρατάει και άλλη πληροφορία, κάνοντας αυτόματες «κρατήσεις θέσεων» για τις μεταβλητές. Θυμόμαστε πάντα ότι εφόσον μία μεταβλητή οριστεί με τέτοιο τρόπο, ο υπηρέτης θα θεωρήσει ως runtime error την προσπάθεια αποθήκευσης περιεχομένου άλλου τύπου Όλα αυτά τα κάνει πριν αρχίσει να εκτελείται το πρόγραμμά μας.Όλα αυτά τα κάνει πριν αρχίσει να εκτελείται το πρόγραμμά μας.
8
Τύποι μεταβλητών (5/16) Κάθε τύπος Τ αντιπροσωπεύει ένα συγκεκριμένο πεδίο τιμών D, τις οποίες μπορούμε να αποθηκεύσουμε σε μεταβλητές (δηλ. στη θέση του τετραδίου που καταλαμβάνει η μεταβλητή). Οι απλοί τύποι μεταβλητών που υποστηρίζονται στη γλώσσα Flip του υπηρέτη μας είναι: –Ακέραιος, INTEGER, π.χ. 1, -56, 32 20, 0, +2 –Πραγματικός, REAL, π.χ. 1, 1.345, ½, 3456.00001, -3.1416 –Χαρακτήρας, CHARACTER, π.χ. ‘α’, ’a’, ’!’, ‘*’, ‘+’, ‘-’ –Ομάδα χαρακτήρων, STRING, π.χ. «Δευτέρα», «20», «(α,β)» –Λογική τιμή, BOOLEAN, π.χ. TRUE ή FALSE Οι τύποι αυτοί λέγονται απλοί διότι καταλαμβάνουν πάντα μόνο μία θέση του τετραδίου για αποθήκευση τιμής
9
Τύποι μεταβλητών (6/16) Θα χρησιμοποιούμε πολύ συχνά τον όρο μεταβλητή - να μην ξεχνάμε λοιπόν περί τίνος πρόκειται: –Ως μεταβλητές χαρακτηρίζουμε όλα τα τμήματα μνήμης, δηλ. σειρές στο πρόχειρο τετράδιο, τις οποίες: τις χρησιμοποιούμε στο πρόγραμμα για να αποθηκεύσουμε “κάτι” έχουν πάντα έναν συγκεκριμένο και αμετάβλητο τύπο δεδομένων και ένα μοναδικό αναγνωριστικό συμβολικό όνομα επιλογής μας –Ο όρος μεταβλητή δείχνει ότι το περιεχόμενό τους (δηλ. το περιεχόμενο των αντιστοίχων θέσεων τετραδίου) μεταβάλλεται από το πρόγραμμα αλλά πάντοτε σύννομα του τύπου της –Όλες οι παράμετροι ενός προβλήματος, μέσα στο πρόγραμμά μας, θα αντιστοιχούν πάντα σε μεταβλητές
10
Τύποι μεταβλητών (7/16) Σύνθετοι τύποι –Αντιπροσωπεύουν συνεχόμενες σειρές μνήμης, με τυποποιημένη δομή ως προς την οργάνωση των περιεχόμενων τιμών –Ορίζονται ως Ν-άδες τύπων της μορφής, όπου για κάθε τιμή πρέπει να ισχύει: i, N i 1, V i D(Τ i ) –Δηλ. γενικά οι σύνθετοι τύποι ομαδοποιούν Ν τιμές, ενδεχομένως διαφορετικών τύπων, σε μία λογική οντότητα γιατί κάτι τέτοιο μας διευκολύνει πολύ προγραμματιστικά στην αποθήκευση και χρήση σύνθετων παραμέτρων Ο χώρος που καταλαμβάνει ο σύνθετος τύπος είναι, όπως άλλωστε αναμένεται, το συνολικό άθροισμα του χώρου που καταλαμβάνει ο κάθε περιεχόμενος τύπος
11
Τύποι μεταβλητών (8/16) Πίνακας, ARRAY –Απλός ορισμός: ARRAY(Τ τύπος στοιχείου, Ν μέγεθος ) Όνομα Αντιπροσωπεύει ακολουθία από Ν ελεύθερες διατεταγμένες θέσεις (όχι απαραίτητα συνεχόμενες) μνήμης για αποθήκευση τιμών του σύνθετου τύπου Τ. Το στοιχείο i, N i 0, ενός πίνακα P, αναφέρεται συντακτικά ως P[i] Προσοχή, το N είναι σταθερός ακέραιος αριθμός (δηλ. δεν είναι τιμή μεταβλητής, αλλά συγκεκριμένη αριθμητική τιμή όπως 10, 56, κλπ) Προς το παρόν μιλάμε μόνο για μονοδιάστατους πίνακες, που τους βλέπουμε ως ακολουθία στοιχείων –Παραδείγματα ARRAY(INTEGER, 10) Number; ARRAY(STRING, 30) Names; ARRAY(CHARACTER, 7) Vowels;
12
Τύποι μεταβλητών (9/16) Πως ο υπηρέτης κρατάει θέσεις τετραδίου στην περίπτωση δήλωσης ενός πίνακα (1/2) ARRAY(INTEGER,5) Numbers; ARRAY(STRING,3) Names; -0INTEGER -0 -0 -0 -0 Numbers, INTEGER, ARRAY, 5, Αρχή(0,0) 0,0 0,1 0,2 0,3 0,4Θέση Όνομα Περιεχόμενο Χρήση Τύπος -“”STRING -“”STRING -“”STRING Names, STRING, ARRAY, 3, Αρχή(0,5) 0,5 0,6 0,7 Αφού ο υπηρέτης «τακτοποιήσει» τις κρατήσεις θέσεων, σημειώνει και την θέση στην οποία αρχίζει ο πίνακας.Αφού ο υπηρέτης «τακτοποιήσει» τις κρατήσεις θέσεων, σημειώνει και την θέση στην οποία αρχίζει ο πίνακας. Σημειώνει επίσης και τα τμήματα του τετραδίου που χρησιμοποιεί για την αποθήκευσή του, εάν δεν βρίσκει συνεχές τμήμα.Σημειώνει επίσης και τα τμήματα του τετραδίου που χρησιμοποιεί για την αποθήκευσή του, εάν δεν βρίσκει συνεχές τμήμα. Η θέση του στοιχείου P[j] ενός πίνακα συνεχόμενων θέσεων στο τετράδιο βρίσκεται από τον υπηρέτη ως εξής: Αρχή(P)+jΗ θέση του στοιχείου P[j] ενός πίνακα συνεχόμενων θέσεων στο τετράδιο βρίσκεται από τον υπηρέτη ως εξής: Αρχή(P)+j Numbers[3] είναι το POSITION(0, 0+3)Numbers[3] είναι το POSITION(0, 0+3) Names[2] είναι το POSITION(0,5+2)Names[2] είναι το POSITION(0,5+2)
13
Τύποι μεταβλητών (10/16) Πως ο υπηρέτης κρατάει θέσεις τετραδίου στην περίπτωση δήλωσης ενός πίνακα (2/2) –Την προηγούμενη διάταξη μπορούμε να τη διαπιστώσουμε χρησιμοποιώντας τη βοηθητική συνάρτηση POSITIONOF που προσφέρει ο υπηρέτης (θα πούμε αργότερα περισσότερα για συναρτήσεις) για να λαμβάνουμε τη θέση που παίρνει αυτόματα μία μεταβλητή του προγράμματος (ανεξαρτήτως τύπου της μεταβλητής) ARRAY(INTEGER,5) Numbers; ARRAY(STRING,3) Names; INTEGER x; PROGRAM_BEGIN OUTPUT(POSITIONOF(Numbers)); OUTPUT(POSITIONOF(Names)); OUTPUT(POSITIONOF(x)); PROGRAM_END Βλέπουμε ότι φαίνεται ξεκάθαρα η πλήρης συμφωνία της αυτόματης κράτησης θέσεων με την μέθοδο που περιγράψαμε
14
Ένθετο – παράδειγμα πινάκων (1/4) (0,0)Numbers[0] (0,1)Numbers[1] (0,2)Numbers[2] (0,3)Numbers[3] (0,4)Numbers[4] (0,5)Names[0] (0,6)Names[1] (0,7)Names[2] (0,8)x POSITIONOF(Numbers) POSITIONOF(Names) POSITIONOF(x)
15
Ένθετο – παράδειγμα πινάκων (2/4) (0,0)r1[0] (0,1)r1[1] (0,2)r1[2] (0,3)Numbers[0] (0,4)Numbers[1] (0,5)Numbers[2] (0,6)r2[0] (0,7)r2[1] (0,8)r2[2] (0,9)Numbers[3] (0,10)w (0,11)Numbers[4] Αυτό που φαίνεται από το παράδειγμα ξεκάθαρα είναι η ικανότητα του υπηρέτη να προσδιορίζει τη βέλτιστη χρήση του τετραδίου και να μπορεί να αποθηκεύει πίνακες σε μη συνεχόμενες σειρές.
16
Ένθετο – παράδειγμα πινάκων (3/4) Πώς ο υπηρέτης καταφέρνει να χειρίζεται πίνακες οι οποίοι αποθηκεύονται σε μη συνεχόμενα τμήματα του τετραδίου?
17
Ένθετο – παράδειγμα πινάκων (4/4)
18
Τύποι μεταβλητών (11/16) Εγγραφή ή RECORD –Γενικός συμβολισμός RECORD Όνομα RECBEGIN Τ 1 Όνομα 1, …, Τ Ν Όνομα Ν RECEND; –Ορίζει ένα νέο τύπο που αντιπροσωπεύει Ν ελεύθερες διατεταγμένες θέσεις (όχι απαραίτητα συνεχόμενες) μνήμης, με τύπο Τ i για τη θέση i –Παραδείγματα RECORD Point RECBEGIN INTEGER x, y; RECEND; RECORD Line RECBEGIN REAL a, b; RECEND; RECORD Student RECBEGIN STRING name; REAL grade; RECEND; Μην ξεχνάτε το ; στο τέλος, μετά το RECEND, ποτέ!!! Προσοχή: με τα παραπάνω δεν δηλώνουμε καμία μεταβλητή, αλλά ορίζουμε έναν νέο τύπο. Μετά θα δούμε πως δηλώνουμε μεταβλητές αυτού του νέου τύπου.
19
Τύποι μεταβλητών (12/16) Τι κάνει ο υπηρέτης όταν του ορίσουμε έναν τέτοιο νέο τύπο εγγραφής; ο υπηρέτης το βλέπει σαν την περιγραφή ενός νέου τύπου που αντιπροσωπεύει «πακέτο» μεταβλητών κάτω από την ίδια ομπρέλα. Έτσι, εκτός από INTEGER, ARRAY, κλπ, τώρα γνωρίζει και το Point και κάνει τα εξής για να υποστηρίξει δηλώσεις μεταβλητών αυτού του νέου τύπου: RECORD Point RECBEGIN INTEGER x,y; RECEND; RECORD, Point, Μέγεθος 2 θέσεις Όνομα πεδίουΤύπος πεδίουΣχετική θέση xINTEGER0 y 1 Παράγει μία φόρμα με πληροφορία σχετικά με το μέγεθος, περιεχόμενα πεδία, τύπους και σχετική θέση κάθε πεδίου στην εγγραφή. Έτσι, όταν δηλωθούν μεταβλητές τύπου Point θα γνωρίζει ακριβώς πόσες θέσεις τετραδίου απαιτούνται και που θα τοποθετήσει κάθε πεδίο.
20
Τύποι μεταβλητών (13/16) Τι κάνει ο υπηρέτης όταν δηλώσουμε μεταβλητές τύπου εγγραφής (που έχουν οριστεί σε προηγούμενο σημείο του προγράμματος). Point a, b; -0INTEGER -0 a, Point, RECORD, 2, Αρχή(0,0) 0,0 0,1Θέση Όνομα Περιεχόμενο Χρήση Τύπος -0INTEGER -0 b, Point, RECORD, 2, Αρχή(0,2) 0,2 0,3 Βλέπουμε ότι ο τρόπος που κάνει κρατήσεις θέσεων είναι παρόμοιος με τους πίνακες.Βλέπουμε ότι ο τρόπος που κάνει κρατήσεις θέσεων είναι παρόμοιος με τους πίνακες. Πάλι μπορούμε να διαπιστώσουμε με πρόγραμμα ότι όντως έτσι κάνει ο υπηρέτης.Πάλι μπορούμε να διαπιστώσουμε με πρόγραμμα ότι όντως έτσι κάνει ο υπηρέτης. OUTPUT(POSITIONOF(a) ); OUTPUT(POSITIONOF(b) );
21
Τύποι μεταβλητών (14/16) Πως γίνεται η πρόσβαση στα περιεχόμενα / πεδία μίας μεταβλητής τύπου εγγραφής και πως ο υπηρέτης υπολογίζει σε ποια θέση γίνεται αναφορά κάθε φορά –Για μεταβλητή α τύπου εγγραφής Α, με πεδίο β τύπου Β, η έκφραση α.β αναφέρεται στη θέση του τετραδίου που αντιστοιχεί ακριβώς στο πεδίο β. –Α. Εάν όλη η εγγραφή αποθηκεύεται σε συνεχόμενο τμήμα του τετραδίου, τότε η θέση του α.β υπολογίζεται από τον υπηρέτη ως εξής: Θέση(α.β) = Θέση(α) + Σχετική θέση(β στο Α) –Β. Εάν η εγγραφή αποθηκεύεται σε διάφορα τμήματα του τετραδίου, τότε η θέση του α.β υπολογίζεται από τον υπηρέτη ως εξής: Θέση(α.β) = Θέση πεδίου(Σχετική θέση β στο Α, α) Στην περίπτωση αυτή σε κάθε εγγραφή που αποθηκεύεται υπάρχει και μία ειδική σημείωση από τον υπηρέτη για την θέση του κάθε πεδίου στο τετράδιο
22
Ένθετο – αποθήκευση εγγραφών (1/2) Πώς ο υπηρέτης καταφέρνει να χειρίζεται εγγραφές οι οποίες αποθηκεύονται σε μη συνεχόμενα τμήματα του τετραδίου?
23
Ένθετο – αποθήκευση εγγραφών (2/2)
24
Τύποι μεταβλητών (15/16) -0INTEGER -0 a, Point, RECORD, 2, Αρχή(0,0) 0,0 0,1Θέση Όνομα Περιεχόμενο Χρήση Τύπος RECORD, Point, Μέγεθος 2 θέσεις Όνομα πεδίουΤύπος πεδίουΣχετική θέση xINTEGER0 y 1 Πως γίνεται η πρόσβαση στα περιεχόμενα / πεδία μίας μεταβλητής τύπου εγγραφής και πως ο υπηρέτης υπολογίζει σε ποια θέση γίνεται αναφορά κάθε φορά a.x Αρχή Σχετική θέση 2 1 3 + ΠΕΡΙΠΤΩΣΗ Α
25
Τύποι μεταβλητών (16/16) Και πάλι η διαπίστωση γίνεται με ένα απλό πρόγραμμα RECORD Point RECBEGIN INTEGER x,y; RECEND; Point a; PROGRAM_BEGIN OUTPUT(POSITIONOF(a)) ; OUTPUT(POSITIONOF(a.x )); OUTPUT(POSITIONOF(a.y )); PROGRAM_END; ΠΕΡΙΠΤΩΣΗ Α
26
«Αριθμητική» θέσεων τετραδίου Όταν γράφουμε Θέση(i, j) + n, δηλ. n θέσεις τετραδίου μετά την θέση στη σελίδα i και σειρά j, εννοούμε τον παρακάτω υπολογισμό: –Θέση(i + (j+n) / 60, (j+n) mod 60) –Ειδικότερα, π.χ, Θέση(0,45)+32 σημαίνει Θέση(0,77) –Αλλά επειδή κάθε σελίδα έχει ακριβώς 60 σειρές,η σειρά 77 είναι μπροστά μία σελίδα και 17 σειρές, όπότε ουσιαστικά έχουμε Θέση(1, 17) –Θέση(0,45)+32 = Θέση(0+(45+32)/60, (45+32) mod 60) = Θέση(0+77/60, 77 mod 60) = Θέση(0+1, 17) = Θέση(1,17)
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.