Τίτλος Υποέργου: Εφαρµογές Τεχνητής Νοηµοσύνης στην Τεχνολογία Λογισµικού και στην Ιατρική

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Τίτλος Υποέργου: Εφαρµογές Τεχνητής Νοηµοσύνης στην Τεχνολογία Λογισµικού και στην Ιατρική"

Transcript

1 Αρχιµήδης ΙΙ Ενίσχυση Ερευνητικών Οµάδων του ΤΕΙ Κρήτης Τίτλος Υποέργου: Εφαρµογές Τεχνητής Νοηµοσύνης στην Τεχνολογία Λογισµικού και στην Ιατρική Επιστηµονικός Υπεύθυνος: ρ Εµµανουήλ Μαρακάκης ραστηριότητα 1: Εργαλεία Μετασχηµατισµού και Επαλήθευσης Προγραµµάτων. Πακέτο Εργασίας 1.2 (ΠΕ 1.2): Υλοποίηση του Συστήµατος Μετασχηµατισµών. Χρονική ιάρκεια : 1/8/05 µέχρι 31/11/05 Παραδοτέο: Π1.2 - Λογισµικό και η Τεχνική Περιγραφή του Συστήµατος Λογισµικού. Τίτλος Τεχνικής Περιγραφής: Φειδίας: Ένα Αυτόµατο Σύστηµα Μετασχηµατισµού Λογικών Προγραµµάτων. Μέλη της ερευνητικής Οµάδας Ονοµατεπώνυµο Α. ρ Εµµανουήλ Μαρακάκης Υπογραφή Β. Χαρά Κουνάλη Γ. Μαριάννα Σγουράκη Επιστηµονικός Υπεύθυνος Υποέργου "The Project ARXIMIDIS ΙΙ is co-funded by the European Social Fund and National Resources EPEAEK ΙΙ " 1

2 2

3 Περιεχόµενα Κατάλογος Προγραµµάτων... 5 Κατάλογος Σχηµάτων... 5 Κατάλογος Εικόνων Εισαγωγή Εισαγωγικές έννοιες Αναπαράσταση σε Βασική Μορφή Εισαγωγή στον µετα-προγραµµατισµό Αναπαράσταση Προγράµµατος-Αντικείµενο σε Βασικούς Όρους Ταξινοµηµένα υαδικά έντρα Εισαγωγή στα Ταξινοµηµένα υαδικά έντρα Εύρεση, διαγραφή και εισαγωγή στοιχείου δυαδικού δέντρου Αναπαραστάσεις Αναπαράσταση Προγράµµατος σαν Λίστα Λιστών Παράσταση Προγράµµατος-Αντικείµενο σε Βασικούς Όρους στο σύστηµά µας Αναπαράσταση Προγράµµατος σαν Ταξινοµηµένο υαδικό έντρο Αυτόµατο Σύστηµα Μετασχηµατισµού Λογικών Προγραµµάτων Αρχιτεκτονική Συστήµατος και Περιγραφή Κύριων Τµηµάτων του Οι Αλγόριθµοι Μετασχηµατισµών Αλγόριθµος υλοποίησης της πράξης της Εισαγωγής Ορισµού Αλγόριθµος υλοποίησης της πράξης της Ανάπτυξης Αλγόριθµος υλοποίησης της πράξης της Πτύξης Άλλοι Σηµαντικοί Αλγόριθµοι του υποσυστήµατος «µετασχηµατισµού προγραµµάτων» του συστήµατος Φειδίας Εισαγωγή Κορυφαίος Αλγόριθµος υποσυστήµατος «Μετασχηµατισµού Προγραµµάτων» Αλγόριθµος µετατροπής προγράµµατος από µη-βασική σε βασική µορφή Αλγόριθµος υλοποίησης της αναπαράστασης προγράµµατος από µορφή λίστας σε ταξινοµηµένο δυαδικό δέντρο (SBT) Αλγόριθµος µετασχηµατισµού ενός προγράµµατος πλην των πράξεων της εισαγωγής ορισµού, της ανάπτυξης και της πτύξης στο πρόγραµµα που παριστάνεται σαν Τ Αλγόριθµος δηµιουργίας της λίστας των "αχρησιµοποίητων" ορισµάτων, Lunused Αλγόριθµος εφαρµογής του µετασχηµατισµού ανάπτυξης σε προτάσεις που έχουν σαν σώµα τους το βασικό κατηγόρηµα true Αλγόριθµος µετατροπής της αναπαράστασης προγράµµατος από ταξινοµηµένο δυαδικό δέντρο (SBT) σε µορφή λίστας ProgrGr Αλγόριθµος µετατροπής ενός προγράµµατος βασικής αναπαράστασης (µορφή λίστας) ProgrGr σε πρόγραµµα µη-βασικής µορφής ProgrNonGr ιεπικοινωνία συστήµατος Εισαγωγή ιεπικοινωνία Visual Basic Prolog Περιγραφή ιεπικοινωνίας του συστήµατος Φειδίας Ένα πλήρες Σενάριο Χρήσης του συστήµατος Φειδίας Συµπεράσµατα και µελλοντικές βελτιώσεις και επεκτάσεις

4 6. Βιβλιογραφία

5 Κατάλογος Προγραµµάτων ΠΡΟΓΡΑΜΜΑ 2.1 : ΠΑΡΑΣΤΑΣΗ ΣΕ ΒΑΣΙΚΟΥΣ ΌΡΟΥΣ 11 ΠΡΟΓΡΑΜΜΑ 2.2 : ΕΥΡΕΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΥΑ ΙΚΟ ΕΝΤΡΟ 13 ΠΡΟΓΡΑΜΜΑ 2.3 : ΠΡΟΣΘΕΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΥΑ ΙΚΟ ΕΝΤΡΟ 14 ΠΡΟΓΡΑΜΜΑ 2.4 : ΙΑΓΡΑΦΗ ΣΤΟΙΧΕΙΟΥ ΑΠΟ ΥΑ ΙΚΟ ΕΝΤΡΟ 14 ΠΡΟΓΡΑΜΜΑ 3.1 : ΠΡΟΓΡΑΜΜΑ-ΑΝΤΙΚΕΙΜΕΝΟ SUM/2 15 ΠΡΟΓΡΑΜΜΑ 3.2 : ΠΑΡΑΣΤΑΣΗ ΣΕ ΒΑΣΙΚΟΥΣ ΌΡΟΥΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΠΡΟΓΡΑΜΜΑ 3.3 : ΠΑΡΑΣΤΑΣΗ ΣΑΝ ΤΑΞΙΝΟΜΗΜΕΝΟ ΥΑ ΙΚΟ ΕΝΤΡΟ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ Κατάλογος Σχηµάτων ΣΧΗΜΑ 2.1 : ΥΑ ΙΚΟ ΕΝΤΡΟ 12 ΣΧΗΜΑ 2.2 : ΤΑΞΙΝΟΜΗΜΕΝΟ ΥΑ ΙΚΟ ΕΝΤΡΟ 12 ΣΧΗΜΑ 4.1 : ΤΑ ΤΜΗΜΑΤΑ ΤΟΥ ΥΠΟΣΥΣΤΗΜΑΤΟΣ «ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ ΠΡΟΓΡΑΜΜΑΤΩΝ» 22 ΣΧΗΜΑ 4.2 : ΑΝΑΛΥΤΙΚΗ ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΤΜΗΜΑΤΟΣ C 23 Κατάλογος Εικόνων ΕΙΚΟΝΑ 4.1 : ΚΥΡΙΟΣ ΚΑΤΑΛΟΓΟΣ ΕΠΙΛΟΓΩΝ 71 ΕΙΚΟΝΑ 4.2 : ΑΡΧΙΚΑ ΠΡΟΓΡΑΜΜΑΤΑ ΓΙΑ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟ 72 ΕΙΚΟΝΑ 4.3 : ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 72 ΕΙΚΟΝΑ 4.4 : ΠΡΟΒΟΛΗ ΑΡΧΙΚΩΝ ΠΡΟΓΡΑΜΜΑΤΩΝ 73 ΕΙΚΟΝΑ 4.5 : ΠΡΟΒΟΛΗ ΜΕΤΑΣΧΗΜΑΤΙΣΜΕΝΩΝ ΠΡΟΓΡΑΜΜΑΤΩΝ 73 ΕΙΚΟΝΑ 4.6 : ΕΠΙΛΟΓΗ ΠΡΟΓΡΑΜΜΑΤΩΝ ΓΙΑ ΕΚΤΕΛΕΣΗ 74 ΕΙΚΟΝΑ 4.7 : ΕΚΤΕΛΕΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ 74 ΕΙΚΟΝΑ 4.8 : ΕΝΤΟΛΗ ΑΞΙΟΛΟΓΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 75 ΕΙΚΟΝΑ 4.9 : ΑΠΟΤΕΛΕΣΜΑΤΑ ΑΞΙΟΛΟΓΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 75 ΕΙΚΟΝΑ 4.10 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ - ΚΥΡΙΟΣ ΚΑΤΑΛΟΓΟΣ 76 ΕΙΚΟΝΑ 4.11 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΕΠΙΛΟΓΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΓΙΑ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟ 76 ΕΙΚΟΝΑ 4.12 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΕΚΤΕΛΕΣΗ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ 77 ΕΙΚΟΝΑ 4.13 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΟΛΟΚΛΗΡΩΣΗ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ 77 ΕΙΚΟΝΑ 4.14 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΕΠΙΛΟΓΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΓΙΑ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟ 77 ΕΙΚΟΝΑ 4.15 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΕΠΙΛΟΓΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΓΙΑ ΠΡΟΒΟΛΗ 78 ΕΙΚΟΝΑ 4.16 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΠΡΟΒΟΛΗ ΠΡΟΓΡΑΜΜΑΤΟΣ 78 ΕΙΚΟΝΑ 4.17 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΕΠΙΛΟΓΗ ΜΕΤΑΣΧΗΜΑΤΙΣΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΓΙΑ ΠΡΟΒΟΛΗ 79 ΕΙΚΟΝΑ 4.18 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΠΡΟΒΟΛΗ ΜΕΤΑΣΧΗΜΑΤΙΣΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ 79 ΕΙΚΟΝΑ 4.19 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΕΠΙΛΟΓΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΓΙΑ ΕΚΤΕΛΕΣΗ 80 ΕΙΚΟΝΑ 4.20 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΛΙΣΤΑ ΑΡΧΙΚΩΝ ΠΡΟΓΡΑΜΜΑΤΩΝ ΓΙΑ ΕΚΤΕΛΕΣΗ 80 ΕΙΚΟΝΑ 4.21 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΕΚΤΕΛΕΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ 81 ΕΙΚΟΝΑ 4.22 : ΕΠΙΣΤΡΟΦΗ ΑΠΟΤΕΛΕΣΜΑΤΟΣ ΑΠΟ ΤΗΝ ΕΚΤΕΛΕΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ 81 ΕΙΚΟΝΑ 4.23 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΛΙΣΤΑ ΜΕΤΑΣΧΗΜΑΤΙΣΜΕΝΩΝ ΠΡΟΓΡΑΜΜΑΤΩΝ ΓΙΑ ΕΚΤΕΛΕΣΗ 82 ΕΙΚΟΝΑ 4.24 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΕΚΤΕΛΕΣΗ ΜΕΤΑΣΧΗΜΑΤΙΣΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ 82 ΕΙΚΟΝΑ 4.25 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΕΠΙΣΤΡΟΦΗ ΑΠΟΤΕΛΕΣΜΑΤΟΣ ΑΠΟ ΤΗΝ ΕΚΤΕΛΕΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ 83 ΕΙΚΟΝΑ 4.26 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΑΞΙΟΛΟΓΗΣΗ ΠΡΟΓΡΑΜΜΑΤΩΝ 83 ΕΙΚΟΝΑ 4.27 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΕΠΙΛΟΓΗ ΑΡΧΙΚΟΥ-ΜΕΤΑΣΧΗΜΑΤΙΣΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΓΙΑ ΑΞΙΟΛΟΓΗΣΗ 84 ΕΙΚΟΝΑ 4.28 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΣΤΟΧΟΣ ΑΞΙΟΛΟΓΗΣΗΣ ΤΩΝ ΕΠΙΛΕΓΕΝΤΩΝ ΠΡΟΓΡΑΜΜΑΤΩΝ 84 ΕΙΚΟΝΑ 4.29 : ΠΛΗΡΕΣ ΣΕΝΑΡΙΟ ΑΠΟΤΕΛΕΣΜΑΤΑ ΑΞΙΟΛΟΓΗΣΗΣ 85 5

6 6

7 1. Εισαγωγή Ο στόχος αυτής της τεχνικής αναφοράς είναι η παρουσίαση της υλοποίησης του συστήµατος µετασχηµατισµού λογικών προγραµµάτων. Το σύστηµα βελτιώνει λογικά προγράµµατα µετασχηµατίζοντάς τα σε ισοδύναµα προγράµµατα µικρότερου µεγέθους (µικρότερο πλήθος προτάσεων και αποµάκρυνση αχρησιµοποίητων ορισµάτων) και πιθανόν περισσότερο αποτελεσµατικά. Όπως ο γλύπτης παίρνει ένα ακατέργαστο υλικό και µετά από επεξεργασία του δίνει µορφή, έτσι και το σύστηµά µας παίρνει ένα δοµηµένο (προγραµµατιστικά άκοµψο) πρόγραµµα, αποµακρύνει τα περιττά στοιχεία (ορίσµατα ή στοιχειώδης τύπους «literals» ή και ολόκληρες προτάσεις «clauses») και το κάνει προγραµµατιστικά πιο κοµψό (πιο αποτελεσµατικό, µικρότερο σε πλήθος προτάσεων, χωρίς περιττά στοιχεία). Αυτό το σύστηµα µετασχηµατισµού Λογικών Προγραµµάτων ονοµάζεται «Φειδίας» κατ αντιστοιχία µε το όνοµα του γλύπτη που φιλοτέχνησε τον Παρθενώνα. Η δοµή των προγραµµάτων που βελτιώνει το σύστηµα Φειδίας εµπεριέχουν τις σχεδιαστικές αποφάσεις που πάρθηκαν κατά την κατασκευή τους. Το πλεονέκτηµα τους είναι η ευκρινής δοµή τους η οποία δηµιουργείται µε ηµι-αυτόµατο τρόπο. Η ευκρίνεια της δοµής τους είναι χρήσιµη για την κατασκευή τους και για την συντήρηση τους. Τα µειονέκτηµα τους τα οποία δηµιουργούνται λόγω του ηµι-αυτόµατου τρόπου κατασκευής τους είναι το µεγάλο πλήθος σε προτάσεις καθώς και οι αχρησιµοποίητες µεταβλητές στα κατηγορήµατα. Αυτά τα µειονεκτήµατα τα οποία µπορεί να έχουν συνέπεια στην αποτελεσµατικότητα τους λύνονται µε µετασχηµατισµό τους σε ισοδύναµα προγράµµατα. Οι µετασχηµατισµοί οι οποίοι χρησιµοποιούνται από το σύστηµα Φειδίας είναι οι Νέοι ορισµοί (New definitions), η Ανάπτυξη (Unfold) και η Πτύξη (Fold). Η ηµιαυτόµατη µεθοδολογία κατασκευής τους στηρίζεται σε σχήµατα προγραµµάτων όπου το κάθε σχήµα παριστά και µια σχεδιαστική απόφαση. Για τις παραπάνω τεχνικές, θα µελετηθεί ο τρόπος αναπαράστασης ενός προγράµµατος σε βασική µορφή (ground representation), καθώς και ο τρόπος αναπαράστασης σε ταξινοµηµένο δυαδικό δέντρο (sorted binary tree). Θεωρούµε ότι ο αναγνώστης γνωρίζει βασικές έννοιες του Λογικού Προγραµµατισµού όπως µετονοµασία µεταβλητών (variable renaming), αντικατάσταση (substitution), ταυτοποίηση (unification), εφαρµογή αντικαταστάσεων (apply substitution) και σύνθεση αντικαταστάσεων (composition of substitutions). Επιπλέον, ο αναγνώστης γνωρίζει τους ορισµούς των µετασχηµατισµών, Νέοι ορισµοί (New definitions), Ανάπτυξη (Unfold) και Πτύξη (Fold) [Tamaki and Sato, 1984], [Pettorossi and Proietti, 1998], [Pettorossi and Proietti, 1999], [Pettorossi and Proietti, 2000] καθώς και την µεθοδολογία µετασχηµατισµού λογικών προγραµµάτων [Μαρακάκης, Κουνάλη και Σγουράκη, 2005] που κατασκευάζονται µε την µέθοδο [Marakakis and Gallagher, 1994], [Marakakis, 1997].. Το Σύστηµα Φειδίας υλοποιήθηκε σε γλώσσα προγραµµατισµού Prolog [Μαρακάκης, 2004], [Bratko, 2001], [SICStus Prolog User s Manual, 2003], [Sterling and Shapiro, 1997]. Η διεπικοινωνία (Interface) του συστήµατος υλοποιήθηκε στη γλώσσα προγραµµατισµού Visual Basic [Petroutsos, 1998]. Ο χρήστης εισάγει τα δεδοµένα µέσω παραθυρικού και γραφικού περιβάλλοντος. Το σύστηµα δίνει τα αποτελέσµατα είτε µέσω του ίδιου παραθύρου ή σε µορφή αρχείου κειµένου. 7

8 Τα υπόλοιπα κεφάλαια αυτής της τεχνικής αναφοράς έχουν ως εξής: Στο δεύτερο κεφάλαιο παρουσιάζονται έννοιες όπως µετα-προγραµµατισµός, αναπαράσταση προγράµµατος σε βασική µορφή και ταξινοµηµένα δυαδικά δέντρα. Στο τρίτο κεφάλαιο γίνεται παρουσίαση των αναπαραστάσεων του προγράµµατος και των µετασχηµατισµών στο σύστηµα Φειδίας. Στο τέταρτο κεφάλαιο γίνεται αρχιτεκτονική περιγραφή του συστήµατός µας. Περιγράφονται τα τµήµατα (modules) που το απαρτίζουν και που αλληλεπιδρούν µεταξύ τους καθώς επίσης και ο σχεδιασµός της διεπικοινωνίας του συστήµατος. Τέλος, δίνεται ένα πλήρες σενάριο χρήσης του συστήµατος. Στο πέµπτο κεφάλαιο αναφέρονται τα συµπεράσµατα, οι δυνατές επεκτάσεις και οι τυχόν αδυναµίες του συστήµατος. 8

9 2. Εισαγωγικές έννοιες 2.1. Αναπαράσταση σε Βασική Μορφή Εισαγωγή στον µετα-προγραµµατισµό Μετα-γλώσσα είναι µια γλώσσα που περιγράφει κάποια άλλη γλώσσα [Μαρακάκης, 2004]. Η περιγραφόµενη γλώσσα ονοµάζεται γλώσσα-αντικείµενο. Για παράδειγµα, έστω ότι έχουµε την παρακάτω πρόταση «ο πληθυντικός των ουσιαστικών στην Αγγλική σχηµατίζεται προσθέτοντας την κατάληξη s πλην των ουσιαστικών που τελειώνουν σε ch, -sh, -o, -x και ss στα οποία προστίθεται η κατάληξη es». Στην πρόταση αυτή, η Ελληνική γλώσσα χρησιµοποιείται σαν µετα-γλώσσα για να περιγράψει την Αγγλική γλώσσα (γλώσσα-αντικείµενο). Μετα-πρόγραµµα είναι ένα πρόγραµµα που δέχεται σαν δεδοµένα ένα άλλο πρόγραµµα. Το πρόγραµµα που χρησιµοποιείται σαν δεδοµένα ονοµάζεται πρόγραµµααντικείµενο. Οι µεταφραστές (interpreters), οι µεταγλωττιστές (compilers), οι µετασχηµατιστές προγραµµάτων, οι αναλυτές προγραµµάτων (analyzers), κτλ. είναι µεταπρογράµµατα. Η γλώσσα στην οποία γράφεται ένας µεταφραστής ή ένας µεταγλωττιστής είναι η µετα-γλώσσα και η γλώσσα την οποία µεταφράζει ή µεταγλωττίζει είναι η γλώσσα αντικείµενο. Ο µετα-προγραµµατισµός είναι εύκολος στην Prolog αλλά και γενικά στις γλώσσες του λογικού προγραµµατισµού, επειδή προγράµµατα και δεδοµένα µπορούν να παρασταθούν µε τον ίδιο τρόπο. ύο τρόποι υπάρχουν για να παραστήσουµε ένα πρόγραµµα-αντικείµενο. 1. Αναπαράσταση σε βασικούς όρους (ground representation). 2. Αναπαράσταση σε µη-βασικούς όρους (non-ground representation) Αναπαράσταση Προγράµµατος-Αντικείµενο σε Βασικούς Όρους Ένας τρόπος παράστασης λογικών προγραµµάτων γίνεται µε βάση τους παρακάτω κανόνες [Hill and Gallagher, 1998], [Μαρακάκης, 2004] : 1. Κάθε σταθερά της γλώσσας-αντικείµενο παριστάνεται από µία µοναδική σταθερά της µετα-γλώσσας. 2. Κάθε µεταβλητή της γλώσσας-αντικείµενο παριστάνεται από µια µοναδική σταθερά της µετα-γλώσσας. 3. Κάθε συνάρτηση (όρος) f µε πληθυκότητα ν>0, f/ν, της γλώσσας-αντικείµενο παριστάνεται από µία µοναδική συνάρτηση (όρος) f µε πληθυκότητα ν>0, f/ν, της µεταγλώσσας. 4. Κάθε κατηγόρηµα p µε πληθυκότητα ν>0 της γλώσσας-αντικείµενο παριστάνεται από µία µοναδική συνάρτηση f µε πληθυκότητα ν>0 της µετα-γλώσσας. 5. Κάθε λογικός σύνδεσµος µε ν τελεστέους της γλώσσας-αντικείµενο παριστάνεται έµµεσα από το «,» (κόµµα) που χωρίζει τα στοιχεία της λίστας. Ένας τρόπος παράστασης των συµβόλων και των παραστάσεων (εκφράσεων) της γλώσσας αντικείµενο είναι ο εξής. Σύµβολο γλώσσας αντικείµενο Μεταβλητή π.χ. Χ Αναπαράσταση σε βασικούς όρους σταθερά x ή όρος v(i) (ή var(i)) όπου i ακέραιος. 9

10 Σταθερά π.χ. d Όνοµα Συνάρτησης π.χ. g Πρόταση (preposition) π.χ. q Όνοµα Κατηγορήµατος π.χ. q σταθερά d ή όρος c(i) όπου i ακέραιος. σταθερά g ή όρος f(i) όπου i ακέραιος σταθερά q ή όρος p(i) όπου i ακέραιος σταθερά q ή όρος p(i) όπου i ακέραιος Λογικό και ( ) έµµεσα από το «,» (κόµµα) που χωρίζει τα στοιχεία της λίστας. Συνεπαγωγή ( ) έµµεσα από το «,» (κόµµα) που χωρίζει τα στοιχεία της λίστας. Άρνηση ( ) Έκφραση της γλώσσας αντικείµενο Σταθερά, π.χ. d Όρος (term), π.χ. g(t 1,..,t v ) Ατοµικός τύπος (atom), π.χ. q(t 1,..,t v ) συνάρτηση not/1 Αναπαράσταση σε βασικούς όρους Σταθερά d, ή όρος term(d,[]) ή όρος term(c(i),[]) Λίστα [g, t 1,,t v ] ή λίστα [f(i), t 1,..,t v ] ή όρος g(t 1,..,t v ) Λίστα [q, t 1,,t v ] ή λίστα [p(i), t 1,..,t v ] ή όρος q(t 1,..,t v ) τύπος A B Στοιχεία στην ουρά της λίστας [..,A,B,..] τύπος A Στοιχείο στην ουρά της λίστας [.., not A,..] τύπος A B Λίστα [A,B] τύπος A Λίστα [A] ή λίστα [Α, true] ή λίστα [Α, []] Ένα πρόγραµµα παριστάνεται σαν µια λίστα από προτάσεις. Κάθε πρόταση του προγράµµατος-αντικείµενο είναι στοιχείο µιας λίστας µε στοιχεία λίστες. Η κεφαλή κάθε πρότασης είναι το πρώτο στοιχείο της λίστας και ακολουθούν οι στόχοι του σώµατος µε την σειρά που βρίσκονται στην πρόταση. ηλαδή, θα έχουµε τον εξής τρόπο παράστασης: Παράσταση προγράµµατος [[Πρόταση 1 ], [Πρόταση 2 ],..., [Πρόταση κ ] ] Παράσταση προτάσεων [[Κεφαλή_πρότασης], [1 ος _στοιχειώδης_τύπος], [2 ος _στοιχειώδης_τύπος],...] 10

11 Για παράδειγµα, η πρόταση Α Β, C, D, E παριστάνεται ως εξής: [[A], [B], [not C], [D], [E]] Παράσταση στοιχειωδών τύπων (literals) (θετικών ατοµικών τύπων ) [Κατηγόρηµα, 1 ο _όρισµα, 2 ο _όρισµα,...] ή Κατηγόρηµα(1 ο _όρισµα, 2 ο _όρισµα,...) Για παράδειγµα, ο θετικός ατοµικός τύπος p(x, Y, a, f(x)) παριστάνεται ως εξής: [p, v(1), v(2), a, f(v(1))] ή [p, v(1), v(2), a, [f,v(1)]] ή p(v(1), v(2), a, f(v(1))) Παράσταση στοιχειωδών τύπων (literals) (αρνητικών ατοµικών τύπων ) [not Κατηγόρηµα, 1 ο _όρισµα, 2 ο _όρισµα,...] ή not Κατηγόρηµα(1 ο _όρισµα, 2 ο _όρισµα,...) Για παράδειγµα, ο αρνητικός ατοµικός τύπος p(x, Y, a, f(x)) παριστάνεται ως εξής: [not p, v(1), v(2), a, f(v(1))] ή [not p, v(1), v(2), a, [f, v(1)]] ή not p(v(1), v(2), a, f(v(1))) Παράδειγµα Το κατηγόρηµα member/2 είναι αληθές εάν το στοιχείο X ανήκει στη λίστα L. member(x, [X T]) true. member(x, [Y T]) member(x, T). Στο παράδειγµά µας υπάρχουν οι εξής αντιστοιχίες παραστάσεων: Σύµβολο γλώσσας αντικείµενο Μεταβλητές : Χ, Υ, Τ Συναρτήσεις : [ ] Κατηγορήµατα : member, true Όροι : [X T], [Y T] Τύποι : member(x, [X T]) true member(x, [Y T]) member(x, T) Αναπαράσταση σε βασικούς όρους v(1), v(3), v(2) cons member, true [cons, v(1), v(2)], [cons,v(3),v(2)] [[member, v(1), [cons, v(1), v(2)]], true], [[member, v(1), [cons, v(3), v(2)]], [member, v(1),v(2)]] Με βάση τα παραπάνω το κατηγόρηµα member/2 παριστάνεται ως εξής χρησιµοποιώντας την λίστα της Prolog : [ [[member, v(1), [cons, v(1), v(2)]], true], [[member, v(1), [cons, v(3), v(2)]], [member, v(1),v(2)]] ] Πρόγραµµα 2.1 : Παράσταση σε Βασικούς Όρους 11

12 2.2. Ταξινοµηµένα υαδικά έντρα Εισαγωγή στα Ταξινοµηµένα υαδικά έντρα Τα δυαδικά δέντρα παριστάνονται σαν όροι της µορφής [Μαρακάκης 2004], [Bratko, 2001], [Sterling and Shapiro, 1997]: binarytree( Data, LeftSubtree, RightSubtree ), όπου Data είναι τα δεδοµένα του τρέχοντος κόµβου του δέντρου, LeftSubtree είναι το αριστερό υπόδεντρο, RightSubtree είναι το δεξιό υπόδεντρο. Ένα άδειο δυαδικό δέντρο παριστάνεται από το άτοµο nil. Για παράδειγµα, το δέντρο του σχήµατος 2.2 παριστάνεται σαν όρος της Prolog ως εξής : binarytree(a, binarytree(b, binarytree(c, nil, nil), binarytree(d, nil, nil)), binarytree(e, nil, nil)). a b e c d Σχήµα 2.1 : υαδικό έντρο Ένα µη-άδειο δυαδικό δέντρο binarytree( Χ, Left, Right ), όπου X είναι τα δεδοµένα του τρέχοντος κόµβου θεωρείται ταξινοµηµένο όταν ισχύουν τα εξής : Όλοι οι κόµβοι στο αριστερό υπόδεντρο, Left, είναι µικρότεροι του X Όλοι οι κόµβοι στο δεξιό υπόδεντρο, Right, είναι µεγαλύτεροι του X Τα δύο υπόδεντρα είναι επίσης ταξινοµηµένα. Η έρευνα σε ένα ταξινοµηµένο δυαδικό δέντρο έχει κάποια πλεονεκτήµατα. Όταν ψάχνουµε ένα στοιχείο σε ένα ταξινοµηµένο δυαδικό δέντρο είναι σχεδόν πάντα επαρκές να κάνουµε την έρευνα µόνο στο ένα υπόδεντρο Σχήµα 2.2 : Ταξινοµηµένο υαδικό έντρο 12

13 Προγράµµατα τα οποία επεξεργάζονται δυαδικά δέντρα είναι παρόµοια µε τα προγράµµατα που επεξεργάζονται λίστες µε την διαφορά ότι πρέπει να έχουν διπλή αναδροµή. Αυτό λόγω της αναδροµικής φύσης των δυαδικών δέντρων Εύρεση, διαγραφή και εισαγωγή στοιχείου δυαδικού δέντρου Παρακάτω θα περιγράψουµε τρία βασικά προγράµµατα που χρησιµοποιούµε στο σύστηµά µας όταν επεξεργαζόµαστε δυαδικά δέντρα (δδ). Το πρώτο αφορά την εύρεση ενός στοιχείου στο δδ, το δεύτερο την εισαγωγή ενός νέου στοιχείου στο δδ και το τρίτο την διαγραφή ενός στοιχείου από το δδ. Το κατηγόρηµα get_element(binarytree, Element) είναι αληθές εάν το στοιχείο Element είναι µέλος του δέντρου BinaryTree [Μαρακάκης 2004]. Το κατηγόρηµα get_element/2 υλοποιείται από το πρόγραµµα 2.3. Η δηλωτική έννοια αυτού του προγράµµατος είναι ότι το στοιχείο Y ανήκει στο δέντρο εάν συµβαίνει µία από τις εξής περιπτώσεις. a) Το στοιχείο Y είναι µέλος στον (τρέχοντα) κόµβο του δέντρου που εξετάζεται. Αυτή η περίπτωση εξετάζεται από την πρόταση π 1. b) Εάν το στοιχείο Y είναι µικρότερο ή ίσο από το τρέχοντα κόµβο, τότε ψάξε για το Y στο αριστερό υπόδεντρο. Αυτή η περίπτωση εξετάζεται από την πρόταση π 2. c) Εάν το στοιχείο Y είναι µεγαλύτερο από το τρέχοντα κόµβο, τότε ψάξε για το Y στο αριστερό υπόδεντρο. Αυτή η περίπτωση εξετάζεται από την πρόταση π 3. π 1 : get_element( bt( X, Left, Right), X ). π 2 : get_element( bt(x, Left, Right), Y ) :- =Y, get_element(left, Y). melos_dentrou(x, AristeroD). π 3 : get_element( bt(x, Left, Right), Y ) :- Y, get_element(right, Y). Πρόγραµµα 2.2 : Εύρεση στοιχείου σε δυαδικό δέντρο Το κατηγόρηµα add_element(binarytree, Element, NewBinaryTree) είναι αληθές εάν το στοιχείο Element προστεθεί στο δέντρο BinaryTree, επιστρέφοντας το δέντρο NewBinaryTree [Bratko 2001]. Το κατηγόρηµα add_element/3 υλοποιείται από το πρόγραµµα 2.4. Για να προσθέσουµε ένα στοιχείο X σε ένα δυαδικό δέντρο ακολουθούµε τους παρακάτω κανόνες: a) Το αποτέλεσµα της πρόσθεσης ενός στοιχείου X σε ένα άδειο δέντρο είναι το δέντρο bt(x,nil,nil). Αυτή η περίπτωση εξετάζεται από την πρόταση π 1. b) Εάν το στοιχείο X είναι ίσο µε το τρέχοντα κόµβο, τότε επιστρέφεται το ίδιο το δέντρο (δεν προστίθενται το ίδιο στοιχείο δύο φορές). Αυτή η περίπτωση εξετάζεται από την πρόταση π 2. c) Εάν το στοιχείο X είναι µικρότερο από το τρέχοντα κόµβο D, τότε πρόσθεσε το X στο αριστερό υπόδεντρο. Αυτή η περίπτωση εξετάζεται από την πρόταση π 3. d) Εάν το στοιχείο X είναι µεγαλύτερο από το τρέχοντα κόµβο D, τότε πρόσθεσε το X στο δεξιό υπόδεντρο. Αυτή η περίπτωση εξετάζεται από την πρόταση π 4. π 1 : add_element( nil, X, bt(x, nil, nil) ). 13

14 π 2 : add_element( bt(x, Left, Right), X, bt(x, Left, Right) ). π 3 : add_element( bt(d, Left, Right), X, bt(d, Left1, Right) ):- D@>X, add_element( Left, X, Left1 ). π 4 : add_element( bt(d, Left, Right), X, bt(d, Left, Right1) ):- X@>D, add_element( Right, X, Right1 ). Πρόγραµµα 2.3 : Πρόσθεση στοιχείου σε δυαδικό δέντρο Το κατηγόρηµα delete_element(binarytree, Element, NewBinaryTree) είναι αληθές εάν το στοιχείο Element διαγραφεί από το δέντρο BinaryTree, επιστρέφοντας το δέντρο NewBinaryTree [Bratko 2001]. Το κατηγόρηµα delete_element/3 υλοποιείται από το πρόγραµµα 2.5. Για να διαγράψουµε ένα στοιχείο X από ένα δυαδικό δέντρο εξετάζουµε τις παρακάτω περιπτώσεις : a) Εάν το στοιχείο X είναι στο τρέχοντα κόµβο του δέντρου και δεν έχει αριστερό υπόδεντρο. Αυτή η περίπτωση εξετάζεται από την πρόταση π 1. b) Εάν το στοιχείο X είναι στο τρέχοντα κόµβο του δέντρου και δεν έχει δεξιό υπόδεντρο. Αυτή η περίπτωση εξετάζεται από την πρόταση π 2. c) Εάν το στοιχείο X είναι µικρότερο ή ίσο από το τρέχοντα κόµβο D. Αυτή η περίπτωση εξετάζεται από την πρόταση π 3. d) Εάν το στοιχείο X είναι µεγαλύτερο από το τρέχοντα κόµβο D. Αυτή η περίπτωση εξετάζεται από την πρόταση π 4. e) Εάν ο τρέχοντας κόµβος D έχει και δεξιό και αριστερό υπόδεντρο. Τότε εξετάζουµε δυο υποπεριπτώσεις. Εάν το δέντρο που εισάγουµε δεν έχει αριστερό υπόδεντρο, και εάν το δέντρο που εισάγουµε έχει και αριστερό και δεξιό υπόδεντρο. Αυτή η περίπτωση εξετάζεται από τις προτάσεις π 5, π 6 και π 7. π 1 : delete_element( bt(x, nil, Right), X,Right ). π 2 : delete_element( bt(x, Left, nil), X,Left ). π 3 : delete_element( bt( D, Left, Right ), X, bt( D, Left1, Right ) ):- X, delete_element(left, X, Left1). π 4 : delete_element( bt( D, Left, Right ), X, bt( D, Left, Right1 ) ):- D, delete_element(right, X, Right1). π 5 : delete_element( bt(d, Left, Right), X, bt(y, Left, Right1 ) ):- delete2(right, Y, Right1). π 6 : delete2( bt(y, nil, Right ), Y, Right ). π 7 : delete2( bt(d, Left, Right), Y, bt(d, Left1, Right)) :- delete2(left, Y, Left1). Πρόγραµµα 2.4 : ιαγραφή στοιχείου από δυαδικό δέντρο 3. Αναπαραστάσεις 14

15 3.1. Αναπαράσταση Προγράµµατος σαν Λίστα Λιστών Παράσταση Προγράµµατος-Αντικείµενο σε Βασικούς Όρους στο σύστηµά µας Αρχικά το λογικό πρόγραµµα από την µη-βασική µορφή µετατρέπεται σε βασική µορφή σαν µια λίστα της παρακάτω µορφής. Τα προγράµµατα που εµείς εισάγουµε στο σύστηµά µας (sum, factorial, max_sequence κτλ ) αναπαρίστανται µε τον ίδιο τρόπο σαν λίστες της µορφής : [ [Πρόταση1_κατηγορήµατος1, Πρόταση2_κατηγορήµατος1,.. ], [Πρόταση1_κατηγορήµατος2, Πρόταση2_κατηγορήµατος2,.. ],, [Πρόταση1_κατηγορήµατοςΝ, Πρόταση2_κατηγορήµατοςN,.. ] ] όπου Πρόταση1_κατηγορήµατοςΝ, Πρόταση2_κατηγορήµατοςΝ,... έχουν τη µορφή [Κεφαλή_πρότασης, Στοιχειώδης_τύπος_σώµατος_1,, Στοιχειώδης_τύπος_σώµατος_Κ] όπου Κεφαλή_πρότασης είναι µια λίστα της µορφής [Όνοµα_κατηγορήµατος, Όρισµα_1,..., Όρισµα_Μ1] και κάθε Στοιχειώδης _τύπος_σώµατος_ι όπου 1 Ι Κ είναι µια λίστα της µορφής [Όνοµα_κατηγορήµατος, Όριµα_Ι 1,..., Όρισµα_Ι ν1 ] ή της µορφής [not Όνοµα_κατηγορήµατος, Όριµα_Ι 1,..., Όρισµα_Ι ν1 ] Παράδειγµα Το κατηγόρηµα sum(x,y) είναι αληθές εάν Υ είναι το άθροισµα των ακεραίων της λίστας Χ. Έστω το πρόγραµµα sum(x,y), Πρόγραµµα 3.1, στο οποίο δεν φαίνονται οι ορισµοί των τελεστών των τύπων δεδοµένων (data type operations) όπως tail/2, head/2 κτλ. Αυτό είναι ένα πολύ δοµηµένο πρόγραµµα το οποίο θα είναι είσοδος στο σύστηµά µας. sum(x1,x2) p0(x1) p1(x1,x2) sum(x1,x2) \+ p0(x1) p2(x1,x3,x4) sum(x4,x5) p3(x1,x3,x5,x2) p0(x1) empty_seq(x1) p1(x1,x2) neutral_add_subtr_int(x2) p2(x1,x3,x4) p4(x1,x3,x4) p5(x1,x3,x4) p3(x1,x3,x5,x2) plus_int(x3,x5,x2) p4(x1,x3,x4) head(x1,x3) p5(x1,x3,x4) tail(x1,x4) Πρόγραµµα 3.1 : Πρόγραµµα-αντικείµενο sum/2 Η παράσταση του προγράµµατος αυτού σε βασική µορφή φαίνεται παρακάτω : [ [ [[sum,v(1),v(2)],[p0,v(1)],[p1,v(1),v(2)]], [[sum,v(1),v(2)],[not p0,v(1)],[p2,v(1),v(3),v(4)],[sum,v(4),v(5)], 15

16 [p3,v(1),v(3),v(5),v(2)]] ], [ [[p0,v(6)],[empty_seq,v(6)]] ], [ [[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)]] ], [ [[p2,v(9),v(10),v(11)],[p4,v(9),v(10),v(11)],[p5,v(9),v(10),v(11)]] ], [ [[p3,v(12),v(13),v(14),v(15)],[plus_int,v(13),v(14),v(15)]] ], [ [[p4,v(16),v(17),v(18)],[head,v(16),v(17)]] ], [ [[p5,v(19),v(20),v(21)],[tail,v(19),v(21)]] ] ] Πρόγραµµα 3.2 : Παράσταση σε Βασικούς Όρους του Προγράµµατος Αναπαράσταση Προγράµµατος σαν Ταξινοµηµένο υαδικό έντρο Η αναπαράσταση του προγράµµατος σαν λίστα από λίστες δεν είναι επαρκής για τις ανάγκες ενός συστήµατος fold/unfold µετασχηµατισµών. Γι αυτό θα χρησιµοποιήσουµε έναν άλλο τρόπο παράστασης του προγράµµατος σαν ταξινοµηµένο δυαδικό δέντρο. Αυτό θα διευκολύνει την εκτέλεση των µετασχηµατισµών, κάνοντας το σύστηµά µας περισσότερο αποτελεσµατικό. Σε κάθε µη κενό κόµβο του δυαδικού δέντρου υπάρχει η αναπαράσταση των προτάσεων ενός κατηγορήµατος µαζί µε άλλες πληροφορίες για το συγκεκριµένο κατηγόρηµα, οι οποίες είναι χρήσιµες για τον µετασχηµατισµό του. Ένας κόµβος του ταξινοµηµένου δυαδικού δέντρου έχει την εξής µορφή (όπου bt binarytree): bt( PredName, GrClauses, Father, Children, DTopFlag, PredType, PredMode, OnOffFlag, Other_Info, LeftSubtree, RightSubtree ) Εκτός από το LeftSubtree και το RightSubtree τα οποία παριστούν το αριστερό και το δεξιό υπόδεντρο αντίστοιχα, τα υπόλοιπα στοιχεία του κόµβου παριστούν τα δεδοµένα του. Τα δεδοµένα έχουν ως εξής : PredName : Παριστά το όνοµα του κατηγορήµατος του τρέχοντος κόµβου. Αυτό χρησιµοποιείται και σαν κλειδί για την ταξινόµηση του δυαδικού δέντρου. GrClauses : Παριστά τις προτάσεις του κατηγορήµατος PredName σε βασική µορφή. Father : Έχει τον πατρικό κόµβο του κατηγορήµατος PredName. Η έννοια πατρικός κόµβος σηµαίνει ότι το κατηγόρηµα PredName βρίσκεται στο σώµα κάποιας πρότασης του κατηγορήµατος Father. 16

17 Children : Λίστα µε τα παιδιά του PredName. Η έννοια παιδιά αναφέρεται στα κατηγορήµατα που εµφανίζονται στο σώµα των προτάσεων του κατηγορήµατος PredName. DTopFlag : Ένα flag που παίρνει τη τιµή yes εάν υπάρχουν data types operations στην λίστα Children ή την τιµή no εάν δεν υπάρχουν data types operations. PredType : PredMode : Τα δεδοµένα PredType και PredMode θα χρησιµοποιηθούν σε µελλοντική επέκταση του συστήµατος ώστε να λαµβάνει υπόψιν του κατά τους µετασχηµατισµούς τις αλλαγές που θα εκτελούνται στους τύπους και στα modes των κατηγορηµάτων. OnOffFlag : Ένα flag το οποίο παίρνει την τιµή on όταν ο κόµβος είναι ενεργός κόµβος του δέντρου, και την τιµή off όταν ο κόµβος είναι ανενεργός. Στη δεύτερη περίπτωση οι προτάσεις του κόµβου είναι άχρηστες, δεν χρησιµοποιούνται πουθενά στο πρόγραµµα, οπότε µπαίνουν σε µια λίστα που ονοµάζεται UselessClauses. Other_Info : Ένα flag που παίρνει τη τιµή new_def εάν ο αντίστοιχος κόµβος προέρχεται από την λίστα των νέων ορισµών. Παράδειγµα 1. Ο κόµβος για το κατηγόρηµα sum/2 στο ταξινοµηµένο δυαδικό δέντρο του προγράµµατός µας έχει την εξής µορφή. Όπου υπάρχουν µεταβλητές σηµαίνει ότι ακόµα δεν έχουν καταχωρηθεί τιµές, εκτός από το LeftSubtree_sum, RightSubtree_sum το οποίο φαίνεται παρακάτω. bt(sum, [ [[sum,v(1),v(2)],[p0,v(1)],[p1,v(1),v(2)]], [[sum,v(1),v(2)],[not p0,v(1)],[p2,v(1),v(3),v(4)],[sum,v(4),v(5)], [p3,v(1),v(3),v(5),v(2)]] ], none, [p0,p1,p2,p3], no, PredType_sum, PredMode_sum, OnOffFlag_sum, Other_Info_sum, LeftSubtree_sum, RightSubtree_sum 2. Ο κόµβος για το κατηγόρηµα p5/3 έχει την εξής µορφή : bt(p5, [ [[p5,v(19),v(20),v(21)],[tail,v(19),v(21)]] ], p2, [tail], yes, PredType_p5, PredMode _p5, OnOffFlag_p5, 17

18 OtherInfo_p5, nil, nil 3. Το ταξινοµηµένο δυαδικό δέντρο για όλο το πρόγραµµα sum/2, Πρόγραµµα 3.1,είναι το εξής : bt(sum, [ [[sum,v(1),v(2)],[p0,v(1)],[p1,v(1),v(2)]], [[sum,v(1),v(2)],[not p0,v(1)],[p2,v(1),v(3),v(4)],[sum,v(4),v(5)], [p3,v(1),v(3),v(5),v(2)]] ], none,[p0,p1,p2,p3],no,predtype_sum,predmode_sum, OnOffFlag_sum,Other_Info_sum, bt(p0, [ [[p0,v(6)],[empty_seq,v(6)]] ], sum,[empty_seq],yes,predtype_p0,predmode_p0, OnOffFlag_p0,Other_Info_p0,nil, bt(p1, [ [[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)]] ], sum,[neutral_add_subtr_int],yes,predtype_p1,predmode_p1, OnOffFlag_p1,Other_Info_p1,nil, bt(p2, [ [[p2,v(9),v(10),v(11)],[p4,v(9),v(10),v(11)],[p5,v(9),v(10),v(11)]] ], sum,[p4,p5],no,predtype_p2,predmode_p2, OnOffFlag_p2,Other_Info_p2,nil, bt(p3, [ [[p3,v(12),v(13),v(14),v(15)],[plus_int,v(13),v(14),v(15)]] ], sum,[plus_int],yes,predtype_p3,predmode_p3, OnOffFlag_p3,Other_Info_p3,nil, bt(p4, [ [[p4,v(16),v(17),v(18)],[head,v(16),v(17)]] ], p2,[head],yes,predtype_p4,predmode_p4, OnOffFlag_p4,Other_Info_p4,nil, bt(p5, [ [[p5,v(19),v(20),v(21)],[tail,v(19),v(21)]] ], p2,[tail],yes,predtype_p5,predmode_p5, 18

19 OnOffFlag_p5,Other_Info_p5,nil,nil) ) ) ) ) ), nil) Πρόγραµµα 3.3 : Παράσταση σαν Ταξινοµηµένο υαδικό έντρο του προγράµµατος

20 20

21 4. Αυτόµατο Σύστηµα Μετασχηµατισµού Λογικών Προγραµµάτων 4.1. Αρχιτεκτονική Συστήµατος και Περιγραφή Κύριων Τµηµάτων του Το σύστηµα Φειδίας αποτελείται από τα εξής υποσυστήµατα : 1. Το υποσύστηµα «µετασχηµατισµού προγραµµάτων». 2. Το υποσύστηµα «προβολής αρχικών και µετασχηµατισµένων προγραµµάτων». 3. Το υποσύστηµα «εκτέλεσης ενός προγράµµατος». 4. Το υποσύστηµα «αξιολόγησης αρχικού µετασχηµατισµένου προγράµµατος». Το υποσύστηµα «µετασχηµατισµού προγραµµάτων» είναι το πλέον σηµαντικό. Η συνεισφορά αυτής της τεχνικής αναφορά βρίσκεται στον σχεδιασµό και στην υλοποίηση αυτού του υποσυστήµατος το οποίο θα παρουσιάσουµε µε λεπτοµέρειες στο κεφάλαιο 4. Τα υποσυστήµατα «προβολής αρχικών και µετασχηµατισµένων προγραµµάτων» και «εκτέλεσης ενός προγράµµατος» είναι τετριµµένα και δεν χρειάζονται ιδιαίτερη παρουσίαση. Το υποσύστηµα «αξιολόγησης αρχικού µετασχηµατισµένου προγράµµατος» υποστηρίζει την αξιολόγηση του υποσυστήµατος «µετασχηµατισµού προγραµµάτων» και θα παρουσιαστεί σε επόµενη τεχνική αναφορά. Το υποσύστηµα «µετασχηµατισµού προγραµµάτων» αποτελείται από ένα αριθµό τµηµάτων που αλληλεπιδρούν µεταξύ τους και µας δίνουν το τελικό µετασχηµατισµένο πρόγραµµα. Αρχικά το υποσύστηµα µας δέχεται σαν είσοδο το αρχικό πρόγραµµα σε Prolog Pαρχ. και το κορυφαίο κατηγόρηµα (top level predicate). Επειδή το Pαρχ. είναι σε µη-βασική µορφή µετατρέπεται από το υποσύστηµά µας στο πρόγραµµα Pgr1 σε βασική µορφή (Σχήµα 4.1, Τµήµα Α). Η αναπαράσταση αυτή του Pgr1 σαν λίστα από λίστες δεν επαρκεί για να εφαρµόσουµε τους µετασχηµατισµούς. Γι αυτό το λόγο το υποσύστηµα αλλάζει την παράσταση του Pgr1 από λίστα σε ταξινοµηµένο δυαδικό δέντρο (Τ ) στο Τµήµα Β. Κάθε κόµβος του Τ αποτελείται από τα δεδοµένα του κόµβου και από το αριστερό και το δεξιό υπόδεντρο του. Τα δεδοµένα του κόµβου αποτελούνται µεταξύ άλλων από τα εξής στοιχεία : 1. Το όνοµα του κατηγορήµατος το οποίο είναι και το κλειδί ταξινόµησης του δέντρου. 2. Τις προτάσεις του κατηγορήµατος. 3. Άλλα στοιχεία τα οποία αναφέρονται µε λεπτοµέρεια στο κεφάλαιο 3. Η δοµή του Τ καθώς και τα δεδοµένα κάθε κόµβου υποστηρίζουν την αποτελεσµατικότερη εκτέλεση των µετασχηµατισµών. Στο Τ εφαρµόζουµε διαδοχικά και επαναληπτικά τους µετασχηµατισµούς definition introduction, unfold, fold παίρνοντας τελικά το SBT_transform (Σχήµα 4.2). Στο SBT_transform εφαρµόζεται ο µετασχηµατισµός unfold στις προτάσεις που έχουν σαν σώµα µόνο το βασικό κατηγόρηµα true, και έτσι προκύπτει το Τ SBT_Final (Σχήµα 4.2). Κάθε επανάληψη στα τµήµατα C1, C2 και C3 του Σχήµατος 4.2 έχει σαν συνέπεια την αφαίρεση "αποµονωµένων" ορισµάτων. Ενώ στο τµήµα C4 γίνεται αφαίρεση των προτάσεων που έχουν σαν σώµα µόνο το κατηγόρηµα true. Από το τελικό δυαδικό δέντρο SBT_Final προκύπτει το πρόγραµµα Pgr2 σε βασική µορφή (Τµήµα D, Σχήµα 4.1). Στο Τµήµα E µετατρέπεται το πρόγραµµα Pgr2 από βασική µορφή σε µη-βασική µορφή, παράγοντας το πρόγραµµα Pτελ. Σχηµατικά τα βήµατα που ακολουθούµε φαίνονται στο Σχήµα 4.1 και στο Σχήµα 4.2 : 21

22 A B C Μετατροπή του Αναπαράσταση του προγράµµατος Pαρχ Εφαρµογή των µετασχηµατισµών Pαρχ. Pgr1 Pgr1 από λίστα σε SBT SBT_Final σε βασική µορφή. στο πρόγραµµα Pgr1 που ταξινοµηµένο δυαδικό Αναπαριστάνεται σε παριστάνεται από το TopPred TopPredName δέντρο (Τ ). µορφή λίστας Pgr1. ταξινοµηµένο δυαδικό δέντρο. D E Αλλαγή της Μετατροπή του SBT_Final αναπαράσταση του Pgr2 προγράµµατος Pgr2 από Pτελ. προγράµµατος από βασική µορφή (µορφή TopPredName Τ (SBT_Final) σε λίστας) σε µη-βασική µορφή λίστας Pgr2. µορφή Pτελ. TopPred : Κορυφαίο κατηγόρηµα, π.χ sum(x,y) TopPredName : Όνοµα κορυφαίου κατηγορήµατος, π.χ sum Σχήµα 4.1 : Τα τµήµατα του Υποσυστήµατος «Μετασχηµατισµού Προγραµµάτων» 22

23 Εάν Lunused [] C1 C2 C3 SBT Μετασχηµατισµός SBT_nd Μετασχηµατισµός SBT_un Μετασχηµατισµός SBT_fl Εισαγωγή Ορισµού Ανάπτυξης (Unfold). Πτύξης (Fold). Lunused (Definition introduction). Dnew Dnew NewLunused Εάν Lunused = [] SBT_transform C4 Μετασχηµατισµός Ανάπτυξης (Unfold) στις προτάσεις µε σώµα µόνο το κατηγόρηµα true. SBT_Final Σχήµα 4.2 : Αναλυτική περιγραφή του τµήµατος C 23

24 4.2. Οι Αλγόριθµοι Μετασχηµατισµών Παρακάτω περιγράφονται τα τµήµατα εισαγωγής ορισµού, ανάπτυξης και πτύξης (C1, C2 και C3) του Σχήµατος 4.2 παρουσιάζοντας τους αλγορίθµους υλοποίησης κάθε τµήµατος Αλγόριθµος υλοποίησης της πράξης της Εισαγωγής Ορισµού Η διαδικασία αυτή δέχεται σαν είσοδο ένα ταξινοµηµένο δυαδικό δέντρο SBT και µια λίστα Lunused και επιστρέφει το σύνολο των νέων ορισµών Dnew και το καινούργιο δυαδικό δέντρο NewSBT. SBT : Ένα ταξινοµηµένο δυαδικό δέντρο, e.g bt(sum, [[[sum,v(1),v(2)],[p0,v(1)],[p1,v(1),v(2)]],[[sum,v(1),v(2)],[not p0,v(1)],[p2,v(1),v(3),v(4)],[sum,v(4),v(5)],[p3,v(1),v(3),v(5),v(2)]]], none,[p1,p0,p2,p3],no,predtype_sum,predmode_sum,onoffflag_sum, Other_Info_sum, bt(p0, [[[p0,v(6)],[empty_seq,v(6)]]],sum,[empty_seq], yes,predtype_p0,predmode_p0,onoffflag_p0,other_info_p0,nil, bt(p1, [[[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)]]], sum,[neutral_add_subtr_int],yes,predtype_p1, PredMode_p1,OnOffFlag_p1,Other_Info_p1,nil, bt(p2, [[[p2,v(9),v(10),v(11)],[p4,v(9),v(10),v(11)],[p5,v(9),v(10),v(11)]]], sum,[p4,p5],no,predtype_p2,predmode_p2,onoffflag_p2, Other_Info_p2,nil, bt(p3, [[[p3,v(12),v(13),v(14),v(15)],[plus_int,v(13),v(14),v(15)]]], sum,[plus_int],yes,predtype_p3,predmode_p3,onoffflag_p3, Other_Info_p3,nil, bt(p4, [[[p4,v(16),v(17),v(18)],[head,v(16),v(17)]]], p2,[head],yes,predtype_p4,predmode_p4,onoffflag_p4,other_info_p4,nil, bt(p5, [[[p5,v(19),v(20),v(21)],[tail,v(19),v(21)]]], p2,[tail],yes,predtype_p5,predmode_p5,onoffflag_p5, Other_Info_p5,nil,nil)))))),nil), Lunused : λίστα της µορφής [ (PredName1, N1, List1 ), (PredName2, N2, List2),...,(PredNameK, NK, ListK) ], όπου PredNameK είναι το όνοµα του κατηγορήµατος, NK είναι η πληθυκότητα του PredName και ListK είναι η λίστα µε τα µη χρησιµοποιηµένα ορίσµατα. e.g [ (p1,2,[v(28)]), (p3,4,[v(33)]), (p4,3,[v(39)]), (p5,3,[v(41)]) ], 24

25 Dnew : Ένα σύνολο προτάσεων, που ονοµάζονται σύνολο νέων ορισµών, της µορφής [ [[NewPredNameA, NewArgsA], [PredNameA, ArgsA]], [[NewPredNameB, NewArgsB], [PredNameB, ArgsB]],..., [[NewPredNameK, NewArgsK], [PredNameK, ArgsK]] ] e.g [[[[pn1,v(8)],[p1,v(7),v(8)]]], [[[pn2,v(13),v(14),v(15)],[p3,v(12),v(13),v(14),v(15)]]], [[[pn3,v(16),v(17)],[p4,v(16),v(17),v(18)]]], [[[pn4,v(19),v(21)],[p5,v(19),v(20),v(21)]]]], NewSBT : Το νέο δυαδικό δέντρο e.g bt(sum, [[[sum,v(1),v(2)],[p0,v(1)],[p1,v(1),v(2)]],[[sum,v(1),v(2)],[not p0,v(1)],[p2,v(1),v(3),v(4)],[sum,v(4),v(5)],[p3,v(1),v(3),v(5),v(2)]]], none,[p1,p0,p2,p3],no,predtype_sum,predmode_sum, OnOffFlag_sum,Other_Info_sum, bt(p0, [[[p0,v(6)],[empty_seq,v(6)]]], sum,[empty_seq],yes,predtype_p0,predmode_p0,onoffflag_p0, Other_Info_p0,nil, bt(p1, [[[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)]]], sum,[neutral_add_subtr_int],yes,predtype_p1,predmode_p1, OnOffFlag_p1,Other_Info_p1,nil, bt(p2, [[[p2,v(9),v(10),v(11)],[p4,v(9),v(10),v(11)],[p5,v(9),v(10),v(11)]]], sum,[p4,p5],no,predtype_p2,predmode_p2,onoffflag_p2, Other_Info_p2,nil, bt(p3, [[[p3,v(12),v(13),v(14),v(15)],[plus_int,v(13),v(14),v(15)]]], sum,[plus_int],yes,predtype_p3,predmode_p3,onoffflag_p3, Other_Info_p3,nil, bt(p4, [[[p4,v(16),v(17),v(18)],[head,v(16),v(17)]]], p2,[head],yes,predtype_p4,predmode_p4,onoffflag_p4,other_info_p4,nil, bt(p5, [[[p5,v(19),v(20),v(21)],[tail,v(19),v(21)]]], p2,[tail],yes,predtype_p5,predmode_p5,onoffflag_p5,other_info_p5,nil, bt(pn1, [[[pn1,v(8)],[p1,v(7),v(8)]]], none,[p1],no,predtype_pn1,predmode_pn1,onoffflag_pn1,new_def,nil, bt(pn2, [[[pn2,v(13),v(14),v(15)],[p3,v(12),v(13),v(14),v(15)]]], none,[p3],no,predtype_pn2,predmode_pn2,onoffflag_pn2,new_def,nil, bt(pn3, [[[pn3,v(16),v(17)],[p4,v(16),v(17),v(18)]]], none,[ p4],no,predtype_pn3,predmode_pn3,onoffflag_pn3,new_def,nil, bt(pn4, 25

26 [[[pn4,v(19),v(21)],[p5,v(19),v(20),v(21)]]], none,[p5],no,predtype_pn4,predmode_pn4,onoffflag_pn4,new_def,nil, nil)))))))))),nil)) διαδικασία new_definitions_repetitions( SBT, Lunused, Dnew, NewSBT ) D = { } ; για κάθε Xunused Lunused κάνε εφάρµοσε το µετασχηµατισµό new_definition( SBT, Lunused, Dnew ); %Καταχώρησε στο SBT τις νέες προτάσεις insert_newdef_to_sbt( Dnew, SBT, NewSBT ) ; τέλος_για_κάθε Η διαδικασία αυτή δέχεται σαν είσοδο το ταξινοµηµένο δυαδικό δέντρο SBT και τη λίστα Lunused και επιστρέφει το σύνολο των νέων ορισµών Dnew. SBT: as above Lunused: as above Dnew: as above διαδικασία new_definition( SBT, Lunused, Dnew) Dnew := { } ; για κάθε PredName Lunused κάνε make_new_name( PredName, NewPredName ) ; % Βρές από το SBT το κόµβο Node του PredName get_node( SBT, PredName, Node ) ; % Από τις προτάσεις Clauses του κόµβου Node φτιάξε τις καινούργιες προτάσεις NewCls για το NewPredName make_newnode_cls( Clauses, PredName, UnusedArgs, NewPredName, NewCls ), Dnew := Dnew NewCls ; τέλος_για_κάθε Η διαδικασία αυτή δέχεται σαν είσοδο ένα σύνολο προτάσεων Clauses, ένα όνοµα κατηγορήµατος PredName, µια λίστα µε αποµονωµένα ορίσµατα UnusedArgs και ένα νέο όνοµα κατηγορήµατος NewPredName και δηµιουργεί ένα καινούργιο σύνολο προτάσεων NewCls για το NewPredName. Clauses : [[[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)]]] PredName : p1 UnusedArgs : [v(7)] NewPredName : pn1 26

27 NewCls : [[[pn1,v(8)],[p1,v(7),v(8)]]] διαδικασία make_newnode_cls( Clauses, PredName, UnusedArgs, NewPredName, NewCls ) για κάθε Cl Clauses κάνε βρες το literal του PredName και τα ορίσµατά του Args ; %Βρες τη διαφορά NewArgs των Args από τα UnusedArgs NewArgs := Args UnusedArgs, % ηµιούργησε το καινούργιο literal NewCl του PredName NewCl := NewPredName NewArgs ; δηµιούργησε την καινούργια πρόταση NewCls για την πρόταση Cl ; τέλος_για_κάθε Η διαδικασία αυτή δέχεται σαν είσοδο ένα σύνολο προτάσεων Clauses και ένα ταξινοµηµένο δυαδικό δέντρο SBT και δηµιουργεί τόσους κόµβους όσες είναι οι προτάσεις. Επιπλέον εισάγει τους κόµβους στο SBT και επιστρέφει το NewSBT. Clauses: as above SBT: as above NewSBT: as above διαδικασία insert_newdef_to_sbt(clauses, SBT, NewSBT) για κάθε Cl Clauses κάνε % ηµιούργησε ένα καινούργιο κόµβο make_new_node(cl, NodeCl) ; %Βάλε το καινούργιο κόµβο στο δέντρο δηµιουργώντας ένα καινούργιο δέντρο insert_new_node(sbt, NodeCl, NewSBT) ; τέλος_για_κάθε Αλγόριθµος υλοποίησης της πράξης της Ανάπτυξης Η διαδικασία αυτή δέχεται σαν είσοδο ένα ταξινοµηµένο δυαδικό δέντρο SBT και ένα σύνολο προτάσεων Dnew, εφαρµόζει τον µετασχηµατισµό της ανάπτυξης στο πρόγραµµα που παριστάνεται από το SBT, και επιστρέφει ένα νέο δυαδικό δέντρο FinalSBT. SBT : Το ταξινοµηµένο δυαδικό δέντρο, e.g bt(sum, [[[sum,v(1),v(2)],[p0,v(1)],[p1,v(1),v(2)]],[[sum,v(1),v(2)],[not p0,v(1)],[p2,v(1),v(3),v(4)],[sum,v(4),v(5)],[p3,v(1),v(3),v(5),v(2)]]], none,[p1,p0,p2,p3],no,predtype_sum,predmode_sum,onoffflag_sum, 27

28 Other_Info_sum, bt(p0, [[[p0,v(6)],[empty_seq,v(6)]]],sum,[empty_seq], yes,predtype_p0,predmode_p0,onoffflag_p0,other_info_p0,nil, bt(p1, [[[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)]]], sum,[neutral_add_subtr_int],yes,predtype_p1,predmode_p1, OnOffFlag_p1,Other_Info_p1,nil, bt(p2, [[[p2,v(9),v(10),v(11)],[p4,v(9),v(10),v(11)],[p5,v(9),v(10),v(11)]]], sum,[p4,p5],no,predtype_p2,predmode_p2,onoffflag_p2, Other_Info_p2,nil, bt(p3, [[[p3,v(12),v(13),v(14),v(15)],[plus_int,v(13),v(14),v(15)]]], sum,[plus_int],yes,predtype_p3,predmode_p3,onoffflag_p3, Other_Info_p3,nil, bt(p4, [[[p4,v(16),v(17),v(18)],[head,v(16),v(17)]]], p2,[head],yes,predtype_p4,predmode_p4,onoffflag_p4,other_info_p4,nil, bt(p5, [[[p5,v(19),v(20),v(21)],[tail,v(19),v(21)]]], p2,[tail],yes,predtype_p5,predmode_p5,onoffflag_p5,other_info_p5,nil, bt(pn1, [[[pn1,v(8)],[p1,v(7),v(8)]]], none,[p1],no,predtype_pn1,predmode_pn1,onoffflag_pn1,new_def,nil, bt(pn2, [[[pn2,v(13),v(14),v(15)],[p3,v(12),v(13),v(14),v(15)]]], none,[p3],no,predtype_pn2,predmode_pn2,onoffflag_pn2,new_def,nil, bt(pn3, [[[pn3,v(16),v(17)],[p4,v(16),v(17),v(18)]]], none,[p4],no,predtype_pn3,predmode_pn3,onoffflag_pn3,new_def,nil, bt(pn4, [[[pn4,v(19),v(21)],[p5,v(19),v(20),v(21)]]], none,[p5],no,predtype_pn4,predmode_pn4,onoffflag_pn4,new_def, nil,nil)))))))))),nil) Dnew : ένα σύνολο προτάσεων, που ονοµάζονται σύνολο νέων ορισµών, της µορφής [ [[NewPredNameA,NewArgsA],[PredNameA,ArgsA]], [[NewPredNameB,NewArgsB],[PredNameB,ArgsB]],..., [[NewPredNameK,NewArgsK],[PredNameK,ArgsK]] ] e.g Dnew=[[[[pn1,v(8)],[p1,v(7),v(8)]]], [[[pn2,v(13),v(14),v(15)],[p3,v(12),v(13),v(14),v(15)]]], [[[pn3,v(16),v(17)],[p4,v(16),v(17),v(18)]]], [[[pn4,v(19),v(21)],[p5,v(19),v(20),v(21)]]]], FinalSBT : e.g bt(sum, 28

29 [[[sum,v(1),v(2)],[p0,v(1)],[p1,v(1),v(2)]],[[sum,v(1),v(2)],[not p0,v(1)],[p2,v(1),v(3),v(4)],[sum,v(4),v(5)],[p3,v(1),v(3),v(5),v(2)]]], none,[p1,p0,p2,p3],no,predtype_sum,predmode_sum,onoffflag_sum, Other_Info_sum, bt(p0, [[[p0,v(6)],[empty_seq,v(6)]]], sum,[empty_seq],yes,predtype_p0,predmode_p0,onoffflag_p0, Other_Info_p0,nil, bt(p2, [[[p2,v(9),v(10),v(11)],[p4,v(9),v(10),v(11)],[p5,v(9),v(10),v(11)]]], sum,[p4,p5],no,predtype_p2,predmode_p2,onoffflag_p2, Other_Info_p2,nil, bt(pn1, [[[pn1,v(8)],[neutral_add_subtr_int,v(8)]]], none,[neutral_add_subtr_int],yes,predtype_pn1,predmode_pn1, OnOffFlag_pn1,new_def,nil, bt(pn2, [[[pn2,v(13),v(14),v(15)],[plus_int,v(13),v(14),v(15)]]], none,[plus_int],yes,predtype_pn2,predmode_pn2,onoffflag_pn2, new_def,nil, bt(pn3, [[[pn3,v(16),v(17)],[head,v(16),v(17)]]], none,[head],yes,predtype_pn3,predmode_pn3,onoffflag_pn3,new_def,nil, bt(pn4, [[[pn4,v(19),v(21)],[tail,v(19),v(21)]]], none,[tail],yes,predtype_pn4,predmode_pn4,onoffflag_pn4, new_def,nil,nil)))))),nil) διαδικασία unfold_transformation( SBT, Dnew, FinalSBT ) για κάθε DnewCl Dnew κάνε %Βρες από το DnewCl το DPredName find_predname( DnewCl, DPredName ) ; %Βρες από το SBT τις προτάσεις του DPredName get_pred_cls( DPredName, SBT, DPredCls ) ; %Βρες τα ονόµατα των κατηγορηµάτων που ανήκουν στο σώµα του DPredCls body_preds( DPredCls, DBdPreds ) ; %Βρες το DBdPred για το οποίο θα εφαρµοστεί η πράξη unfold find_unfold_predname( DBdPreds, DBdPred ) ; %Βρες από το SBT τις προτάσεις του DBdPred get_pred_cls_prg( DBdPred, SBT, PCls ) ; %Εφάρµοσε τη πράξη unfold unfolding( DPredCls, PCls, DPredNewCls ) ; %Φτιάξε το καινούργιο κόµβο για τις νέες προτάσεις DPredNewCls make_new_node( DPredNewCls, NewNode ) ; %Ενηµέρωσε το SBT update( SBT, NewNode, NewSBT ) ; %σηµείωσε το κόµβο που θα διαγραφεί, 29

30 mark_onoffflag(newsbt, DnewCl, FinalSBT) ; τέλος_για_κάθε Η διαδικασία αυτή δέχεται σαν είσοδο µια πρόταση και επιστρέφει το όνοµα του κατηγορήµατος που βρίσκεται στη κεφαλή της πρώτης πρότασης. Σηµείωση: Λεπτοµέρειες για αυτή τη διαδικασία στο κώδικα DnewCl : [[[pn1,v(8)],[p1,v(7),v(8)]],[[pn1,v(8)],[p1,v(7),v(8)],[p0,v(8)]]] DPredName : pn1 διαδικασία find_predname( DnewCl, DPredName ) Η διαδικασία αυτή δέχεται σαν είσοδο ένα όνοµα κατηγορήµατος DPredName και ένα δυαδικό δέντρο SBT. Βρίσκει από το δέντρο τον κόµβο του DPredName και επιστρέφει τις προτάσεις του DPredCls. DPredName : pn1 SBT : DPredCls :[[[pn1,v(8)],[p1,v(7),v(8)]],[[pn1,v(8)],[p1,v(7),v(8)],[p0,v(8)]]] διαδικασία get_pred_cls( DPredName, SBT, DPredCls ) get_node( SBT, PredName, Node ) ; DPredCls = Clauses ; Η διαδικασία αυτή δέχεται σαν είσοδο ένα σύνολο προτάσεων και επιστρέφει τα ονόµατα των κατηγορηµάτων που βρίσκονται στο σώµα τους. PredNameCls: [[[pn1,v(201)],[p1,v(200),v(201)]],[[pn1,v(201)], [p1,v(200),v(201)],[p0,v(201)]]] BdPredNames : [p1,p0] διαδικασία body_preds ( PredNameCls, BdPredNames ) BdPredNames= {}; για κάθε Cl PredNameCls κάνε find_body_preds( Cl, LCl ) ; BdPredNames1 := BdPredNames LCl ; 30

31 τέλος_για_κάθε delete_the_same_once( BdPredNames1, BdPredNames ) ; Η διαδικασία αυτή δέχεται σαν είσοδο µια λίστα από ονόµατα κατηγορηµάτων BdPredNames και επιστρέφει το όνοµα κατηγορήµατος DBdPred στο οποίο θα εφαρµοστεί ο µετασχηµατισµός unfold. Σηµείωση: Λεπτοµέρειες για αυτή τη διαδικασία στο κώδικα BdPredNames : [p1,p0] DBdPred : p1 or p0 διαδικασία find_unfold_predname( DBdPreds, DBdPred ) ;... Η διαδικασία αυτή δέχεται σαν είσοδο ένα όνοµα κατηγορήµατος DBdPred και ένα δυαδικό δέντρο SBT. Βρίσκει από το δέντρο τον κόµβο του DBdPred και επιστρέφει τις προτάσεις του PCls στις οποίες δεν έχει εφαρµοστεί ο µετασχηµατισµός new definition. Σηµείωση: Λεπτοµέρειες για αυτή τη διαδικασία στο κώδικα DBdPred : p1 SBT : PCls : [[[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)]],[[p1,v(7),v(8)],[empty,v(8)]]] διαδικασία get_pred_cls_prg( DBdPred, SBT, PCls ) ;... Η διαδικασία αυτή δέχεται δύο σύνολα προτάσεων και εφαρµόζει το µετασχηµατισµό unfold όπως περιγράφεται στην τεχνική αναφορά [Μαρακάκης, Κουνάλη και Σγουράκη, 2005]. DPredCls : [[[pn1,v(8)],[p1,v(7),v(8)]],[[pn1,v(8)],[p1,v(7),v(8)],[p0,v(8)]]] PCls : [[[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)]],[[p1,v(7),v(8)],[empty,v(8)]]], DPredNewCls : [[[pn1,v(8)],[neutral_add_subtr_int,v(8)]],[[pn1,v(8)], [empty,v(8)]],[[pn1,v(8)],[neutral_add_subtr_int,v(8)],[p0,v(8)]],[[pn1,v(8)], [empty,v(8)],[p0,v(8)]]] διαδικασία unfolding( DPredCls, PCls, DPredNewCls ) DPredNewCls = { } ; για κάθε DPredCl DPredCls κάνε 31

32 unfold( DPredCl, PCls, DPredNewCl ) ; DPredNewCls := DPredNewCls DPredNewCl ; τέλος_για_κάθε Η διαδικασία αυτή εφαρµόζει το µετασχηµατισµό unfold στο σύνολο των προτάσεων Pcls. PredCl : [[p1n1,v(8)],[p1,v(7),v(8)]] Pcls : [[[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)]],[[p1,v(7),v(8)],[empty,v(8)]]] PredNewCl : [[[pn1,v(8)],[neutral_add_subtr_int,v(8)]],[[pn1,v(8)],[empty,v(8)]]] διαδικασία unfold( PredCl, Cls, PredNewCl ) PredNewCl = { } ; για κάθε Cl Cls κάνε unfold1( PredCl, Cl, PredNewCl1 ) ; PredNewCl := PredNewCl DPredNewCl1 ; τέλος_για_κάθε Η διαδικασία αυτή εφαρµόζει το µετασχηµατισµό unfold στην πρόταση P_PredCl. D_PredCl : [[[p1n1,v(8)],[p1,v(7),v(8)]] P_PredCl : [[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)]] D_PredNewCl : [[pn1,v(8)],[neutral_add_subtr_int,v(8)]] διαδικασία unfold1( D_PredCl, P_PredCl, D_PredNewCl ) rename_cls( P_PredCl, NewP_PredCl ) ; get_head( NewP_PredCl, P_PredName, P_Pred_literal ) ; get_unfold_literal( P_PredName, D_PredCl, D_Pred_literal ) ; unification ( D_Pred_literal, P_Pred_literal, Theta ) ; replace_body( D_PredCl, NewP_PredCl, NewD_PredCl ) ; apply_theta( NewD_PredCl, Theta, D_PredNewCl ) ; Η διαδικασία αυτή βρίσκει τα arguments της πρότασης Cls, τα µετονοµάζει, και δηµιουργεί µια καινούργια πρόταση Cls_renamed. Cls : [[p1,v(7),v(8)],[neutral_add_subtr_int,v(8)],[empty,v(8)]] Cls_renamed : [[p1,v(218),v(219)],[neutral_add_subtr_int,v(219)],[empty,v(219)]] διαδικασία rename_cls( Cls, Cls_renamed ) 32

33 get_args( Cls, Args ) ; rename_args( Args, NewArgs ) ; replace_cls_args( Cls, NewArgs, Cls_renamed ) ; Η διαδικασία αυτή επιστρέφει το PredName και το PredLiteral της κεφαλής µιας πρότασης. Σηµείωση: Λεπτοµέρειες για αυτή τη διαδικασία στο κώδικα Clauses : [[not p1,v(202),v(203)],[neutral_add_subtr_int,v(203)],[empty,v(203)]], PredName : p1 PredLiteral : [not p1,v(202),v(203)] διαδικασία get_head( Clauses, PredName, PredLiteral ) Η διαδικασία αυτή δέχεται σαν είσοδο ένα PredName και ένα σύνολο προτάσεων και επιστρέφει το literal PredLiteral του κατηγορήµατος PredName. Σηµείωση: Λεπτοµέρειες για αυτή τη διαδικασία στο κώδικα : PredName : p1 PredCls : [[[pn1,v(8)],[p1,v(7),v(8)]],[[pn1,v(8)],[p0,v(8)]]] PredLiteral : [p1,v(7),v(8)] διαδικασία get_unfold_literal( PredName, PredCls, PredLiteral ) Η διαδικασία αυτή εφαρµόζει την πράξη της ταυτοποίησης στα arguments των L1 και L2 [Μαρακάκης 200]. L1 : [p1,v(17),v(18)], L2 : [p1,v(7),v(8)], Lunify : [[v(17),v(7)],[v(18),v(8)]] διαδικασία unification( L1, L2, Theta ). unify( Args1, Args2, Theta ) ; 33

34 Η διαδικασία αυτή δέχεται σαν είσοδο δυο προτάσεις DPredCls, PPredCls και αντικαθιστά το σώµα της DPredCls στο σώµα της PPredCls. DPredCls : [[pn1,v(8)],[p1,v(7),v(8)]], PPredCl : [[p1,v(272),v(273)],[neutral_add_subtr_int,v(273)]], NewDPredCls : [[pn1,v(8)],[neutral_add_subtr_int,v(273)]] διαδικασία replace_body( DPredCls, PPredCls, NewDPredCls ) get_body( PPredCls, BdPPredCls ) ; find_pred( PPredCls, PredNameR ) ; replace_cls( DPredCls, BdPPredCls, PredNameR, NewDPredCls ) ; Η διαδικασία αυτή επιστρέφει το σώµα της πρότασης Cl. Σηµείωση: Λεπτοµέρειες για αυτή τη διαδικασία στο κώδικα Cl : [[p1,v(200),v(201)],[neutral_int,v(201)],[p2,v(18)],[p3,v(12)]] BdCl : [[neutral_int,v(201)],[p2,v(18)],[p3,v(12)]] διαδικασία get_body( Cl, BdCl )... Η διαδικασία αυτή βρίσκει το literal του PredNameR στο DPredCls και το αντικαθιστά µε το BdPPredCls επιστρέφοντας το NewDPredCls. Σηµείωση: Λεπτοµέρειες για αυτή τη διαδικασία στο κώδικα : DPredCls : [[pn1,v(8)],[p1,v(7),v(8)],[p0,v(8)]], BdPPredCls : [[not neutral_int,v(201)],[p2,v(18)],[p3,v(12)]], PredNameR : p1, NewDPredCls : [[pn1,v(8)],[not neutral_int,v(201)],[p2,v(18)],[p3,v(12)], [p0,v(8)]] διαδικασία replace_cls( DPredCls, BdPPredCls, PredNameR, NewDPredCls )... Η διαδικασία αυτή δέχεται σαν είσοδο ένα σύνολο προτάσεων NodeCls και δηµιουργεί το κόµβο Node. NodeCls : [[[pn1,v(8)],[neutral_add_subtr_int,v(8)]],[[pn1,v(8)],[empty,v(8)], 34

35 [p0,v(8)]]] Node : [pn1,[[[pn1,v(8)],[neutral_add_subtr_int,v(8)]],[[pn1,v(8)],[empty,v(8)], [p0,v(8)]]],none,[neutral_add_subtr_int,empty,p0],yes,predtype_pn1, PredMode_pn1,OnOffFlag_pn1,new_def]) διαδικασία make_new_node ( NodeCls, Node ) make_childlist( NodeCls, [], Children ) ; put_flag( Children, DTopFlag ) ; Other_Info=new_def ; OnOffFlag=on ; φτιάξε το κόµβο Node ; Η διαδικασία αυτή δέχεται σαν είσοδο ένα δυαδικό δέντρο SBT και ένα καινούργιο κόµβο NewNode και καταχωρεί το κόµβο NewNode στο δέντρο δηµιουργώντας ένα καινούργιο δυαδικό δέντρο NewSBT. SBT : NewNode : [pn1,[[[pn1,v(8)],[neutral_add_subtr_int,v(8)]],[[pn1,v(8)], [empty,v(8)],[p0,v(8)]]],none,[neutral_add_subtr_int,empty,p0],yes,predtype_pn1, PredMode_pn1,OnOffFlag_pn1,new_def]) NewSBT : διαδικασία update( SBT, NewNode, NewSBT ) βρες από το NewNode το NodePredName ; delete_node( SBT, PredName, SBTi ) ; insert_new_node( SBTi, Node, NewSBT ) ; Η διαδικασία αυτή δέχεται σαν είσοδο ένα δυαδικό δέντρο SBT και µια πρόταση DnewCl, βρίσκει τον παλιό κόµβο που θα απενεργοποιηθεί και βάζει στο flag OnOffFlag την τιµή off δηµιουργώντας το νέο δέντρο NewSBT. SBT : DnewCl : [[[pn1,v(8)],[p1,v(7),v(8)]]] NewSBT : διαδικασία mark_onoffflag(sbt, DnewCl, FinalSBT) mark_offflag(sbt, DnewBody, FinalSBT) ; 35

36 Η διαδικασία αυτή δέχεται σαν είσοδο ένα δυαδικό δέντρο SBT και ένα literal της µορφής [[Pred,Args]], βρίσκει τον κόµβο του Pred από το SBT,αλλάζει την τιµή του flag OnOffFlag από on σε off και βάζει το καινούργιο κόµβο στο δέντρο δηµιουργώντας το νέο δέντρο NewSBT. Σηµείωση: Λεπτοµέρειες για αυτή τη διαδικασία στο κώδικα SBT : DnewBody : [[p1,v(7),v(8)]] NewSBT : διαδικασία mark_offflag(sbt, DnewBody, FinalSBT) Αλγόριθµος υλοποίησης της πράξης της Πτύξης Η διαδικασία αυτή δέχεται σαν είσοδο ένα ταξινοµηµένο δυαδικό δέντρο SBT και ένα σύνολο προτάσεων Dnew, εφαρµόζει τον µετασχηµατισµό της πτύξης στο πρόγραµµα που παριστάνεται από το SBT, και επιστρέφει ένα νέο δυαδικό δέντρο FinalSBT. SBT : Το ταξινοµηµένο δυαδικό δέντρο e.g bt(sum, [[[sum,v(1),v(2)],[p0,v(1)],[p1,v(1),v(2)]],[[sum,v(1),v(2)],[not p0,v(1)],[p2,v(1),v(3),v(4)],[sum,v(4),v(5)],[p3,v(1),v(3),v(5),v(2)]]], none,[p1,p0,p2,p3],no,predtype_sum,predmode_sum,onoffflag_sum, Other_Info_sum, bt(p0, [[[p0,v(6)],[empty_seq,v(6)]]], sum,[empty_seq],yes,predtype_p0,predmode_p0,onoffflag_p0, Other_Info_p0,nil, bt(p2, [[[p2,v(9),v(10),v(11)],[p4,v(9),v(10),v(11)],[p5,v(9),v(10),v(11)]]], sum,[p4,p5],no,predtype_p2,predmode_p2,onoffflag_p2, Other_Info_p2,nil, bt(pn1, [[[pn1,v(8)],[neutral_add_subtr_int,v(8)]]], none,[neutral_add_subtr_int],yes,predtype_pn1,predmode_pn1, OnOffFlag_pn1,new_def,nil, bt(pn2, [[[pn2,v(13),v(14),v(15)],[plus_int,v(13),v(14),v(15)]]], none,[plus_int],yes, PredType_pn2,PredMode_pn2,OnOffFlag_pn2, new_def,nil, bt(pn3, [[[pn3,v(16),v(17)],[head,v(16),v(17)]]], none,[head],yes, PredType_pn3,PredMode_pn3,OnOffFlag_pn3, 36

Τίτλος Υποέργου: Εφαρµογές Τεχνητής Νοηµοσύνης στην Τεχνολογία Λογισµικού και στην Ιατρική

Τίτλος Υποέργου: Εφαρµογές Τεχνητής Νοηµοσύνης στην Τεχνολογία Λογισµικού και στην Ιατρική Αρχιµήδης ΙΙ Ενίσχυση Ερευνητικών Οµάδων του ΤΕΙ Κρήτης Τίτλος Υποέργου: Εφαρµογές Τεχνητής Νοηµοσύνης στην Τεχνολογία Λογισµικού και στην Ιατρική Επιστηµονικός Υπεύθυνος: ρ Εµµανουήλ Μαρακάκης ραστηριότητα

Διαβάστε περισσότερα

"The Project ARXIMIDIS ΙΙ is co-funded by the European Social Fund and National Resources EPEAEK ΙΙ "

The Project ARXIMIDIS ΙΙ is co-funded by the European Social Fund and National Resources EPEAEK ΙΙ Αρχιµήδης ΙΙ Ενίσχυση Ερευνητικών Οµάδων του ΤΕΙ Κρήτης Τίτλος Υποέργου: Εφαρµογές Τεχνητής Νοηµοσύνης στην Τεχνολογία Λογισµικού και στην Ιατρική Επιστηµονικός Υπεύθυνος: ρ Εµµανουήλ Μαρακάκης ραστηριότητα

Διαβάστε περισσότερα

Τίτλος Υποέργου: Εφαρµογές Τεχνητής Νοηµοσύνης στην Τεχνολογία Λογισµικού και στην Ιατρική

Τίτλος Υποέργου: Εφαρµογές Τεχνητής Νοηµοσύνης στην Τεχνολογία Λογισµικού και στην Ιατρική Αρχιµήδης ΙΙ Ενίσχυση Ερευνητικών Οµάδων του ΤΕΙ Κρήτης Τίτλος Υποέργου: Εφαρµογές Τεχνητής Νοηµοσύνης στην Τεχνολογία Λογισµικού και στην Ιατρική Επιστηµονικός Υπεύθυνος: ρ Εµµανουήλ Μαρακάκης ραστηριότητα

Διαβάστε περισσότερα

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας ΚΕΦΑΛΑΙΟ 8: Αφηρηµένοι τύποι δεδοµένων 8.1 οµές δεδοµένων (data structures) 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας Αδόµητα δεδοµένα οδός Ζέας

Διαβάστε περισσότερα

Α. Ερωτήσεις Ανάπτυξης

Α. Ερωτήσεις Ανάπτυξης οµηµένος Προγραµµατισµός-Κεφάλαιο 7 Σελίδα 1 α ό 10 ΕΝΟΤΗΤΑ ΙΙΙ (ΠΡΟΓΡΑΜΜΑΤΑ) ΚΕΦΑΛΑΙΟ 7: Είδη, Τεχνικές και Περιβάλλοντα Προγραµµατισµού Α. Ερωτήσεις Ανάπτυξης 1. Τι ονοµάζουµε γλώσσα προγραµµατισµού;

Διαβάστε περισσότερα

n true false if t then t else t u t t b t emptylist cons t t t t λx.t u ::= head tail isempty

n true false if t then t else t u t t b t emptylist cons t t t t λx.t u ::= head tail isempty Συναρτησιακός Προγραµµατισµός 2008 Τρίτο Φύλλο Ασκήσεων - Project Το project αυτό µπορεί να γίνει από οµάδες 1-3 ατόµων και αντιστοιχεί στο 15% του ϐαθµού στο µάθηµα. Συνολικό Αθροισµα Βαθµών: 150 Προθεσµία

Διαβάστε περισσότερα

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

Διαβάστε περισσότερα

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 22: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης - Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 6. Δυαδικά Δέντρα 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 18/11/2016 Εισαγωγή Τα

Διαβάστε περισσότερα

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

Διαβάστε περισσότερα

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

ιαφάνειες παρουσίασης #11 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ http://www.corelab.ece.ntua.gr/courses/programming/ ιδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

Διαβάστε περισσότερα

Περιεχόμενα Πρόλογος 1. Εισαγωγή 2. Τα Βασικά Μέρη ενός Προγράμματος Prolog

Περιεχόμενα Πρόλογος 1. Εισαγωγή 2. Τα Βασικά Μέρη ενός Προγράμματος Prolog Περιεχόμενα Πρόλογος... xxv 1. Εισαγωγή... 1 1.1. Ιστορική Εξέλιξη της Prolog.... 2 1.2. Προστακτικός και Δηλωτικός Προγραμματισμός.... 2 1.3. Δηλωτική και διαδικαστική έννοια ενός προγράμματος Prolog....

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Σχετικές έννοιες 8.3 Υλοποίηση δοµών δεδοµένων 8.4 Μια σύντοµη µελέτη περίπτωσης 8.5 Προσαρµοσµένοι τύποι δεδοµένων 1 Βασικές δοµές

Διαβάστε περισσότερα

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Ουρές Προτεραιότητας Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρά Προτεραιότητας Το πρόβλημα Έχουμε αντικείμενα με κλειδιά και θέλουμε ανά πάσα στιγμή

Διαβάστε περισσότερα

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1 Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1 Ποιες γλώσσες αναφέρονται ως φυσικές και ποιες ως τεχνητές; Ως φυσικές γλώσσες αναφέρονται εκείνες οι οποίες χρησιμοποιούνται για την επικοινωνία μεταξύ ανθρώπων,

Διαβάστε περισσότερα

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Καθηγητής Πληροφορικής ΠΕ19 1 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 6 ο : ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΙΣΤΟΣΕΛΙΔΑ ΜΑΘΗΜΑΤΟΣ: http://eclass.sch.gr/courses/el594100/ Η έννοια του προγράμματος

Διαβάστε περισσότερα

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 3 ο Συνδεδεµένες Λίστες Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση ΟΑΤ λίστα Ακολουθιακή λίστα Συνδεδεµένη λίστα

Διαβάστε περισσότερα

for for for for( . */

for for for for( . */ Εισαγωγή Στον Προγραµµατισµό «C» Βρόχοι Επανάληψης Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Ο βρόχος for Η εντολή for χρησιµοποιείται

Διαβάστε περισσότερα

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1 Διασυνδεδεμένες Δομές Δυαδικά Δέντρα Προγραμματισμός II 1 lalis@inf.uth.gr Δέντρα Τα δέντρα είναι κλασικές αναδρομικές δομές Ένα δέντρο αποτελείται από υποδέντρα, καθένα από τα οποία μπορεί να θεωρηθεί

Διαβάστε περισσότερα

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

Διαβάστε περισσότερα

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

Διαβάστε περισσότερα

Εισαγωγή - Βασικές έννοιες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

Εισαγωγή - Βασικές έννοιες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο Εισαγωγή - Βασικές έννοιες Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος 2012-13 A Εξάμηνο Αλγόριθμος Αλγόριθμος είναι μια πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων

Διαβάστε περισσότερα

ÔÏÕËÁ ÓÁÑÑÇ ÊÏÌÏÔÇÍÇ

ÔÏÕËÁ ÓÁÑÑÇ ÊÏÌÏÔÇÍÇ ΤΑΞΗ: ΚΑΤΕΥΘΥΝΣΗ: ΜΑΘΗΜΑ: ΘΕΜΑ Α Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗ (2ος Κύκλος) ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Ηµεροµηνία: Παρασκευή 25 Απριλίου 2014 ιάρκεια Εξέτασης: 3 ώρες ΕΚΦΩΝΗΣΕΙΣ

Διαβάστε περισσότερα

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ 00497 -Δεν ελέγχετε αν η createlist εκτελλέστικε σωστά και δεν τερµατίζετε το πρόγραµµα σε διαφορετική -Σωστά βρίσκετε το σηµείο στο οποίο πρέπει να προστεθεί ο κόµβος. -Σωστά τερµατίζετε

Διαβάστε περισσότερα

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 7 ο έντρο Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης έντρο Ορισµός Υλοποίηση µε Πίνακα Υλοποίηση µε είκτες υαδικό έντρο

Διαβάστε περισσότερα

ΕΠΛ 434: Λογικός Προγραμματισμός

ΕΠΛ 434: Λογικός Προγραμματισμός ΕΠΛ 434: Λογικός Προγραμματισμός και Τεχνητή Νοημοσύνη Επισκ. Λέκτορας Λοΐζος Μιχαήλ Τμήμα Πληροφορικής ρ Πανεπιστήμιο Κύπρου (Χειμερινό Εξάμηνο 2008 2009) Προγράμματα στην Prolog Αλγόριθμος = Λογική +

Διαβάστε περισσότερα

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

Διαβάστε περισσότερα

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

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Προγραµµατισµός Η/Υ Ο προγραµµατισµός είναι η διατύπωση του αλγορίθµου σε µορφή κατανοητή από τον Η/Υ ώστε να τον εκτελέσει («τρέξει» όπως λέµε στην ορολογία της

Διαβάστε περισσότερα

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 7: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου Διδάσκων:

Διαβάστε περισσότερα

A) Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις παρακάτω προτάσεις 1-10 και δίπλα τη λέξη Σωστό, αν είναι σωστή, ή τη λέξη Λάθος, αν είναι

A) Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις παρακάτω προτάσεις 1-10 και δίπλα τη λέξη Σωστό, αν είναι σωστή, ή τη λέξη Λάθος, αν είναι ΠΡΟΣΟΜΟΙΩΣΗ ΑΠΟΛΥΤΗΡΙΩΝ ΕΞΕΤΑΣΕΩΝ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΤΕΤΑΡΤΗ 27 ΑΠΡΙΛΙΟΥ 2011 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΘΕΜΑ 1ο A) Να γράψετε στο τετράδιό σας

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) 1. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative

Διαβάστε περισσότερα

Α1. Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις παρακάτω προτάσεις 1-5 και, δίπλα, τη λέξη ΣΩΣΤΟ, αν η πρόταση είναι σωστή, ή τη λέξη

Α1. Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις παρακάτω προτάσεις 1-5 και, δίπλα, τη λέξη ΣΩΣΤΟ, αν η πρόταση είναι σωστή, ή τη λέξη ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ ΛΥΚΕΙΟΥ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις παρακάτω προτάσεις 1-5 και, δίπλα, τη λέξη ΣΩΣΤΟ,

Διαβάστε περισσότερα

Β. Να εξηγήσετε τι σηµαίνει ολίσθηση ενός δυαδικού αριθµού 3 θέσεις αριστερά. 5 4 3 µπορεί να είναι: Α: ουρά Β:στοίβα Γ:και τα δυο :τίποτα

Β. Να εξηγήσετε τι σηµαίνει ολίσθηση ενός δυαδικού αριθµού 3 θέσεις αριστερά. 5 4 3 µπορεί να είναι: Α: ουρά Β:στοίβα Γ:και τα δυο :τίποτα ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΙΑΓΩΝΙΣΜΑ κ ΘΕΜΑ 1 A. Σηµειώστε ποιες από τις παρακάτω προτάσεις είναι σωστές και ποιες λάθος: 1. Κάθε δοµή επιλογής κλείνει µε την εντολή τέλος_αν 2. Κάθε υποπρόγραµµα µπορεί να υλοποιηθεί

Διαβάστε περισσότερα

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης (ΔΔΑ) Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου Εισαγωγή στοιχείου

Διαβάστε περισσότερα

Επιµέλεια Θοδωρής Πιερράτος

Επιµέλεια Θοδωρής Πιερράτος Εισαγωγή στον προγραµµατισµό Η έννοια του προγράµµατος Ο προγραµµατισµός ασχολείται µε τη δηµιουργία του προγράµµατος, δηλαδή του συνόλου εντολών που πρέπει να δοθούν στον υπολογιστή ώστε να υλοποιηθεί

Διαβάστε περισσότερα

Ενότητα 7 Ουρές Προτεραιότητας

Ενότητα 7 Ουρές Προτεραιότητας Ενότητα Ουρές Προτεραιότητας ΗΥ4 - Παναγιώτα Φατούρου Ουρές Προτεραιότητας Θεωρούµε ένα χώρο κλειδιών U και έστω ότι µε κάθε κλειδί Κ (τύπου Key) έχει συσχετισθεί κάποια πληροφορία Ι (τύπου Type). Έστω

Διαβάστε περισσότερα

4.1 Θεωρητική εισαγωγή

4.1 Θεωρητική εισαγωγή ΨΗΦΙΑΚΑ ΚΥΚΛΩΜΑΤΑ - ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 4 ΥΑ ΙΚΟΣ ΑΘΡΟΙΣΤΗΣ-ΑΦΑΙΡΕΤΗΣ Σκοπός: Να µελετηθούν αριθµητικά κυκλώµατα δυαδικής πρόσθεσης και αφαίρεσης. Να σχεδιαστούν τα κυκλώµατα από τους πίνακες αληθείας

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Πτυχιακή Εξεταστική Ιούλιος 2014 Διδάσκων : Ευάγγελος Μαρκάκης 09.07.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες

Διαβάστε περισσότερα

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΟΝΟΜΑΤΕΠΩΝΥΜΟ: Θέμα 1ο I. Τι γνωρίζετε για τους γράφους; II. Να γράψετε στο τετράδιό σας τον αριθμό κάθε μιας από τις παρακάτω προτάσεις 1-5 και δίπλα τη λέξη ΣΩΣΤΟ αν είναι σωστή

Διαβάστε περισσότερα

Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός. Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός

Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός. Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός 7 Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός Σχεσιακή Άλγεβρα H Σχεσιακή Άλγεβρα (relational algebra) ορίζει ένα σύνολο πράξεων που εφαρμόζονται σε μία ή περισσότερες σχέσεις

Διαβάστε περισσότερα

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος Κεφάλαιο 2.3: Προγραμματισμός 1 2.3.1 Αναφορά σε γλώσσες προγραμματισμού και «Προγραμματιστικά Υποδείγματα» 2.3.1.1 Πρόγραμμα και Γλώσσες Προγραμματισμού Πρόγραμμα: σύνολο εντολών που χρειάζεται να δοθούν

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα. ΚΕΦΑΛΑΙΟ 7 ο 1. Επιλογή της κατάλληλης γλώσσας προγραµµατισµού Εκατοντάδες γλώσσες προγραµµατισµού χρησιµοποιούνται όπως αναφέρθηκε σήµερα για την επίλυση των προβληµάτων µε τον υπολογιστή, τη δηµιουργία

Διαβάστε περισσότερα

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα). Κ08 Δομές Δεδομένων και Τεχνικές Προγραμματισμού Διδάσκων: Μανόλης Κουμπαράκης Εαρινό Εξάμηνο 2016-2017. Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Διαβάστε περισσότερα

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

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. AeppAcademy.com facebook.com/aeppacademy Γεια. Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. Καλή Ανάγνωση & Καλή Επιτυχία

Διαβάστε περισσότερα

Εισαγωγή στην επιστήµη των υπολογιστών ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ

Εισαγωγή στην επιστήµη των υπολογιστών ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ Εισαγωγή στην επιστήµη των υπολογιστών ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ 1 Αριθµητικό Σύστηµα! Ορίζει τον τρόπο αναπαράστασης ενός αριθµού µε διακεκριµένα σύµβολα! Ένας αριθµός αναπαρίσταται διαφορετικά σε κάθε σύστηµα,

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 12: Δέντρα ΙΙ -Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης(ΔΔΑ) - Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου - Εισαγωγή

Διαβάστε περισσότερα

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

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ 1) Πότε χρησιμοποιείται η δομή επανάληψης

Διαβάστε περισσότερα

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

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

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

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Κεφάλαιο 6ο Εισαγωγή στον Προγραµµατισµό Μέρος Πρώτο (6.1, 6.2 και 6.3) Α. Ερωτήσεις Σωστού Λάθους 1. Η γλώσσα µηχανής είναι µία γλώσσα υψηλού επιπέδου.

Διαβάστε περισσότερα

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Εργαστήριο 3: 3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Η C++, όπως όλες οι γλώσσες προγραμματισμού, χρησιμοποιεί τελεστές για να εκτελέσει τις αριθμητικές και λογικές λειτουργίες.

Διαβάστε περισσότερα

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

Διαβάστε περισσότερα

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research ΑΛΓΟΡΙΘΜΟΙ ΜΕ C ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής CMOR Lab Computational Methodologies and Operations Research Δέντρα (5) Τ ένα δέντρο i ένας κόμβος στο επίπεδο k j ένας κόμβος στο επίπεδο k+1 } :

Διαβάστε περισσότερα

ΙΑΓΩΝΙΣΜΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΘΕΜΑ 1 Α.

ΙΑΓΩΝΙΣΜΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΘΕΜΑ 1 Α. ΙΑΓΩΝΙΣΜΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΘΕΜΑ 1 Α. 1. Αν το Α έχει την τιµή 10 και το Β την τιµή 20 τότε η έκφραση (Α > 8 ΚΑΙ Β < 20) Ή (Α > 10 Ή Β = 10) είναι αληθής 2. Σε περίπτωση εµφωλευµένων βρόχων, ο εσωτερικός

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ 1. Ποιες από τις παρακάτω εντολές είναι σωστές; α) if A + B

Διαβάστε περισσότερα

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Άσκηση αυτοαξιολόγησης 3-4 Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητες 3 & 4: ένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε

Διαβάστε περισσότερα

o AND o IF o SUMPRODUCT

o AND o IF o SUMPRODUCT Πληροφοριακά Εργαστήριο Management 1 Information Συστήματα Systems Διοίκησης ΤΕΙ Τμήμα Ελεγκτικής Ηπείρου Χρηματοοικονομικής (Παράρτημα Πρέβεζας) και Αντικείµενο: Μοντελοποίηση προβλήµατος Θέµατα που καλύπτονται:

Διαβάστε περισσότερα

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΣΤΗ ΔΙΟΙΚΗΣΗ ΚΑΙ ΣΤΗΝ ΟΙΚΟΝΟΜΙΑ 7 Ο ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΟΣΤΟΛΙΑ ΠΑΓΓΕ Περιεχόμενα 2 Δυαδικό Σύστημα Προσημασμένοι δυαδικοί αριθμοί Αφαίρεση

Διαβάστε περισσότερα

Απλοποιεί τα γεγονότα έτσι ώστε να περιγράφει τι έχει γίνει και όχι πως έχει γίνει.

Απλοποιεί τα γεγονότα έτσι ώστε να περιγράφει τι έχει γίνει και όχι πως έχει γίνει. οµηµένες τεχνικές Ο στόχος των δοµηµένων τεχνικών είναι: Υψηλής ποιότητας προγράµµατα Εύκολη τροποποίηση προγραµµάτων Απλοποιηµένα προγράµµατα Μείωση κόστους και χρόνου ανάπτυξης. Οι βασικές αρχές τους

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 18. 18 Μηχανική Μάθηση

ΚΕΦΑΛΑΙΟ 18. 18 Μηχανική Μάθηση ΚΕΦΑΛΑΙΟ 18 18 Μηχανική Μάθηση Ένα φυσικό ή τεχνητό σύστηµα επεξεργασίας πληροφορίας συµπεριλαµβανοµένων εκείνων µε δυνατότητες αντίληψης, µάθησης, συλλογισµού, λήψης απόφασης, επικοινωνίας και δράσης

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το Σηµαντικά σηµεία κεφαλαίου Τα τρία στάδια επίλυσης ενός προβλήµατος: Ακριβής προσδιορισµό του προβλήµατος Ανάπτυξη του αντίστοιχου αλγορίθµου. ιατύπωση του αλγορίθµου σε κατανοητή µορφή από τον υπολογιστή.

Διαβάστε περισσότερα

Αριθµητική Ολοκλήρωση

Αριθµητική Ολοκλήρωση Κεφάλαιο 5 Αριθµητική Ολοκλήρωση 5. Εισαγωγή Για τη συντριπτική πλειοψηφία των συναρτήσεων f (x) δεν υπάρχουν ή είναι πολύ δύσχρηστοι οι τύποι της αντιπαραγώγου της f (x), δηλαδή της F(x) η οποία ικανοποιεί

Διαβάστε περισσότερα

Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό. 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1

Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό. 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1 Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1 6.3 Φυσικές και τεχνητές γλώσσες Μια γλώσσα γενικά προσδιορίζεται από: 1. Το αλφάβητο: το σύνολο των στοιχείων που χρησιμοποιεί

Διαβάστε περισσότερα

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗ ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Σ ΗΜΕΡΗΣΙΟΥ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ ΤΡΙΤΗ 3 ΙΟΥΝΙΟΥ 2003 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Διαβάστε περισσότερα

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια: Εργαστήριο 6: 6.1 Δομές Επανάληψης Βρόγχοι (Loops) Όταν θέλουμε να επαναληφθεί μια ομάδα εντολών τη βάζουμε μέσα σε ένα βρόχο επανάληψης. Το αν θα (ξανα)επαναληφθεί η εκτέλεση της ομάδας εντολών καθορίζεται

Διαβάστε περισσότερα

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της; 1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες (μορφές) της; Η δομή επανάληψης χρησιμοποιείται όταν μια σειρά εντολών πρέπει να εκτελεστεί σε ένα σύνολο περιπτώσεων, που έχουν κάτι

Διαβάστε περισσότερα

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Κεφάλαιο 7 ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Ερωτήσεις 1. Να αναφέρετε διαφορές μεταξύ γλωσσών μηχανής και γλωσσών χαμηλού επιπέδου. Οι γλώσσες μηχανής κωδικοποιούν τις εντολές τους με ομάδες

Διαβάστε περισσότερα

Week. 6: Java Collections

Week. 6: Java Collections Week 6: Java Collections Συλλογές δεδοµένων [collections] Εβδοµάδα 6: Συλλογές δεδοµένων στην Java Οι συλλογές [collections] (αναφέρονται και ως «υποδοχείς δεδοµένων» [containers]) είναι κλάσεις που χρησιµοποιούνται

Διαβάστε περισσότερα

Λογικός Προγραµµατισµός: Η Γλώσσα Prolog

Λογικός Προγραµµατισµός: Η Γλώσσα Prolog Λογικός Προγραµµατισµός: Η Γλώσσα Prolog 1 Βασικά Στοιχεία Γλώσσας Prolog Ορισµοί (statements): Επιτελούν το ρόλο εντολών στις κλασσικές γλώσσες προγραµµατισµού Γεγονότα Κανόνες Ερωτήσεις Όροι (terms):

Διαβάστε περισσότερα

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη Επιλογή και επανάληψη Η ύλη που αναπτύσσεται σε αυτό το κεφάλαιο είναι συναφής µε την ύλη που αναπτύσσεται στο 2 ο κεφάλαιο. Όπου υπάρχουν διαφορές αναφέρονται ρητά. Προσέξτε ιδιαίτερα, πάντως, ότι στο

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 7.1. Ανάπτυξη Προγράµµατος Τι είναι το Πρόγραµµα; Το Πρόγραµµα: Είναι ένα σύνολο εντολών για την εκτέλεση ορισµένων λειτουργιών από τον υπολογιστή.

Διαβάστε περισσότερα

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

ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2014 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ: ΚΑΤΕΥΘΥΝΣΗ: ΜΑΘΗΜΑ: ΘΕΜΑ Α Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗ (2ος Κύκλος) ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Ηµεροµηνία: Παρασκευή 25 Απριλίου 2014 ιάρκεια Εξέτασης: 3 ώρες ΕΚΦΩΝΗΣΕΙΣ

Διαβάστε περισσότερα

Εισαγωγή στην επιστήµη των υπολογιστών. Υπολογιστές και Δεδοµένα Κεφάλαιο 3ο Αναπαράσταση Αριθµών

Εισαγωγή στην επιστήµη των υπολογιστών. Υπολογιστές και Δεδοµένα Κεφάλαιο 3ο Αναπαράσταση Αριθµών Εισαγωγή στην επιστήµη των υπολογιστών Υπολογιστές και Δεδοµένα Κεφάλαιο 3ο Αναπαράσταση Αριθµών 1 Δεκαδικό και Δυαδικό Σύστηµα Δύο κυρίαρχα συστήµατα στο χώρο των υπολογιστών Δεκαδικό: Η βάση του συστήµατος

Διαβάστε περισσότερα

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 (5.1-5.2 και 5.4-5.6) Ε. Μαρκάκης Επίκουρος Καθηγητής Περίληψη Δέντρα Βασικοί ορισµοί Μαθηµατικές ιδιότητες Διάσχιση δέντρων Preorder, postorder,

Διαβάστε περισσότερα

υαδικό έντρο Αναζήτησης (BSTree)

υαδικό έντρο Αναζήτησης (BSTree) Εργαστήριο 6 υαδικό έντρο Αναζήτησης (BSTree) Εισαγωγή Οι περισσότερες δοµές δεδοµένων, που εξετάσαµε µέχρι τώρα (λίστες, στοίβες, ουρές) ήταν γραµ- µικές (ή δοµές δεδοµένων µιας διάστασης). Στην παράγραφο

Διαβάστε περισσότερα

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ 1ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Α ΑΝΑΚΕΦΑΛΑΙΩΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ Γ' ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΠΕΜΠΤΗ 26 ΑΠΡΙΛΙΟΥ 2012 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ

Διαβάστε περισσότερα

Μαλούτα Θεανώ Σελίδα 1

Μαλούτα Θεανώ Σελίδα 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Α. ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΦΥΛΛΑΔΙΟ 6 ο ( Ενότητες 2.3 ) 1.Τι είναι πρόγραμμα; 2. Ποια είναι τα πλεονεκτήματα των γλωσσών υψηλού επιπέδου σε σχέση με τις γλώσσες

Διαβάστε περισσότερα

5.1 Θεωρητική εισαγωγή

5.1 Θεωρητική εισαγωγή ΨΗΦΙΑΚΑ ΚΥΚΛΩΜΑΤΑ - ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 5 ΚΩ ΙΚΟΠΟΙΗΣΗ BCD Σκοπός: Η κατανόηση της µετατροπής ενός τύπου δυαδικής πληροφορίας σε άλλον (κωδικοποίηση/αποκωδικοποίηση) µε τη µελέτη της κωδικοποίησης BCD

Διαβάστε περισσότερα

Επίπεδα Γραφήματα : Προβλήματα και Υπολογιστική Πολυπλοκότητα

Επίπεδα Γραφήματα : Προβλήματα και Υπολογιστική Πολυπλοκότητα Αλγόριθμοι πολυωνυμικού χρόνου Ένας αλγόριθμος πολυωνυμικού χρόνου έχει χρόνο εκτέλεσης όπου είναι μία (θετική) σταθερά Κλάση πολυπλοκότητας : περιλαμβάνει τα προβλήματα που επιδέχονται λύση σε πολυωνυμικό

Διαβάστε περισσότερα

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

Διαβάστε περισσότερα

Εισαγωγή στην επιστήµη των υπολογιστών. Αναπαράσταση Αριθµών

Εισαγωγή στην επιστήµη των υπολογιστών. Αναπαράσταση Αριθµών Εισαγωγή στην επιστήµη των υπολογιστών Αναπαράσταση Αριθµών 1 Δεκαδικό και Δυαδικό Σύστηµα Δύο κυρίαρχα συστήµατα στο χώρο των υπολογιστών Δεκαδικό: Η βάση του συστήµατος είναι το 10 αναπτύχθηκε τον 8

Διαβάστε περισσότερα

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 5 ΣΕΛΙ ΕΣ

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 5 ΣΕΛΙ ΕΣ ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ - Γ ΗΜΕΡΗΣΙΩΝ ΝΕΟ ΣΥΣΤΗΜΑ ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΤΕΤΑΡΤΗ 15 ΙΟΥΝΙΟΥ 2016 - ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Διαβάστε περισσότερα

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 8: Γραμμική Αναζήτηση και Δυαδική Αναζήτηση-Εισαγωγή στα Δέντρα και Δυαδικά Δέντρα-Δυαδικά Δέντρα Αναζήτησης & Υλοποίηση ΔΔΑ με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19 Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών Κεφ. 2 Θεωρητική Επιστήμη Υπολογιστών 2.3.1.1 Έννοια προγράμματος Τι είναι πρόγραμμα και τι προγραμματισμός; Πρόγραμμα είναι το σύνολο εντολών που χρειάζεται

Διαβάστε περισσότερα

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2014-2015 Πάτρα 5/5/2015 Ονοματεπώνυμο:.. Θέμα Α Α1. α. Να γράψετε στο τετράδιό σας τον

Διαβάστε περισσότερα

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες -

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 23: οµές εδοµένων και Αλγόριθµοι Ενδιάµεση Εξέταση Ηµεροµηνία : ευτέρα, 3 Νοεµβρίου 2008 ιάρκεια : 2.00-4.00 ιδάσκουσα : Άννα Φιλίππου Ονοµατεπώνυµο: ΣΚΕΛΕΤΟΙ

Διαβάστε περισσότερα

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

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΣΤΑΘΕΡΕΣ είναι τα μεγέθη που δεν μεταβάλλονται κατά την εκτέλεση ενός αλγόριθμου. Εκτός από τις αριθμητικές σταθερές (7, 4, 3.5, 100 κλπ), τις λογικές σταθερές (αληθής και ψευδής)

Διαβάστε περισσότερα

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή 1. Ηλεκτρονικός Υπολογιστής Ο Ηλεκτρονικός Υπολογιστής είναι μια συσκευή, μεγάλη ή μικρή, που επεξεργάζεται δεδομένα και εκτελεί την εργασία του σύμφωνα με τα παρακάτω

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 19/10/2017 Ανακεφαλαίωση:

Διαβάστε περισσότερα

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Άσκηση 1 α) Η δομή σταθμισμένης ένωσης με συμπίεση διαδρομής μπορεί να τροποποιηθεί πολύ εύκολα ώστε να υποστηρίζει τις

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 4/11/2016 Ανακεφαλαίωση:

Διαβάστε περισσότερα

Βασικές Αρχές Προγραμματισμού

Βασικές Αρχές Προγραμματισμού Βασικές Αρχές Προγραμματισμού Κεφάλαιο 2 ΗγλώσσαC Ιστορική Αναδρομή ΗανάπτυξητηςC ξεκίνησε το 1972 στα εργαστήρια Bell από τον Dennis Ritchie με σκοπό την ανάπτυξη ενός λειτουργικού συστήματος για τον

Διαβάστε περισσότερα

Γνωριµία µε τη Microsoft Access

Γνωριµία µε τη Microsoft Access Γνωριµία µε τη Microsoft Access ηµιουργία νέας βάσης δεδοµένων Έναρξη - Προγράµµατα - Microsoft Access - ηµιουργία νέας βάσης δεδοµένων µε χρήση Κενής βάσης δεδοµένων - ΟΚ Επιλέγουµε Φάκελο και στο Όνοµα

Διαβάστε περισσότερα

Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις

Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου (νέο βιβλίο Πληροφορικής Γυµνασίου Αράπογλου, Μαβόγλου, Οικονοµάκου, Φύτρου) Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις 1. Τι είναι ο Αλγόριθµος;

Διαβάστε περισσότερα

Εισαγωγή στον Προγ/μό Υπολογιστών

Εισαγωγή στον Προγ/μό Υπολογιστών Εισαγωγή στον Προγ/μό Υπολογιστών Διάλεξη 1 Εκφράσεις, κλητικές εκφράσεις, ονόματα Περιεχόμενα Εκφράσεις (expressions) Τελεστές (operators) της Python Κλητικές εκφράσεις (call expressions) Ονόματα (names)

Διαβάστε περισσότερα

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

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός Δομές Ακολουθίας- Επιλογής - Επανάληψης Δομημένος Προγραμματισμός 1 Βασικές Έννοιες αλγορίθμων Σταθερές Μεταβλητές Εκφράσεις Πράξεις Εντολές 2 Βασικές Έννοιες Αλγορίθμων Σταθερά: Μια ποσότητα που έχει

Διαβάστε περισσότερα