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

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Βασικές έννοιες αλγορίθμων
Advertisements

Το αλφαριθμητικό (string)
Κεφάλαιο Τμηματικός προγραμματισμός
7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
5η Συνάντηση Εκπαιδευτικών Πληροφορικής στη Δυτική Μακεδονία Πτολεμαΐδα, 29 Σεπτ 2005 Δημιουργία Δυναμικών Ιστοσελίδων με PHP και Dreamweaver MX Στυλιάδης.
ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ.
Πίνακες.
Λειτουργικό Σύστημα 2ο μέρος.
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Σημειώσεις : Χρήστος Μουρατίδης
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 2: Πίνακες και δυναμικά δεδομένα στη FORTRAN 90 Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ.
ΣΤΟΙΧΕΙΑ ΨΕΥΔΟΚΩΔΙΚΑ ΒΑΣΙΚΕΣ ΔΟΜΕΣ ΒΑΣΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ ΠΙΝΑΚΩΝ
ΜΑΘ3122/106 Γλώσσα Προγραμματισμού
Προγραμματισμός Ι Πίνακες •Ο πίνακας είναι μία συλλογή μεταβλητών ίδιου τύπου, οι οποίες είναι αποθηκευμένες σε διαδοχικές θέσεις μνήμης. Χρησιμοποιείται.
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
1 ΕΝΤΟΛΕΣ ΠΛΗΡΟΦΟΡΙΩΝ ΓΕΝΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣΓΕΝΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣ ΘΕΣΗ ΣΗΜΕΙΟΥΘΕΣΗ ΣΗΜΕΙΟΥ ΑΠΟΣΤΑΣΗΑΠΟΣΤΑΣΗ ΕΜΒΑΔΟΝΕΜΒΑΔΟΝ.
Κοντινότεροι Κοινοί Πρόγονοι α βγ θ δεζ η π ν ι κλμ ρσ τ κκπ(λ,ι)=α, κκπ(τ,σ)=ν, κκπ(λ,π)=η κκπ(π,σ)=γ, κκπ(ξ,ο)=κ ξο κκπ(ι,ξ)=β, κκπ(τ,θ)=θ, κκπ(ο,μ)=α.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
ΜΕΤΑΒΛΗΤΕΣ - ΤΥΠΟΙ ΜΑΘΗΜΑ 3.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ
ΣΥΝΑΡΤΗΣΕΙΣ.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Μεταβλητές – εντολές εκχώρησης- δομή ακολουθίας
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
Ενότητα Α.4. Δομημένος Προγραμματισμός
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Διαφάνειες παρουσίασης Πίνακες (συνέχεια) Αριθμητικοί υπολογισμοί Αναδρομή.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ. ΥΠΟΛΟΓΙΣΤΗΣ Μηχανή που μπορεί να φέρει σε πέρας πνευματικές εργασίες ρουτίνας με μεγάλη ταχύτητα.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Κεφάλαιο 10 – Υποπρογράμματα
Κάντε κλικ για έναρξη… Τ Ο ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ Κέντρο εντολών Χώρος γραφικών (σελίδα) Χώρος σύνταξης διαδικασιών.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Διαφάνειες παρουσίασης #2
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Βασικά στοιχεία της Java
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Κωνσταντίνος Στεφανίδης,
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Για μτ από ατ μέχρι ττ [με_βήμα β] εντολές Τέλος_επανάληψης : περιοχή εντολών μτ : η μεταβλητή της οποίας η τιμή θα περάσει από την αρχική.
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
Βρόχος Do … Loop Σκοπός Μαθήματος Χρήση Do… Loop για την εκτέλεση μιας ομάδας εντολών μέχρι να εκπληρωθεί μια συγκεκριμένη συνθήκη.
ΑΛΓΟΡΙΘΜΟΣ ΠΡΟΒΛΗΜΑ ΑΛΓΟΡΙΘΜΟΣ ΛΥΣΗ
Εφαρμογές Υπολογιστών
Ενισχυτική διδασκαλία
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Η Γλώσσα Pascal Υποπρογράμματα
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον
Κεφάλαιο 10 Streams.
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ Η/Υ
TO BIOS βρίσκεται στην μητρική πλακέτα και τα αρχικά του σημαίνουν: Βασικό Σύστημα Εισόδου-Εξόδου.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
UNIT 1 Τα Πρώτα Προγράμματα.
Μεταγράφημα παρουσίασης:

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

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

Περιεχόμενα Τοπικές μεταβλητές σε block Τύπος διεύθυνσης τετραδίου Εντολή κράτησης / απελευθέρωσης θέσεων

Τοπικές μεταβλητές σε block (1/8) Εκτός από τις μεταβλητές που δηλώνετε πριν την αρχή του προγράμματος, για τις οποίες ο υπηρέτης κάνει «κράτηση θέσεων» πριν αρχίσει να εκτελεί το πρόγραμμα, –Μπορείτε να δηλώνετε μεταβλητές και μέσα σε ένα block, αρκεί αυτές οι δηλώσεις να προηγούνται οποιασδήποτε κανονικής εντολής του συγκεκριμένου block –Αυτές τις μεταβλητές τις ονομάζουμε «τοπικές μεταβλητές σε block», ή απλώς «τοπικές μεταβλητές», –και τις ξεχωρίζουμε από τις μεταβλητές του προγράμματος τις οποίες τις ονομάζουμε καθολικές μεταβλητές –Ακολουθεί πρώτα ένα απλό παράδειγμα και έπειτα θα δούμε όλους τους κανόνες για τη δήλωση τοπικών μεταβλητών

Τοπικές μεταβλητές σε block (2/8) BOOLEAN x; PROGRAM_BEGIN INPUT(x); OUTPUT(x); BEGIN INTEGER x; INPUT(x); OUTPUT(x); BEGIN STRING x; INPUT(x); OUTPUT(x); END OUTPUT(x); END OUTPUT(x); PROGRAM_END Μπορούμε να δηλώνουμε μεταβλητές με οποιοδήποτε όνομα και τύπο σε ένα block, εφόσον μέσα σε αυτό δεν υπάρχει άλλη μεταβλητή με το ίδιο όνομα. Όταν γίνεται χρήση μίας μεταβλητής ο υπηρέτης θα την αντιστοιχήσει στην πιο «κοντινή» σε απόσταση δήλωση με το ίδιο όνομα. Μένει να δούμε τον τρόπο με τον οποίο ο υπηρέτης κάνει «κράτηση θέσεων» για τοπικές μεταβλητές.

Τοπικές μεταβλητές σε block (3/8) Για κάθε block ο υπηρέτης σημειώνει τον συνολικό αριθμό θέσεων μνήμης για τις τοπικές μεταβλητές, προσδιορίζει ένα συνεχόμενο τμήμα τετραδίου που χρειάζονται, καθώς και τη σχετική θέση της κάθε τοπικής μεταβλητής του block στο τμήμα αυτό. –Όλα αυτά δίνοντας ένα μοναδικό σειριακό αριθμό σε κάθε block BOOLEAN x; PROGRAM_BEGIN INPUT(x); OUTPUT(x); BEGIN INTEGER x; INPUT(x); OUTPUT(x); BEGIN STRING x; INPUT(x); OUTPUT(x); END OUTPUT(x); END OUTPUT(x); PROGRAM_END 2 1 Block 1, size 1, Start1? INTEGER, x, at Start1+0 Block 2, size 1, Start2 STRING, x, at Start2+0 Επίσης, υπάρχει και πληροφορία για την ακριβή θέση του block κατά την εκτέλεση, που τη σημειώνει με την ένδειξη Start και το ερωτηματικό ?, και θα δούμε σε λίγο τι ρόλο παίζει. Επιπλέον, ο υπηρέτης πέρα από τη σχετική θέση της κάθε τοπικής μεταβλητής, σημειώνει ότι αυτή θα την προσθέσει στην τιμή του Start. Άραγε τι σημαίνει αυτό?

Τοπικές μεταβλητές σε block (4/8) Τι κάνει ο υπηρέτης όταν αρχίσει να εκτελείται ένα block –Βάσει του αριθμού του, βρίσκει στο ειδικό ευρετήριο τον προηγούμενο πίνακα του block και διαβάζει το μέγεθος του block σε σειρές τετραδίου, έστω Ν –Βρίσκει τις πρώτες Ν συνεχόμενες θέσεις στο τετράδιο, έστω ότι αρχίζει στην (0,12), και τις «κρατάει» για το block αυτό, ενώ ταυτόχρονα σημειώνει στον πίνακα του block ως start την αρχή αυτού του τμήματος Ν θέσεων, δηλ. Start  (0,12) –Όταν γίνεται χρήση τοπικής μεταβλητής, ο υπηρέτης ανατρέχει στον πίνακα του αντίστοιχου block και βρίσκει σε ποια ακριβώς θέση μέσα στο τμήμα του block αντιστοιχεί η μεταβλητή αυτή Τι κάνει ο υπηρέτης όταν τελειώσει η εκτέλεση ενός block –Απελευθερώνει το τμήμα που κατέλαβε με τον παραπάνω τρόπο –Σβήνει την τιμή του Start και ξαναγράφει το ερωτηματικό ?

Τοπικές μεταβλητές σε block (5/8) BOOLEAN x; PROGRAM_BEGIN INPUT(x); OUTPUT(x); BEGIN INTEGER x; INPUT(x); OUTPUT(x); BEGIN STRING x; INPUT(x); OUTPUT(x); END OUTPUT(x); END OUTPUT(x); PROGRAM_END (0,0) BOOLEAN x, Global Block 1, size 1, Start1 INTEGER, x, at Start1+0 Block 2, size 1, Start2 STRING, x, at Start2+0 Σ1 Σ2 Σ3 Σ (0,0) BOOLEAN x, Global (0,1) Block 1 Block 1, size1, Start1(0,1) INTEGER, x, at Start1+0 (0,0) BOOLEAN x, Global (0,1) Block 1 (0,2) Block 2 Block 2,s 1, Start2(0,2) STRING, x, at Start2+0 (0,0) BOOLEAN x, Global (0,1) Block 1 Block 2, size 1, Start2 STRING, x, at Start2+0 (0,0) BOOLEAN x, Global Block 1, size 1, Start1 INTEGER, x, at Start1+0 Σ1 Σ2 Σ3 Σ4

Τοπικές μεταβλητές σε block (6/8) Γιατί ο υπηρέτης δουλεύει τόσο πολύπλοκα και δεν κάνει από την αρχή αντιστοίχηση όλων των τοπικών μεταβλητών σε ξεχωριστές θέσεις του τετραδίου? –Για να εξοικονομήσει χώρο τετραδίου (μνήμη), καθώς έχει καταλάβει ότι οι θέσεις του τετραδίου είναι πολύτιμες και δεν πρέπει να τις σπαταλά με «απερισκεψία» BOOLEAN x; PROGRAM_BEGIN OUTPUT(POSITIONOF(x)); BEGIN INTEGER x; OUTPUT(POSITIONOF(x)); BEGIN STRING x; OUTPUT(POSITIONOF(x)); END PROGRAM_END Το πρόγραμμα οδηγός επιβεβαιώνει τους κανόνες διαχείρισης των μεταβλητών σε block κατά την εκτέλεση από τον υπηρέτη

Τοπικές μεταβλητές σε block (7/8) Πότε χρησιμοποιούμε τοπικές μεταβλητές μέσα σε block? –Μόνο εάν χρειαζόμαστε μεταβλητές οι οποίες έχουν νόημα χρήσης μέσα σε αυτό το block, αλλά όχι στο υπόλοιπο του προγράμματος Αποφεύγουμε να «μαζεύουμε» δηλώσεις μεταβλητών εκτός του χώρου ενός block αν δεν χρησιμοποιούνται Κλασική περίπτωση είναι οι μετρητές για loops που έχουν νόημα ύπαρξης μόνο στην υλοποίηση του loop –Εάν το loop είναι στο κυρίως πρόγραμμα, οι μετρητές δηλώνονται στο κυρίως πρόγραμμα, αλλιώς μέσα στο block που χρησιμοποιούνται. Εάν δεν υπάρχει block, δημιουργούμε εμείς ένα για ευκολία.

Τοπικές μεταβλητές σε block (8/8) Εδώ φαίνεται ξεκάθαρα η τακτική να δηλώνουμε τις μεταβλητές όσο πλησιέστερα γίνεται στο σημείο (εντολές) του κώδικα που πρόκειται να χρησιμοποιηθούν.

Περιεχόμενα Τοπικές μεταβλητές σε block Τύπος διεύθυνσης τετραδίου Εντολή κράτησης / απελευθέρωσης θέσεων

Τύπος διεύθυνσης τετραδίου (1/5) Πρόκειται για έναν απλό τύπο (δηλ. θέλει μία σειρά τετραδίου), με περιεχόμενο κάπως «αναμενόμενο» –Ένα ζεύγος τιμών (σελίδα, γραμμή) που συνιστούν μία διεύθυνση του τετραδίου, π.χ. (0,1) –Π.χ. ADDRESS p(0,0); δηλώνει μία τέτοια μεταβλητή με το όνομα p που έχει αρχικά την τιμή (0,0), δηλ. περιέχει τη διεύθυνση της πρώτης γραμμής της πρώτης σελίδας. –Σε μία μεταβλητή διεύθυνσης τετραδίου μπορούμε να εκχωρήσουμε το αποτέλεσμα της POSITIONOF, αφού η τελευταία επιστρέφει διεύθυνση τετραδίου π.χ. p = POSITIONOF(x); σημαίνει ότι η μεταβλητή p έχει τώρα ως περιεχόμενο τη διεύθυνση στην οποία ο υπηρέτης αποθήκευσε αυτόματα τη μεταβλητή x –Το περιεχόμενο μίας διεύθυνσης τετραδίου είναι εκτυπώσιμο, ως ζεύγος τιμών σελίδας και γραμμής

Τύπος διεύθυνσης τετραδίου (2/5) Εδώ φαίνεται μία απλή χρήση μεταβλητών τύπου διεύθυνσης (προφανώς θα μπορούσαμε απευθείας να χρησιμοποιήσουμε την εντολή OUTPUT) Το ενδιαφέρον είναι ότι η μεταβλητή p στην αρχή εκχωρείται την διεύθυνση του τετραδίου στην οποία και αποθηκεύεται ή ίδια – αυτό είναι απόλυτα νόμιμο καθώς η POSITIONOF ορίζεται για κάθε μεταβλητή

Τύπος διεύθυνσης τετραδίου (3/5) Παρέχεται και η συνάρτηση CONTENTOF(p), με p να είναι πάντα μία τιμή ή μεταβλητή τύπου ADDRESS –Επιστρέφει το περιεχόμενο της σειράς τετραδίου στη διεύθυνση που «προσδιορίζεται» από το p –Έτσι, για κάθε μεταβλητή x, η έκφραση CONTENTOF(POSITIONOF(x)) είναι συνώνυμη έκφραση του x Μία έκφραση CONTENTOF μπορεί να χρησιμοποιηθεί ως αριστερό τμήμα μίας εκχώρησης, ως μεταβλητή PROGRAM_BEGIN INTEGER x; ADDRESS p; INPUT(x); p = POSITIONOF(x); OUTPUT(CONTENTOF(p)); CONTENTOF(p) = sqr(CONTENTOF(p)); OUTPUT(x); OUTPUT(p); OUTPUT(POSITIONOF(p)); PROGRAM_END Οι μεταβλητές τύπου διεύθυνσης είναι πολύ απλές στη χρήση, αλλά πολύ χρήσιμες όπως θα δούμε παρακάτω.

Τύπος διεύθυνσης τετραδίου (4/5) Για να δούμε πόσο εύκολα μπορούμε να χρησιμοποιούμε μεταβλητές τύπου ADDRESS για πιο ευέλικτη χρήση των θέσεων του τετραδίου! INTEGERi = 21; BOOLEANb = FALSE; REALr = 3.14; STRINGs = "hello"; CHARACTERc = '#'; PROGRAM_BEGIN ADDRESS p; p = POSITIONOF(i); INTEGERj; WHILE p DIFFERENT POSITIONOF(c)+1 DO BEGIN OUTPUT(CONTENTOF(p)); p = p+1; END PROGRAM_END Αυτό πρέπει να είναι (0,0) Αυτό πρέπει να είναι (0,5) Προχωράμε την διεύθυνση κατά μία σειρά Εκτυπώνουμε το περιεχόμενο στην εκάστοτε διεύθυνση του p Τι κάνει αυτό το παράξενο loop? (0,0)i (0,1)b (0,2)r (0,3)s (0,4)c (0,5)p (0,6)j Τετράδιο

Τύπος διεύθυνσης τετραδίου (5/5) Το προηγούμενο πρόγραμμα εκτυπώνει τα περιεχόμενα όλων των καθολικών μεταβλητών του προγράμματος, χωρίς ωστόσο να χρησιμοποιεί τις ίδιες τις μεταβλητές μέσω των αναγνωριστικών ονομάτων τους! –εκμεταλλευόμενο τις μεταβλητές τύπου ADDRESS –καθώς και γνώση των κανόνων «κράτησης θέσεων» για τις μεταβλητές από τον υπηρέτη

Περιεχόμενα Τοπικές μεταβλητές σε block Τύπος διεύθυνσης τετραδίου Εντολή κράτησης / απελευθέρωσης θέσεων

Εντολή κράτησης / απελευθέρωσης θέσεων (1/10) Μέχρι τώρα είδαμε ότι η «κράτηση θέσεων» στο τετράδιο είναι δουλειά που την κάνει ο υπηρέτης για τις μεταβλητές που δηλώνουμε Όμως υπάρχουν περιπτώσεις που κατά την κατασκευή του προγράμματος δεν μπορούμε να προβλέψουμε πόσες ακριβώς θέσεις θα χρειαστούμε για την αποθήκευση μεταβλητών. Π.χ.  Θέλουμε ένα πρόγραμμα το οποίο:  διαβάζει στην αρχή έναν αριθμό Ν  έπειτα διαβάζει N αριθμούς ακριβώς από την είσοδο  και στη συνέχεια, μόνο αφού διαβαστεί και ο τελευταίος αριθμός, εκτυπώνει τα τετράγωνά τους στην έξοδο

Εντολή κράτησης / απελευθέρωσης θέσεων (2/10) Δυστυχώς η εκφώνηση απαιτεί πρώτα να γίνει η είσοδος των αριθμών –πως μπορούμε να φτιάξουμε το πρόβλημα βάσει αυτής της απαίτησης; –πρέπει οπωσδήποτε να αποθηκευτούν πρώτα οι αριθμοί! Μπορούμε να δηλώσουμε πίνακα; –όχι, γιατί η δήλωση πίνακα απαιτεί σταθερά τιμή ως μέγεθος και όχι μεταβλητή του προγράμματος Τι κάνουμε λοιπόν; –Επειδή θυμόμαστε ότι μπορούμε να χρησιμοποιήσουμε το τετράδιο απευθείας με τη χρήση του συμβολισμού POSITION –βρίσκουμε μία πρώτη λύση που όπως θα δούμε δεν είναι ιδιαίτερα καλή

Εντολή κράτησης / απελευθέρωσης θέσεων (3/10) PROGRAM_BEGIN INTEGER i, N; CONST_INTEGER arxh = 10; /* Seira */ INPUT(N); FORi = 0; i < N; i = i+1DO INPUT(POSITION(0, arxh+i)); FORi=0; i<N; i = i+1DO OUTPUT(sqr(POSITION(0, arxh+i))); PROGRAM_END (0,0), ι (0,1) Ν (0,2) (0,3) (0,4) (0,5) (0,6) (0,7) (0,8) (0,9) (0,10) … Χρησιμοποιούμε αυθαίρετα το τμήμα του τετραδίου που αρχίζει από την γραμμή (0,10) για την αποθήκευση των αριθμών εισόδου, όσοι και αν είναι, Χρησιμοποιούμε αυθαίρετα το τμήμα του τετραδίου που αρχίζει από την γραμμή (0,10) για την αποθήκευση των αριθμών εισόδου, όσοι και αν είναι, τοποθετώντας τον i-οστό αριθμό στη θέση (0,10+i) Το πρόβλημα με τη λύση αυτή είναι ότι εάν μεγαλώσει το πρόγραμμα και έχουμε επιπλέον μεταβλητές που αυτόματα λαμβάνουν θέση πλέον της σειράς (0,10), τότε πρέπει να μετακινήσουμε την αρχή του τμήματος παρακάτω στο τετράδιο. Το πρόβλημα με τη λύση αυτή είναι ότι εάν μεγαλώσει το πρόγραμμα και έχουμε επιπλέον μεταβλητές που αυτόματα λαμβάνουν θέση πλέον της σειράς (0,10), τότε πρέπει να μετακινήσουμε την αρχή του τμήματος παρακάτω στο τετράδιο.

Εντολή κράτησης / απελευθέρωσης θέσεων (4/10) Η νέα ανάγκη που εμφανίζεται είναι γενικά η χρήση μνήμης ανάλογα με τις απαιτήσεις που προκύπτουν κατά την εκτέλεση του προγράμματος Αυτή η ανάγκη έρχεται σε αντιδιαστολή με την παραδοσιακή δέσμευση μνήμης συγκεκριμένου αριθμού μεταβλητών, που είναι ήδη γνωστός κατά την κατασκευή του προγράμματος –δηλ. στατικά, με την πρώτη ανάγνωση του προγράμματος από τον υπηρέτη πριν αρχίσει η εκτέλεση Χρειαζόμαστε μία εντολή προγράμματος με την οποία θα μπορούσαμε να πούμε στον υπηρέτη να κάνει κάτι που το γνωρίζει ήδη πολύ καλά, π.χ: –Βρες Ν συνεχόμενες ελεύθερες θέσεις τετραδίου και σημείωσε αυτές ως κατειλημμένες Η εντολή αυτή προσφέρεται από τη γλώσσα FLIP και είναι η GRANTPOSITIONS

Εντολή κράτησης / απελευθέρωσης θέσεων (5/10) PROGRAM_BEGIN INTEGER i, N; ADDRESS p; INPUT(N); GRANTPOSITIONS(p, N); FORi=0; i<N; i = i+1DO INPUT(p[i]); FORi=0; i<N; i = i+1 DO OUTPUT(sqr(p[i])); RELEASEPOSITIONS(p); PROGRAM_END Εδώ τα πράγματα είναι ευκολότερα καθώς ο υπηρέτης αναλαμβάνει να βρει τις ελεύθερες θέσεις, χωρίς να επηρεάζει καθόλου μεταβλητές του προγράμματος.Εδώ τα πράγματα είναι ευκολότερα καθώς ο υπηρέτης αναλαμβάνει να βρει τις ελεύθερες θέσεις, χωρίς να επηρεάζει καθόλου μεταβλητές του προγράμματος. Εάν δηλώσουμε επιπλέον μεταβλητές, το πρόγραμμα μας δεν χρειάζεται να αλλάξει.Εάν δηλώσουμε επιπλέον μεταβλητές, το πρόγραμμα μας δεν χρειάζεται να αλλάξει. Προσοχή ότι στο τέλος καλούμε την RELEASEPOSITIONS ώστε να απελευθερώσει ο υπηρέτης τις σειρές όταν δεν τις χρειαζόμαστε άλλο.Προσοχή ότι στο τέλος καλούμε την RELEASEPOSITIONS ώστε να απελευθερώσει ο υπηρέτης τις σειρές όταν δεν τις χρειαζόμαστε άλλο. Η GRANTPOSITIONS(V,N) βρίσκει N ελεύθερες συνεχόμενες σειρές και θέτει στο V την αρχική διεύθυνση (σειρά) αυτού του τμήματος.

Εντολή κράτησης / απελευθέρωσης θέσεων (6/10) Κάτι που παρατηρούμε από τον τρόπο που λειτουργεί η GRANTPOSITIONS, που ενδεχομένως να είναι πρόβλημα, είναι ότι βρίσκει απλώς σειρές τετραδίου, τις οποίες πρέπει εμείς να τις χρησιμοποιήσουμε όπως αρμόζει Τι γίνεται εάν εγώ χρειάζομαι δυναμικά θέσεις για την αποθήκευση Ν τιμών σύνθετου τύπου; Π.χ. θέλω ένα πρόγραμμα το οποίο κάνει τα εξής: –Υπολογίζει την περίμετρο οποιουδήποτε δισδιάστατου πολύπλευρου Ν  3 πλευρών, με είσοδο πρώτα το Ν και έπειτα με τη σειρά τα Ν σημεία –Εκτυπώνει την περίμετρο του και έπειτα τα σημεία με τη σειρά εισόδου

Εντολή κράτησης / απελευθέρωσης θέσεων (7/10) Σχεδίαση του προγράμματος –Μεταβλητές: INTEGER N, REAL d (περίμετρος), INTEGER i (μετρητής), «σημεία» –Είσοδος (αρχικά): To N –Έξοδος (στο τέλος): Το d και μετά τα «σημεία» με τη σειρά εισόδου –Loops: Ένα για την είσοδο των σημείων, Ν ανακυκλώσεις, αλλά μπορώ να προσθέτω και στην περίμετρο d μέσα σε αυτό το loop Ένα στο τέλος, Ν ανακυκλώσεις, για την εκτύπωση των σημείων –Αποθήκευση των σημείων; Μας κάνει το ADDRESS και η GRANTPOSITIONS? –Θα μπορούσαμε αλλά δεν θα είχαμε ευκολία να χρησιμοποιήσουμε τον προσφιλή τύπο RECORD με το όνομα Point

Εντολή κράτησης / απελευθέρωσης θέσεων (8/10) RECORD Point RECBEGIN REAL x,y; RECEND; ADDRESSEX(Point) P; INTEGER i, N; REALd = 0; PROGRAM_BEGIN OUTPUTEX("N:"); INPUTEX(N); IF N < 3 THEN STOP; GRANTPOSITIONS(P, N); FOR i=0; i<N; i=i+1 DO BEGIN INPUT(P[i].x); INPUT(P[i].y); IF i DIFFERENT 0 THEN d = d + sqrt(sqr(P[i-1].x-P[i].x) + sqr(P[i-1].y-P[i].y)); END Συνεχίζεται… Ο υπηρέτης μας προσφέρει έναν νέο τύπο διευθύνσεων τετραδίου με επιπλέον δυνατότητες (γι’ αυτό και η ονομασία EX). Στον τύπο αυτό «επιβάλουμε» έναν συγκεκριμένο τύπο περιεχομένων που μπορούν να αποθηκεύονται. Στην GRANTPOSITIONS ο υπηρέτης τώρα κάνει τα εξής: (α) βλέπει ότι πρόκειται για διεύθυνση τετραδίου αποθήκευσης Point. Επομένως ψάχνει να βρει συνεχόμενες θέσεις τετραδίου για Ν Point μεταβλητές, δηλ 2*Ν σειρές! Ουσιαστικά, το P είναι ένας πίνακας με «κράτηση θέσεων» που γίνεται με εντολή. Βλέπουμε ότι και η χρήση του είναι με τον ίδιο τρόπο. d = d +  (χ Ν-1 – χ Ν ) 2 + (y Ν-1 – y Ν ) 2

Εντολή κράτησης / απελευθέρωσης θέσεων (9/10) OUTPUTEX("Perimeter:"); OUTPUTEX(d); OUTPUT(LINE); FOR i=0; i<N; i=i+1 DO BEGIN OUTPUTEX("("); OUTPUTEX(P[i].x); OUTPUTEX(", "); OUTPUTEX(P[i].y); OUTPUTEX(")"); OUTPUTEX(LINE); END RELEASEPOSITIONS(P); PROGRAM_END Στο σημείο του προγράμματος το οποίο δεν χρειαζόμαστε άλλο τη «μνήμη» που ζητήσαμε από τον υπηρέτη να μας βρει, πάντα του λέμε να την απελευθερώσει.

Εντολή κράτησης / απελευθέρωσης θέσεων (10/10) Η εντολή με την οποία ο υπηρέτης δεσμεύει μνήμη με μέγεθος που είναι γνωστό μόνο μέσω των υπολογισμών του προγράμματος (π.χ. είσοδο) είναι πολύ χρήσιμη –Καθώς μας προσφέρει μνήμη αυτόματα όταν την χρειαζόμαστε –Μας δίνεται και ο ειδικός τύπος διεύθυνσης ADDRESSEX(T) ώστε να χρησιμοποιείται η μνήμη αυτή σαν να ήταν πίνακας από στοιχεία τύπου Τ –Κάθε πρόγραμμα που χρησιμοποιεί στατικούς πίνακες, έστω ARRAY(Τ, N σταθερά τιμή ) P; μπορεί κάλλιστα να γραφεί ώστε να χρησιμοποιεί δυναμικούς πίνακες ADDRESSEX(Τ) P; πριν την 1 η εντολή στην οποία χρησιμοποιείται ο P γράφουμε την εντολή GRANTPOSITIONS(P, N σταθερά τιμή ) μετά την τελευταία εντολή στην οποία χρησιμοποιείται ο P γράφουμε την εντολή RELEASEPOSITIONS(P)

Εντολή κράτησης / απελευθέρωσης θέσεων - ένθετο