Αλγεβρικοί Τύποι. Γιάννης Κασσιός. 1 Εισαγωγή στους Αλγεβρικούς Τύπους

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

Download "Αλγεβρικοί Τύποι. Γιάννης Κασσιός. 1 Εισαγωγή στους Αλγεβρικούς Τύπους"

Transcript

1 Αλγεβρικοί Τύποι Γιάννης Κασσιός Στις σημειώσεις αυτές παρουσιάζουμε τους αλγεβρικούς τύπους (algebraic types) όπως υποστηρίζονται στη Haskell. Οι αλγεβρικοί τύποι και κυρίως οι αναδρομικοί αλγεβρικοί τύποι είναι ένα από τα σημαντικότερα χαρακτηριστικά που εισήγαγε ο συναρτησιακός προγραμματισμός στη θεωρία τύπων. Θα δούμε πώς οι αλγεβρικοί τύποι υποστηρίζονται στη Haskell, τι ρόλους παίζουν, πώς συνυπάρχουν με την υπερφόρτωση και τον πολυμορφισμό, πώς υποστηρίζουν την κατασκευή αναδρομικών δομών ορισμένων από το χρήστη και πώς ένας γενικευμένος κανόνας επαγωγής μπορεί να μας βοηθήσει στις αποδείξεις ορθότητας παρουσία αυτών των τύπων. 1 Εισαγωγή στους Αλγεβρικούς Τύπους Στους τύπους που έχουμε δει μέχρι τώρα στη Haskell υπάρχουν τα εξής μειονεκτήματα: Δεν υπάρχει τρόπος να ορίζουμε δικούς μας τύπους απαρίθμησης (το αντίστοιχο της enum σε γλώσσες προγραμματισμού όπως η C/C++). Δεν υπάρχει τύπος-άθροισμα άλλων τύπων, δηλαδή τύπος του οποίου τα στοιχεία να ανήκουν σε δύο ή περισσότερους άλλους τύπους. Ο τρόπος μοντελοποίησης αντικειμένων με λίστες και πλειάδες, όπως τον παρουσιάσαμε στις Σημ. 2, αφήνει έκθετη τη δομή τους. Δεν υπάρχει δυνατότητα να ορίσουμε τις δικές μας αναδρομικές δομές δεδομένων. Η λύση σε όλα αυτά τα προβλήματα είναι οι αλγεβρικοί τύποι (algebraic types) που θα παρουσιάσουμε εδώ. Ας δούμε λίγο αναλυτικότερα τα δύο τελευταία και πιο σπουδαία προβλήματα. 1.1 Έκθετη Δομή Η αναπαράσταση δεδομένων με "γυμνές" λίστες ή πλειάδες έχει ένα σημαντικό μειονέκτημα: δεν ξεκαθαρίζει τι αντικείμενο αναπαριστά η κάθε δομή δεδομένων. Έτσι, αν ορίσουμε τον τύπο Student ως ένα τύπο πλειάδας: type Student = (String,Int,Bool) 1

2 όπως κάναμε στις Σημ. 2, τότε δε μπορούμε να ξεχωρίσουμε αν μία πλειάδα αυτού του τύπου (s,i,b) αναπαριστά ένα φοιτητή ή ένα άλλο αντικείμενο που τυχαίνει να έχει την ίδια δομή. Θα μπορούσαμε δηλαδή να χρησιμοποιήσουμε κατά λάθος ως φοιτητή ένα αντικείμενο με την ίδια δομή που δεν αναπαριστά φοιτητή ή, αντίστροφα, να χρησιμοποιήσουμε κατά λάθος ένα αντικείμενο που αναπαριστά φοιτητή ως κάποιο άλλο αντικείμενο. Μια υποπερίπτωση του προβλήματος της έκθετης δομής είναι η προσπάθεια υλοποίησης του ίδιου τύπου με δύο διαφορετικές αναπαραστάσεις, που όμως τυχαίνει να έχουν τον ίδιο τύπο. Για παράδειγμα, ας υποθέσουμε ότι θέλουμε να αναπαραστήσουμε τους μιγαδικούς αριθμούς με δύο διαφορετικούς τρόπους, είτε με το πραγματικό και φανταστικό τους μέρος (x + yj), είτε με την απόλυτη τιμή τους και τη γωνία τους (ρe jθ ). Το πρόβλημα είναι ότι και οι δύο αναπαραστάσεις έχουν τον ίδιο τύπο: type Complex1 = (Float,Float) type Complex2 = (Float,Float) που σημαίνει ότι αυτή η αναπαράσταση δε μας επιτρέπει να ξεχωρίσουμε τη μία υλοποίηση από την άλλη. 1.2 Αναδρομικές Δομές Η Haskell προβλέπει χρήση αναδρομικών τύπων όπως οι φυσικοί αριθμοί και οι λίστες. Ο αναδρομικός ορισμός που κρύβεται πίσω από αυτούς τους τύπους μπορεί να γενικευτεί και να χρησιμοποιηθεί για τον ορισμό καινούριων αναδρομικών τύπων. Αν και έχουμε δει πολλά παραδείγματα αναδρομής στις τιμές, προς το παρόν δεν έχουμε δει κάποιο τέτοιο μηχανισμό στο σύστημα τύπων της Haskell. 2 Κατασκευή Αλγεβρικών Τύπων Για την κατασκευή ενός αλγεβρικού τύπου χρησιμοποιούμε τη λέξη κλειδί data ως εξής: data όνομα_τύπου = ορισμός_τύπου Το όνομα ενός αλγεβρικού τύπου ξεκινάει από κεφαλαίο γράμμα. Στην Ενότ. 7 θα δούμε ότι μετά το όνομα του τύπου μπορούμε να έχουμε και μία σειρά από μεταβλητές τύπων. Στα παρακάτω θα δούμε τι μπορεί να περιέχεται στον ορισμό του τύπου. 3 Τύποι Απαρίθμησης Οι απλούστεροι αλγεβρικοί τύποι είναι οι τύποι απαρίθμησης (enumeration types). Στους τύπους απαρίθμησης, δίνουμε όλες τις τιμές που μπορεί να πάρει ο τύπος. Οι τιμές αυτές ξεκινάνε με κεφαλαίο γράμμα και διαχωρίζονται με τον τελεστή. Για λόγους που θα φανούν καλύτερα αργότερα, ονομάζονται κατασκευαστές (constructors) του τύπου. Ένας τέτοιος τύπος που ήδη γνωρίζουμε, είναι ο Bool: 2

3 data Bool = True False Θα μπορούσαμε να ορίσουμε ένα δικό μας τύπο Weekday που να απαριθμεί τις μέρες της εβδομάδας ως εξής: data Weekday = Mon Tue Wed Thu Fri Sat Sun Αυτούς τους τύπους μπορούμε να τους χρησιμοποιήσουμε τώρα όπως οποιονδήποτε άλλο τύπο. Για παράδειγμα, η παρακάτω συνάρτηση μας λέει ότι είμαστε χαρούμενοι μόνο το σαββατοκύριακο: happy :: Weekday -> Bool happy Sat = True happy Sun = True happy _ = False 4 Παράμετροι στους Κατασκευαστές Οι τύποι απαρίθμησης δεν έχουν ιδιαίτερα ενδιαφέρουσα δομή. Ένας κατασκευαστής αλγεβρικού τύπου μπορεί όμως να δεχτεί και παραμέτρους. Οι τύποι των παραμέτρων που μπορεί να δεχτεί ο κατασκευαστής δηλώνονται αμέσως μετά τον κατασκευαστή στη δήλωση του αλγεβρικού τύπου. Ένας κατασκευαστής που παίρνει 0 παραμέτρους, όπως οι True, False και οι κατασκευαστές Mon, Tue,... που ορίσαμε πιο πάνω, ο- νομάζεται μηδενιαίος (nullary). Με μία παράμετρο έχουμε μοναδιαίους (unary) κατασκευαστές, με δύο δυαδικούς (binary), με τρεις τριαδικούς (ternary) κ.ο.κ. Για παράδειγμα, ας υποθέσουμε ότι θέλουμε να φτιάξουμε τον τύπο Student που δηλώσαμε στις Σημ. 2 ως αλγεβρικό τύπο. Μπορούμε να ορίσουμε έναν κατασκευαστή St που να παίρνει τρεις παραμέτρους: το όνομα, την ηλικία και το φύλο του κάθε σπουδαστή: data Student = St String Int Bool Τώρα, για να "κατασκευάσουμε" μία τιμή τύπου Student, πρέπει να δώσουμε στον κατασκευαστή St τις τρεις παραμέτρους που ζητάει: St Nikos 20 False Ας δούμε ένα παράδειγμα μίας συνάρτησης που παίρνει ως παράμετρο ένα αντικείμενο τύπου Student και επιστρέφει μία συμβολοσειρά καλωσορίσματος ως εξής: "Meet (όνομα). He/She is (ηλικία) years old". Για να το κάνουμε αυτό, χρησιμοποιούμε το μηχανισμό ταιριάσματος μοτίβων της Haskell που επιδέχεται κατασκευαστές αλγεβρικών τύπων: introduce :: Student -> String introduce (St name age sex) = Meet ++ name (if sex then She else He ) ++ is ++ show (age) ++ years old. 3

4 Για παράδειγμα, η παρακάτω ερώτηση (που δημιουργεί μία τιμή Student και την περνάει στην introduce): introduce (St Georgia 25 True) θα έχει ως αποτέλεσμα: Meet Georgia. She is 25 years old. Βλέπουμε λοιπόν ότι μπορούμε να φτιάξουμε δεδομένα σχετικά με μία οντότητα και να χρησιμοποιήσουμε ένα κατασκευαστή για να τα πακετάρουμε σε μία τιμή αλγεβρικού τύπου. Ο κατασκευαστής πλέον λειτουργεί ως μία "ετικέττα" που μας δείχνει τι ακριβώς πληροφορία αναπαριστούν τα δεδομένα. Έτσι δεν είναι δυνατό να χειριστούμε ένα αντικείμενο Student κατά λάθος ως μία τυχαία πλειάδα τύπου (String, Int, Bool) ή ως ένα άλλο αντικείμενο που τυχαίνει να έχει την ίδια δομή. Ούτε είναι δυνατό να χειριστούμε ένα τυχαίο αντικείμενο που έχει αυτή τη δομή ως αντικείμενο Student. Για παράδειγμα, η συνάρτηση introduce που ορίσαμε πιο πάνω δεν πρόκειται να χρησιμοποιηθεί για τιμές που δεν ανήκουν στον τύπο Student. Αυτό σημαίνει ότι οι αλγεβρικοί τύποι και οι κατασκευαστές λύνουν το πρόβλημα της έκθετης δομής που παρουσιάσαμε στην Ενότ To άλλο σημαντικό που πρέπει να κρατήσουμε από το παράδειγμά μας είναι ότι ο μηχανισμός ταιριάσματος μοτίβων (pattern matching) της Haskell επιδέχεται κατασκευαστές, έτσι ώστε να μπορούμε να "ξεπακετάρουμε" τα δεδομένα ενός αντικειμένου αλγεβρικού τύπου, όπως στον ορισμό της introduce παραπάνω. Το θέμα με την έκθετη δομή επαναλαμβάνεται και μέσα στους αλγεβρικούς τύπους. Θα μπορούσαμε για παράδειγμα να αντικαταστήσουμε τον γενικό τύπο Bool με ένα τύπο πιο εξειδικευμένο στην περίπτωση: data Gender = Male Female data Student = St String Int Gender ή, ακόμα περισσότερο, data Gender = Male Female data Age = Yrs Int data Name = Nm String data Student = St Name Age Gender αν και ένας τέτοιος σχεδιασμός μπορεί να χαρακτηριστεί υπερβολικός. 5 Εναλλακτικοί Κατασκευαστές Οι αλγεβρικοί τύποι μπορούν να χρησιμοποιήσουν κατασκευαστές με παραμέτρους και τον τελεστή για να δημιουργήσουν εναλλακτικές περιπτώσεις για τον οριζόμενο αλγεβρικό τύπο. Για παράδειγμα, έστω ότι θέλουμε να φτιάξουμε έναν απλό τύπο για 4

5 γεωμετρικά σχήματα. Αυτός ο τύπος μπορεί να οριστεί ως εξής: ένα σχήμα μπορεί να είναι ένα ορθογώνιο ή ένας κύκλος. Στην περίπτωση του ορθογωνίου, θα πρέπει να δώσουμε τις δύο διαστάσεις του, ενώ για τον κύκλο πρέπει να δώσουμε την ακτίνα του. Ο ορισμός είναι: data Shape = Rectangle Float Float Circle Float Μία συνάρτηση που υπολογίζει το εμβαδό ενός σχήματος είναι: area :: Shape -> Float area (Rectangle a b) = a*b area (Circle r) = pi*r^2 Βλέπουμε πώς χρησιμοποιούμε το μηχανισμό ταιριάσματος μοτίβων για να ξεχωρίσουμε τις δύο περιπτώσεις. Η περίπτωση της διαφορετικής υλοποίησης μιγαδικών αριθμών που αναφέραμε στην Ενότ. 1.1, μπορεί να λυθεί ως εξής: data Complex = CompXY Float Float CompRhTh Float Float Τώρα, κάθε ζεύγος πραγματικών αριθμών που χρησιμοποιούμε για την αναπαράσταση μιγαδικών, φέρει και τον κατασκευαστή του, που χρησιμεύει ως "ετικέττα" για να ξεχωρίσουμε ποια αναπαράσταση χρησιμοποιείται. Για παράδειγμα, η συνάρτηση νόρμας μπορεί να γραφτεί, ξεχωρίζοντας τις δύο περιπτώσεις, ως εξής: norm :: Complex -> Float norm (CompXY x y) = sqrt(x^2 + y^2) norm (CompRhTh rho _) = rho 6 Αλγεβρικοί Τύποι ως Στιγμιότυπα Κλάσεων Μπορούμε να ορίσουμε τους αλγεβρικούς τύπους ως στιγμιότυπα κλάσεων, δικών μας ή της Haskell. Για παράδειγμα, ένας τρόπος να ορίσουμε συνάρτηση ισότητας στον τύπο Shape είναι να θεωρήσουμε ότι δύο σχήματα είναι ίσα αν και μόνον αν είναι και τα δύο ορθογώνια με τις ίδιες διαστάσεις ή είναι και τα δύο κύκλοι με την ίδια ακτίνα: instance Eq Shape where Rectangle a b == Rectangle c d = (a==c && b==d) (a==d && b==c) Circle r == Circle q = r==q _ == _ = False Φυσικά, δεν είμαστε υποχρεωμένοι να δώσουμε ένα τέτοιο ορισμό. Για παράδειγμα, θα μπορούσαμε να θεωρήσουμε ίσα δύο σχήματα αν και μόνον αν έχουν το ίδιο εμβαδόν: instance Eq Shape where s == t = area s == area t 5

6 Σε αυτήν την περίπτωση, η σύγκριση πχ. Rectangle 4 pi == Circle 2 θα επιστρέψει True. Ο πιο προφανής τρόπος να ορίζουμε ισότητα δύο αλγεβρικών τύπων είναι να α- παιτούμε ο κατασκευαστής τους και τα ορίσματά του να είναι ίσα. Παίρνοντας το παράδειγμα τύπων απαρίθμησης, ο ορισμός ισότητας στον τύπο Bool δίνεται από: instance Eq Bool where True == True = True False == False = True _ == _ = False Όμοια, μπορούμε να ορίσουμε και εμείς τον τελεστή ισότητας για τον τύπο Weekday ως εξής: instance Eq Weekday where Mon == Mon = True Tue == Tue = True Wed == Wed = True Thu == Thu = True Fri == Fri = True Sat == Sat = True Sun == Sun = True _ == _ = False Δε χρειάζεται να τονίσουμε πόσο άχαρο είναι να γράφουμε τη συνάρτηση ισότητας με αυτόν τον τρόπο. Αναγκαζόμαστε να γράψουμε n + 1 ορισμούς (όπου n ο αριθμός των κατασκευαστών του αλγεβρικού τύπου) για να ορίσουμε τελικά τον πιο προφανή τύπο ισότητας που θα μπορούσαμε να έχουμε. Είναι καλό μία γλώσσα να παρέχει σύνταξη που να αποφεύγει τη συγγραφή τόσο μεγάλης ποσότητας κώδικα για τέτοιου είδους κοινοτοπίες. Στη Haskell αυτό γίνεται με τη λέξη κλειδί deriving. Η deriving τοποθετείται στον ορισμό του αλγεβρικού τύπου και ακολουθείται από ένα σύνολο κλάσεων της Haskell (οι κλάσεις αυτές χωρίζονται με κόμμα και μπαίνουν μέσα σε παρένθεση αν είναι περισσότερες από μία). Ο αλγεβρικός τύπος είναι στιγμιότυπο όλων των κλάσεων που υπάρχουν μέσα στη δήλωση deriving. Η υλοποίηση των υπερφορτωμένων συναρτήσεων αυτών των κλάσεων είναι η προφανέστερη δυνατή. Για παράδειγμα, μπορούμε να γράψουμε τον ορισμό της Weekday ως εξής: data Weekday = Mon Tue Wed Thu Fri Sat Sun deriving Eq 6

7 που είναι ισοδύναμος με αυτόν που είχαμε γράψει πιο πάνω. Η δήλωση deriving Eq σημαίνει ότι κάθε κατασκευαστής της Weekday ισούται μόνο με τον εαυτό του. Ομοίως θα μπορούσαμε να είχαμε δώσει τον εξής ορισμό: data Shape = Rectangle Float Float Circle Float deriving Eq ο οποίος θα όριζε την (==) να επιστρέφει True αν και μόνον αν τα δύο ορίσματά της προέρχονται από τον ίδιο κατασκευαστή και τα ίδια ορίσματα, δηλαδή σα να είχαμε γράψει instance Eq Shape where Rectangle a b == Rectangle c d = a==b && c==d Circle r == Circle q = r==q _ == _ = False Παρατηρήστε ότι ο ορισμός της (==) που δίνει η deriving Eq δεν είναι ισοδύναμος με κανέναν από τους δύο εναλλακτικούς ορισμούς που δώσαμε πιο πάνω (π.χ. ο πρώτος ορισμός θεωρεί ότι τα Rectangle 1 2 και Rectangle 2 1 είναι ίσα). Αυτό μας δείχνει ότι δεν είμαστε υποχρεωμένοι ούτε να χρησιμοποιήσουμε τη deriving, ούτε να ορίσουμε ισότητα που να έχει απαραίτητα κάποια σχέση με αυτή που θα όριζε η deriving. Εκός από την κλάση Eq μπορούμε να βάλουμε μέσα στη δήλωση deriving ακόμα τις εξής κλάσεις: Κλάση Ord (προϋποτείθεται ο τύπος να είναι στιγμιότυπο και της Eq): Σε αυτήν την περίπτωση δίνονται τελεστές σύγκρισης στον τύπο. Οι κατασκευαστές θεωρούνται ότι έχουν δηλωθεί από το μικρότερο στο μεγαλύτερο, π.χ. στη δήλωση: data Weekday = Mon Tue Wed Thu Fri Sat Sun deriving (Eq,Ord) οι εκφράσεις Mon<Tue και Fri>=Wed επιστρέφουν True. Κλάση Show: Η προκαθορισμένη συνάρτηση show τυπώνει τον κατασκευαστή του ορίσματός της και μετά καλεί τη show των ορισμάτων του. Για παράδειγμα, στη δήλωση: data Shape = Rectangle Float Float Circle Float deriving Show αν ζητήσουμε από το διερμηνέα να αποτιμήσει την έκφραση Circle 2, θα μας απαντήσει Circle 2.0 (τυπώνει το όνομα του κατασκευαστή και καλεί την (show::(float->string))2 για να τυπώσει 2.0) 7

8 Κλάση Read: Υλοποιεί την αναμενόμενη αντίστροφη της show που ορίζει η Show. Κλάση Enum: Επιτρέπει τη χρήση του τελεστή [x.. y] για να αναπαραστήσει λίστες του τύπου. Η σειρά των κατασκευαστών είναι πάλι, όπως και στην Ord, αυτή με την οποία έχουν δηλωθεί. Για παράδειγμα, στη δήλωση: data Weekday = Mon Tue Wed Thu Fri Sat Sun deriving (Eq,Ord,Show,Enum) η αποτίμηση της έκφρασης [Mon.. Fri] θα δώσει [Mon,Tue,Wed,Thu,Fri,Sat,Sun] 7 Πολυμορφισμός Ένας αλγεβρικός τύπος μπορεί να είναι πολυμορφικός. Σε αυτήν την περίπτωση, ο τύπος επιδέχεται μεταβλητές τύπων ως τυπικά ορίσματα. Αυτά τα τυπικά ορίσματα μπορούν να εμφανίζονται ως ορίσματα στη δήλωση των κατασκευαστών του τύπου. Θα δούμε τώρα δύο απλά παραδείγματα χρήσης μη αναδρομικών πολυμορφικών αλγεβρικών τύπων. 7.1 Χειρισμός Λαθών Ένας υπολογισμός που τερματίζει μπορεί να μην επιστρέφει τιμή λόγω λάθους. Για παράδειγμα, μπορεί να προκαλείται διαίρεση με το μηδέν ή εφαρμογή μίας συνάρτησης της οποίας κανένα μοτίβο δεν ταιριάζει στην πραγματική παράμετρο. Θα μπορούσαμε να αφήσουμε τη Haskell να χειριστεί το λάθος τερματίζοντας τον υπολογισμό. Παρ'όλα αυτά μπορεί να θέλουμε να συνεχιστεί ο υπολογισμός, χειριζόμενοι μόνοι μας το λάθος. Ο αλγεβρικός τύπος Maybe κάνει ακριβώς αυτό, προσφέροντας ένα τρόπο χειρισμού λαθών μέσα σε ένα υπολογισμό, όμοιο με το μηχανισμό εξαιρέσεων (exceptions). Ο ορισμός του είναι: data Maybe a = Nothing Just a deriving (Eq, Ord, Read, Show) Βλέπουμε ότι ο Maybe είναι πολυμορφικός: μπορεί να χρησιμοποιηθεί σε υπολογισμο οποιουδήποτε τύπου a. Η τιμή Nothing αντιστοιχεί στην περίπτωση λάθους, ενώ η τιμή Just x σημαίνει ότι ο υπολογισμός δεν έχει λάθος και το αποτέλεσμα είναι x. Μία συνάρτηση που μπορεί να προκαλέσει λάθος είναι η διαίρεση ακεραίων. Μπορούμε να τη γράψουμε χρησιμοποιώντας Maybe ως εξής: mydiv :: Int -> Int -> Maybe Int mydiv x 0 = Nothing mydiv x y = Just (x div y) 8

9 Ο καθορισμός τύπου δηλώνει ότι η mydiv ίσως (maybe) επιστρέψει ακέραιο, αλλά υπάρχει και η πιθανότητα λάθους. Αυτό είναι αντίστοιχο με τη δήλωση throws της Java, η οποία ενημερώνει τους χρήστες μίας μεθόδου ότι η μέθοδος αυτή μπορεί να ρίξει εξαίρεση. Σε περίπτωση διαίρεσης με το 0, η mydiv επιστρέφει Nothing. Αυτό είναι αντίστοιχο με τη ρίψη εξαίρεσης, που στη Java γίνεται με την εντολή throw. Η χρήση της mydiv μπορεί να προκαλέσει λάθος. Μία συνάρτηση που χρησιμοποιεί την mydiv μπορεί να διοχετεύσει αυτό το λάθος στο αποτέλεσμά της ώστε να το χειριστεί κάποια άλλη συνάρτηση: myfunc :: Int -> Int -> Maybe Int myfunc x y = if division == Nothing then Nothing else Just (z + 1) where division = x mydiv y Just z = division Επειδή αυτός ο τρόπος διοχέτευσης του λάθους είναι μάλλον άκομψος, μπορούμε να φτιάξουμε μία συνάρτηση liftmaybe της οποίας ο ρόλος είναι να πάρει μία συνάρτηση f τύπου a->b και να τη μετατρέψει σε συνάρτηση Maybe a->maybe b, συμπεριφερόμενη όπως η f όταν δεν υπάρχει λάθος και διοχετεύοντας το λάθος όταν αυτό υπάρχει: liftmaybe :: (a->b) -> Maybe a -> Maybe b liftmaybe g Nothing = Nothing liftmaybe g (Just x) = Just (g x) Η myfunc μπορεί να γραφτεί τώρα ως εξής: myfunc :: Int -> Int -> Maybe Int myfunc x y = liftmaybe (\z->z+1) (x mydiv y) Τέλος, μπορούμε να "παγιδεύσουμε" το λάθος, όπως κάνουμε στη Java με τις δομές try/catch. Η Haskell μας παρέχει τη συνάρτηση maybe τύπου a -> (b -> a) -> Maybe b -> a που κάνει ακριβώς αυτό: υπολογίζει μία έκφραση τύπου Maybe b. Σε περίπτωση που δεν υπάρξει λάθος, το αποτέλεσμα διοχετεύεται σε μία συνάρτηση τύπου b->a για περαιτέρω υπολογισμό. Σε περίπτωση λάθους μία έκφραση τύπου a αποτιμάται και επιστρέφεται: maybe :: a -> (b->a) -> Maybe b -> a maybe n f Nothing = n maybe n f (Just x) = f x Τώρα μπορούμε να χρησιμοποιήσουμε τη mydiv μέσα σε μία άλλη συνάρτηση που παγιδεύει το λάθος. Σε περίπτωση λάθους, η συνάρτησή μας επιστρέφει π.χ. -1, αλλιώς επιστρέφει το αποτέλεσμα της ακέραιας διαίρεσης: 9

10 mydivcatching :: Int->Int->Int mydivcatching x y = maybe (-1) id (x mydiv y) 7.2 Εναλλακτικοί Τύποι Για κάθε ζεύγος τύπων a,b μπορούμε να χρησιμοποιήσουμε έναν τύπο στοιχείων που αντιστοιχούν είτε στον a είτε στον b. Αυτό γίνεται με τον αλγεβρικό τύπο Either της Haskell που ορίζεται ως εξής: data Either a b = Left a Right b deriving (Eq,Ord,Read,Show) Ο ρόλος της Either είναι όμοιος με αυτόν της δομής union στις C/C++. Σαν ένα παράδειγμα, θα χρησιμοποιήσουμε την Either για να δώσουμε δύο διαφορετικές υλοποιήσεις στη δομή "σύνολα φυσικών αριθμών". Στην πρώτη υλοποίηση, ένα σύνολο αναπαρίσταται από μία λίστα που περιέχει τους φυσικούς αριθμούς που περιέχει το σύνολο. Στη δεύτερη υλοποίηση, ένα σύνολο αναπαρίσταται από μία λίστα αληθοτιμών l έτσι ώστε l!!i αν και μόνον αν ο i είναι μέσα στο σύνολο. Θα υλοποιήσουμε μόνο τη συνάρτηση element που επιστρέφει True αν και μόνον αν ένα στοιχείο είναι στο σύνολο (για ευκολία χρησιμοποιούμε τη lsearch που έχουμε ορίσει πολλές φορές στο παρελθόν -- οποιοσδήποτε από τους ορισμούς μας κάνει): type SetofNats = Either [Int] [Bool] element :: Int->SetofNats->Bool element x (Left li) = lsearch x li element x (Right lb) = lb!!x Ιδού μερικές ερωτήσεις που μπορούμε να κάνουμε στο διερμηνέα, μαζί με τις α- παντήσεις τους (οι ερωτήσεις αρχίζουν με > για να ξεχωρίζουν): > element 3 (Left[2,1,2]) False > element 3 (Left[2,1,2,3]) True > element 3 (Right[True,False,False,False,True]) False > element 3 (Right[True,False,False,True]) True 8 Αναδρομικοί Τύποι Ένας αναδρομικός τύπος (recursive type) είναι ένας τύπος που εμφανίζεται στον ίδιο τον ορισμό του. Στη Haskell, οι αλγεβρικοί τύποι μπορούν να οριστούν αναδρομικά, 10

11 αφού στα ορίσματα ενός κατασκευαστή μπορεί να περιέχεται ο ίδιος ο υπό ορισμό τύπος (φυσικά, υπάρχει και η δυνατότητα αμοιβαίας αναδρομής). Δύο αναδρομικοί τύποι που ήδη υποστηρίζονται από τη Haskell είναι οι φυσικοί αριθμοί και οι λίστες. Οι φυσικοί αριθμοί, ικανοποιούν την εξής αναδρομική εξίσωση: N = f0g [ fx + 1jx 2 Ng οπότε και στη Haskell θα μπορούσαμε να τους είχαμε ορίσει, με δύο κατασκευαστές, ως εξής (ασχέτως αν στη Haskell τελικά δεν υλοποιούνται με αυτόν τον τρόπο): data Nat = Zero Succ Nat Ο αριθμός 2 π.χ. αναπαρίσταται σε αυτόν τον τύπο ως Succ(Succ Zero). Οι λίστες θα μπορούσαν να αναπαρασταθούν, επίσης με δύο κατασκευαστές, ως εξής: data List a = EmptyList Cons a (List a) Στη Haskell οι λίστες συμπεριφέρονται ακριβώς έτσι, αλλά με διαφορετική σύνταξη. Ο τύπος List a γράφεται [a], ο κατασκευαστής EmptyList γράφεται [] και ο κατασκευαστής Cons γράφεται (:). Μέσω των αλγεβρικών τύπων, μπορούμε να ορίσουμε δικούς μας αναδρομικούς τύπους. Στη συνέχεια θα δούμε δύο χαρακτηριστικά παραδείγματα και θα συζητήσουμε τη δυνατότητα άπειρων δομών που μας προσφέρει η αναδρομή στους τύπους. 8.1 Δυαδικά Δέντρα Το κλασικό παράδειγμα αναδρομικής δομής, μετά από τα απλούστερα παραδείγματα των φυσικών αριθμών και των λιστών, είναι τα δυαδικά δέντρα (binary trees). Ένας ορισμός του συνόλου των δυαδικών δέντρων έχει ως εξής. Ένα δυαδικό δέντρο είναι: το κενό δέντρο (ένα δέντρο χωρίς κόμβους), είτε ένας κόμβος με μία πληροφορία (κάποιου τύπου) και με δύο δυαδικά δέντρα που ονομάζονται παιδιά του κόμβου αυτού. Σε κείμενα πιο προσανατολισμένα στα μαθηματικά, μπορεί να δείτε ορισμούς που να μην περιλαμβάνουν το "κενό δέντρο" ως δέντρο. Αυτό δυσχεραίνει τον ορισμό της δομής των δυαδικών δέντρων και αποκλείει την περίπτωση που ένα δέντρο δεν περιέχει καθόλου πληροφορία. Είναι καλύτερα να συμπεριλάβουμε στους αλγεβρικούς τύπους μας τετριμμένες περιπτώσεις όπως το μηδέν, την κενή λίστα και το κενό δέντρο. Στη Haskell, ο παραπάνω αναδρομικός ορισμός γράφεται (μαζί με κάποιες κλάσεις στις οποίες θέλουμε ο τύπος να ανήκει): data BTree a = EmptyBTree BNode a (BTree a) (BTree a) deriving (Eq, Show) Μία συνάρτηση mapbtree που κάνει τη δουλειά της map σε δυαδικά δέντρα, μπορεί να γραφεί ως εξής: 11

12 mapbtree :: (a->b) -> BTree a -> BTree b mapbtree f EmptyBTree = EmptyBTree mapbtree f (BNode root left right) = BNode (f root) (mapbtree f left) (mapbtree f right) 8.2 Ορισμός Δομών μίας Γλώσσας Προγραμματισμού Άλλο ένα κλασικό παράδειγμα αναδρομικών ορισμών είναι ο ορισμός σύνταξης μιας γλώσσας προγραμματισμού ή άλλης τυπικής γλώσσας, όπως αυτή χρησιμοποιείται για μεταγλωττιστές. Για παράδειγμα, οι εκφράσεις μιας απλής γλώσσας προγραμματισμού, η οποία υποστηρίζει μόνο ακεραίους και μερικούς μοναδιαίους και δυαδικούς τελεστές, μπορεί να αναπαρασταθούν στη Haskell από τον εξής αλγεβρικό τύπο: data Expr = Constant Int Variable String UnaryExp UnOp Expr BinaryExp BinOp Expr Expr data UnOp = UPlus UMinus data BinOp = Plus Minus Mult Div Η έκφραση -b*(c+a/5)*2 (με βάση τους κανόνες προτεραιότητας και προσεταιριστικότητας της Haskell), αναπαρίσταται ως εξής: BinaryExp Mult (BinaryExp Mult (UnaryExp UMinus (Variable b )) (BinaryExp Plus (Variable c ) (BinaryExp Div (Variable a ) (Constant 5) ) ) ) (Constant 2) Ένας διερμηνέας για αυτήν τη γλώσσα eval θα παίρνει μία λίστα συσχετίσεων μεταβλητών με τιμές και μία έκφραση τύπου Expr και θα παράγει μία τιμή τύπου Int. Η λίστα συσχετίσεων ονομάζεται περιβάλλον και θα μπορούσε να έχει για παράδειγμα τύπο [(String,Int)]. Ένα κομμάτι της υλοποίησης του διερμηνέα έχει ως εξής: 12

13 eval env (Constant x) = x... eval env (UnaryExp UMinus e) = - eval env e... eval env (BinaryExp Plus e1 e2) = eval env e1 + eval env e2... Η υλοποίηση ενός πλήρους διερμηνέα αφήνεται ως άσκηση. 8.3 Άπειρες Δομές Όπως και με τις λίστες, όλοι οι αναδρομικοί τύποι μπορούν να χρησιμοποιηθούν για ορισμό άπειρων δομών, χρησιμοποιώντας αναδρομή τιμών. Για παράδειγμα, το παρακάτω δυαδικό δέντρο είναι άπειρο: inftree = inftreestart 0 where inftreeaux n = BTree n (inftreeaux (2*n+1)) (inftreeaux (2*n+2)) Οι κανόνες οκνηρής αποτίμησης και η σχετική μεθοδολογία που είδαμε στις λίστες ισχύουν και εδώ. 9 Αποδείξεις Ορθότητας για Αλγεβρικούς Τύπους Οι περιπτώσεις επαγωγής που έχουμε δει μέχρι στιγμής, μπορούν να αναχθούν σε ένα γενικότερο κανόνα που ταιριάζει σε όλους τους αναδρομικά οριζόμενους τύπους. Η γενικευμένη αυτή επαγωγή οφείλεται στους Knaster [Kna28] και Tarski [Tar55]. Έστω σύνολο U και συνάρτηση F 2 U! U που είναι μονότονη, δηλ. για κάθε υποσύνολα X; Y του U είναι 1 Χ v Y ) F X v F Y Το θεώρημα Knaster-Tarski μας λέει ότι: Υπάρχουν λύσεις στην εξίσωση X = F X (ως προς X). Οι λύσεις αυτές λέγονται σταθερά σημεία (fixed points) της F. Υπάρχει ελάχιστο σταθερό σημείο (least fixed point) της F, δηλαδή ένα σύνολο X 0 που περιέχεται σε όλα τα υπόλοιπα σταθερά σημεία: S = F S ) X 0 v S 1 Για κάποιο λόγο, το πρόγραμμα στοιχειοθέτησης που χρησιμοποιήθηκε για αυτές τις σημειώσεις αρνήθηκε πεισματικά να τυπώσει το συνηθισμένο σύμβολο του υποσυνόλου. Μέχρι να διορθωθεί το πρόβλημα, θα χρησιμοποιούμε το σύμβολο v. 13

14 Το ελάχιστο σταθερό σημείο X 0 γράφεται και μf. Αν η F δίνεται με τη μορφή λ-έκφρασης, τότε το ελάχιστο σταθερό σημείο της γράφεται αντικαθιστώντας το λ με το μ στην έκφραση αυτή. Το ελάχιστο σταθερό σημείο της F είναι και το ελάχιστο σύνολο X ώστε F X v X Ας αναπαράγουμε τώρα τον κανόνα επαγωγής για φυσικούς αριθμούς, χρησιμοποιώντας το θεώρημα Knaster-Tarski. Έστω ότι U = R. Οι φυσικοί αριθμοί, όπως είδαμε, ικανοποιούν την εξίσωση όπου N = F N F = λx:f0g [ fx + 1 j x 2 Xg Το θεώρημα Knaster-Tarski μας λέει ότι υπάρχουν λύσεις στην αναδρομική εξίσωση, καθώς η F είναι μονότονη. Το ελάχιστο σταθερό σημείο της F ορίζεται να είναι οι φυσικοί αριθμοί: N = μx:f0g [ fx + 1 j x 2 Xg ή, πιο σύντομα, N = μf Παρατηρήστε ότι το γεγονός ότι το N είναι το ελάχιστο σταθερό σημείο της F είναι πολύ σημαντικό. Υπάρχουν πολλά σταθερά σημεία της F, πχ. το σύνολο των ακεραίων αριθμών Z ή το σύνολο των μη αρνητικών πραγματικών αριθμών κτλ. Ας αναπαραστήσουμε τώρα μία ιδιότητα αριθμών, ως ένα υποσύνολο P του U όλων των αριθμών που ικανοποιούν αυτήν την ιδιότητα. Για να αποδείξουμε ότι όλοι οι φυσικοί αριθμοί ικανοποιούν την ιδιότητα θα πρέπει να δείξουμε ότι N v P. Το θεώρημα Knaster-Tarski μας λέει ότι αρκεί να αποδείξουμε ότι το P είναι σταθερό σημείο της F, δηλαδή: F P v P Αυτό μας δίνει, από τον ορισμό της F : 8y 2 f0g: y 2 P 8y 2 fx + 1 j x 2 P g: y 2 P ή ισοδύναμα 0 2 P 8x 2 P: x P που είναι και τα αξιώματα της επαγωγής φυσικών αριθμών: για να αποδείξουμε ότι μία ιδιότητα ισχύει για όλους τους φυσικούς αριθμούς, αποδεικνύουμε ότι ισχύει για το 0 και μετά, υποθέτοντας ότι ισχύει για κάποιο x, αποδεικνύουμε ότι ισχύει για x + 1. Υποδεικνύουμε για μία ακόμα φορά ότι η επαγωγή ισχύει μόνο για το ελάχιστο σταθερό σημείο N και όχι για άλλα σταθερά σημεία π.χ. N [ f-1g. 14

15 Στις λίστες, η κατάσταση είναι η ίδια: αν U = Z ω (δηλ. το σύνολο των πεπερασμένων και άπειρων λιστών ακεραίων), τότε ο αναδρομικός ορισμός των πεπερασμένων λιστών ακεραίων είναι Z? = μl: f[]g [ fh : t j h 2 Z; t 2 Lg που δίνει την επαγωγή πεπερασμένων λιστών. Η επαγωγή δεν ισχύει για τις άπειρες λίστες, γιατί το σύνολο άπειρων και πεπερασμένων λιστών Z ω δεν είναι το ελάχιστο σταθερό σημείο του παραπάνω ορισμού. Για να βρούμε έναν νόμο επαγωγής για οποιονδήποτε αλγεβρικό τύπο κοιτάμε τους κατασκευαστές του. Για κάθε κατασκευαστή χωρίς αναδρομή, έχουμε μία συνθήκη βάσης επαγωγής, ενώ για κάθε κατασκευαστή με αναδρομή, έχουμε μία συνθήκη βήματος επαγωγής. Στους φυσικούς, οι κατασκευαστές είναι ο μηδενιαίος 0 και ο μοναδιαίος (+1) ο οποίος έχει αναδρομή (δηλαδή παίρνει σαν όρισμα φυσικό αριθμό). Επομένως έχουμε μία συνθήκη βάσης p 0 και μία συνθήκη βήματος p x ) p(x+1) Στις λίστες, έχουμε ομοίως μία βάση (από τον κατασκευαστή []) και ένα βήμα (από τον κατασκευαστή (:)). Η βάση είναι και το βήμα p[] p t ) p(h:t) Σε αλγεβρικούς τύπους χωρίς αναδρομή, η επαγωγή γίνεται τετριμμένη (απόδειξη για κάθε περίπτωση ξεχωριστά). Για παράδειγμα, ο τύπος Maybe Int επιδέχεται τετριμμένο κανόνα επαγωγής με δύο βάσεις: και p(just x) p Nothing Στον τύπο των δυαδικών δέντρων, έχουμε μία βάση: p EmptyBTree και ένα βήμα, αλλά με δύο επαγωγικές υποθέσεις, καθώς η αναδρομή του κατασκευαστή BNode είναι διπλή: p l && p r ) p(bnode x l r) Και πάλι θα επαναλάβουμε ότι η επαγωγή δεν ισχύει για τα άπειρα δέντρα. Όπως και στις λίστες, θα χρησιμοποιούμε τα d και f για ορισμένα και πεπερασμένα δέντρα αντίστοιχα. 15

16 9.1 Κόμβοι και Ύψος Δυαδικού Δέντρου Για επίδειξη της επαγωγής σε δυαδικά δέντρα, θα αποδείξουμε ένα πολύ απλό θεώρημα, ότι ο αριθμός κόμβων ενός δυαδικού δέντρου είναι αυστηρά άνω φραγμένος από την έκφραση 2^h όπου h το ύψος του δέντρου. Το παράδειγμα χρησιμοποιεί τις συναρτήσεις: height :: BTree a -> Int height EmptyBTree = 0 height (BNode _ l r) = max(height l)(height r) + 1 nodes :: BTree a -> Int nodes EmptyBTree = 0 nodes (BNode _ l r) = nodes l + nodes r + 1 Θα αποδείξουμε την έκφραση nodes t < 2^(height t) για κάθε t::(btree a) df με επαγωγή. Βάση επαγωγής: nodes EmptyBTree < 2^(height EmptyBTree) = 0<1 = True Βήμα επαγωγής. Οι επαγωγικές υποθέσεις είναι: Τώρα το βήμα αποδεικνύεται ως εξής: nodes l < 2^(height l) nodes r < 2^(height r) 2^(height (BNode _ l r)) = 2^(max(height l)(height r)+1) = 2*2^(max(height l)(height r)) = 2^(max(height l)(height r)) + 2^(max(height l)(height r)) >= 2^(height l) + 2^(height r) επαγ.υπόθ. >= nodes l ^(height r) επαγ.υπόθ. > nodes l nodes r = nodes(bnode _ l r) 10 Επισκόπηση Σε αυτές τις σημειώσεις είδαμε τα εξής: Οι αλγεβρικοί τύποι της Haskell: 16

17 δίνουν τη δυνατότητα για δημιουργία τύπων απαρίθμησης και αθροισμάτων τύπων. λύνουν το πρόβλημα της έκθετης δομής που έχουν οι αναπαραστάσεις με "γυμνές" λίστες και πλειάδες. Με αυτόν τον όρο εννοούμε το ότι τέτοιες αναπαραστάσεις δεν ξεκαθαρίζουν το αντικείμενο το οποίο αναπαριστούν τα γυμνά δεδομένα. επιτρέπουν την εισαγωγή από το χρήστη νέων αναδρομικών τύπων. Οι αλγεβρικοί τύποι ορίζονται με τη λέξη-κλειδί data και με τη βοήθεια ενός ή περισσότερων κατασκευαστών οι οποίοι παίρνουν έναν αριθμό παραμέτρων. Οι τύποι απαρίθμησης είναι αλγεβρικοί τύποι των οποίων οι κατασκευαστές παίρνουν 0 παραμέτρους. Οι κατασκευαστές λύνουν το πρόβλημα της έκθετης δομής. Τα μοτίβα της Haskell επιδέχονται κατασκευαστές. Η λέξη-κλειδί deriving διευκολύνει τη δήλωση αλγεβρικών τύπων ως στιγμιότυπα συγκεκριμένων κλάσεων της Haskell. Οι αλγεβρικοί τύποι μπορεί να είναι πολυμορφικοί. Είδαμε τους εξής αλγεβρικούς τύπους που υποστηρίζει η Haskell: ο τύπος Maybe χρησιμοποιείται για το χειρισμό λαθών υπολογισμού. ο τύπος Either χρησιμοποιείται για άθροισμα τυπών. Οι αλγεβρικοί τύποι επιδέχονται αναδρομή. Οι φυσικοί αριθμοί και οι λίστες είναι αναδρομικοί τύποι που ήδη υποστηρίζονται. Εμείς είδαμε την κατασκευή δυαδικών δέντρων δέντρων δομών σύνταξης γλωσσών προγραμματισμού Η εισαγωγή τετριμμένων περιπτώσεων (όπως το μηδέν, η κενή λίστα και το κενό δέντρο) είναι σημαντική στους αναδρομικούς τύπους αλλά και στο σχεδιασμό τυπικών θεωριών και γλωσσών γενικότερα: επιτρέπει την αναπαράσταση μηδενικής πληροφορίας. διευκολύνει τον αναδρομικό ορισμό. Όπως και στις λίστες, μπορούμε να κατασκευάσουμε άπειρες δομές κάθε αναδρομικού τύπου. Οι πεπερασμένες δομές κάθε αναδρομικού τύπου επιδέχονται επαγωγή. Όλες οι επαγωγές είναι συνέπεια του θεωρήματος Knaster-Tarski. Για να βρούμε την επαγωγή κάθε αναδρομικού τύπου που κατασκευάζουμε, φτιάχνουμε: μία βάση επαγωγής για κάθε μη αναδρομικό κατασκευαστή ένα βήμα επαγωγής για κάθε αναδρομικό κατασκευαστή 17

18 Αναφορές [Kna28] B. Knaster. Un théorème sur les fonctions d'ensembles. Ann. Soc. Polon. Math, 6: , [Tar55] A. Tarski. A lattice-theoretical fixpoint theorem and its applications. Pacific Journal of Mathematics, 5(2): ,

Συναρτησιακός Προγραμματισμός 2008 Λύσεις στο Δεύτερο Φύλλο Ασκήσεων

Συναρτησιακός Προγραμματισμός 2008 Λύσεις στο Δεύτερο Φύλλο Ασκήσεων Συναρτησιακός Προγραμματισμός 2008 Λύσεις στο Δεύτερο Φύλλο Ασκήσεων 1. Στις Σημ. 4, είδαμε τη δημιουργία της κλάσης Condition που μας επιτρέπει να χρησιμοποιούμε αριθμούς, λίστες και ζεύγη ως αληθοτιμές

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

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 Προθεσµία

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

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i.

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i. Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων

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

Αφαίρεση στον FP. Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός

Αφαίρεση στον FP. Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός Αφαίρεση στον FP Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός Πολυμορφισμός Θα χρησιμοποιήσουμε σαν παράδειγμα τη συνάρτηση ταυτότητας Ι, που ορίζεται ως: fun I x = x Ο ορισμός

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

Συναρτησιακός Προγραμματισμός 2008 Λύσεις στο Πρώτο Φύλλο Ασκήσεων

Συναρτησιακός Προγραμματισμός 2008 Λύσεις στο Πρώτο Φύλλο Ασκήσεων Συναρτησιακός Προγραμματισμός 2008 Λύσεις στο Πρώτο Φύλλο Ασκήσεων 1. Χρησιμοποιείστε λ-εκφράσεις και τη συνάρτηση sumf στις Σημ.1, Ενότ.3.5, για να εκφράσετε το P 10 i=1p i j=1 (i + j)2, χωρίς να ορίσετε

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

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

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

Πολυμορφισμός και Υπερφόρτωση

Πολυμορφισμός και Υπερφόρτωση Πολυμορφισμός και Υπερφόρτωση Γιάννης Κασσιός Σε αυτές τις σημειώσεις, θα ασχοληθούμε με πιο προχωρημένα θέματα του συστήματος τύπων της Haskell και πιο συγκεκριμένα με τις έννοιες του πολυμορφισμού (polymorphism)

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

Υπερφόρτωση τελεστών

Υπερφόρτωση τελεστών Υπερφόρτωση τελεστών 19 Νοεμβρίου 2012 1 Γενικά Στα προηγούμενα είδαμε ότι ορίζοντας μία κλάση, ορίζουμε ένα νέο τύπο τον οποίο μπορούμε να χρησιμοποιήσουμε για να δηλώσουμε αντικείμενα αυτής της νέας

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

Αριθμητική Ανάλυση και Εφαρμογές

Αριθμητική Ανάλυση και Εφαρμογές Αριθμητική Ανάλυση και Εφαρμογές Διδάσκων: Δημήτριος Ι. Φωτιάδης Τμήμα Μηχανικών Επιστήμης Υλικών Ιωάννινα 07-08 Πεπερασμένες και Διαιρεμένες Διαφορές Εισαγωγή Θα εισάγουμε την έννοια των διαφορών με ένα

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

K15 Ψηφιακή Λογική Σχεδίαση 7-8: Ανάλυση και σύνθεση συνδυαστικών λογικών κυκλωμάτων

K15 Ψηφιακή Λογική Σχεδίαση 7-8: Ανάλυση και σύνθεση συνδυαστικών λογικών κυκλωμάτων K15 Ψηφιακή Λογική Σχεδίαση 7-8: Ανάλυση και σύνθεση συνδυαστικών λογικών κυκλωμάτων Γιάννης Λιαπέρδος TEI Πελοποννήσου Σχολή Τεχνολογικών Εφαρμογών Τμήμα Μηχανικών Πληροφορικής ΤΕ Η έννοια του συνδυαστικού

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

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

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

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

Εισαγωγή στον Προγραμματισμό

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

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

I. ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ. math-gr

I. ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ. math-gr I ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ i e ΜΕΡΟΣ Ι ΟΡΙΣΜΟΣ - ΒΑΣΙΚΕΣ ΠΡΑΞΕΙΣ Α Ορισμός Ο ορισμός του συνόλου των Μιγαδικών αριθμών (C) βασίζεται στις εξής παραδοχές: Υπάρχει ένας αριθμός i για τον οποίο ισχύει i Το σύνολο

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

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

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

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

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ ) Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ. 25 48) Τι είναι αλγόριθμος; Γ ΛΥΚΕΙΟΥ Αλγόριθμος είναι μία πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρονικό διάστημα,

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

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

ΓΥΜΝΑΣΙΟ ΚΑΣΤΕΛΛΑΝΩΝ ΜΕΣΗΣ ΑΛΓΕΒΡΑ ΑΛΓΕΒΡΑ ΠΡΟΑΠΑΙΤΟΥΜΕΝΑ ΑΠΟ Α ΓΥΜΝΑΣΙΟΥ Ομόσημοι Ετερόσημοι αριθμοί Αντίθετοι Αντίστροφοι αριθμοί Πρόσθεση ομόσημων και ετερόσημων ρητών αριθμών Απαλοιφή παρενθέσεων Πολλαπλασιασμός και Διαίρεση ρητών αριθμών

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

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

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

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ Λογικός τύπος ( ) Ο τύπος είναι κατάλληλoς για την αναπαράσταση ποσοτήτων που μπορούν να πάρουν δύο μόνο τιμές (π.χ. ναι/όχι, αληθές/ψευδές, ). Τιμές ή Δήλωση Εκχώρηση Ισοδυναμία με ακέραιους

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Python scripts Ένα πρόγραμμα στην Python (συχνά αποκαλείται script) αποτελείται από μία ακολουθία ορισμών και εντολών. H ακολουθία των ορισμών και

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

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

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ Κεφαλαία και μικρά γράμματα ελληνικού αλφαβήτου: Α Ω και α ω Κεφαλαία και μικρά γράμματα λατινικού αλφαβήτου: A Z και a z Αριθμητικά ψηφία: 0 9 Ειδικοί χαρακτήρες: + - * / =. ( ),! & κενός

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

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

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

f(t) = (1 t)a + tb. f(n) =

f(t) = (1 t)a + tb. f(n) = Παράρτημα Αʹ Αριθμήσιμα και υπεραριθμήσιμα σύνολα Αʹ1 Ισοπληθικά σύνολα Ορισμός Αʹ11 (ισοπληθικότητα) Εστω A, B δύο μη κενά σύνολα Τα A, B λέγονται ισοπληθικά αν υπάρχει μια συνάρτηση f : A B, η οποία

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

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

Σημειώσεις Λογικής I. Εαρινό Εξάμηνο Καθηγητής: Λ. Κυρούσης

Σημειώσεις Λογικής I. Εαρινό Εξάμηνο Καθηγητής: Λ. Κυρούσης Σημειώσεις Λογικής I Εαρινό Εξάμηνο 2011-2012 Καθηγητής: Λ. Κυρούσης 2 Τελευταία ενημέρωση 28/3/2012, στις 01:37. Περιεχόμενα 1 Εισαγωγή 5 2 Προτασιακή Λογική 7 2.1 Αναδρομικοί Ορισμοί - Επαγωγικές Αποδείξεις...................

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

Οκνηρή Αποτίμηση και Αποδείξεις Ορθότητας

Οκνηρή Αποτίμηση και Αποδείξεις Ορθότητας Οκνηρή Αποτίμηση και Αποδείξεις Ορθότητας Γιάννης Κασσιός Στις σημειώσεις αυτές, έχουμε δύο διαφορετικά θέματα, την οκνηρή αποτίμηση και τις αποδείξεις ορθότητας. Στην Ενότ. 1 ασχολούμαστε με την οκνηρή

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

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

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

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

Σημειωματάριο Δευτέρας 9 Οκτ. 2017 Σημειωματάριο Δευτέρας 9 Οκτ. 2017 Η δομή ελέγχου if... else... elif Βλέπουμε τώρα πώς μπορούμε να γράψουμε προγράμματα που η εκτέλεσή τους ακολουθεί διαφορετική πορεία ανάλογα με τα δεδομένα. Χωρίς τέτοιες

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

K15 Ψηφιακή Λογική Σχεδίαση 3: Προτασιακή Λογική / Θεωρία Συνόλων

K15 Ψηφιακή Λογική Σχεδίαση 3: Προτασιακή Λογική / Θεωρία Συνόλων K15 Ψηφιακή Λογική Σχεδίαση 3: Προτασιακή Λογική / Θεωρία Συνόλων Γιάννης Λιαπέρδος TEI Πελοποννήσου Σχολή Τεχνολογικών Εφαρμογών Τμήμα Μηχανικών Πληροφορικής ΤΕ Στοιχεία προτασιακής λογικής Περιεχόμενα

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων

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

Υπολογιστικά & Διακριτά Μαθηματικά

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

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

Εντολές ελέγχου ροής if, for, while, do-while

Εντολές ελέγχου ροής if, for, while, do-while Εντολές ελέγχου ροής if, for, while, do-while 1 Μαρτίου 014 1 Εντολές εκτέλεσης υπό συνθήκη Μπορούμε να εκτελέσουμε εντολές της γλώσσας σε περίπτωση που κάποια συνθήκη ισχύει χρησιμοποιώντας την εντολή

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

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 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

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

Ορισμός Συναρτήσεων στην ΜL

Ορισμός Συναρτήσεων στην ΜL Ορισμός Συναρτήσεων στην ΜL Ονόματα και δεσμεύσεις: ησυνάρτησηval Τα ονόματα σταθερών δεσμεύονται με τιμές σταθερών μέσω ορισμών της συνάρτησης val. val codeof0 = ord 0 val codeof9 = codeof0 + 9 Τα ονόματα

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Pascal, απλοί τύποι, τελεστές και εκφράσεις Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το

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

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

Αριθμητική Ανάλυση και Εφαρμογές

Αριθμητική Ανάλυση και Εφαρμογές Αριθμητική Ανάλυση και Εφαρμογές Διδάσκων: Δημήτριος Ι. Φωτιάδης Τμήμα Μηχανικών Επιστήμης Υλικών Ιωάννινα 07-08 Αριθμητική Παραγώγιση Εισαγωγή Ορισμός 7. Αν y f x είναι μια συνάρτηση ορισμένη σε ένα διάστημα

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

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

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

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

Υπολογιστικά & Διακριτά Μαθηματικά

Υπολογιστικά & Διακριτά Μαθηματικά Υπολογιστικά & Διακριτά Μαθηματικά Ενότητα 2:Στοιχεία Μαθηματικής Λογικής Στεφανίδης Γεώργιος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό,

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

Haskell: Βασικές Δομές Δεδομένων και Απόκρυψη Ονομάτων

Haskell: Βασικές Δομές Δεδομένων και Απόκρυψη Ονομάτων Haskell: Βασικές Δομές Δεδομένων και Απόκρυψη Ονομάτων Γιάννης Κασσιός Σε αυτές τις σημειώσεις, θα εισάγουμε τις δύο βασικές δομές δεδομένων που υποστηρίζει η Haskell, τις πλειάδες (tuples) και τις λίστες

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Κων. Κόκκινος Μεταβλητές-1 Οι μεταβλητές αποτελούν θέσεις μνήμης στις οποίες αποθηκεύονται τιμές αντίστοιχες

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

Σημειωματάριο Τετάρτης 4 Οκτ. 2017

Σημειωματάριο Τετάρτης 4 Οκτ. 2017 Σημειωματάριο Τετάρτης 4 Οκτ. 2017 Strings (λέξεις) Ένας από τους κύριους τύπους δεδομένων στην Python είναι τα strings (κείμενα, λέξεις). Όταν γράφουμε ένα κείμενο σε απλά ή διπλά εισαγωγικά τότε αυτό

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

Περιεχόμενα. Πρόλογος 3

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

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

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8) Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις (Διάλεξη 8) 8-1 Τι θα δούμε σήμερα Η εντολή if else Η εντολή if else ιf - -else H εντολή switch Λογικές παραστάσεις Σχεσιακοί

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

ΘΕΩΡΙΑ Β ΓΥΜΝΑΣΙΟΥ. Μια παράσταση που περιέχει πράξεις με μεταβλητές (γράμματα) και αριθμούς καλείται αλγεβρική, όπως για παράδειγμα η : 2x+3y-8

ΘΕΩΡΙΑ Β ΓΥΜΝΑΣΙΟΥ. Μια παράσταση που περιέχει πράξεις με μεταβλητές (γράμματα) και αριθμούς καλείται αλγεβρική, όπως για παράδειγμα η : 2x+3y-8 ΘΕΩΡΙΑ Β ΓΥΜΝΑΣΙΟΥ Άλγεβρα 1 ο Κεφάλαιο 1. Τι ονομάζουμε αριθμητική και τι αλγεβρική παράσταση; Να δώσετε από ένα παράδειγμα. Μια παράσταση που περιέχει πράξεις με αριθμούς, καλείται αριθμητική παράσταση,

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

Αριθμήσιμα σύνολα. Μαθηματικά Πληροφορικής 5ο Μάθημα. Παραδείγματα αριθμήσιμων συνόλων. Οι ρητοί αριθμοί

Αριθμήσιμα σύνολα. Μαθηματικά Πληροφορικής 5ο Μάθημα. Παραδείγματα αριθμήσιμων συνόλων. Οι ρητοί αριθμοί Αριθμήσιμα σύνολα Μαθηματικά Πληροφορικής 5ο Μάθημα Τμήμα Πληροφορικής και Τηλεπικοινωνιών Πανεπιστήμιο Αθηνών Ορισμός Πόσα στοιχεία έχει το σύνολο {a, b, r, q, x}; Οσα και το σύνολο {,,, 4, 5} που είναι

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

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 4: Εισαγωγή / Σύνολα

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 4: Εισαγωγή / Σύνολα Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Διακριτά Μαθηματικά Ενότητα 4: Εισαγωγή / Σύνολα Αν. Καθηγητής Κ. Στεργίου e-mail: kstergiou@uowm.gr Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Άδειες

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

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

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

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

Ας δούμε λίγο την θεωρία με την οποία ασχοληθήκαμε μέχρι τώρα.

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

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

Διάλεξη 04: Παραδείγματα Ανάλυσης

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

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

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα; Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο Τι θα τυπωθεί στον παρακάτω κώδικα; Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο Τι θα τυπωθεί στον παρακάτω κώδικα; Χωρίς να αλλάξουμε τον τύπο των a,b,

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

τις αναδρομικές ακολουθίες (recursive sequences) στις οποίες ορίζαμε

τις αναδρομικές ακολουθίες (recursive sequences) στις οποίες ορίζαμε Κεφάλαιο 9: Αναδρομή Ο τρόπος με τον οποίο σκεφτήκαμε και σχεδιάσαμε τις συναρτήσεις στο προηγούμενο κεφάλαιο ακολουθούσε τη φιλοσοφία του προγραμματισμού που είχαμε αναπτύξει σε όλο το προηγούμενο βιβλίο.

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

Μαθηματικά Γ Γυμνασίου

Μαθηματικά Γ Γυμνασίου Α λ γ ε β ρ ι κ έ ς π α ρ α σ τ ά σ ε ι ς 1.1 Πράξεις με πραγματικούς αριθμούς (επαναλήψεις συμπληρώσεις) A. Οι πραγματικοί αριθμοί και οι πράξεις τους Διδακτικοί στόχοι Θυμάμαι ποιοι αριθμοί λέγονται

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

Τύποι δεδομένων, τελεστές, μεταβλητές

Τύποι δεδομένων, τελεστές, μεταβλητές Τύποι δεδομένων, τελεστές, μεταβλητές Βασικά στοιχεία της γλώσσας Η Java χαρακτηρίζεται από ένα αρκετά καλά οργανωμένο σύνολο εντολών κι ένα μέρος της επιτυχίας της οφείλεται στα διάφορα APIs (βιβλιοθήκες)

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

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

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

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

Αλγόριθμοι για αυτόματα

Αλγόριθμοι για αυτόματα Κεφάλαιο 8 Αλγόριθμοι για αυτόματα Κύρια βιβλιογραφική αναφορά για αυτό το Κεφάλαιο είναι η Hopcroft, Motwani, and Ullman 2007. 8.1 Πότε ένα DFA αναγνωρίζει κενή ή άπειρη γλώσσα Δοθέντος ενός DFA M καλούμαστε

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

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

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

Ψευδοκώδικας. November 7, 2011

Ψευδοκώδικας. November 7, 2011 Ψευδοκώδικας November 7, 2011 Οι γλώσσες τύπου ψευδοκώδικα είναι ένας τρόπος περιγραφής αλγορίθμων. Δεν υπάρχει κανένας τυπικός ορισμός της έννοιας του ψευδοκώδικα όμως είναι κοινός τόπος ότι οποιαδήποτε

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

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

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

Περιεχόμενα 1 Πρωτοβάθμια Λογική Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων ) / 60

Περιεχόμενα 1 Πρωτοβάθμια Λογική Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων ) / 60 Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων

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

Δώστε έναν επαγωγικό ορισμό για το παραπάνω σύνολο παραστάσεων.

Δώστε έναν επαγωγικό ορισμό για το παραπάνω σύνολο παραστάσεων. Εισαγωγή στη Λογική Α Τάξης Σ. Κοσμαδάκης Συντακτικό τύπων Α τάξης Α Θεωρούμε δεδομένο ένα λεξιλόγιο Λ, αποτελούμενο από (1) ένα σύνολο συμβόλων για σχέσεις, { R, S,... } (2) ένα σύνολο συμβόλων για συναρτήσεις,

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

a = a a Z n. a = a mod n.

a = a a Z n. a = a mod n. Αλγεβρα Ι Χειμερινο Εξαμηνο 2017 18 Διάλεξη 1 Ενότητα 1. Πράξεις: Πράξεις στο σύνολο S, ο πίνακας της πράξης, αντιμεταθετικές πράξεις. Προσεταιριστικές πράξεις, το στοιχείο a 1 a 2 a n. Η πράξη «σύνθεση

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

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1 Μεταγλωττιστής Πρόγραμμα Διαβάζει προγράμματα δεδομένης γλώσσας (πηγαία γλώσσα) και τα μετατρέπει

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

Τι είναι βαθμωτό μέγεθος? Ένα μέγεθος που περιγράφεται μόνο με έναν αριθμό (π.χ. πίεση)

Τι είναι βαθμωτό μέγεθος? Ένα μέγεθος που περιγράφεται μόνο με έναν αριθμό (π.χ. πίεση) TETY Εφαρμοσμένα Μαθηματικά Ενότητα ΙΙ: Γραμμική Άλγεβρα Ύλη: Διανυσματικοί χώροι και διανύσματα, μετασχηματισμοί διανυσμάτων, τελεστές και πίνακες, ιδιοδιανύσματα και ιδιοτιμές πινάκων, επίλυση γραμμικών

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

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

ΕΝΟΤΗΤΑ 1: ΟΡΙΣΜΟΣ ΠΕΔΙΟ ΟΡΙΣΜΟΥ ΠΡΑΞΕΙΣ ΣΥΝΑΡΤΗΣΕΩΝ ΓΡΑΦΙΚΕΣ ΠΑΡΑΣΤΑΣΕΙΣ ΒΑΣΙΚΩΝ ΣΥΝΑΡΤΗΣΕΩΝ ΛΥΜΕΝΑ ΘΕΜΑΤΑ ΘΕΜΑ Α ΚΕΦΑΛΑΙΟ 1 ο : ΔΙΑΦΟΡΙΚΟΣ ΛΟΓΙΣΜΟΣ ΕΝΟΤΗΤΑ 1: ΟΡΙΣΜΟΣ ΠΕΔΙΟ ΟΡΙΣΜΟΥ ΠΡΑΞΕΙΣ ΣΥΝΑΡΤΗΣΕΩΝ ΓΡΑΦΙΚΕΣ ΠΑΡΑΣΤΑΣΕΙΣ ΒΑΣΙΚΩΝ ΣΥΝΑΡΤΗΣΕΩΝ ΛΥΜΕΝΑ ΘΕΜΑΤΑ Ερώτηση θεωρίας 1 ΘΕΜΑ Α Τι ονομάζουμε πραγματική συνάρτηση

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

Απειροστικός Λογισμός Ι Ασκήσεις

Απειροστικός Λογισμός Ι Ασκήσεις Απειροστικός Λογισμός Ι Ασκήσεις Μ. Παπαδημητράκης . Για καθεμία από τις ανισότητες ΠΡΑΓΜΑΤΙΚΟΙ ΑΡΙΘΜΟΙ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ + >, +, + > +3 3+, ( )( 3) ( ) 0 γράψτε ως διάστημα ή ως ένωση διαστημάτων το σύνολο

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

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

Γ2.1 Στοιχεία Αρχιτεκτονικής. Γ Λυκείου Κατεύθυνσης

Γ2.1 Στοιχεία Αρχιτεκτονικής. Γ Λυκείου Κατεύθυνσης Γ2.1 Στοιχεία Αρχιτεκτονικής Γ Λυκείου Κατεύθυνσης Ορισμός άλγεβρας Boole Η άλγεβρα Boole ορίζεται, ως μία αλγεβρική δομή A, όπου: (α) Το Α είναι ένα σύνολο στοιχείων που περιέχει δύο τουλάχιστον στοιχεία

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

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 10 Τύποι Δεδομένων και Εγγραφές Θέματα Διάλεξης Στην ενότητα

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

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1 Εισαγωγή - 1 Μία κλασσική γλώσσα προγραμματισμού αποτελείται από: Εκφράσεις (των

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

Σειρά Προβλημάτων 5 Λύσεις

Σειρά Προβλημάτων 5 Λύσεις Άσκηση 1 Σειρά Προβλημάτων 5 Λύσεις Να δείξετε ότι οι πιο κάτω γλώσσες είναι διαγνώσιμες. (α) { R η R είναι μια κανονική έκφραση η οποία παράγει μια μη πεπερασμένη γλώσσα} (β) { G η G είναι μια CFG η οποία

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

B = {x A : f(x) = 1}.

B = {x A : f(x) = 1}. Θεωρία Συνόλων Χειμερινό Εξάμηνο 016 017 Λύσεις 1. Χρησιμοποιώντας την Αρχή του Περιστερώνα για τους φυσικούς αριθμούς, δείξτε ότι για κάθε πεπερασμένο σύνολο A και για κάθε f : A A, αν η f είναι 1-1 τότε

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

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

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

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

Αλγεβρικές Παραστάσεις-Μονώνυμα

Αλγεβρικές Παραστάσεις-Μονώνυμα ΜΕΡΟΣ Α. ΜΟΝΩΝΥΜΑ-ΠΡΑΞΕΙΣ ΜΕ ΜΟΝΩΝΥΜΑ. ΜΟΝΩΝΥΜΑ-ΠΡΑΞΕΙΣ ΜΕ ΜΟΝΩΝΥΜΑ Β Αλγεβρικές Παραστάσεις-Μονώνυμα Πολλές φορές στην προσπάθειά μας να λύσουμε ένα πρόβλημα, καταλήγουμε σε εκφράσεις που περιέχουν μόνο

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

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

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

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

Εφαρμογές της Λογικής στην Πληροφορική

Εφαρμογές της Λογικής στην Πληροφορική Σχολή Εφαρμοσμένων Μαθηματικών και Φυσικών Επιστημών Εθνικό Μετσόβιο Πολυτεχνείο Εφαρμογές της Λογικής στην Πληροφορική Ενότητα 2 Πέτρος Στεφανέας, Γεώργιος Κολέτσος Άδεια Χρήσης Το παρόν εκπαιδευτικό

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

2.1 Διαιρετότητα, ισοϋπόλοιποι αριθμοί. q Z, a = b q + r.

2.1 Διαιρετότητα, ισοϋπόλοιποι αριθμοί. q Z, a = b q + r. Κεφάλαιο 2 Θεωρία Αριθμών Κύριες βιβλιογραφικές αναφορές για αυτό το Κεφάλαιο είναι οι Hardy and Wright 1979 και Graham, Knuth, and Patashnik 1994. 2.1 Διαιρετότητα, ισοϋπόλοιποι αριθμοί Θεώρημα 2.1 Αν

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

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

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

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

Μορφές αποδείξεων. Μαθηματικά Πληροφορικής 2ο Μάθημα. Μορφές αποδείξεων (συνέχεια) Εξαντλητική μέθοδος

Μορφές αποδείξεων. Μαθηματικά Πληροφορικής 2ο Μάθημα. Μορφές αποδείξεων (συνέχεια) Εξαντλητική μέθοδος Μορφές αποδείξεων Μαθηματικά Πληροφορικής ο Μάθημα Τμήμα Πληροφορικής και Τηλεπικοινωνιών Πανεπιστήμιο Αθηνών Υπάρχουν πολλά είδη αποδείξεων. Εδώ θα δούμε τα πιο κοινά: Εξαντλητική μέθοδος ή μέθοδος επισκόπησης.

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης 1. Στόχος του εργαστηρίου Στόχος του δέκατου εργαστηρίου

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

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΧΟΛΗ ΤΜΗΜΑ. Μαθηματικά 2. Σταύρος Παπαϊωάννου

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΧΟΛΗ ΤΜΗΜΑ. Μαθηματικά 2. Σταύρος Παπαϊωάννου ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΧΟΛΗ ΤΜΗΜΑ Μαθηματικά Σταύρος Παπαϊωάννου Ιούνιος Τίτλος Μαθήματος Περιεχόμενα Χρηματοδότηση. Σφάλμα! Δεν έχει οριστεί σελιδοδείκτης. Σκοποί Μαθήματος

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

Μεταθέσεις και πίνακες μεταθέσεων

Μεταθέσεις και πίνακες μεταθέσεων Παράρτημα Α Μεταθέσεις και πίνακες μεταθέσεων Το παρόν παράρτημα βασίζεται στις σελίδες 671 8 του βιβλίου: Γ. Χ. Ψαλτάκης, Κβαντικά Συστήματα Πολλών Σωματιδίων (Πανεπιστημιακές Εκδόσεις Κρήτης, Ηράκλειο,

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Δεύτερη Σειρά Ασκήσεων 22 Νοεμβρίου 2016 (χειρόγραφη και ηλεκτρονική παράδοση 9 Δεκεμβρίου) Άσκηση 1: Θεωρήστε τη γραμματική με κανόνες: Α B a A a c B B b A b

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΣΤΑΤΙΣΤΙΚΗ ΤΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ. Κεφάλαιο 8. Συνεχείς Κατανομές Πιθανοτήτων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΣΤΑΤΙΣΤΙΚΗ ΤΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ. Κεφάλαιο 8. Συνεχείς Κατανομές Πιθανοτήτων ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ ΠΑΤΡΑΣ Εργαστήριο Λήψης Αποφάσεων & Επιχειρησιακού Προγραμματισμού Καθηγητής Ι. Μητρόπουλος ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΣΤΑΤΙΣΤΙΚΗ ΤΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ

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

Κεφάλαιο V : Εργαστηριακές ασκήσεις που αφορούν δηµιουργία κλάσεων στη Java.

Κεφάλαιο V : Εργαστηριακές ασκήσεις που αφορούν δηµιουργία κλάσεων στη Java. Κεφάλαιο V : Εργαστηριακές ασκήσεις που αφορούν δηµιουργία κλάσεων στη Java. Στο παρόν κεφάλαιο παρουσιάζονται εργαστηριακές ασκήσεις οι οποίες αφορούν τη δηµιουργία και την χρήση κλάσεων στη Java. Ποιο

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

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Υπερφόρτωση, keywords CONST, STATIC, FRIEND ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) Τι θα συζητήσουμε σήμερα Υπερφόρτωση Συναρτήσεων Τελεστών CONST αντικείμενα, μεταβλητές και συναρτήσεις

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

Περιληπτικά, τα βήματα που ακολουθούμε γενικά είναι τα εξής:

Περιληπτικά, τα βήματα που ακολουθούμε γενικά είναι τα εξής: Αυτό που πρέπει να θυμόμαστε, για να μη στεναχωριόμαστε, είναι πως τόσο στις εξισώσεις, όσο και στις ανισώσεις 1ου βαθμού, που θέλουμε να λύσουμε, ακολουθούμε ακριβώς τα ίδια βήματα! Εκεί που πρεπει να

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

Κατηγορηματικός Λογισμός (ΗR Κεφάλαιο 2.1-2.5)

Κατηγορηματικός Λογισμός (ΗR Κεφάλαιο 2.1-2.5) Κατηγορηματικός Λογισμός (ΗR Κεφάλαιο 2.1-2.5) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στον Κατηγορηματικό Λογισμό Σύνταξη Κανόνες Συμπερασμού Σημασιολογία ΕΠΛ 412 Λογική στην

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

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

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

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα

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

Αριθμοθεωρητικοί Αλγόριθμοι

Αριθμοθεωρητικοί Αλγόριθμοι Αλγόριθμοι που επεξεργάζονται μεγάλους ακέραιους αριθμούς Μέγεθος εισόδου: Αριθμός bits που απαιτούνται για την αναπαράσταση των ακεραίων. Έστω ότι ένας αλγόριθμος λαμβάνει ως είσοδο έναν ακέραιο Ο αλγόριθμος

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

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 6 η : Αλγεβρικά Πλαίσια Ανάλυσης Ροής Δεδομένων Αναπαράσταση Προγράμματος Γράφος Ροής Ελέγχου (Control Flow Graph CFG) Κόμβοι N εντολές Ακμές E ροή ελέγχου pred(n) = σύνολο άμεσων

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

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

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

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

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

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

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

Βρέντζου Τίνα Φυσικός Μεταπτυχιακός τίτλος: «Σπουδές στην εκπαίδευση» ΜEd Email : stvrentzou@gmail.com

Βρέντζου Τίνα Φυσικός Μεταπτυχιακός τίτλος: «Σπουδές στην εκπαίδευση» ΜEd Email : stvrentzou@gmail.com Βρέντζου Τίνα Φυσικός Μεταπτυχιακός τίτλος: «Σπουδές στην εκπαίδευση» ΜEd Email : stvrentzou@gmail.com 1 1.Σύνολα Σύνολο είναι μια ολότητα από σαφώς καθορισμένα και διακεκριμένα αντικείμενα. Τα φωνήεντα

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