Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Κωνσταντίνος Στεφανίδης,

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Κωνσταντίνος Στεφανίδης,"— Μεταγράφημα παρουσίασης:

1 HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Κωνσταντίνος Στεφανίδης, Αντώνιος Σαββίδης, Χρήστος Νικολάου

2 ΕΝΟΤΗΤΑ Ι ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διάλεξη 2η

3 Περιεχόμενα Η έννοια του αλγορίθμου Περιγραφή αλγορίθμων / προγράμματος

4 Έννοια αλγορίθμου (1/5) Ορισμός –Ένα πεπερασμένο σύνολο από καλά ορισμένες εντολές, που πρέπει να εκτελεστούν, ώστε να παραχθεί η λύση σε ένα στιγμιότυπο μίας γενικότερης κατηγορίας προβλημάτων, της οποίας επίλυση συνιστά ο αλγόριθμος. Κατηγορίαπροβλήματος Αλγόριθμος επίλυση αυτού είναι η εκτέλεση του οδηγεί σε παραγωγή λύσης για Στιγμιότυποπροβλήματος ανήκει

5 Έννοια αλγορίθμου (2/5) Οι αλγόριθμος λοιπόν δεν είναι ο τρόπος με τον οποίο λύνεται ένα πρόβλημα –αλλά οι ακριβείς οδηγίες για το τι πρέπει να κάνει «κάποιος» ώστε να παράγει τη λύση για κάθε στιγμιότυπο του προβλήματος Τη διαδικασία εκτέλεσης ενός αλγορίθμου την ονομάζουμε υπολογισμό –και δεν εμπλέκει νοητική διεργασία, παρά μόνο μηχανιστική (δηλ. δεν χρειάζεται «εξυπνάδα» ή «σκέψη» αλλά μόνο πράξεις) Αυτός που εκτελεί τα βήματα του αλγορίθμου, δηλ. αυτός που πράττει τον υπολογισμό, είθισται να ονομάζεται και υπολογιστής –και αρκεί να εφαρμόζει ότι του λέμε, γρήγορα και με ακρίβεια, χωρίς να «σκέφτεται» ποτέ

6 Έννοια αλγορίθμου (3/5) Η σχεδιαστική πρόκληση των αλγορίθμων –Ενώ μπορεί κάποιος να λύσει τη γενικότερη κατηγορία προβλημάτων, –και να την εφαρμόζει παράγοντας ο ίδιος τα αποτελέσματα για κάθε στιγμιότυπο του προβλήματος, όποτε του ζητηθεί, ωστόσο –αδυνατεί να περιγράψει την διαδικασία λύσης σε αλγοριθμική μορφή, –δηλ. ως ένα σύνολο υπολογιστικών βημάτων (ή εντολών) το οποίο μπορεί να εκτελέσει ένας υπολογιστής (π.χ. το γενικό μοντέλο του υπηρέτη), –ώστε να μπορεί να υπολογίζεται η λύση για στιγμιότυπα του προβλήματος μέσα από μία αυτοματοποιημένη διαδικασία.

7 Έννοια αλγορίθμου (4/5) Π.χ., για τον υπολογισμό της απόλυτης τιμής –Οι περισσότεροι γνωρίζουν τον μαθηματικό ορισμό ως εξής: |x| είναι x, αν x  0, αλλιώς –x –Αλλά πιθανότατα δυσκολεύονται να δώσουν έναν αλγόριθμο ώστε ο υπολογιστικός υπηρέτης να το υπολογίζει  x –Ποια είναι τα απαραίτητα συστατικά στοιχεία αυτού του αλγορίθμου? Παράμετρος του προβλήματος είναι η εκάστοτε τιμή του x Χρειάζεται λοιπόν να διαβάζεται η όποια τιμή του x από τη θυρίδα εισερχόμενων (είσοδος) Χρειάζεται να αποθηκεύεται αυτή σε μία σελίδα και σειρά της επιλογής μας στο τετράδιο (μνήμη) Χρειάζεται να γίνεται σύγκριση με το 0, και ανάλογα να γράφεται στη θυρίδα εξερχόμενων (έξοδος) το x ή το –x.

8 Έννοια αλγορίθμου (5/5) Διάβασε από τη θυρίδα εισερχόμενων και γράψε στη σελίδα 0, σειρά 0 Εάν περιεχόμενο(σελίδας 0, σειράς 0)  0 Γράψε στην έξοδο περιεχόμενο(σελίδας 0, σειράς 0) Αλλιώς Γράψε στην έξοδο -περιεχόμενο(σελίδας 0, σειράς 0) Έγγραφο εργασιών (πρόγραμμα) (πρόγραμμα) Πρόχειρο τετράδιο (μνήμη) 0:0: 1:1: 1:1: ………… 59: 0:0: 1:1: 2:2: ………… 0 M Εισερχόμενα(είσοδος) Εξερχόμενα(έξοδος) x |x|

9 Περιεχόμενα Η έννοια του αλγορίθμου Περιγραφή αλγορίθμων / προγράμματος

10 Περιγραφή αλγορίθμων (1/3) Στα παραδείγματά μας είδαμε ότι περισσότερο χρησιμοποιήσαμε φυσική γλώσσα και κάποιους συμβολισμούς. Η περιγραφή ενός αλγορίθμου δεν είναι πάντα το ίδιο πράγμα με τον προγραμματισμό ενός αλγορίθμου. –Ο ίδιος αλγόριθμος μπορεί να προγραμματιστεί σε διαφορετικές γλώσσες (C,Pascal, Java, C++, Action Script, FLIP) –Ο ίδιος αλγόριθμος μπορεί να περιγραφεί με διαφορετικούς τρόπους (π.χ. ένας τρόπος είναι η φυσική γλώσσα) Πόσες φορές έχει χρειαστεί να γράψετε ή να υπαγορεύσετε οδηγίες σε τρίτους για να κάνουν κάποια διαδικασία που ήδη γνωρίζετε? Αυτό είναι περιγραφή αλγορίθμου –Ο αλγόριθμος είναι η σκιαγράφηση του προγράμματος σε μεγάλο βαθμό, αλλά όχι το πλήρες πρόγραμμα.

11 Περιγραφή αλγορίθμων (2/3) Η περιγραφή των αλγορίθμων γίνεται σε αρκετά τυποποιημένη μορφή (γλώσσα), ώστε να πετυχαίνουμε: –οικονομία έκφρασης Αντί να γράφουμε ελεύθερα και φλύαρα σε φυσική γλώσσα, χρησιμοποιούμε συντομογραφίες και σύμβολα –ακρίβεια έκφρασης οι συμβολισμοί ορίζονται μοναδικά και με ακριβή ερμηνεία, ενώ η φυσική γλώσσα έχει πολλά περιθώρια παρερμηνείας Κάθε σύμβολο αυτής της γλώσσας αντιστοιχεί χωρίς ασάφειες σε συστατικά στοιχεία του βασικού υπολογιστικού μοντέλου του υπηρέτη –Εντολή, εισερχόμενα, εξερχόμενα, τετράδιο, αρχείο

12 Περιγραφή αλγορίθμων (3/3) Θα παρουσιάσουμε μία τυπολογία / γλώσσα περιγραφής αλγορίθμων που είναι όμως ταυτόχρονα και μία γλώσσα που την καταλαβαίνει ο υπηρέτης. Δηλ. πρόκειται ταυτόχρονα και για μία γλώσσα προγραμματισμού του υπηρέτη. Η γλώσσα αυτή ονομάζεται FLIP και σχεδιάστηκε ειδικά για τη διδασκαλία του ΗΥ100 στο τμήμα μας. Τα προγράμματά σας στη γλώσσα FLIP μπορούν να τρέχουν (οδηγίες θα δοθούν στα φροντιστήρια), ενώ παράλληλα με τη FLIP, όπου χρειάζεται, και προς το τέλος του μαθήματος θα διδαχθείτε την εύκολη μετάβαση από τη γλώσσα του υπηρέτη (FLIP) στη γλώσσα C

13 Περιγραφή προγράμματος Δεδομένα Θέσεις τετραδίου Απλοί τύποι Μεταβλητές Σύνθετοι τύποι Εντολή εκχώρησης Αριθμητικές πράξεις και εκφράσεις

14 Δεδομένα Το σύνολό των παραμέτρων που πρέπει να αποθηκευτούν στο τετράδιο κατά την εκτέλεση του προγράμματος. Για κάθε «τι» που πρέπει να αποθηκευτεί χρειαζόμαστε μία ή και περισσότερες θέσεις στο τετράδιο. Χρειαζόμαστε τουλάχιστον τόσες θέσεις / σειρές όσες είναι και οι παράμετροι του προβλήματος.

15 Χρήση θέσεων τετραδίου (1/9) Θέση(i, j), POSITION(i,j),με i και j φυσικούς αριθμούς, αντιστοιχεί στη θέση του τετραδίου στη σελίδα i και σειρά j Για κάθε θέση του τετραδίου θα πρέπει να αναφέρετε και το μοναδικό συμβολικό όνομα της παραμέτρου του προβλήματος / προγράμματος που αποθηκεύεται, π.χ. –ΚΡΑΤΗΣΕΘΕΣΗ(x) (1,1); σημαίνει ότι το x είναι συμβολικό όνομα με το οποίο ουσιαστικά αναφερόμαστε στη Θέση(1,1). –USEPOSITION(x) (1,1);

16 Χρήση θέσεων τετραδίου (2/9) Ένα απλό έγγραφο εργασιών όπου ο υπηρέτης διαβάζει έναν αριθμό από τα εισερχόμενα και γράφει το τετράγωνό του στα εξερχόμενα. Τώρα χρησιμοποιούμε τις εντολές στα Αγγλικά (ο υπηρέτης μας είναι αγγλόφωνος μετανάστης από χώρα της Ε.Ε.). Επίσης γράφουμε και δύο επικεφαλίδες ανάμεσά στις οποίες συντάσσουμε το πρόγραμμά μας. USEPOSITION(x) (0,0); PROGRAM_BEGIN INPUT(x); OUTPUT(x*x); PROGRAM_END Εδώ λέμε στον υπηρέτη ότι η θέση (0,0) του τετραδίου έχει το συμβολικό όνομα x Εδώ λέμε στον υπηρέτη ότι αμέσως μετά μπορεί να αρχίζει να διαβάζει τις εντολές του εγγράφου εργασιών Εδώ λέμε στον υπηρέτη ότι σε αυτό το σημείο τελειώνουν οι εντολές του εγγράφου εργασιών

17 Χρήση θέσεων τετραδίου (3/9) Αλλά πάντα υπάρχει και εναλλακτικός τρόπος: –Μπορούμε να μην χρησιμοποιήσουμε συμβολικά ονόματα και να γράψουμε απευθείας την θέση του τετραδίου στο πρόγραμμα. –Τα δύο προγράμματα είναι απολύτως ισοδύναμα. Αλλά στον μεν πρώτο έχουμε μία προτροπή στον υπηρέτη για συμβολικό όνομα θέσης, ενώ στο δεύτερο είναι μάλλον πιο δύσχρηστη (για εμάς) η αναφορά στις θέσεις τετραδίου απευθείας, δηλ. ως POSITION(i,j).  Να προτιμάτε την προηγούμενη έκδοση. PROGRAM_BEGIN INPUT(POSITION(0,0)); OUTPUT(POSITION(0,0)*POSITION(0,0)); PROGRAM_END

18 Χρήση θέσεων τετραδίου (4/9) Όταν τρέχει το προηγούμενο πρόγραμμα τι βγάζει? τι κάνει ο υπηρέτης? εμείς? Ο υπηρέτης άρχισε την εκτέλεση του προγράμματος. Περιμένει εισερχόμενη τιμή για τη θέση (0,0). Μας λέει επίσης ότι η θέση αυτή δεν έχει ακόμη τίποτε μέσα. Πληκτρολογώ μία τιμή (12), και πατάω μετά το Enter Ο υπηρέτης γράφει το αποτέλεσμα, ενώ μας πληροφορεί ότι είναι ακέραιος Ο υπηρέτης περάτωσε την εκτέλεση του προγράμματος.

19 Χρήση θέσεων τετραδίου (5/9) Μπορούμε να χρησιμοποιήσουμε συνεχόμενες θέσεις του τετραδίου της ίδιας σελίδας για αποθήκευση πολλών παραμέτρων –ΚΡΑΤΗΣΕTMHMA(Numbers) (0, 0 ΕΩΣ 9), σημαίνει ότι το συμβολικό όνομα Numbers αναφέρεται στις συνεχόμενες σειρές 1…10 του τετραδίου της σελίδας 0. Η έκφραση Numbers[0] είναι η πρώτη σειρά αυτού του τμήματος του τετραδίου και η Numbers[9] η τελευταία. –USEREGION(Numbers) (0, 0 TO 9)

20 Χρήση θέσεων τετραδίου (6/9) Ένα απλό έγγραφο εργασιών όπου ο υπηρέτης διαβάζει τρεις αριθμούς από τα εισερχόμενα και γράφει τον μέσο όρο τους στα εξερχόμενα. Χρησιμοποιούμε ένα τμήμα του τετραδίου αποτελούμενο από τρεις συνεχόμενες σειρές για την αποθήκευσή τους. USEREGION(Numbers) (0,0 TO 2); PROGRAM_BEGIN INPUT(Numbers[0]); INPUT(Numbers[1]); INPUT(Numbers[2]); OUTPUT((Numbers[0] + Numbers[1] + Numbers[2]) / 3); PROGRAM_END Λύση 1 (0,0) (0,1) (0,2) (0,3) …

21 Χρήση θέσεων τετραδίου (7/9) Αλλά υπάρχει και άλλος τρόπος –με τη χρήση ξεχωριστής παραμέτρου για κάθε αριθμό, αντί της «κοινής» αναφοράς και αποθήκευσης σε ένα τμήμα του τετραδίου της προηγούμενης λύσης USEPOSITION(x) (0,0); USEPOSITION(y) (0,1); USEPOSITION(z) (0,2); PROGRAM_BEGIN INPUT(x); INPUT(y); INPUT(z); OUTPUT((x + y + z) / 3); PROGRAM_END Λύση 2 (0,0) (0,1) (0,2) (0,3) …

22 Χρήση θέσεων τετραδίου (8/9) …και άλλος –Με την άμεση αναφορά σε συγκεκριμένες θέσεις του τετραδίου, χωρίς καμία χρήση συμβολικών ονομάτων Προσέξτε ότι θα μπορούσα να επιλέξω άλλες θέσεις του τετραδίου, οι οποίες επίσης δεν είναι αναγκαίο να είναι και συνεχόμενες PROGRAM_BEGIN INPUT(POSITION(0,0)); INPUT(POSITION(0,1)); INPUT(POSITION(0,2)); OUTPUT((POSITION(0,0) + POSITION(0,1) + POSITION(0,2)) / 3); PROGRAM_END Λύση 3 (0,0) (0,1) (0,2) (0,3) …

23 Χρήση θέσεων τετραδίου (9/9) Να τρέξουμε τη Λύση 1 μία φορά Να την ξανατρέξουμε, αλλά αντί αριθμού θα δώσουμε άλλη είσοδο (ενώ το πρόγραμμά μας υποθέτει εισερχόμενους αριθμούς) εισερχόμενες τιμές (τρεις φορές) εξερχόμενοαποτέλεσμα η εισερχόμενη τιμή δεν είναι αριθμός Καθώς ο υπηρέτης επιχειρεί την πρόσθεση, διαπιστώνει ότι ένα από τα ορίσματα δεν είναι αριθμός, όπότε βγάζει ένα μήνυμα λάθους στην θυρίδα εξόδου και διακόπτει αυτομάτως την εκτέλεση. Αυτό το γεγονός είναι γνωστό ως runtime error και είναι ο χειρότερος εχθρός σας.

24 Τύποι μεταβλητών (1/16) Όπως είδαμε, μπορούμε να χρησιμοποιήσουμε θέσεις του τετραδίου με συμβολικά ονόματα. Προφανώς επιλέγουμε ονόματα που είναι αντιπροσωπευτικά του ρόλου ή συμβολισμού που λαμβάνει στο πρόβλημα και στην αντίστοιχη λύση κάθε χρησιμοποιούμενη θέση του τετραδίου. –Π.χ. στο προηγούμενο πρόγραμμα, έκδοση Λύση 1, ονομάσαμε το τμήμα των τριών θέσεων Numbers και όχι Names, ή Cars, η οτιδήποτε άλλο, διότι γνωρίζουμε ότι αριθμούς πρόκειται να αποθηκεύσουμε. Η χρήση των συμβολικών ονομάτων βοηθά στην ευκολότερη ανάγνωση και κατανόηση ενός προγράμματος, καθώς υπάρχουν μέσα ονομασίες απευθείας αναγνωρίσιμες από το χώρο του προβλήματος –Ο υπηρέτης δεν ενδιαφέρεται καθόλου για κάτι τέτοιο, αφού ούτως ή άλλως θα αντιστοιχίσει κάθε συμβολικό όνομα σε θέση τετραδίου κατά την εκτέλεση των εντολών του εγγράφου εργασιών

25 Τύποι μεταβλητών (2/16) Στη λύση ενός προβλήματος προγραμματισμού, γνωρίζουμε τι τύπου περιεχόμενο έχει κάθε θέση του τετραδίου εκ των προτέρων (π.χ. αριθμός ή κείμενο). Για το σκοπό αυτό ο υπηρέτης δίνει κάποιες επιπλέον δυνατότητες που κάνουν τη ζωή μας ως προγραμματιστές σημαντικά ευκολότερη –Μπορούμε να δηλώσουμε συμβολικά ονόματα για θέσεις του τετραδίου αναφέροντας και τον τύπο του περιεχομένου –Επίσης, δεν είναι αναγκαίο πια να αναφέρουμε και τη θέση του τετραδίου που θα καταλαμβάνει η κάθε μεταβλητή που χρησιμοποιούμε στο πρόγραμμα Ο υπηρέτης φροντίζει μόνος του να βρίσκει κενές σειρές του τετραδίου και να τις αντιστοιχεί στα συμβολικά ονόματα που αναφέρουμε.

26 Τύποι μεταβλητών (3/16) Π.χ, όταν θέλουμε να χρησιμοποιήσουμε θέση του τετραδίου για αποθήκευση ακεραίου αριθμού με το συμβολικό όνομα x γράφουμε τώρα απλώς το εξής: –INTEGER x; –Όταν ο υπηρέτης διαβάσει κάτι τέτοιο: κοιτάει στο τετράδιο και χρησιμοποιεί την πρώτη ελεύθερη θέση για το x σημειώνοντας επιπλέον ότι πρόκειται για INTEGER (ακέραιο) –αυτό το κάνει για να εφαρμόσει αυστηρό έλεγχο ως προς το περιεχόμενο που πρόκειται να αποθηκευτεί κατά την εκτέλεση του προγράμματος στη θέση αυτή (το οποίο θα πρέπει να είναι ακέραιος)

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

28 Τύποι μεταβλητών (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  Οι τύποι αυτοί λέγονται απλοί διότι καταλαμβάνουν πάντα μόνο μία θέση του τετραδίου για αποθήκευση τιμής

29 Τύποι μεταβλητών (6/16) Θα χρησιμοποιούμε πολύ συχνά τον όρο μεταβλητή, να μην ξεχνάμε λοιπόν περί τίνος πρόκειται: –Ως μεταβλητές χαρακτηρίζουμε όλα τα τμήματα μνήμης, δηλ. σειρές στο πρόχειρο τετράδιο, τις οποίες: τις χρησιμοποιούμε στο πρόγραμμα για να αποθηκεύσουμε “κάτι”, έχουν πάντα έναν συγκεκριμένο και αμετάβλητο τύπο δεδομένων, και ένα μοναδικό αναγνωριστικό συμβολικό όνομα. –Ο όρος μεταβλητή δείχνει ότι το περιεχόμενό τους (δηλ. το περιεχόμενο των αντιστοίχων θέσεων τετραδίου) μεταβάλλεται από το πρόγραμμα. –Όλες οι παράμετροι ενός προβλήματος, μέσα στο πρόγραμμά μας αντιστοιχούν πάντα σε μεταβλητές.

30 Τύποι μεταβλητών (7/16) Σύνθετοι τύποι –Αντιπροσωπεύουν συνεχόμενες σειρές μνήμης, με τυποποιημένη δομή ως προς τις περιεχόμενες τιμές –Ορίζονται ως Ν-άδες τύπων της μορφής, όπου για κάθε τιμή πρέπει να ισχύει:  i, N  i  1, V i  D(Τ i ) –Δηλ. θέλουμε να ομαδοποιήσουμε Ν τιμές, διαφορετικών τύπων, σε μία λογική οντότητα, γιατί κάτι τέτοιο μας διευκολύνει πολύ στην αποθήκευση και χρήση σύνθετων παραμέτρων  Ο χώρος που καταλαμβάνει ο σύνθετος τύπος είναι, όπως αναμένεται, το συνολικό άθροισμα του χώρου που καταλαμβάνει ο κάθε περιεχόμενος τύπος

31 Τύποι μεταβλητών (8/16) Πίνακας, ARRAY –Απλός ορισμός: Πίνακας(Τ τύπος στοιχείου, Ν μέγεθος ) Όνομα Αντιπροσωπεύει συνολικά Ν συνεχόμενες θέσεις μνήμης για αποθήκευση τιμών τύπου Τ. Το στοιχείο i, N  i  0, ενός πίνακα Π, αναφέρεται ως Π[i] Προσοχή, το N είναι σταθερός ακέραιος αριθμός (δηλ. δεν είναι τιμή μεταβλητής αλλά συγκεκριμένη αριθμητική τιμής όπως 10, 56, κλπ) Προς το παρόν μιλάμε μόνο για μονοδιάστατους πίνακες, που τους βλέπουμε ως ακολουθία στοιχείων –Παραδείγματα ARRAY(INTEGER, 10) Numbers ARRAY(STRING, 30) Names; ARRAY(CHARACTER, 7) Vowels;

32 Τύποι μεταβλητών (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 Αφού ο υπηρέτης «τακτοποιήσει» τις κρατήσεις θέσεων, σημειώνει και την θέση στην οποία αρχίζει ο πίνακας.Αφού ο υπηρέτης «τακτοποιήσει» τις κρατήσεις θέσεων, σημειώνει και την θέση στην οποία αρχίζει ο πίνακας. Η θέση του στοιχείου Π[j] ενός πίνακα βρίσκεται από τον υπηρέτη ως εξής: Θέση(Αρχή(Π)+j)Η θέση του στοιχείου Π[j] ενός πίνακα βρίσκεται από τον υπηρέτη ως εξής: Θέση(Αρχή(Π)+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)

33 Τύποι μεταβλητών (10/16) Πως ο υπηρέτης κρατάει θέσεις τετραδίου στην περίπτωση δήλωσης ενός πίνακα (2/2) –Την προηγούμενη διάταξη μπορούμε να τη διαπιστώσουμε χρησιμοποιώντας μία βοηθητική συνάρτηση που προσφέρει ο υπηρέτης (θα πούμε αργότερα περισσότερα για συναρτήσεις) για να λαμβάνουμε τη θέση που παίρνει αυτόματα μία μεταβλητή του προγράμματος (ανεξαρτήτως τύπου της μεταβλητής) ARRAY(INTEGER,5) Numbers; ARRAY(STRING,3) Names; INTEGER x; PROGRAM_BEGIN OUTPUT(POSITIONOF(Numbers)); OUTPUT(POSITIONOF(Names)); OUTPUT(POSITIONOF(x)); PROGRAM_END Το πρόγραμμα μας όταν τρέχει.Το πρόγραμμα μας όταν τρέχει. Βλέπουμε ότι φαίνεται ξεκάθαρα η πλήρης συμφωνία της αυτόματης κράτησης θέσεων με την μέθοδο που περιγράψαμε.Βλέπουμε ότι φαίνεται ξεκάθαρα η πλήρης συμφωνία της αυτόματης κράτησης θέσεων με την μέθοδο που περιγράψαμε.

34 Τύποι μεταβλητών (11/16) Εγγραφή ή RECORD –Γενικός συμβολισμός Εγγραφή Όνομα Αρχή Τ 1 Όνομα 1, …, Τ Ν Όνομα Ν Τέλος –Ορίζει ένα νέο τύπο που αντιπροσωπεύει Ν συνεχόμενες θέσεις μνήμης, με τύπο Τ i για τη θέση i –Παραδείγματα RECORD Point BEGIN INTEGER x, y; END; RECORD Line BEGIN REAL a, b; END; RECORD Student BEGIN STRING name; REAL grade; END; Μην ξεχνάτε το ; στο τέλος, μετά το END, ποτέ!!!  Προσοχή: με τα παραπάνω δεν δηλώνουμε καμία μεταβλητή, αλλά ορίζουμε έναν νέο τύπο. Μετά θα δούμε πως δηλώνουμε μεταβλητές αυτού του νέου τύπου.

35 Τύποι μεταβλητών (12/16) Τι κάνει ο υπηρέτης όταν του περιγράφουμε έναν τέτοιο νέο τύπο εγγραφής. RECORD Point BEGIN INTEGER x,y; END; RECORD, Point, Μέγεθος 2 θέσεις Όνομα πεδίουΤύπος πεδίουΣχετική θέση xINTEGER0 y 1 Παράγει μία φόρμα με πληροφορία σχετικά με το μέγεθος, περιεχόμενα πεδία, τύπους και σχετική θέση κάθε πεδίου στην εγγραφή. Έτσι, όταν δηλωθούν μεταβλητές τύπου Point θα γνωρίζει ακριβώς πόσες θέσεις τετραδίου απαιτούνται και που θα τοποθετήσει κάθε πεδίο.

36 Τύποι μεταβλητών (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));

37 Τύποι μεταβλητών (14/16) Πως γίνεται η πρόσβαση στα περιεχόμενα / πεδία μίας μεταβλητής τύπου εγγραφής και πως ο υπηρέτης υπολογίζει σε ποια θέση γίνεται αναφορά κάθε φορά –Για μεταβλητή α τύπου εγγραφής Α, με πεδίο β τύπου Β, η έκφραση α.β αναφέρεται στη θέση του τετραδίου που αντιστοιχεί ακριβώς στο πεδίο β. –Η θέση του α.β υπολογίζεται από τον υπηρέτη ως εξής: Θέση(α.β) = Θέση(α)+Σχετική θέση(β στο Α) –Για τον υπολογισμό αυτό ο υπηρέτης χρησιμοποιεί: το τετράδιο με τις κρατήσεις θέσεων και την ειδική φόρμα που παρήγαγε κατά τον ορισμό του τύπου της εγγραφής Α

38 Τύποι μεταβλητών (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

39 Τύποι μεταβλητών (16/16) Και πάλι η διαπίστωση γίνεται με ένα απλό πρόγραμμα RECORD Point BEGIN INTEGER x,y; END; Point a; PROGRAM_BEGIN OUTPUT(POSITIONOF(a)); OUTPUT(POSITIONOF(a.x)); OUTPUT(POSITIONOF(a.y)); PROGRAM_END;

40 «Αριθμητική» θέσεων τετραδίου Όταν γράφουμε Θέση(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)


Κατέβασμα ppt "HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Κωνσταντίνος Στεφανίδης,"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google