1 Εισαγωγή στις Μονάδες

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

Download "1 Εισαγωγή στις Μονάδες"

Transcript

1 Μονάδες Γιάννης Κασσιός Στις σηµειώσεις αυτές, κάνουµε µια µικρή εισαγωγή στον προγραµµατισµό µε µονάδες ( monads). Οι µονάδες είναι ένας µαθηµατικός µηχανισµός που χρησι- µοποιείται ευρέως στην κοινότητα της Haskell. Η κύρια χρήση των µονάδων στη Haskell είναι η παροχή υπηρεσιών εισόδου/εξόδου στα προγράµµατα. Παρ όλα αυτά, οι µονάδες έχουν και άλλες πολλές και ετερόκλητες εφαρµογές και έχουν εµπνεύσει ένα ολόκληρο στυλ προγραµµατισµού ονοµαζόµενο προγραµµατισµός ϐασισµένος σε µονάδες ( monadic programming). Ο όρος «µονάδα» προέρχεται από τον αντίστοιχο όρο της ϑεωρίας κατηγοριών ( category theory), µίας πολύ αφαιρετικής µαθηµατικής ϑεωρίας µε τεράστιο πεδίο εφαρµογών. Στην παρουσίασή µας, ϑα αφιερώσουµε τον περισσότερο χώρο στην ιδέα πίσω από τη χρήση µονάδων στον προγραµµατισµό και στη χρησιµότητά τους. Στη συνέχεια ϑα εξηγήσουµε πώς ακριβώς υλοποιείται η λειτουργικότητα µονάδων στη Haskell και ϑα δώσουµε τη σχετική σύνταξη και παραδείγµατα. Τέλος ϑα αναφέρθουµε στο µηχανισµό εισόδου/εξόδου της Haskell ως µία από τις εφαρ- µογές των µονάδων. Ο χαρακτήρας των σηµειώσεων αυτών ϑα κρατηθεί σε εισαγωγικό επίπεδο. 1 Εισαγωγή στις Μονάδες Η σειριακή εκτέλεση στο συναρτησιακό προγραµµατισµό δίνεται από τη σύνθεση συναρτήσεων: f n 1 (f n 2 (...f 0 x))... Στο παραπάνω έχουµε γράψει τις συναρτήσεις σε ανάποδη σειρά από αυτήν µε την οποία αποτιµούνται. Για να ϕαίνεται η σωστή σειρά αποτίµησης, ορίζουµε: app :: a->(a->b)->b app x f = f x οπότε η παραπάνω αποτίµηση µπορεί να γραφεί ως εξής: x app f 0 app... app f n 1 Εστω τώρα ότι ϑέλουµε να «εµπλουτίσουµε» τις συναρτήσεις µε επιπλέον λειτουργικότητα, κοινή για όλες, αλλά ανεξάρτητη από τη λειτουργία κάθε µίας από αυτές. Για παράδειγµα, ϑα ϑέλαµε ένα τρόπο όλες οι συναρτήσεις µας να µ- πορούν να αναφέρουν σφάλµα (όπως µε τη Maybe) ή ϑα ϑέλαµε να µπορούν να γράφουν σε ένα log σχετικά µε τη λειτουργία τους. Η έξτρα λειτουργικότητα των 1

2 συναρτήσεων αλλάζει τον τύπο εξόδου τους από T i σε m T i, όπου m µία συνάρτηση τύπων. Τώρα δε µπορούµε πλέον να χρησιµοποιήσουµε την app για να γράφουµε σειριακούς υπολογισµούς όπως ο παραπάνω. Χρειαζόµαστε µία συνάρτηση που να λαµβάνει υπόψην της ότι οι νέες συναρτήσεις f i είναι τύπου T i->m T i+1. Η συνάρτηση αυτή ϑα ϑεωρεί ότι το αποτέλεσµα «στα αριστερά της» έχει ήδη µετατραπεί σε τύπο m a και το όρισµα «στα δεξιά της» ϑα είναι µία συνάρτηση που παίρνει τύπο a και επιστρέφει τύπο m b. Το τελικό αποτέλεσµα ϑα είναι τύπου m b. Ας ονοµάσουµε τη συνάρτηση αυτή appm: appm :: m a->(a->m b)->m b Για να ξεκινήσει ο υπολογισµός, χρειάζεται µία συνάρτηση η οποία µετατρέπει ένα όρισµα από a σε m a. Ας την πούµε liftm: liftm :: a->m a 1.1 Πρώτο Παράδειγµα: Χειρισµός Σφαλµάτων µε τη Maybe Γνωρίζουµε ότι ο κατασκευαστής τύπων Maybe προσθέτει έναν απλό χειρισµό υπολογιστικών σφαλµάτων στις συναρτήσεις, δίνοντάς τους τη δυνατότητα να επιστρέψουν Nothing σε περίπτωση τέτοιου σφάλµατος. Στο παράδειγµα αυτό, ϑεωρούµε ότι ϑέλουµε να προσθέσουµε αυτή τη λειτουργικότητα στις συναρτήσεις µας (δηλαδή το m µας ϑα είναι ο κατασκευαστής Maybe). Ενας τρόπος ϑα ήταν να µετατρέψουµε όλες τις συναρτήσεις µας από τύπο a->b σε τύπο Maybe a->maybe b. Ας υποθέσουµε τώρα ότι ορίζουµε µία συνάρτηση f η οποία λειτουργεί κανονικά αν πάρει κανονικό όρισµα, ενώ διοχετεύει το σφάλµα σε περίπτωση που πάρει όρισµα Nothing. Ο ορισµός της f είναι: f (Just x) =... f Nothing = Nothing Παρατηρήστε ότι η λειτουργία της συνάρτησης ϐρίσκεται στο σηµείο που είναι οι τρεις τελείες. Ολο το υπόλοιπο αφιερώνεται στην καινούρια λειτουργικότητα χειρισµού σφαλµάτων. Από εδώ και στο εξής, αυτή η καινούρια λειτουργικότητα ϑα επιφέρει αυτήν την περιπλοκή στον ορισµό κάθε συνάρτησης. Το πρόβληµα γίνεται χειρότερο αν σκεφτούµε τη χρήση ανώνυµων συναρτήσεων, οι οποίες ϑα πρέπει και αυτές να υποστηρίζουν τέτοια λειτουργικότητα. Οι συναρτήσεις αυτές ϑα γράφονται κάπως έτσι: \mbx->case mbx of Just x ->... Nothing->Nothing Το µόνο χρήσιµο κοµµάτι είναι εκεί που ϐρίσκονται οι τελείες. Το υπόλοιπο έχει να κάνει µε τη νέα λειτουργικότητα, αλλά δεν προσφέρει κάτι στον υπολογισµό. Αν ϑεωρήσουµε τώρα αυτήν τη συντακτική περιπλοκή µέσα σε παραδείγµατα που περιέχουν πολλούς υπολογισµούς, το πρόβληµα αρχίζει να εκδηλώνεται ακόµα πιο έντονα: 2

3 case val of Nothing -> Nothing Just x -> case f x of Nothing -> Nothing Just y -> case g y of Nothing -> Nothing Just z -> Just z Το πρόβληµά µας είναι ότι η λειτουργικότητα εντοπισµού σφαλµάτων δε γράφεται ανεξάρτητα από τον υπολογισµό, αλλά αντιθέτως µπλέκεται µέσα σε αυτόν και αυξάνει κατά πολύ την πολυπλοκότητα του κώδικα. Θέλουµε έναν τρόπο να ξεχωρίσουµε τον «πραγµατικό» υπολογισµό από το χειρισµό σφαλµάτων. Ας επιστρέψουµε στην ιδέα της εισαγωγής: οι συναρτήσεις µας ϑα είναι τύπου a->maybe b. Θα εφεύρουµε δύο συναρτήσεις: appmaybe :: Maybe a -> (a->maybe b) -> Maybe b liftmaybe :: a->maybe a οι οποίες ϑα εµπεριέχουν µέσα τους τη λειτουργικότητα που στα πιο πάνω παραδείγµατα γράφαµε από την αρχή κάθε ϕορά που χρησιµοποιούσαµε µία συνάρτηση. Η συνάρτηση liftmaybe απλά µετατρέπει ένα όρισµα x στην τιµή που λέει «ο υπολογισµός δεν έχει σφάλµατα και το αποτέλεσµα είναι x». ηλαδή, η liftmaybe µετατρέπει το x σε Just x. ηλάδή: liftmaybe = Just Η συνάρτηση appmaybe ϑα ελέγχει αν το αριστερό της όρισµα είναι αναφορά λάθους. Σε αυτήν την περίπτωση επιστρέφει αναφορά λάθους, αλλιώς περνάει αποτέλεσµα του σωστού υπολογισµού στα αριστερά του στη συνάρτηση που είναι στα δεξιά του: appmaybe Nothing _ = Nothing appmaybe (Just x) f = f x Παρατηρούµε ότι η appmaybe περιγράφει τη λειτουργικότητα χειρισµού σ- ϕαλµάτων όπως τη γράφαµε συνεχώς στα πιο πάνω παραδείγµατα. Τώρα, µ- πορούµε να ξεφορτωθούµε αυτή τη λειτουργικότητα από τον κώδικα που περιγράφει τον υπολογισµό. Ο ορισµός της f γίνεται: f x =... (ο τύπος της είναι τώρα a->maybe b). Μία ανώνυµη συνάρτηση γράφεται: \x->... και το παράδειγµα υπολογισµού που αναφέραµε πιο πάνω γράφεται: liftmaybe val appmaybe f appmaybe g 3

4 Ας δούµε τώρα ένα άλλο παράδειγµα. Εστω η παρακάτω συνάρτηση ασφαλούς αντιστροφής ενός πραγµατικού αριθµού: saferev x = if x==0 then Nothing else Just (1/x) Θέλουµε να χρησιµοποιήσουµε τη saferev για να υπολογίσουµε τον αριθµό 1/(x*z). Ο παρακάτω κώδικας χρησιµοποιεί τη saferev δύο ϕορές, και πολλαπλασιάζει τα αποτελέσµατα των δύο εφαρµογών: liftmaybe x appmaybe saferev appmaybe \rx->liftmaybe z appmaybe saferev appmaybe \rz->liftmaybe(rx*rz) Ο κώδικας αυτός δεν έχει την πολυπλοκότητα του χειρισµού των λαθών, αλλά δεν είναι πολύ ευανάγνωστος. εν είναι εύκολο κανείς να καταλάβει από τον κώδικα τη σειριακή εκτέλεση των εφαρµογών, τι όρισµα παίρνει κάθε συνάρτηση και τι αποτέλεσµα παράγει. Ενας άλλος τρόπος που µπορούµε να γράψουµε τον ίδιο κώδικα είναι πολύ πιο ενδεικτικός του τι συµβαίνει: liftmaybe x appmaybe \x-> saferev appmaybe \rx-> liftmaybe z appmaybe \z-> saferev appmaybe \rz-> liftmaybe(rx*rz) Ο κώδικας αυτός εξηγεί µε πολύ περισσότερη σαφήνεια τον υπολογισµό µας µε σειριακό τρόπο: παίρνουµε µία τιµή x καλούµε τη saferev στο x. Εστω rx το αποτέλεσµα παίρνουµε µία τιµή z καλούµε τη saferev στο z. Εστω rz το αποτέλεσµα επιστρέφουµε την τιµή rx*rz 1.2 εύτερο Παράδειγµα: Logging Στο δεύτερο παράδειγµά µας, ϑέλουµε να εµπλουτίσουµε τις συναρτήσεις µας µε δυνατότητα logging, δηλαδή αναφοράς σε µία έξοδο στοιχείων για τη λειτουργία των συναρτήσεων. Το logging ϐοηθάει στην αποσφαλµάτωση των προγραµµάτων αλλά και τον εντοπισµό προβληµατικών συνθηκών µέσα στις οποίες εκτελούνται τα προγράµµατα. Πάλι, ϑέλουµε να ξεχωρίσουµε τη λειτουργία µίας συνάρτησης από τη λειτουργία του logging. Ο τρόπος µε τον οποίο ϑα εµπλουτίσουµε τις συναρτήσεις µας µε logging είναι η αλλαγή του τύπου εξόδου b σε (b,string). Το δεύτερο στοιχείο της εξόδου είναι µία συµβολοσειρά που περιέχει όλα το logging που έχει κάνει η συνάρτηση 4

5 κατά τη διάρκεια της αποτίµησής της. Για παράδειγµα, µία συνάρτηση που το µόνο logging που ϑέλει να κάνει είναι η αναφορά ότι αποτιµήθηκε µπορεί να γραφτεί κάπως έτσι: f x = (..., "f was called") Ακολουθούµε την ίδια ιδέα µε πριν. Ορίζουµε τον τύπο Log a: type Log a = (a,string) και δύο συναρτήσεις, τη liftlog και την applog. Η liftlog παίρνει το όρισµά της και του επισυνάπτει µία κενή συµβολοσειρά (κενό logging): liftlog r = (r,"") Η applog πρέπει να συνενώσει το logging που έχει µέχρι τώρα συµβεί στα αριστερά της µε το logging που πρόκειται να δώσει η συνάρτηση στα δεξιά της. Ετσι ο ορισµός της είναι: applog (r,s) f = (r,s++s ) where (r,s ) = f r Τώρα ϑα µπορούσαµε να ορίσουµε συναρτήσεις που να αναφέρουν ότι κληθήκανε, ως εξής: f x = (2*x, "f(" ++ show x ++ ") was called. ") g x = (x+1, "g(" ++ show x ++ ") was called. ") Πιο κοµψά, ϑα µπορούσαµε να ορίσουµε µία συνάρτηση που να κάνει µόνο logging και τίποτε άλλο. Ας την πούµε logg 1 : logg str = (undef,str) Χρησιµοποιούµε την τιµή undef που ορίσαµε σε άλλες σηµειώσεις µε undef=undef. Στην πραγµατικότητα δεν έχει σηµασία ποια τιµή χρησιµοποιείται σε εκείνο το σηµείο. Η συνάρτηση logg δεν επιστρέφει κανένα χρήσιµο αποτέλεσµα, αλλά προσθέτει κάτι στο log του υπολογισµού. Με τη logg, οι f και g που ορίσαµε πιο πάνω µπορούν να γραφτούν: f x = logg "f(" ++ show x ++ ") was called. " applog \_-> liftlog (2*x) g x = logg "g(" ++ show x ++ ") was called. " applog \_-> liftlog (x+1) Ο τρόπος αυτός διαχωρίζει τις δύο λειτουργίες και επεξηγεί το αποτέλεσµα καλύτερα. Ενας πιο πολύπλοκος υπολογισµός που χρησιµοποιεί τις f και g είναι ο παρακάτω: 1 εν την ονοµάζουµε log για να µην υπάρχει σύγκρουση ονοµάτων µε τη συνάρτηση λογαρίθµου 5

6 liftlog 10 applog \x-> f x applog \y-> g y applog \z-> liftlog(x+y+z) του οποίου το αποτέλεσµα είναι: (51,"f(10) was called. g(20) was called. ") Σε ό,τι έχουµε κάνει µέχρι τώρα, η αναδροµή χρησιµοποιείται χωρίς πρόβληµα. Ας δούµε για παράδειγµα τον υπολογισµό του παραγοντικού µε logging: factorial 0 = logg ("factorial(0) was called. ") applog \_-> liftlog 1 factorial n = logg("factorial(" ++ show n ++ ") was called. ") applog \_-> factorial(n-1) applog \x-> liftlog (x*n) 1.3 Ορισµός της Μονάδας Στα παραπάνω παραδείγµατα είδαµε ότι για να προσθέσουµε µία νέα λειτουργικότητα m σε µία οµάδα συναρτήσεων χρειαζόµαστε: Μία µετατροπή τύπων m Μία συνάρτηση liftm και µία συνάρτηση appm µε τύπους: liftm :: a->m a appm :: m a->(a->m b)->m b Οι συναρτήσεις τύπων ϑα πρέπει να ικανοποιούν ακόµη τις εξής ιδιότητες: Η ύψωση ενός δεδοµένου σε λειτουργικότητα m a και το πέρασµά του µε την appm σε συνάρτηση f :: a->m b, ϑα πρέπει να λειτουργεί ακριβώς όπως η συνάρτηση f. ηλαδή, οι liftm και appm δεν αλλάζουν τη λειτουργία των συναρτήσεων τις οποίες συνδέουν. Τυπικά, η ιδιότητα γράφεται ως εξής: liftm x appm f = f x Οµοίως, το πέρασµα ενός ορίσµατος mx µέσω της appm στην liftm ϑα πρέπει να επιστρέφει το mx. Η συνάρτηση liftm λειτουργεί σαν ένα είδος «ταυτότητας» και δεν εισάγει επιπλέον υπολογισµούς: mx appm liftm = mx 6

7 εν έχει σηµασία µε ποια σειρά ϑα εφαρµοστούν περισσότερα από ένα στιγ- µιότυπα της appm σε ένα σειριακό υπολογισµό. Η appm λειτουργεί σαν σύνθεση συναρτήσεων, πράξη προσεταιριστική: mx appm (\x ->f x appm g) = (mx appm f) appm g Μία τριάδα (m, liftm, appm) που ικανοποιεί τα παραπάνω ονοµάζεται µονάδα (monad). 2 Μονάδες στη Haskell 2.1 Υπερφόρτωση Κατασκευαστών Τύπων στη Haskell Ενας κατασκευαστής τύπων είναι ένας πολυµορφικός αλγεβρικός τύπος. Πα- ϱαδείγµατα είναι οι [] και Maybe της Haskell οι οποίοι παίρνουν ως όρισµα ένα τύπο. Άλλοι κατασκευαστές, όπως ο Either παιρνούν παραπάνω από έναν τύπους. Ο µηχανισµός της υπερφόρτωσης και των κλάσεων ισχύει όχι µόνο για τύπους, αλλά γενικότερα για κατασκευαστές τύπων. Στην πραγµατικότητα, η υπερ- ϕόρτωση για τύπους µπορεί να ϑεωρηθεί υποπερίπτωση, αφού ένας τύπος είναι και ένας κατασκευαστής τύπων µε µηδέν ορίσµατα. Στο παρακάτω παράδειγµα, ορίζουµε µία κλάση SomeClass για κατασκευαστές τύπων µε ένα όρισµα και µία συνάρτηση somefunction για την κλάση αυτή. Μετά ορίζουµε τους κατασκευαστές Maybe και [] ως στιγµιότυπα της κλάσης: class SomeClass cons where somefunction :: cons a -> String instance SomeClass Maybe where somefunction (Just _) = "Correct" somefunction Nothing = "Error" instance SomeClass [] where somefunction [] = "Empty" somefunction _ = "Non-empty" Αυτό που λέει στη Haskell ότι πρόκειται για κλάση κατασκευαστών µε ένα όρισµα είναι η δήλωση somefunction :: cons a -> String που χρησιµοποιεί τον τύπο-στιγµιότυπο της κλάσης cons µε ένα όρισµα. 2.2 Η Κλάση Monad Η κλάση Monad για κατασκευαστές τύπων µε ένα όρισµα, εισάγει µονάδες. Τα ονόµατα των συναρτήσεων που χρησιµοποιεί η κλάση είναι return (αυτό που εµείς λέγαµε liftm στην εισαγωγή) και >>= (αυτό που εµείς λέγαµε appm 7

8 στην εισαγωγή). Υποστηρίζεται και τελεστής >> που δρα όπως και ο >>=, αλλά αγνοώντας το αποτέλεσµα της παράστασης στα αριστερά του. Η δήλωση της κλάσης είναι: class Monad m where (>>=) :: m a->(a->m b)->m b return :: a->m a (>>) :: m a->m b->m b m >> k = m >>= \_->k Φυσικά, οι ιδιότητες της µονάδας δε µπορούν να επαληθευτούν από τη Haskell (εκτός από τους τύπους των συναρτήσεων) η οποία επαφίεται στον προγραµµατιστή για τη σωστή υλοποίηση µίας µονάδας. Ο κατασκευαστής Maybe έχει ήδη δηλωθεί ως µονάδα στη Haskell. Η δήλωση είναι ακριβώς όπως την περιγράψαµε στην εισαγωγή: instance Monad Maybe where (Just x) >>= k = k x Nothing >>= k = Nothing return = Just Το παράδειγµα του υπολογισµού του 1/(x*z) µπορεί να γραφτεί ως εξής: return x >>= \x-> saferev x >>= \rx-> return z >>= \z-> saferev z >>= \rz-> return (rx*rz) Για τη µονάδα που υλοποιεί logging, δε µπορούµε να χρησιµοποιήσουµε τον ορισµό του τύπου Log όπως έχει δοθεί, γιατί δεν είναι αλγεβρικός. Μετατρέπουµε τον ορισµό σε αλγεβρικό τύπο, χρησιµοποιώντας κατασκευαστή Log (επιτρέπεται και δεν είναι σπάνιο ένας κατασκευαστής αλγεβρικού τύπου να έχει ίδιο όνοµα µε τον τύπο): data Log a = Log (a, String) instance Monad Log where return r = Log (r,"") (Log (r,s)) >>= k = Log (r,s++s ) where Log (r,s )=k r logg str = Log (undef,str) Είναι εύκολο να ξαναγράψουµε τα παραδείγµατά µας µε τη χρήση της σύνταξης της Haskell για µονάδες: f n = logg("f(" ++ show n ++ ") was called. ") >> return (2*n) g n = logg("g(" ++ show n ++ ") was called. ") >> return (n+1) exlog = return 10 >>= \x-> 8

9 f x >>= \y-> g y >>= \z-> return(x+y+z) factorial 0 = logg"factorial(0) was called. " >> return 1 factorial n = logg("factorial(" ++ show n ++ ") was called. ") >> factorial(n-1) >>= \x-> return(x*n) 2.3 Σύνταξη do Οι µονάδες µας ϐοηθάνε να καθαρίσουµε τον κώδικά µας από µία κοινή λειτουργικότητα των συναρτήσεων που ϑέλουµε να κάνουµε «αόρατη». Ο κώδικάς µας όµως γεµίζει από εφαρµογές των τελεστών >>= και >>. Η Haskell παρέχει τη λέξη κλειδί do για να εισάγει µία σύνταξη που µας απαλλάσει από αυτόν το συντακτικό ϑόρυβο και να κάνει τον κώδικα ακόµα πιο ευανάγνωστο. Η λέξη do ακολουθείται από µία στοιχισµένη αλληλουχία γραµµών, στις οποίες οι τελεστές >>= και >> δε γράφονται. Μία γραµµή κώδικας>> αντικαθίσταται από: κώδικας Μία γραµµή κώδικας >>= \µεταβλητή-> αντικαθίσταται από: µεταβλητή<-κώδικας Ας δούµε πώς µετατρέπονται τα παραδείγµατα που έχουµε χρησιµοποιήσει µέχρι τώρα, χρησιµοποιώντας τη σύνταξη do: revmult x z = do rx<-saferev x rz<-saferev z return (rx*rz) f n = do logg("f(" ++ show n ++ ") was called. ") return (2*n) g n = do logg("g(" ++ show n ++ ") was called. ") return (n+1) exlog = do x<-return 10 y<-f x z<- g y return(x+y+z) factorial 0 = do logg"factorial(0) was called. " return 1 factorial n = do logg("factorial(" ++ show n ++ ") was called. ") 9

10 x<-factorial(n-1) return(x*n) Στη σύνταξη do µπορούµε να ϐάλουµε και γραµµές let ως εξής: do let v = E κώδικας που ισοδυναµεί µε (\v->do κώδικας)e Για παράδειγµα, το exlog που γράψαµε πιο πάνω, µπορεί να γραφεί ως εξής: exlog = do let x = 10 y<-f x z<- g y return(x+y+z) 2.4 Μοναδική Ανάθεση Η σύνταξη που δίνει το do µοιάζει πολύ µε προστακτικό προγραµµατισµό. Εχουµε σειριακότητα και εντολές που µοιάζουν µε αναθέσεις (όπως οι let και οι εκφράσεις µε <-). εν πρέπει να ξεχνάµε όµως ότι δεν είµαστε σε προστακτικό προγραµµατισµό. Η σειρά της αποτίµησης πράγµατι δίνεται ξεκάθαρα από τη σύνταξη, αλλά πίσω από την αποτίµηση δεν υπάρχει κατάσταση. Οι µεταβλητές που χρησιµοποιούνται είναι καθαρές µαθηµατικές µεταβλητές, οι οποίες δε αντιστοιχούν σε ϑέσεις µνήµης και δε µπορούν να αλλάξουν τιµή, όπως στον προστακτικό προγραµµατισµό. Εστω το παρακάτω αυτοσχέδιο while: while test action = do c<-test if c then do action while test action else return 0 Φαίνεται σωστό, αλλά δε δουλεύει αν το χρησιµοποιήσουµε όπως στον προστακτικό προγραµµατισµό: badfact n = do let s = 1 while (return (n>0)) (do let s = s*n let n = n-1 logg "X" ) return s Η αποτίµηση του badfact 2 δε ϑα τερµατίσει ποτέ. Το λάθος είναι ότι χρησι- µοποιούµε τη µεταβλητή n σα ϑέση µνήµης. 10

11 Στην πραγµατικότητα κάθε εντολή που µοιάζει µε ανάθεση, εισάγει µια ολοκαίνουρια µεταβλητή (δείτε και τον κώδικα του οποίου το do είναι συντοµογραφία). Ετσι, η n που εισάγει η έκφραση let n = n-1 δεν έχει καµία σχέση µε τη n που εισάγει η γραµµή badfact n = και που ελέγχεται στην έκφραση n>0. Ο κώδικας αυτός ϑα επαναλαµβάνει επ άπειρον τον έλεγχο n>0 µε την ίδια τιµή για τη µεταβλητή n. Αν ϑέλουµε να καταλαβαίνουµε τις εκφράσεις do ως προστακτικό προγραµµατισµό, ϑα πρέπει να συνηθίσουµε και τη σηµασιολογία της µοναδικής ανάθεσης ( single assignment). Σε µία γλώσσα µε µοναδική ανάθεση, µία µεταβλητή παίρνει τιµή µόνο µία ϕορά. Κάθε νέα ανάθεση εισάγει καινούρια µεταβλητή. 2.5 Οι Λίστες ως Μονάδες Ο κατασκευαστής [] έχει δηλωθεί ως µονάδα στη Haskell για να αναπαριστά µη ντετερµινιστικό υπολογισµό. Η µονάδα αυτή επιτρέπει δηλαδή στις συναρτήσεις να επιστρέφουν παραπάνω από ένα αποτέλεσµα (ή και κανένα αποτέλεσµα). Η σύνθεση δύο συναρτήσεων επιστρέφει όλες τις πιθανές περιπτώσεις αποτελεσµάτων αν πάρουµε οποιοδήποτε έγκυρο αποτέλεσµα από την πρώτη, το τροφοδοτήσουµε στη δεύτερη και πάρουµε οποιοδήποτε έγκυρο αποτέλεσµα από τη δεύτερη. Για παράδειγµα, έστω οι συναρτήσεις: f x = [x,x+1] g x = [x,2*x] Η f συµβολίζει ένα µη ντετερµινιστικό υπολογισµό που παίρνει µία τιµή και ή την επιστρέφει ως έχει ή την επιστρέφει αυξηµένη κατά ένα. Η g είναι ένας µη ντετερµινιστικός υπολογισµός που είτε επιστρέφει το όρισµά της ως έχει είτε πολλαπλασιασµένο επί δύο. Αν πάρουµε τον αριθµό 5 και τον περάσουµε από τη «σύνθεση» των δύο συναρτήσεων (µε πρώτη την f και δεύτερη την g), τα πιθανά αποτελέσµατα είναι 5, 6, 10 και 12. Άρα ϑέλουµε η σύνθεση των f και g µε όρισµα 5 να επιστρέφει [5,6,10,12]. Οντως, ο παρακάτω κώδικας Haskell περνάει αυτήν την τιµή στη µεταβλητή s: s = do x<-return 5 y<-f x z<-g y return z Για να επιτευχθεί αυτό, η δήλωση της µονάδας [] έχει ως εξής: (α) η return µετατρέπει το όρισµα x σε [x] (ντετερµινιστικός υπολογισµός) και (ϐ) η >>= παίρνει τα αποτελέσµα που έχει υπολογιστεί στα αριστερά της, το περνάει τιµήτιµή στη συνάρτηση στα δεξιά της και µετά συνενώνει τα αποτελέσµατα: instance Monad [] where return x = [x] m >>= k = concat (map k m) 11

12 2.6 Η Τετριµµένη Μονάδα Θα κλείσουµε την ενότητα για τις µονάδες µε την τετριµµένη µονάδα Id η οποία δεν προσφέρει επιπλέον λειτουργικότητα στις συναρτήσεις. Ο λόγος που ασχολού- µαστε µε την Id είναι για να δείξουµε ότι και η απλή σύνθεση συναρτήσεων, χωρίς καµία επιπλέον λειτουργικότητα, µπορεί να περιγραφεί σα µία µονάδα. Η µονάδα µας λέγεται Id και ορίζεται ως εξής: data Id a = Id a instance Monad Id where return = Id (Id x) >>= k = k x 3 Είσοδος/έξοδος στη Haskell Μέχρι τώρα, όλα τα προγράµµατά µας ήταν αποτιµήσεις εκφράσεων, οι οποίες εκκινούνταν µεν από το χρήστη, αλλά δεν αλληλεπιδρούσαν µε αυτόν ή µε οποιοδήποτε άλλο κοµµάτι του περιβάλλοντός τους, π.χ. κάποιο αρχείο, µέχρι τον τερµατισµό τους. Οπως καταλαβαίνουµε, αυτό το είδος υπολογισµού δε µας επιτρέπει να γράψουµε πολλά προγράµµατα που έχουν ανάγκη αυτήν την αλληλεπίδραση. Καθώς αυτά τα προγράµµατα είναι και η συντριπτική πλειοψηφία των προγραµµάτων που τρέχουν στον υπολογιστή µας, η εισαγωγή ενός µηχανισµού εισόδου / εξόδου στη Haskell είναι επιτακτική. Στην ενότητα αυτή, ϑα κάνουµε µια µικρή εισαγωγή στο µηχανισµό εισόδου / εξόδου της Haskell, ο οποίος χρησιµοποιεί µονάδες. Ο στόχος δεν είναι µια εξαντλητική µελέτη της σχετικής ϐιβλιοθήκης, αλλά η επεξήγηση των ϐασικών αρχών, καθώς και των λόγων που οδήγησαν στη χρήση µονάδων για το µηχανισµό αυτό. 3.1 Το Πρόβληµα της Εισόδου/εξόδου στις Συναρτησιακές Γλώσσες Η είσοδος/έξοδος (I/O) είναι το µεγάλο αγκάθι του συναρτησιακού προγραµµατισµού. Το πρόβληµα είναι ότι η αλληλεπίδραση µε τον «έξω κόσµο» χαλάει το «αγνό» και ελεύθερο παρενεργειών µαθηµατικό µοντέλο πάνω στο οποίο ϐασίζεται το συναρτησιακό παράδειγµα. Ας υποθέσουµε ότι έχουµε µία «συνάρτηση» read η οποία διαβάζει έναν αριθµό από την κονσόλα και τον επιστρέφει στο περιβάλλον της. Είναι εµφανές ότι η read δεν είναι πραγµατική συνάρτηση, γιατί κάθε αποτίµησή της µπορεί να επιστρέψει και διαφορετική τιµή. Αυτό χαλάει το συναρτησιακό µοντέλο και τα καθαρά µαθηµατικά που µέχρι τώρα χρησιµοποιούσαµε για την απόδειξη ιδιοτήτων των προγραµµάτων µας. Για παράδειγµα, η έκφραση read-read δεν αποτιµάται σε 0, όπως ϑα ήταν µαθηµατικά σωστό. Επίσης, το αποτέλεσµα της έκφρασης εξαρτάται από τη σειρά αποτίµησης των υποεκφράσεων του -. Ακόµα χειρότερα, η read µπορεί να χρησιµοποιηθεί σε άλλους ορισµούς, «µολύνοντας» και συναρτήσεις στις οποίες η χρήση της read δεν είναι εµφανής: 12

13 f = read + 42 Στο παράδειγµα αυτό, η f επίσης δε συµπεριφέρεται σα συνάρτηση, αλλά αυτό είναι ακόµα λιγότερο εµφανές στο χρήστη της, ο οποίος µπορεί να µη γνωρίζει ότι έχει οριστεί µε ϐάση το read. 3.2 Μερικές Προσεγγίσεις στο Πρόβληµα Στο πρόβληµα εισόδου/εξόδου των συναρτησιακών γλωσσών έχουν προταθεί διαφορετικές προσεγγίσεις. Η απλούστερη είναι αυτή που ακολουθούν η ML και οι διάλεκτοι της Lisp: οι γλώσσες αυτές αποδέχονται τις παρενέργειες ως αναπόσπαστο κοµµάτι της αλληλεπίδρασης µε τον έξω κόσµο. Ενας τρόπος να διατηρήσουµε τον αγνό, χωρίς παρενέργειες, συναρτησιακό χαρακτήρα της γλώσσας, είναι να ϑεωρήσουµε την είσοδο και την έξοδο ως άπειρες λίστες δεδοµένων, όπως γίνεται στις παλιές εκδόσεις της Haskell. Ούτε η είσοδος ούτε η έξοδος είναι στην πραγµατικότητα άπειρες, αλλά αυτό δεν έχει σηµασία. Η µοντελοποίηση της εισόδου µε µια άπειρη λίστα input, που καθίσταται δυνατή χάρη στην οκνηρή αποτίµηση, µας επιτρέπει να διαβάζουµε κάθε ϕορά ένα στοιχείο δεδοµένων, Ϲητώντας «το επόµενο στοιχείο» της input. Το πρόβληµα µε αυτή τη µοντελοποίηση είναι ότι δεν επιτρέπει τη σειριακή εκτέλεση εντολών εισόδου/εξόδου που µπορεί να είναι σηµαντική σε ένα πρόγραµ- µα. Ο χρήστης µπορεί να έχει δόσει είσοδο στην κονσόλα, πριν να του έχει δωθεί ένα µήνυµα εξόδου που να περιγράφει τι είσοδο χρειάζεται να δώσει. Χρειαζό- µαστε έναν καλύτερο µηχανισµό που να να µπορεί να προσδιορίζει αν χρειαστεί τη σειρά µε την οποία εκτελούνται οι διαδικασίες εισόδου/εξόδου. 3.3 Μονάδες για Είσοδο/έξοδο Σκεφτόµενοι καθαρά µαθηµατικά, η ανάγνωση δεδοµένων µπορεί να ϑεωρηθεί ως µία συνάρτηση που παίρνει ως παράµετρο τον «κόσµο» όπως είναι εκείνη τη στιγµή: read :: World->(InputType,World) και επιστρέφει τον «κόσµο» όπως είναι µετά την ανάγνωση. Οµοίως, η εγγραφή δεδοµένων, µπορεί να ϑεωρηθεί ως συνάρτηση που παίρνει σαν παράµετρο τον κόσµο και τον αλλάζει: write :: (OutputType,World)->World Αυτός ο σχεδιασµός λύνει το πρόβληµα της σειριακότητας. Για παράδειγµα, στο παρακάτω, η ανάγνωση γίνεται µετά την εγγραφή: read w where w = write ("Give me your name",w) Φυσικά, αυτό µπορούµε να το κάνουµε και µε µια µονάδα. Η σύνταξη τότε ϑα µοιάζει κάπως έτσι: do write ("Give me your name") x <- read 13

14 όπου το πέρασµα των «κόσµων» γίνεται αυτόµατα από τη µονάδα και δε µας α- πασχολεί. Υπάρχει ένα ακόµα πρόβληµα που πρέπει να λυθεί. Η χρήση των κόσµων µπορεί να γίνει µε ένα τρόπο µαθηµατικά αποδεκτό, αλλά πρακτικά αδύνατο. Για παράδειγµα, µπορεί κάποιος να Ϲητήσει να επιδράσει µε ένα κόσµο που υπήρχε πριν από πολλούς υπολογισµούς και που τον έχει κρατήσει σε µία µεταβλητή. εν είναι πολύ πρακτικό να αποθηκεύεται ολόκληρος ο κόσµος σε µία µεταβλητή: το τέχνασµα που χρησιµοποιούµε µε τους κόσµους είναι µία καθαρά µαθηµατική αφαίρεση. Για να λύσουν το πρόβληµα οι σχεδιαστές της Haskell αποφάσισαν να κάνουν τη µονάδα εισόδου/εξόδου έναν ΑΤ. Η χρήση του ΑΤ επιτρέπεται µόνο µέσω των συναρτήσεων που παρέχονται από τη Haskell για την είσοδο και την έξοδο. Η ανεπιθύµητη πρόσβαση σε παράξενες µαθηµατικές αφαιρέσεις όπως οι κόσµοι, αλλά και στα πραγµατικά δεδοµένα και την υλοποίηση της εισόδου/εξόδου είναι αδύνατη. Η µονάδα εισόδου/εξόδου της Haskell ονοµάζεται IO και ορίζεται στο τµήµα IO που παρέχεται από τη διανοµή της Haskell. Πρέπει εποµένως να κάνουµε import IO για να τη χρησιµοποιήσουµε. Ο τύπος IO a έχει ως τιµή οποιονδήποτε κώδικα αλληλεπιδρά µε το χρήστη και επιστρέφει τιµή a. Στις περιπτώσεις που δε ϑέλουµε επιστροφή δεδοµένων (π.χ. εγγραφή δεδοµένων), ως τύπο a δηλώνουµε τον τύπο πλειάδας µηδεν σ- τοιχείων (). Αυτός ο τύπος έχει µόνο ένα στοιχείο, που γράφεται επίσης (). Χρησιµεύει ακριβώς όπως και ο τύπος void στις C/C++/Java. ε ϑα απαριθµήσουµε εδώ τις εντολές εισόδου/εξόδου της Haskell. Θα δώσουµε µόνο µερικές για παράδειγµα: getchar :: IO Char getline :: IO String putchar :: Char->IO() putstr :: String->IO() iseof :: IO Bool Οι πρώτες δύο είναι είσοδος χαρακτήρα και γραµµής από την κονσόλα αντίστοιχα. Οι δύο επόµενες είναι έξοδοι χαρακτήρα και συµβολοσειράς. Η τελευταία ελέγχει αν η κονσόλα δίνει τέλος αρχείου. Σαν παράδειγµα χρήσης των παραπάνω εντολών, το παρακάτω πρόγραµµα copy αντιγράφει την είσοδό του στην έξοδό του: import IO copy = do e<-iseof if e then do return () else do c<-getchar putchar c copy 14

15 Η ϐιβλιοθήκη της Haskell έχει επίσης συναρτήσεις για είσοδο και έξοδο σε αρχεία, όπως π.χ. readfile :: FilePath -> IO String writefile :: FilePath -> String -> IO () appendfile :: FilePath -> String -> IO () όπου FilePath είναι συνώνυµο του String. Υπάρχουν και συναρτήσεις για γραφική διαπροσωπεία (GUI). ε ϑα ασχοληθούµε περισσότερο µε τις δυνατότητες εισόδου/εξόδου της Haskell. 4 Επισκόπηση Στις σηµειώσεις αυτές είδαµε τα εξής: Χρησιµοποιούµε µονάδες για να εµπλουτίσουµε τις συναρτήσεις µας µε καινούργια λειτουργικότητα διαχωρισµένη από τη ϐασική τους λειτουργία Μία µονάδα είναι ένας µοναδιαίος κατασκευαστής τύπου m συνοδευόµενος από συναρτήσεις return και >>= που ικανοποιούν συγκεκριµένες ιδιότητες Η κλάση µοναδιαίων κατασκευαστών Monad της Haskell υπερφορτώνει αυτές τις συναρτήσεις Η σύνταξη do για τις µονάδες απλοποιεί σηµαντικά τον κώδικα Η σύνταξη do µοιάζει αλλά δεν είναι προστακτικός προγραµµατισµός. εν υπάρχει κατάσταση και µία µεταβλητή παίρνει τιµή µόνο µία ϕορά Η ϐασική χρήση των µονάδων στη Haskell είναι η είσοδος/έξοδος που γίνεται µε τη ϐοήθεια του ΑΤ /µονάδας IO 15

3 Αναδροµή και Επαγωγή

3 Αναδροµή και Επαγωγή 3 Αναδροµή και Επαγωγή Η ιδέα της µαθηµατικής επαγωγής µπορεί να επεκταθεί και σε άλλες δοµές εκτός από το σύνολο των ϕυσικών N. Η ορθότητα της µαθηµατικής επαγωγής ϐασίζεται όπως ϑα δούµε λίγο αργότερα

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

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

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

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

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

Κεφάλαιο 5ο: Εντολές Επανάληψης

Κεφάλαιο 5ο: Εντολές Επανάληψης Χρήστος Τσαγγάρης ΕΕ ΙΠ Τµήµατος Μαθηµατικών, Πανεπιστηµίου Αιγαίου Κεφάλαιο 5ο: Εντολές Επανάληψης Η διαδικασία της επανάληψης είναι ιδιαίτερη συχνή, αφού πλήθος προβληµάτων µπορούν να επιλυθούν µε κατάλληλες

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

for for for for( . */

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

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

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

Επεξεργασία Αρχείων Κειµένου

Επεξεργασία Αρχείων Κειµένου Επεξεργασία Αρχείων Κειµένου Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Αρχεία Κειµένου Γενικά Συναρτήσεις Επεξεργασίας Αρχείων Κειµένου ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Αρχεία Γενικά

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

(GNU-Linux, FreeBSD, MacOsX, QNX

(GNU-Linux, FreeBSD, MacOsX, QNX 1.7 διαταξεις (σελ. 17) Παράδειγµα 1 Θα πρέπει να κάνουµε σαφές ότι η επιλογή των λέξεων «προηγείται» και «έπεται» δεν έγινε απλώς για λόγους αφαίρεσης. Μπορούµε δηλαδή να ϐρούµε διάφορα παραδείγµατα στα

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

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν Επαναληπτικές δοµές Η λογική των επαναληπτικών διαδικασιών εφαρµόζεται όπου µία ακολουθία εντολών εφαρµόζεται σε ένα σύνολο περιπτώσεων που έχουν κάτι κοινό. Όταν ψάχνουµε θέση για να παρκάρουµε κοντά

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

Κεφάλαιο 12 : ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Κεφάλαιο 12 : ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 12 : ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ 1. Συναρτήσεις ΣΥΝΑΡΤΗΣΕΙΣ 1.1. Ο λόγος ύπαρξης των συναρτήσεων Όπως είδαµε µία διαδικασία µπορεί να υπολογίζει περισσότερα από ένα αποτελέσµατα τα

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

Οι δείκτες στη γλώσσα C

Οι δείκτες στη γλώσσα C Οι δείκτες στη γλώσσα C Δείκτης είναι µία µεταβλητή η οποία περιέχει σαν τιµή µία διεύθυνση της µνήµης Η τιµή ενός δείκτη δείχνει σε µία άλλη µεταβλητή, η οποία µπορεί να προσεγγισθεί έµµεσα µε τους ειδικούς

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

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

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

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

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) 8 ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) ιάλεξη 2 2.1 ΜΕΤΑΒΛΗΤΕΣ (ΜΕΡΟΣ Β) Στην προηγούµενη διάλεξη µάθαµε ότι µπορούµε να χρησιµοποιούµε τη ρητή ή την αυτονόητη δήλωση µεταβλητών

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

o AND o IF o SUMPRODUCT

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

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

Σύνοψη Προηγούµενου. Γλώσσες χωρίς Συµφραζόµενα (2) Ισοδυναµία CFG και PDA. Σε αυτό το µάθηµα. Αυτόµατα Στοίβας Pushdown Automata

Σύνοψη Προηγούµενου. Γλώσσες χωρίς Συµφραζόµενα (2) Ισοδυναµία CFG και PDA. Σε αυτό το µάθηµα. Αυτόµατα Στοίβας Pushdown Automata Σύνοψη Προηγούµενου Γλώσσες χωρίς Συµφραζόµενα (2) Ορέστης Τελέλης telelis@unipi.gr Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Αυτόµατα Στοίβας Pushdown utomata Ισοδυναµία µε τις Γλώσσες χωρίς Συµφραζόµενα:

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

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

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

Κεφάλαιο 6 Παράγωγος

Κεφάλαιο 6 Παράγωγος Σελίδα από 5 Κεφάλαιο 6 Παράγωγος Στο κεφάλαιο αυτό στόχος µας είναι να συνδέσουµε µία συγκεκριµένη συνάρτηση f ( ) µε µία δεύτερη συνάρτηση f ( ), την οποία και θα ονοµάζουµε παράγωγο της f. Η τιµή της

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

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

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 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. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

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

scanf() scanf() stdin scanf() printf() int float double %lf float

scanf() scanf() stdin scanf() printf() int float double %lf float Εισαγωγή Στον Προγραµµατισµό «C» Είσοδος Δεδοµένων Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Η συνάρτηση scanf() Η συνάρτηση

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

Ορισµός. Εστω συναρτήσεις: f : N R και g : N R. η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C 2 και n 0, τέτοιες ώστε:

Ορισµός. Εστω συναρτήσεις: f : N R και g : N R. η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C 2 και n 0, τέτοιες ώστε: Συµβολισµός Ω( ) Τάξη των Συναρτήσεων () Εκτίµηση Πολυπλοκότητας Αλγορίθµων Ορέστης Τελέλης telelis@unipi.gr Ορισµός. Εστω συναρτήσεις: f : N R και g : N R η f(n) είναι Ω( g(n) ) αν υπάρχουν σταθερές C

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

Κλάσεις και Αντικείµενα

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

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

Εισαγωγή στο Συναρτησιακό Προγραμματισμό

Εισαγωγή στο Συναρτησιακό Προγραμματισμό Εισαγωγή στο Συναρτησιακό Προγραμματισμό Γιάννης Κασσιός Σε αυτό το μάθημα θα εξερευνήσουμε ένα σπουδαίο μοντέλο προγραμματισμού, το συναρτησιακό προγραμματισμό. Θα δούμε το συναρτησιακό προγραμματισμό

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal Δοµή προγράµµατος 1. Δοµή προγράµµατος program όνοµα_προγράµµατος(αρχείο_1, αρχείο_2,...αρχείο_ν); ΕΠΙΚΕΦΑΛΙΔΑ ΒΙΒΛΙΟΘΗΚΕΣ uses όνοµα_βιβλιοθήκης,όνοµα_βιβλιοθήκης;

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

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις Με µαύρο τα κοµµάτια από την εκφώνηση. Με µπλε απαντήσεις κι επεξηγήσεις. Με κόκκινο τα πιο συχνά λάθη που είδαµε. Άσκηση Παρασκευής ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις Σε αυτή την άσκηση θα γράψετε ένα πρόγραµµα

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

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

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

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

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 2 ο Τύποι Δεδοµένων Δήλωση Μεταβλητών Έξοδος Δεδοµένων Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Μνήµη και Μεταβλητές Σχέση Μνήµης Υπολογιστή και Μεταβλητών Η µνήµη (RAM) ενός

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

Τεχνολογία Λογισµικού Ι Κεφάλαιο 5

Τεχνολογία Λογισµικού Ι Κεφάλαιο 5 ΕΛΛΗΝΙΚΟ ΑΝΟΙΧΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Πρόγραµµα σπουδών "ΠΛΗΡΟΦΟΡΙΚΗ" - Θ.Ε. ΠΛΗ11 Τεχνολογία Λογισµικού Ι Κεφάλαιο 5 Βασίλειος Βεσκούκης ιδάκτωρ Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών v.vescoukis@cs.ntua.gr

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

Σύνοψη Προηγούµενου. Κανονικές Γλώσσες (1) Προβλήµατα και Γλώσσες. Σε αυτό το µάθηµα. ιαδικαστικά του Μαθήµατος.

Σύνοψη Προηγούµενου. Κανονικές Γλώσσες (1) Προβλήµατα και Γλώσσες. Σε αυτό το µάθηµα. ιαδικαστικά του Μαθήµατος. Σύνοψη Προηγούµενου Κανονικές Γλώσσες () ιαδικαστικά του Μαθήµατος. Ορέστης Τελέλης telelis@unipi.gr Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Εισαγωγή: Υπολογισιµότητα και Πολυπλοκότητα. Βασικές

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

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη 9.1 Γενικά Οι εφαρµογές που δηµιουργούνται από ένα προγραµµατιστή µπορούν ανά πασά στιγµή να καταρρεύσουν από κάποιο λάθος κατά την λειτουργία τους. Αυτές οι καταστάσεις συµβαίνουν από αµέλεια του προγραµµατιστή

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

4.3. Γραµµικοί ταξινοµητές

4.3. Γραµµικοί ταξινοµητές Γραµµικοί ταξινοµητές Γραµµικός ταξινοµητής είναι ένα σύστηµα ταξινόµησης που χρησιµοποιεί γραµµικές διακριτικές συναρτήσεις Οι ταξινοµητές αυτοί αναπαρίστανται συχνά µε οµάδες κόµβων εντός των οποίων

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

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

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

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

Γραµµικός Προγραµµατισµός - Μέθοδος Simplex

Γραµµικός Προγραµµατισµός - Μέθοδος Simplex Γραµµικός Προγραµµατισµός - Μέθοδος Simplex Η πλέον γνωστή και περισσότερο χρησιµοποιηµένη µέθοδος για την επίλυση ενός γενικού προβλήµατος γραµµικού προγραµµατισµού, είναι η µέθοδος Simplex η οποία αναπτύχθηκε

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

Kεφάλαιο 10. Πόσα υποπαίγνια υπάρχουν εδώ πέρα; 2 υποπαίγνια.

Kεφάλαιο 10. Πόσα υποπαίγνια υπάρχουν εδώ πέρα; 2 υποπαίγνια. Kεφάλαιο 10 Θα δούµε ένα δύο παραδείγµατα να ορίσουµε/ µετρήσουµε τα υποπαίγνια και µετά θα λύσουµε και να βρούµε αυτό που λέγεται τέλεια κατά Nash ισορροπία. Εδώ θα δούµε ένα παίγνιο όπου έχουµε µια επιχείρηση

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

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00 ΣΕΤ ΑΣΚΗΣΕΩΝ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2011-2012 Προθεσµία: 8/1/12, 22:00 Περιεχόµενα Διαβάστε πριν ξεκινήσετε Εκφώνηση άσκησης Οδηγίες αποστολής άσκησης Πριν ξεκινήσετε (ΔΙΑΒΑΣΤΕ

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

είκτες και Πίνακες (2)

είκτες και Πίνακες (2) είκτες και Πίνακες (2) Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα: Πολυδιάστατοι πίνακες Πέρασµα παραµέτρων σε προγράµµατα C ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-1 Πίνακες εικτών Πίνακας δεικτών είναι

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

Βασικά στοιχεία της Java

Βασικά στοιχεία της Java Βασικά στοιχεία της Java προτάσεις, εκφράσεις, µεταβλητές, σταθερές, τελεστές Ορισµοί Πρόταση (statement) είναι µία απλή εντολή σε µία γλώσσα προγραµµατισµού. Γιαπαράδειγµα: int x=12; Έκφραση (expression)

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

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

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

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

Αρµονική Ανάλυση. Ενότητα: Μέτρο Lebesgue. Απόστολος Γιαννόπουλος. Τµήµα Μαθηµατικών

Αρµονική Ανάλυση. Ενότητα: Μέτρο Lebesgue. Απόστολος Γιαννόπουλος. Τµήµα Μαθηµατικών Ενότητα: Μέτρο Lebesgue Απόστολος Γιαννόπουλος Τµήµα Μαθηµατικών Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commos. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται

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

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.1,3.3-3.4: Συναρτήσεις I ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 11-1 Μη- οµηµένος Προγραµµατισµός Το πρόγραµµα στα αριστερά δεν είναι Αρθρωτό (δεν έχει σωστή δοµή). Όλη η λειτουργικότητα

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

ΓΡΑΜΜΙΚΑ ΣΥΣΤΗΜΑΤΑ ΕΞΙΣΩΣΕΩΝ

ΓΡΑΜΜΙΚΑ ΣΥΣΤΗΜΑΤΑ ΕΞΙΣΩΣΕΩΝ ΓΡΑΜΜΙΚΑ ΣΥΣΤΗΜΑΤΑ ΕΞΙΣΩΣΕΩΝ Θα ξεκινήσουµε την παρουσίαση των γραµµικών συστηµάτων µε ένα απλό παράδειγµα από τη Γεωµετρία, το οποίο ϑα µας ϐοηθήσει στην κατανόηση των συστηµάτων αυτών και των συνθηκών

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

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

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων 1 Είσοδος/Έξοδος Είσοδος/Έξοδος ανάλογα με τον τύπο του προγράμματος Πρόγραμμα

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

ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB- SIMULINK

ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB- SIMULINK ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB- SIMULINK ρ. Γεώργιος Φ. Φραγκούλης Καθηγητής Ver. 0.2 9/2012 ιανύσµατα & ισδιάστατοι πίνακες Ένα διάνυσµα u = (u1, u2,, u ) εισάγεται στη MATLAB ως εξής : u=[ u1, u2,, un ] ή u=[ u1

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

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ 9.1 Εντολές Εισόδου/εξόδου Στην Pascal, 1. Tα δεδομένα των προγραμμάτων λαμβάνονται: είτε από το πληκτρολόγιο είτε από ένα αρχείο με τη χρήση των διαδικασιών read και readln,

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

2.1 Αντικειµενοστρεφής προγραµµατισµός

2.1 Αντικειµενοστρεφής προγραµµατισµός 2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί

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

Αρµονική Ανάλυση. Ενότητα: Το ϑεώρηµα παρεµβολής του Riesz και η ανισότητα Hausdorff-Young. Απόστολος Γιαννόπουλος.

Αρµονική Ανάλυση. Ενότητα: Το ϑεώρηµα παρεµβολής του Riesz και η ανισότητα Hausdorff-Young. Απόστολος Γιαννόπουλος. Ενότητα: Το ϑεώρηµα παρεµβολής του Riesz και η ανισότητα Hausdorff-Young Απόστολος Γιαννόπουλος Τµήµα Μαθηµατικών Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

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

LAB1 ΛΥΣΗ. Ευρετήριο απαντήσεων ανά τµήµα: Ευρετήριο απαντήσεων ανά µήνυµα λάθους/προειδοποίησης

LAB1 ΛΥΣΗ. Ευρετήριο απαντήσεων ανά τµήµα: Ευρετήριο απαντήσεων ανά µήνυµα λάθους/προειδοποίησης LAB1 ΛΥΣΗ Ευρετήριο απαντήσεων ανά τµήµα: Τµήµα 1 Τµήµα 2 Τµήµα 3 Τµήµα 4 Τµήµα 5 Ευρετήριο απαντήσεων ανά µήνυµα λάθους/προειδοποίησης error: invalid preprocessing directive #includes error: syntax error

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

2. Missing Data mechanisms

2. Missing Data mechanisms Κεφάλαιο 2 ο 2. Missing Data mechanisms 2.1 Εισαγωγή Στην προηγούµενη ενότητα περιγράψαµε κάποια από τα βασικά µοτίβα εµφάνισης των χαµένων τιµών σε σύνολα δεδοµένων. Ένα άλλο ζήτηµα που µας απασχολεί

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

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

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

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

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά Α. Μ. Βαθμός Σχόλια 1183 1194 1238 1239 1240 1241 - Καλή δουλειά 1242 1243 1244 1245 - Κακή χρήση συναρτήσεων. Κάνεις τον ίδιο έλεγχο και εντός και εκτός της συνάρτησης. Θα έπρεπε να έχεις βρεί ένα τρόπο

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

τη µέθοδο της µαθηµατικής επαγωγής για να αποδείξουµε τη Ϲητούµενη ισότητα.

τη µέθοδο της µαθηµατικής επαγωγής για να αποδείξουµε τη Ϲητούµενη ισότητα. Αριστοτελειο Πανεπιστηµιο Θεσσαλονικης Τµηµα Μαθηµατικων Εισαγωγή στην Αλγεβρα Τελική Εξέταση 15 Φεβρουαρίου 2017 1. (Οµάδα Α) Εστω η ακολουθία Fibonacci F 1 = 1, F 2 = 1 και F n = F n 1 + F n 2, για n

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

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) 32 ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) ιάλεξη 5 5.1 Ι ΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Εκτός από τους µονοδιάστατους πίνακες ή διανυσµατα που συζητήσαµε στην παράγραφο 4.1, µπορούµε να αποθηκεύσουµε

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

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

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

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

Χαρακτηριστικά αναδροµής

Χαρακτηριστικά αναδροµής Χαρακτηριστικά αναδροµής base case : συνθήκη τερµατισµού της αναδροµής Όταν το πρόβληµα είναι αρκετά µικρό ή απλό ώστε η λύση να είναι άµεση αναδροµικό βήµα : κλήση της ίδιας συνάρτησης για µικρότερη ή

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

Σηµειώσεις στις συναρτήσεις

Σηµειώσεις στις συναρτήσεις Σηµειώσεις στις συναρτήσεις 4 Η έννοια της συνάρτησης Ο όρος «συνάρτηση» χρησιµοποιείται αρκετά συχνά για να δηλώσει ότι ένα µέγεθος, µια κατάσταση κτλ εξαρτάται από κάτι άλλο Και στα µαθηµατικά ο όρος

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

2 Αποδείξεις. 2.1 Εξαντλητική µέθοδος. Εκδοση 2005/03/22. Υπάρχουν πολλών ειδών αποδείξεις. Εδώ ϑα δούµε τις πιο κοινές:

2 Αποδείξεις. 2.1 Εξαντλητική µέθοδος. Εκδοση 2005/03/22. Υπάρχουν πολλών ειδών αποδείξεις. Εδώ ϑα δούµε τις πιο κοινές: 2 Αποδείξεις Υπάρχουν πολλών ειδών αποδείξεις. Εδώ ϑα δούµε τις πιο κοινές: Εκδοση 2005/03/22 Εξαντλητική µέθοδος ή µέθοδος επισκόπησης. Οταν το πρόβληµα έχει πεπερασµένες αριθµό περιπτώσεων τις εξετάζουµε

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

Εισαγωγή στην Τοπολογία

Εισαγωγή στην Τοπολογία Ενότητα: Τοπικές έννοιες Γεώργιος Κουµουλλής Τµήµα Μαθηµατικών Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται

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

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης H ΓΛΩΣΣΑ C Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C ηµήτρης Ψούνης 2 Περιεχόµενα Μαθήµατος Α. Θεωρία 1. Κύκλος Ανάπτυξης Προγράµµατος 1. Συγγραφή και Μεταγλώττιση ενός προγράµµατος 2. Εκτέλεση του προγράµµατος

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

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) 1 ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) ιάλεξη 1 1.1 ΕΙΣΑΓΩΓΗ ΣΤΗ FORTRAN 77 Ένα πρόγραµµα σε οποιαδήποτε γλώσσα προγραµµατισµού δεν τίποτα άλλο από µια σειρά εντολών που πρέπει

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΣΥΝΑΡΤΗΣΕΙΣ ΣΤΗ C (1/3) +- Στη C χρησιμοποιούμε συχνα τις συναρτήσεις (functions),

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

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

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

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

Ηλεκτρονικοί Υπολογιστές

Ηλεκτρονικοί Υπολογιστές ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 5: Εντολές Αντικατάστασης, Συναρτήσεις και Σχόλια στη C++ Ζαχαρούλα Ανδρεοπούλου Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

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

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

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

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

Ασκήσεις για το µάθηµα «Ανάλυση Ι και Εφαρµογές»

Ασκήσεις για το µάθηµα «Ανάλυση Ι και Εφαρµογές» Ασκήσεις για το µάθηµα «Ανάλυση Ι και Εφαρµογές» Κεφάλαιο : Το σύνολο των πραγµατικών αριθµών Α Οµάδα Εξετάστε αν οι παρακάτω προτάσεις είναι αληθείς ή ψευδείς αιτιολογήστε πλήρως την απάντησή σας) α)

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

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) Κεφάλαιο 9.1-9.2 Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) ( ιάλεξη 19) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1) Strings στη C Ένα string είναι µία ακολουθία αλφαριθµητικών χαρακτήρων, σηµείων στίξης κτλ. Π.χ.

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

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram. Εισαγωγή αρχείων δεδοµένων 1. Η εισαγωγή αρχείων δεδοµένων στο LaVIEW γίνεται στο Block Diagram µε την εντολή Read From Spreadsheet File. 2. Εισάγουµε την εντολή Read From Spreadsheet File στο Block Diagram

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

a 1d L(A) = {m 1 a m d a d : m i Z} a 11 a A = M B, B = N A, k=1

a 1d L(A) = {m 1 a m d a d : m i Z} a 11 a A = M B, B = N A, k=1 Α44 ΚΡΥΠΤΟΓΡΑΦΙΑ ΣΗΜΕΙΩΣΕΙΣ #12 ΘΕΟ ΟΥΛΟΣ ΓΑΡΕΦΑΛΑΚΗΣ 1 Πλεγµατα Εστω ο διανυσµατικός χώρος R d διάστασης d Ο χώρος R d έρχεται µε ένα εσωτερικό γινόµενο x, y = d i=1 x iy i και τη σχετική νόρµα x = x,

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

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

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

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

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Σύντομες εισαγωγικές σημειώσεις για την. Matlab Σύντομες εισαγωγικές σημειώσεις για την Matlab Δήλωση Μεταβλητών Για να εισάγει κανείς δεδομένα στη Matlab υπάρχουν πολλοί τρόποι. Ο πιο απλός είναι στη γραμμή εντολών να εισάγουμε αυτό που θέλουμε και

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

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΚΕΦΑΛΑΙΟ 10 Όπως είδαμε και σε προηγούμενο κεφάλαιο μια από τις βασικότερες τεχνικές στον Δομημένο Προγραμματισμό είναι ο Τμηματικός Προγραμματισμός. Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης

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

ΠΡΟΒΛΗΜΑΤΑ ΕΛΑΧΙΣΤΟΠΟΙΗΣΗΣ

ΠΡΟΒΛΗΜΑΤΑ ΕΛΑΧΙΣΤΟΠΟΙΗΣΗΣ ΠΡΟΒΛΗΜΑΤΑ ΕΛΑΧΙΣΤΟΠΟΙΗΣΗΣ Ελαχιστοποίηση κόστους διατροφής Ηεπιχείρηση ζωοτροφών ΒΙΟΤΡΟΦΕΣ εξασφάλισε µια ειδική παραγγελίααπό έναν πελάτη της για την παρασκευή 1.000 κιλών ζωοτροφής, η οποία θα πρέπει

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

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

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

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

Γραµµική Αλγεβρα Ι. Ενότητα: ιανυσµατικοί χώροι. Ευάγγελος Ράπτης. Τµήµα Μαθηµατικών

Γραµµική Αλγεβρα Ι. Ενότητα: ιανυσµατικοί χώροι. Ευάγγελος Ράπτης. Τµήµα Μαθηµατικών Ενότητα: ιανυσµατικοί χώροι Ευάγγελος Ράπτης Τµήµα Μαθηµατικών Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται

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

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

ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ ΑΠΟΣΤΟΛΟΥ ΓΙΩΡΓΟΣ ΜΑΘΗΜΑΤΙΚΟΣ 5ο κεφάλαιο: Πρόοδοι ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ ΑΠΟΣΤΟΛΟΥ ΓΙΩΡΓΟΣ ΜΑΘΗΜΑΤΙΚΟΣ ) Copyright 014 Αποστόλου Γιώργος Αποστόλου Γεώργιος apgeorge004@yahoo.com άδεια χρήσης 3η Εκδοση, Αύγουστος 014 Περιεχόµενα 1 ΠΡΟΟ

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

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΝΟΜΑΤΕΠΩΝΥΜΟ: AEM: ΜΕΡΟΣ Α: ΕΡΩΤΗΣΕΙΣ ΠΟΛΛΑΠΛΩΝ ΕΠΙΛΟΓΩΝ [15 µονάδες] ΣΗΜΑΝΤΙΚΕΣ ΔΙΕΥΚΡΙΝΙΣΕΙΣ: Επιλέξτε ΜΙΑ σωστή απάντηση για κάθε ερώτηση. Λάθος απαντήσεις βαθµολογούνται αρνητικά Σε ερωτήσεις που

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

Κωστόπουλος ηµήτριος Μ.Π.Λ.Α. TAPE COMPRESSION (θεώρηµα 2.3 Παπαδηµητρίου)

Κωστόπουλος ηµήτριος Μ.Π.Λ.Α. TAPE COMPRESSION (θεώρηµα 2.3 Παπαδηµητρίου) Κωστόπουλος ηµήτριος Μ.Π.Λ.Α. TAPE COMPRESSION (θεώρηµα 2.3 Παπαδηµητρίου) Εισαγωγή. Αυτό το φυλλάδιο έχει στόχο να δώσει ένα ανάλογο αποτέλεσµα µε αυτό του linear speedup θεωρήµατος, εάν έχουµε µία µηχανή

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

Μεθοδολογία Προγραμματισμού

Μεθοδολογία Προγραμματισμού Μεθοδολογία Προγραμματισμού Εισαγωγή στo συναρτησιακό προγραμματισμό με Java Νικόλαος Πεταλίδης Τμήμα Μηχανικών Η/Υ ΤΕΙ Κεντρικής Μακεδονίας Εισαγωγή Εαρινό Εξάμηνο Ν Πεταλίδης (ΤΕΙ Κεντρικής Μακεδονίας)

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

H ΓΛΩΣΣΑ C. Μάθηµα 7: Πίνακες. ηµήτρης Ψούνης

H ΓΛΩΣΣΑ C. Μάθηµα 7: Πίνακες. ηµήτρης Ψούνης H ΓΛΩΣΣΑ C Μάθηµα 7: Πίνακες ηµήτρης Ψούνης 2 Περιεχόµενα Μαθήµατος Α. Πίνακες 1. Μονοδιάστατοι Πίνακες 1. ήλωση Πίνακα 2. Παράδειγµα Χρήσης Πίνακα 3. Αρχικοποίηση πίνακα κατά τη δήλωση 4. Στατική έσµευση

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

Γενικές Παρατηρήσεις. Μη Κανονικές Γλώσσες - Χωρίς Συµφραζόµενα (1) Το Λήµµα της Αντλησης. Χρήση του Λήµµατος Αντλησης.

Γενικές Παρατηρήσεις. Μη Κανονικές Γλώσσες - Χωρίς Συµφραζόµενα (1) Το Λήµµα της Αντλησης. Χρήση του Λήµµατος Αντλησης. Γενικές Παρατηρήσεις Μη Κανονικές Γλώσσες - Χωρίς Συµφραζόµενα () Ορέστης Τελέλης telelis@unipi.gr Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Υπάρχουν µη κανονικές γλώσσες, π.χ., B = { n n n }. Αυτό

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

Γλώσσες που περιγράφονται από Κανονικές Εκφράσεις

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

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

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στην γλώσσα προγραμματισμού C Εισαγωγή στην γλώσσα προγραμματισμού C Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00 ΣΕΤ ΑΣΚΗΣΕΩΝ 3 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2013-2014 Προθεσµία: 7/1/2014, 22:00 Περιεχόµενα Διαβάστε πριν ξεκινήσετε Εκφώνηση άσκησης 1 Οδηγίες αποστολής άσκησης Πριν ξεκινήσετε (ΔΙΑΒΑΣΤΕ

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

char name[5]; /* define a string of characters */

char name[5]; /* define a string of characters */ Συµβολοσειρές (Strings) Συµβολοσειρά (string) είναι µια σειρά αλφαριθµητικών χαρακτήρων (γενικά εκτυπώσιµων συµβόλων ASCII). Όταν λέµε σειρά εννοούµε διαδοχικές θέσεις µνήµης που µπορούν να αντιµετωπισθούν

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

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1 ΑΕΜ ΒΑΘΜΟΣ 449 PASS 451 PASS 476-1733 PASS 1779-1899 FAIL 1900 FAIL Page 1 1901 PASS 1904 PASS 1908 PASS 1909 PASS 1910 - Page 2 1911 PASS 1914 Οριακό PASS 1915 PASS 1926 PASS Page 3 1927 PASS 1928 Οριακό

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΠΕΜΠΤΟ Triggers, Stored procedures Γιώργος Μαρκοµανώλης Περιεχόµενα Triggers-Ενηµέρωση δεδοµένων άλλων πινάκων... 1 Ασφάλεια...

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

KΕΦΑΛΑΙΟ 1 ΧΡΗΣΙΜΕΣ ΜΑΘΗΜΑΤΙΚΕΣ ΕΝΝΟΙΕΣ. { 1,2,3,..., n,...

KΕΦΑΛΑΙΟ 1 ΧΡΗΣΙΜΕΣ ΜΑΘΗΜΑΤΙΚΕΣ ΕΝΝΟΙΕΣ. { 1,2,3,..., n,... KΕΦΑΛΑΙΟ ΧΡΗΣΙΜΕΣ ΜΑΘΗΜΑΤΙΚΕΣ ΕΝΝΟΙΕΣ Βασικές έννοιες διαιρετότητας Θα συµβολίζουµε µε, τα σύνολα των φυσικών αριθµών και των ακεραίων αντιστοίχως: {,,3,,, } { 0,,,,, } = = ± ± ± Ορισµός Ένας φυσικός αριθµός

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

Γ' ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΚΦΩΝΗΣΕΙΣ ÏÅÖÅ

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

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

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

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

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

όπου D(f ) = (, 0) (0, + ) = R {0}. Είναι Σχήµα 10: Η γραφική παράσταση της συνάρτησης f (x) = 1/x.

όπου D(f ) = (, 0) (0, + ) = R {0}. Είναι Σχήµα 10: Η γραφική παράσταση της συνάρτησης f (x) = 1/x. 3 Ορια συναρτήσεων 3. Εισαγωγικές έννοιες. Ας ϑεωρήσουµε την συνάρτηση f () = όπου D(f ) = (, 0) (0, + ) = R {0}. Είναι Σχήµα 0: Η γραφική παράσταση της συνάρτησης f () = /. ϕυσικό να αναζητήσουµε την

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

FAIL PASS PASS οριακά

FAIL PASS PASS οριακά AEM 0001 0002 COMMENTS οριακά -Το πρόγραµµά σου δουλεύει λάθος για τις εισόδους: 7 -Δεν έχεις µεριµνήσει για την περίπτωση step=1. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον

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

Κεφάλαιο 3β. Ελεύθερα Πρότυπα (µέρος β)

Κεφάλαιο 3β. Ελεύθερα Πρότυπα (µέρος β) Κεφάλαιο 3β Ελεύθερα Πρότυπα (µέρος β) Ο σκοπός µας εδώ είναι να αποδείξουµε το εξής σηµαντικό αποτέλεσµα. 3.3.6 Θεώρηµα Έστω R µια περιοχή κυρίων ιδεωδών, F ένα ελεύθερο R-πρότυπο τάξης s < και N F. Τότε

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

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας

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

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 12-1 Ανασκόπηση οµής Προγράµµατος µε Συναρτήσεις #include 1 void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης (

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

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

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

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

Σε αυτό το µάθηµα θα ασχοληθούµε µε τη βελτίωση της εµφάνισης ενός ιστοτόπου, αλλά και τον εύκολο χειρισµό όλων των αλλαγών στην εµφάνιση της σελίδας

Σε αυτό το µάθηµα θα ασχοληθούµε µε τη βελτίωση της εµφάνισης ενός ιστοτόπου, αλλά και τον εύκολο χειρισµό όλων των αλλαγών στην εµφάνιση της σελίδας Σε αυτό το µάθηµα θα ασχοληθούµε µε τη βελτίωση της εµφάνισης ενός ιστοτόπου, αλλά και τον εύκολο χειρισµό όλων των αλλαγών στην εµφάνιση της σελίδας µέσω της τεχνολογίας των ιαδοχικών Φύλλων Στυλ (cascading

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ ΕΠΛ 035 - ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΓΙΑ ΗΛΕΚΤΡΟΛΟΓΟΥΣ ΜΗΧΑΝΙΚΟΥΣ ΚΑΙ ΜΗΧΑΝΙΚΟΥΣ ΥΠΟΛΟΓΙΣΤΩΝ Ακαδηµαϊκό έτος 2017-2018 Υπεύθυνος εργαστηρίου: Γεώργιος

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

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

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

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