Κεφάλαιο 8. Συναρτησιακός Προγραμματισμός: Η Γλώσσα Haskell. Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης

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

Download "Κεφάλαιο 8. Συναρτησιακός Προγραμματισμός: Η Γλώσσα Haskell. Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης"

Transcript

1 Κεφάλαιο 8 Συναρτησιακός Προγραμματισμός: Η Γλώσσα Haskell Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1

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

3 Παράδειγμα Συναρτησιακού Προγράμματος - 1 Υπολογισμός μεγίστου δύο αριθμών max (a,b) = if (a>b) then a else b Το πρόγραμμα μοιάζει πολύ με έναν καθαρά μαθηματικό ορισμό. Τα a, b ονομάζονται τυπικές παράμετροι (formal parameters) της συνάρτησης max. Όταν δίνονται συγκεκριμένες τιμές στις τυπικές παραμέτρους, τότε «καλείται» η συνάρτηση με αυτές τις παραμέτρους. 3

4 Παράδειγμα Συναρτησιακού Προγράμματος - 2 Για max (2,3) η συνάρτηση «καλείται» με πρώτη παράμετρο 2 και δεύτερη παράμετρο 3. Οι παράμετροι με τις οποίες καλείται μία συνάρτηση (όπως τα 2 και 3) ονομάζονται πραγματικές παράμετροι (actual parameters). 4

5 Συναρτησιακός προγραμματισμός Δυνατότητα δημιουργίας πιο πολύπλοκων συναρτήσεων με σύνθεση απλούστερων. Πρόβλημα εύρεσης μέγιστου τριών αριθμών Ορισμός νέας συνάρτησης χρησιμοποιώντας την συνάρτηση max: max3(a,b,c) = max(a, max(b,c)) 5

6 Διαφορά Βασική διαφορά συναρτησιακών και προστακτικών γλωσσών προγραμματισμού Γλώσσες προγραμματισμού (C και Pascal) δεν διαθέτουν (σε αντίθεση με τις συναρτησιακές γλώσσες) την ιδιότητα της διαφάνειας αναφοράς (referential transparency) 6

7 Διαφάνεια αναφοράς Κάθε έκφραση σε ένα πρόγραμμα αντιστοιχεί σε μία και μοναδική τιμή. Αν η ίδια έκφραση ξανα-ϋπολογισθεί τότε θα δώσει και πάλι την ίδια τιμή (δηλαδή ο υπολογισμός της τιμής μίας έκφρασης δεν αλλάζει ποτέ την τιμή της) 7

8 Παράδειγμα Προγράμματος program example (output); var flag: boolean; function f(n: integer): integer; begin if flag then f:=n else f:= 2*n; flag :=not flag end; begin flag := true; writeln(f(1)+f(2)); writeln(f(2)+f(1)); end 8

9 Παράδειγμα Προγράμματος Η εκτέλεση του προγράμματος δίνει δύο τιμές (5 και 4). Θα περιμέναμε και στις δύο περιπτώσεις το ίδιο αποτέλεσμα λόγω αντιμεταθετικότητας της πρόσθεσης στα μαθηματικά Πρόβλημα Διαφορά ανάμεσα στις συναρτήσεις, που ορίζονται σε μία γλώσσα όπως η Pascal, με τις μαθηματικές συναρτήσεις. Χρήση εντολών ανάθεσης (assignments) και ολικών (global) μεταβλητών 9

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

11 Εισαγωγή στη Γλώσσα Haskell Haskell: Σύγχρονη συναρτησιακή γλώσσα, που χρησιμοποιείται για απλές μέχρι αρκετά πολύπλοκες εφαρμογές. Κλήση του διερμηνέα της Haskell και εμφάνιση του συμβόλου «?». Ο χρήστης δίνει μία έκφραση για υπολογισμό. 11

12 Παράδειγμα? (2+3)*8 40? sum [1..10] 55? Ο συμβολισμός [1..10] αναπαριστά λίστα ακεραίων από το 1 μέχρι το 10. Το sum είναι συνάρτηση του συστήματος για υπολογισμό αθροίσματος των στοιχείων λίστας. Ο χρήστης μπορεί να ορίσει δικές του συναρτήσεις. 12

13 Τύποι της Haskell Σύστημα τύπων Πολύ χρήσιμο για ανίχνευση λαθών σε εκφράσεις και ορισμούς συναρτήσεων, που γράφει ο προγραμματιστής. Δίνεται ένας τύπος σε κάθε έκφραση, ο οποίος χαρακτηρίζει το είδος της τιμής, που αναπαρίσταται από αυτήν (ακέραιος, αριθμός κινητής υποδιαστολής, κλπ). 13

14 Παράδειγμα Έκφραση::τύπος = Συμβολισμός ότι η έκφραση έχει τον συγκεκριμένο τύπο. Όταν γράφουμε 42::Int εννοούμε ότι το 42 είναι ακέραιος (Int είναι το όνομα, που αναπαριστά τον τύπο των ακεραίων αριθμών) fact::int Int εννοούμε ότι fact είναι μία συνάρτηση, που παίρνει σαν όρισμα έναν ακέραιο και επιστρέφει έναν ακέραιο 14

15 Λογικές Τιμές Συμβολίζονται με Bool Λαμβάνουν δύο τιμές: True και False Υποστηρίζονται από τη Haskell οι συναρτήσεις επεξεργασίας λογικών τιμών: Η τιμή της έκφρασης a && b είναι True εάν και μόνο εάν και το a και το b είναι True Η τιμή της έκφρασης a b είναι True εάν ένα τουλάχιστον από τα a και b είναι True Η τιμή της έκφρασης not a είναι True αν το a είναι False, και είναι False αν το a είναι True 15

16 Ακέραιες Τιμές Συμβολίζονται με Int Περιλαμβάνουν θετικούς και αρνητικούς αριθμούς Υποστηρίζονται από Haskell με πολλές συναρτήσεις για την επεξεργασία τους 16

17 Συναρτήσεις Ακέραιων Τιμών (+) Πρόσθεση, (-) Αφαίρεση, (*) Πολλαπλασιασμός, (/) Ακέραιη Διαίρεση, (rem) Υπόλοιπο, (odd) Επιστρέφει True (όρισμα περιττός), διαφορετικά False (even) Επιστρέφει True (όρισμα άρτιος), διαφορετικά False (abs) Επιστρέφει απόλυτη τιμή ορίσματος 17

18 Αριθμοί Κινητής Υποδιαστολής Συμβολίζονται με Float Χρησιμοποιούνται σε υπολογισμούς μεγάλης ακρίβειας Πράξεις με αυτούς είναι γενικά ακριβείς. Σε πολύπλοκους υπολογισμούς ενδέχεται να υπεισέλθουν σφάλματα, που αλλοιώνουν το τελικό αποτέλεσμα. Αναπαρίστανται με χρήση υποδιαστολής (πχ ) ή με επιστημονικό συμβολισμό (πχ. 5.0e- 2, είναι ισοδύναμο με 0.05) 18

19 Χαρακτήρες Συμβολίζονται με Char Ατομικοί χαρακτήρες, όπως αυτοί σε ένα πληκτρολόγιο Διαφορετικός τύπος από το Int Γράφονται σαν χαρακτήρας, που περικλείεται με αποστρόφους a, 0, z 19

20 Συναρτήσεις και Χαρακτήρες Επιτρέπουν τη μετατροπή ενός χαρακτήρα στον αντίστοιχο ASCII κώδικα και αντίστροφα.? ord a 97? chr 65 A Η ord επιστρέφει τον αντίστοιχο ASCII κώδικα ενός χαρακτήρα, ενώ η char το χαρακτήρα, που αντιστοιχεί σε ASCII κώδικα. 20

21 Λίστες Αν t είναι ένας τύπος της Haskell, τότε [t] συμβολίζει τον τύπο των λιστών, που περιέχουν στοιχεία τύπου t. Παράδειγμα: [Int] είναι λίστες με ακέραιους αριθμούς 21

22 Τρόποι γραφής λίστας Απλούστερη λίστα είναι η κενή λίστα [] Απαρίθμηση στοιχείων λίστας [1,3,10] Χρήση τελεστή «:» [1,3,10]=1:[3,10]=1:(3:[10])=1: (3:(10:[])) 22

23 Συναρτήσεις για λίστες length xs επιστρέφει το μήκος της λίστας xs xs ++ ys Επιστρέφει μία νέα λίστα, που αποτελείται από τα στοιχεία της xs ακολουθούμενα από τα στοιχεία της ys concat xss Επιστρέφει τη λίστα των στοιχείων, που υπάρχουν σε κάθε μία από τις λίστες στην xss 23

24 Παράδειγμα? length [1,3,10] 3? [1,3,10]++[2,6,5,7] [1,3,10,2,6,5,7]? concat [[1],[2,3],[],[4,5,6]] [1,2,3,4,5,6] Όλα τα στοιχεία μίας λίστας πρέπει να έχουν τον ίδιο τύπο (όλα ακέραιοι, ή όλα χαρακτήρες, κλπ.) 24

25 Συνάρτηση Μία συνάρτηση δίνει μία αντιστοίχηση ανάμεσα στα στοιχεία ενός συνόλου (πεδίο ορισμού) και σε ένα άλλο σύνολο (πεδίο τιμών) Παράδειγμα: f(x) = x+1 είναι ιση με {(0,1), (1,2), } 25

26 Παράδειγμα { (-3,minus), (-2,minus), (-1,minus), (0,zero), (1, plus), } minus, if x<0 sign(x) = zero, if x=0 plus, if x>0 To x στα δύο αυτά παραδείγματα ονομάζεται «τυπική παράμετρος» της συνάρτησης. Η παραπάνω συνάρτηση είναι ορισμένη για όλα τα στοιχεία του συνόλου των ακεραίων και ονομάζεται ολική (total) συνάρτηση. 26

27 Παράδειγμα sign2(x) = minus if x<0 plus if x>0 Είναι μερική (partial) συνάρτηση. Μπορούμε να δούμε τις συναρτήσεις ως black boxes. G sign plus To G ονομάζεται πραγματική (actual) παράμετρος της plus. 27

28 Σχόλια Θα λέμε ότι η συνάρτηση εφαρμόζεται (applied) στην πραγματική παράμετρο. Στο παραπάνω παράδειγμα, η εφαρμογή αυτή γράφεται: sign(6) Μία πολύ χρήσιμη «πράξη» ανάμεσα σε συναρτήσεις είναι η σύνθεση (composition) 28

29 Παραδείγματα max(m,n)= m, if m>n n, otherwise a max(a,b,c)= b c if a b and a c if b a and b c if c a and c b 29

30 Παραδείγματα max3(a,b,c) = max(a, max(b,c)) SM4(a,b,c,d) = sign(max(a, max3(b,c,d))) 30

31 Συμβολοσειρές Συμβολίζονται με String Συντομογραφία του τύπου [Char] Γράφονται σαν ακολουθίες, που περικλείονται από τον χαρακτήρα hello, world Είναι ουσιαστικά λίστες χαρακτήρων 31

32 Συναρτήσεις Εφαρμογή συναρτήσεων και για γενικές λίστες? Length Hello 5? Hello, ++ World Hello, World? concat [ mary, ann ] maryann 32

33 Ν-άδες Αν t1, t2,, tn είναι τύποι, τότε ο τύπος της n-άδας συμβολίζεται με (t1, t2,, tn) 33

34 Ν-άδες (Int, [Int], Float) αναπαριστά το σύνολο των τριάδων των οποίων το πρώτο στοιχείο είναι ακέραιος, το δεύτερο λίστα ακεραίων και το τρίτο αριθμός κινητής υποδιαστολής. (Char, Bool) αναπαριστά το σύνολο των δυάδων με πρώτο στοιχείο χαρακτήρα και δεύτερο λογική τιμή. 34

35 Συναρτήσεις Αν t 1 και t 2 είναι τύποι, τότε t 1 -> t 2 είναι ο τύπος συνάρτησης, που παίρνει ορίσματα τύπου t 1 και επιστρέφει αποτελέσματα τύπου t 2. 35

36 Συναρτήσεις Μία συνάρτηση add η οποία παίρνει σαν όρισμα της δυάδα αριθμών και επιστρέφει το άθροισμα τους, έχει τύπο: (Int, Int) -> Int Η συνάρτηση ord έχει τύπο: Char -> Int Η συνάρτηση chr έχει τύπο: Int -> Char 36

37 Συναρτήσεις στην Haskell Η Haskell υποστηρίζει ένα ευρύ φάσμα από συναρτήσεις συστήματος (πχ product, abs, chr, ord, κλπ) Στις περισσότερες περιπτώσεις, ο χρήστης ορίζει επιπλέον συναρτήσεις (πχ. για επίλυση ειδικού προβλήματος) 37

38 Γενική μορφή συναρτήσεων Haskell f pat 1. pat n = E Καθένα από τα pat 1. pat n αναπαριστά όρισμα συνάρτησης και ονομάζεται πρότυπο (pattern). Μπορεί να είναι σταθερές τιμές, μεταβλητές ή με ακόμη πιο πολύπλοκη μορφή. E έκφραση της γλώσσας. Μία συνάρτηση ορίζεται με περισσότερες από μία εξισώσεις. 38

39 Παράδειγμα 1 Η συνάρτηση succ ορίζεται ως: succ n = n + 1 και έχει ως μοναδικό της όρισμα τη μεταβλητή n. 39

40 Παράδειγμα 8.1 Η συνάρτηση not ορίζεται με δύο εξισώσεις: not True = False not False = True Ορίσματα της και στις δύο περιπτώσεις είναι μία σταθερή λογική τιμή (True και False). Σταθερές (ακέραιοι, συμβολοσειρές, χαρακτήρες κλπ) χρησιμοποιούνται ως πρότυπα. 40

41 Παράδειγμα Ορίζουμε τη συνάρτηση hello με δύο εξισώσεις: hello Panos = Hi hello name = Hello, ++ name ++ nice to meet you! Στην πρώτη εξίσωση, όρισμα είναι σταθερά τύπου String και στη δεύτερη μεταβλητή. 41

42 Παράδειγμα H προηγούμενη συνάρτηση καλείται?hello Panos Hi?hello John Hello John, nice to meet you! 42

43 Παράδειγμα Η σειρά γραφής εξισώσεων στη Haskell είναι πολύ σημαντική, διότι κατά την κλήση της συνάρτησης, το σύστημα χρησιμοποιεί τον πρώτο ορισμό, που εφαρμόζεται. 43

44 Παράδειγμα Αν αντιστραφεί η σειρά εντολών στο προηγούμενο πρόγραμμα και κληθεί ξανά η συνάρτηση, τότε?hello Panos Hello Panos, nice to meet you! 44

45 Εξισώσεις Περιπτώσεων Έχουν γενική μορφή: f x 1 x n condition 1 = e 1 condition m = e m H Haskell υπολογίζει τις τιμές των συνθηκών τη μία μετά την άλλη μέχρι να βρει την πρώτη αληθή, οπότε επιστρέφει την τιμή της αντίστοιχης έκφρασης. 45

46 Παράδειγμα 8.2 Η συνάρτηση oddity :: Int -> String εξετάζει αν το όρισμα της είναι άρτιος ή περιττός και επιστρέφει even και odd αντίστοιχα. oddity n even n = even otherwise = odd Η συνθήκη otherwise είναι ισοδύναμη με τη λογική σταθερά True. Με τη χρήση της σε συνθήκη η αντίστοιχη έκφραση χρησιμοποιείται οπωσδήποτε αν καμία προηγούμενη συνθήκη δεν έχει ικανοποιηθεί. 46

47 Αναδρομή Βασική τεχνική στις συναρτησιακές γλώσσες. Χρήση για ορισμό συναρτήσεων, που επεξεργάζονται διάφορους τύπους δεδομένων 47

48 Πρόβλημα Υπολογισμός παραγοντικού του αριθμού n Χωρισμός προβλήματος σε δύο τμήματα: Το n είναι μηδέν, οπότε το n! είναι 1 Διαφορετικά n!= 1*2*3* *(n-1)*n = (n-1)! * n Υπολογισμός του n! αφού πρώτα υπολογισθεί το (n-1)! και μετά πολλαπλασιασθεί με το n. 48

49 Γραφή σε Haskell fact n= if (n==0) then 1 else n*fact (n-1) Το παραπάνω πρόγραμμα μοιάζει να είναι κυκλικό, αλλά δεν είναι. Καθώς στο δεξιό μέλος της εξίσωσης η τιμή του n μειώνεται κατά 1, κάποια στιγμή θα γίνει ίση με μηδέν, οπότε δεν χρειάζεται να ξανακληθεί η συνάρτηση fact. 49

50 Υπολογισμός του fact 3 fact 3 = 3* fact 2 = 3* 2 * fact 1 = 3* 2 * 1 * fact 0 = 3* 2 * 1 * 1 = 6 50

51 Χρήση Εξισώσεων Περιπτώσεων Το ίδιο πρόγραμμα γράφεται με χρήση εξισώσεων περιπτώσεων: fact n (n==0) = 1 otherwise = n * fact (n-1) Η ίδια συνάρτηση με χρήση προτύπων γράφεται: fact 0 = 1 fact n = n * fact (n-1) 51

52 (n+k) πρότυπα της Haskell To ίδιο πρόγραμμα γράφεται: fact 0 = 1 fact (n+1) = (n+1)*fact n Tο n+1 συμβουλεύει τη Haskell ότι πρέπει να περιμένει ένα όρισμα μεγαλύτερο ή ίσο του ένα. 52

53 (n+k) Πρότυπα της Haskell Ο τελευταίος ορισμός διαφέρει από τους προηγούμενους στο ότι αν ο χρήστης ζητήσει την τιμή του fact (-1) θα λάβει διαγνωστικό μήνυμα λάθους, ενώ όλοι οι άλλοι οδηγούν σε μη-τερματισμό. 53

54 Αναδρομικά Προγράμματα με Λίστες Τεχνικές για τον ορισμό αναδρομικών προγραμμάτων με ακέραιους, χρησιμοποιούνται και σε ορισμό αναδρομικών συναρτήσεων σε λίστες 54

55 Συνάρτηση length Η συνάρτηση υπολογίζει το μήκος μιας λίστας. Δύο περιπτώσεις Αν η λίστα είναι κενή, τότε η συνάρτηση πρέπει να επιστρέφει την τιμή 0 Αν η λίστα δεν είναι κενή, τότε μπορεί να γραφεί στη μορφή x:xs, όπου x η κεφαλή της λίστας και xs η ουρά της. Τότε η αρχική λίστα είναι κατά ένα στοιχείο μεγαλύτερη από την xs και επομένως έχει μήκος 1+length(xs) 55

56 Πρόγραμμα length [] = 0 length (x:xs) = 1 + length xs 56

57 Υπολογισμός μήκους λίστας length [2,5,7] = 1 + length [5,7] = 1 + (1+length [7]) = 1 + (1+ (1+length [])) = 1 + (1+(1+0)) = 3 57

58 Πρότυπο [] Στα αναδρομικά προγράμματα με λίστες χρησιμοποιείται το πρότυπο [], που αφορά την κενή λίστα και το x:xs, που αφορά τις μη-κενές λίστες. Με το πρότυπο αυτό ορίζονται δύο βασικές συναρτήσεις, που επιστρέφουν την κεφαλή και την ουρά μιας λίστας αντίστοιχα: head (x:xs) = x tail (x:xs) = xs 58

59 Παράδειγμα 8.3 Η συνάρτηση sum, που αθροίζει όλα τα στοιχεία λίστας, ορίζεται ως: sum [ ] = 0 sum (x:xs) = x + sum xs Ανάλογα ορίζεται η συνάρτηση product, που επιστρέφει το γινόμενο των στοιχείων λίστας. 59

60 Παράδειγμα 8.4 Η συνάρτηση append, που ενώνει δύο λίστες ορίζεται ως: append [ ] ys = ys append (x:xs) ys = x : (append xs ys) Πχ append [1,4,1] [1,5] = [1,4,1,1,5]. 60

61 Παράδειγμα 8.5 Με χρήση της append ορίζεται η συνάρτηση reverse, που αντιστρέφει μία λίστα: reverse [ ] = [ ] reverse (x:xs) = append (reverse xs) [x] Με χρήση της reverse ορίζεται η συνάρτηση last, που επιστρέφει το τελευταίο στοιχείο μίας λίστας: last xs = head (reverse xs) Παράδειγμα: reverse [1,2,3,4] = [4,3,2,1] last [1,3,5,7] = 7 61

62 Παράδειγμα 8.6 H συνάρτηση take επιστρέφει μία λίστα με τα n πρώτα στοιχεία δεδομένης λίστας (υπόθεση: η δεδομένη λίστα θα έχει πάντα τουλάχιστον n στοιχεία): take 0 xs = [ ] take (n+1) (x:xs) = x:(take n xs) 62

63 Παράδειγμα 8.6 Η συνάρτηση drop «πετάει» τα πρώτα n στοιχεία δεδομένης λίστας και επιστρέφει λίστα με τα υπόλοιπα στοιχεία (υπόθεση: η δεδομένη λίστα θα έχει πάντα τουλάχιστον n στοιχεία): drop 0 xs = xs drop (n+1) (x:xs) = drop n xs Παράδειγμα: take 3 [1,3,4,7,8] = [1,3,4] drop 3 [1,3,4,7,8] = [7,8] 63

64 Παράδειγμα 8.7 Η συνάρτηση select διαλέγει το n-οστό στοιχείο δεδομένης λίστας: select 1 (x:xs) = x select (n+1) (x:xs) = select n xs Παράδειγμα: select 3 [1,6,2,6,7] = 2 64

65 Παράδειγμα 8.8 Η συνάρτηση member λαμβάνει ως ορίσματα ένα στοιχείο και μία λίστα και επιστρέφει True ή False ανάλογα με το αν το στοιχείο ανήκει στη λίστα ή όχι. member x [ ] = False member x (y:xs)= if (x==y) then True else (member x xs) 65

66 Παράδειγμα 8.8 Η συνάρτηση delete διαγράφει όλες τις εμφανίσεις ενός στοιχείου από μία λίστα: delete x [ ] = [ ] delete x (y:xs) = if (x==y) then (delete x xs) else (y:delete x xs) Παράδειγμα: delete 3 [1,3,5,3,7] = [1,5,7] 66

67 Παράδειγμα 8.9 Συναρτήσεις, που συγκρίνουν δύο λίστες και ελέγχουν αν ισχύουν δεδομένες σχέσεις μεταξύ τους. 67

68 Παράδειγμα 8.9 Η συνάρτηση prefix ελέγχει αν μία λίστα είναι πρόθεμα (prefix) άλλης: prefix [] ys = True prefix (x:xs) (y:ys) = if (x==y) then (prefix xs ys) else False Στην περίπτωση για επίθεμα (suffix) suffix xs ys = prefix (reverse xs) (reverse ys) 68

69 Παράδειγμα 8.10 Η συνάρτηση less λαμβάνει δύο ορίσματα, έναν αριθμό και μία λίστα από αριθμούς, και επιστρέφει τους αριθμούς της λίστας, που είναι μικρότεροι από το δεδομένο αριθμό:?less 3 [1,2,1,3,4,5] [1,2,1] 69

70 Παράδειγμα 8.10 Ο ορισμός της less είναι: less x [ ] = [ ] less x (y:ys) = if (y<x) then (y:less x ys) else (less x ys) 70

71 Παράδειγμα 8.10 Η συνάρτηση greateq λαμβάνει δύο ορίσματα, έναν αριθμό και μία λίστα από αριθμούς και επιστρέφει τους αριθμούς της λίστας, που είναι μεγαλύτεροι ή ίσοι από το δεδομένο αριθμό.?greateq 3 [1,2,1,3,3,4,5,3] [3,3,4,5,3] 71

72 Παράδειγμα 8.11 Δημιουργία συνάρτησης, που ταξινομεί λίστες αριθμών Βασική ιδέα: Παίρνουμε την κεφαλή x της λίστας και βρίσκουμε όλα τα στοιχεία της υπόλοιπης λίστας, που είναι μικρότερα από την κεφαλή και μετά όλα όσα είναι μεγαλύτερα ή ίσα. Τις δύο αυτές υπολίστες τις ταξινομούμε αναδρομικά και μετά τις ενώνουμε τοποθετώντας το x στη μέση. 72

73 Παράδειγμα 8.11 Αυτό γράφεται ως: sort [] = [] sort (x:xs) = (sort (less x xs))++ [x]++ (sort (greateq x xs)) 73

74 Παραδείγματα product [] = 1 product (x:xs) = x*(product xs) maxim ::[int] int maxim [x] = x maxim (x:xs) = max(x, maxim xs) selectenth (1, (x:xs)) = x selectenth (n+1, (x:xs)) = selectenth (n,xs) 74

75 Παραδείγματα head (x:xs) = x tail (x:xs) = xs last (xs) = head (reverse(xs)) last [x] = x last (x:xs) = last (xs) 75

76 Παραδείγματα adjacent (x,y, []) = False adjacent (x,y, [z]) = False adjacent (x,y,(a: b:zs))) = if(x==a)&&(y==b) then true else adjacent (x,y, (b:zs)) anyorder(x,y,zs)= adjacent(x,y,zs) adjacent(y,x,zs) 76

77 Μέθοδος κλήσης συναρτήσεων στη Haskell Σε πολλές γλώσσες προγραμματισμού, οι τιμές των πραγματικών παραμέτρων μιας συνάρτησης υπολογίζονται πριν περάσουν στη συνάρτηση (περνάνε με τιμή call by value) 77

78 Κλήση με τιμή Πλεονέκτημα: Υλοποίηση με ιδιαίτερα εύκολο τρόπο Μειονέκτημα: Συχνά, πραγματοποίηση υπολογισμών που δεν χρειάζονται (πχ. για όρισμα που δεν χρησιμοποιείται στο σώμα της συνάρτησης) 78

79 Κλήση με ζήτηση Όλες οι παράμετροι περνάνε στο σώμα της συνάρτησης χωρίς να έχει υπολογισθεί αρχικά η τιμή τους. Υπολογίζεται μόνο αν κάτι τέτοιο χρειάζεται πραγματικά. Η Haskell χρησιμοποιεί την κλήση με ζήτηση. 79

80 Παράδειγμα 8.12 Έστω η συνάρτηση: ignore x = I don t need to evaluate my argument Αν κληθεί η συνάρτηση:?ignore(1/0) I don t need to evaluate my argument H Haskell θα έπρεπε να δώσει διαγνωστικό λάθος λόγω διαίρεσης με το μηδέν. Δεν δίνει όμως, γιατί υπολογίζει την τιμή του ορίσματος συνάρτησης μόνο όταν το όρισμα χρειάζεται πραγματικά για τον υπολογισμό της τιμής της συνάρτησης. 80

81 Παράδειγμα 8.13 Έστω η συνάρτηση: f x y = if (x<=1) then x+1 else y Η συνάρτηση καλείται ως: f 1 (fact 30) Αν το πέρασμα παραμέτρων γίνεται με τιμή, τότε πριν την έναρξη υπολογισμού της τιμής της συνάρτησης, υπολογίζονται οι τιμές των πραγματικών παραμέτρων. 81

82 Παράδειγμα 8.13 Στην κλήση με τιμή αρχικά υπολογίζεται η τιμή του fact 30 (δεν θα χρειαστεί στο σώμα της συνάρτησης, αφού το x έχει τιμή 1) Αν η κλήση γίνει με ζήτηση, η τιμή του fact 30 δεν υπολογίζεται, γιατί δεν απαιτείται για τον υπολογισμό του αποτελέσματος. 82

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

84 sum Παίρνει σαν παράμετρο μία λίστα από αριθμούς και επιστρέφει έναν αριθμό, που είναι το άθροισμα όλων των στοιχείων της λίστας Εφαρμόζεται μόνο σε λίστες με αριθμητικά δεδομένα 84

85 length Υπολογίζει το μήκος μιας λίστας ανεξάρτητα από το είδος των στοιχείων της λίστας Καλείται με παράμετρο μία λίστα ακεραίων ή με μία λίστα χαρακτήρων κοκ. 85

86 Παράδειγμα? lengthl ([1,1,3,4,7,17]) 6?lengthl( Hello ) 5 O τύπος της length είναι [a] ->Int, όπου με a παριστάνεται οποιοσδήποτε τύπος. Το a λέγεται μεταβλητή τύπου. 86

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

88 Παράδειγμα 8.14 Πρόγραμμα υπολογισμού λίστας φυσικών αριθμών nats n = n : (nats (n+1)) Εάν ζητηθεί η τιμή του nats 0, η Haskell τυπώνει τη λίστα των φυσικών αριθμών. Όταν στοιχείο της λίστας τυπωθεί, ο χώρος μνήμης, που καταλάμβανε, μπορεί να επαναχρησιμοποιηθεί. 88

89 Παράδειγμα 8.15 Ορισμός έκφρασης υπολογισμού αθροίσματος των 10 πρώτων φυσικών αριθμών:?sum (take 10 (nats 0)) Ο υπολογισμός της έκφρασης αυτής είναι δυνατός, γιατί η take δεν επιχειρεί τον υπολογισμό της τιμής του nats 0 πριν την έναρξη της επεξεργασίας. 89

90 Συναρτήσεις υψηλής τάξης Τα ορίσματα των συναρτήσεων ήταν, μέχρι τώρα, απλοί τύποι δεδομένων (πχ. ακέραιοι, λίστες κλπ). Βασικό χαρακτηριστικό του συναρτησιακού προγραμματισμού είναι το «πέρασμα» συναρτήσεων ως ορίσματα σε άλλες συναρτήσεις. 90

91 Παράδειγμα 8.16 Η συνάρτηση map παίρνει ως πρώτο της όρισμα μία συνάρτηση f την οποία εφαρμόζει σε κάθε στοιχείο του δεύτερου της ορίσματος (που είναι μία λίστα) map f [ ] = [ ] map f (x:xs) = (f x) : (map f xs) 91

92 Παράδειγμα 8.16 Αν ορισθεί στο πρόγραμμα η συνάρτηση sq a = a*a, τότε η map καλείται ως:?map sq [1,3,5] [1,9,25] H map εφάρμοσε την sq σε κάθε στοιχείο της λίστας [1,3,5] 92

93 Πλεονέκτημα Συναρτήσεων Υψηλής τάξης Κλήση συναρτήσεων υψηλής τάξης με διαφορετικές συναρτήσεις σαν ορίσματα. Πλεονέκτημα: Αποφυγή παρόμοιου κώδικα για παρόμοιες λειτουργίες 93

94 Παράδειγμα 8.17 Ορισμός συνάρτησης root f a b για τον υπολογισμό των ριζών πραγματικών συναρτήσεων στο διάστημα [a,b] 94

95 Παράδειγμα 8.18 Η ακόλουθη συνάρτηση ορίζει ένα «συναρτησιακό παραγοντικό»: ffact f n = if (n<1) then 1 else (f n)*(ffact f (n-1)) Έστω η συνάρτηση sq a = a * a. Η κλήση της ffact ως ffact sq 5 θα υπολογίσει το γινόμενο (sq 5)*(sq 4)* *(sq 1). Αν η ffact κληθεί ως ffact cb 3, με cb b = b*b*b, θα υπολογίσει την τιμή: (cb 3)*(cb 2)*(cb 1). 95

96 Παράδειγμα 8.19 Η τιμή της έκφρασης?map sq (nats 0) Είναι μία λίστα με τα τετράγωνα των φυσικών αριθμών 96

97 Τύποι οριζόμενοι από το χρήστη Η Haskell επιτρέπει στο χρήστη να ορίσει νέους, πιο ισχυρούς τύπους 97

98 Παράδειγμα 8.20 Η Haskell δεν υποστηρίζει τον τύπο δεδομένων δυαδικό δέντρο, το οποίο είναι: Κενό δέντρο, ή Κόμβος με δύο δυαδικά δέντρα σαν παιδιά 98

99 Παράδειγμα 8.20 Ορισμός του νέου τύπου δεδομένων στη Haskell: data Tree a = Empty Node a (Tree a) (Tree a) Ο ορισμός αφορά δέντρα, που περιέχουν στοιχεία με τύπο a. 99

100 Παράδειγμα 8.20 Προγράμματα, που επεξεργάζονται τον νέο τύπο δεδομένων: elements Empty = [ ] elements (Node v l r) = (elements l)++[v]++(elements r) Η παραπάνω συνάρτηση συγκεντρώνει όλα τα στοιχεία ενός δέντρου σε λίστα. 100

101 Παράδειγμα 8.20 Η ερώτηση:?elements (Node 5 (Node 7 Empty Empty) (Node 8 Empty Empty)) Θα επιστρέψει την απάντηση: [7,5,8] Ο τύπος της συνάρτησης elements είναι Tree a->[a] 101

102 Ορισμός data Datatype a1 an= constr1 Όπου constrm Datatype το όνομα του νέου τύπου δεδομένων στην Haskell a1 an διαφορετικές μεταβλητές τύπου, που αντιπροσωπεύουν ορίσματα του τύπου αυτού και constr1,,constrm δείχνουν πως κατασκευάστηκε ο νέος τύπος. Καθένα έχει μορφή Name b1 br (b1,,br μεταβλητές από τις a1 an) 102

103 Παράδειγμα 8.21 Τύπος δεδομένων Day, που περιγράφει τις ημέρες της εβδομάδας data Day = Sum Mon Tue Wed Thu Fri Sat Τώρα μπορούν να γραφούν συναρτήσεις, που τον χρησιμοποιούν: schedule Sun = relax schedule Sat = go shopping schedule x = back to work 103

104 Άλλα Χαρακτηριστικά της Haskell λ-αφαιρέσεις (ή λ-abstractions) Η συνάρτηση inc x = x+1 μπορεί να γραφεί και ως: inc = \x ->x+1 Η συνάρτηση add x y = x+y γράφεται και: add = \x ->\y ->x+y Το πλεονέκτημα αυτού του τρόπου γραφής είναι ότι μπορούμε να έχουμε «ανώνυμες» συναρτήσεις 104

105 Παράδειγμα ή result = (\x->x+1) 5 result = root (\x->x*x-2) 5 105

106 Άλλα Χαρακτηριστικά της Haskell Λίστες με Συνθήκες (List Comprehensions) Λίστες, που χρησιμοποιούν το βασικό συμβολισμό για τον ορισμό συνόλων [n*n n [1..100]] Είναι η λίστα, που περιέχει όλα τα τετράγωνα των αριθμών από το 1 μέχρι το

107 Λίστες με συνθήκες Γενική μορφή: [body qualifiers] Boolean expressions var exp Αν είναι περισσότερα από ένα χωρίζονται με κόμμα. 107

108 Παράδειγμα [(x,y) x xs, y ys] Το καρτεσιανό γινόμενο δύο λιστών xs, ys Παράδειγμα:[(x,y) x [1..4], y [2,4..10]] 108

109 quicksort [ ] = [ ] quicksort (x:xs) = quicksort [y y xs, y<x] ++[x] ++quicksort [y y xs, y>=x] perms [ ] = [ [ ] ] perms xs = [a:ys a xs, ys perms(delete a xs)] Παράδειγμα perms [1,2,3] = [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 109

110 Παραδείγματα factors n =[i i [1..n], n mod i==0] pythagorian n =[(a,b,c) a [1..n], b [1..n], c [1..n], a+b+c <= n, a^2+b^2==c^2] 110

111 Ακολουθία Fibonacci με άπειρες τιμές fib = 1 : 1 : [a+b (a,b) zip fib (tail fib)] zip (x:xs) (y:ys) = (x,y): zip xs ys Πως δουλεύει το παραπάνω πρόγραμμα fib = 1:1:[a+b (a,b) zip (1:1 ) (1: )] = 1:1:[a+b (a,b) (1,1) : zip (1: ) ( )] = 1:1:2:[a+b (a,b) zip (1:2 ) (2: )] = 1:1:2:3:[a+b (a,b) zip (2:3 ) (3: )] Η ακολουθία Fib παράγεται με μία διαδικασία, που ονομάζεται «chasing the tail». 111

112 Συναρτήσεις Οι συναρτήσεις δημιουργούν μία ιεραρχία ανάλογα με τον τύπο τους Συναρτήσεις μηδενικής τάξης: (σταθερές) α = 5 (ισοδύναμο με α() = 5) Συναρτήσεις πρώτης τάξης: έχουν ως ορίσματα συνηθισμένους τύπους δεδομένων (πχ ακέραιους, float, λίστες) sq(a) = a*a, suml(xs), reverse(xs) 112

113 Συναρτήσεις -2 Συναρτήσεις δεύτερης τάξης: έχουν μία τουλάχιστον παράμετρο, που να είναι συνάρτηση πρώτης τάξης και όλες τις υπόλοιπες παραμέτρους της πρώτης τάξης Η συνάρτηση root(f,a,b) twice(f,y)=f(f y) result = twice(sq, 2) Είναι δεύτερης τάξης διότι το πρώτο όρισμα της είναι μία συνάρτηση πρώτης τάξης, ενώ το δεύτερο είναι μηδενικής τάξης. 113

114 Συναρτήσεις -3 Συναρτήσεις τρίτης τάξης: έχουν μία τουλάχιστον παράμετρο, που να είναι συνάρτηση δεύτερης τάξης και όλες οι υπόλοιπες της δεύτερης τάξης integrate(simpson,f,a,b) simpson (f,a,b) Η integrate παίρνει σαν πρώτη παράμετρο μία μέθοδο ολοκλήρωσης. a f b 114

115 Συναρτήσεις - 4 Γενικά μπορούν να ορισθούν συναρτήσεις οποιασδήποτε τάξης, ακόμη και συναρτήσεις άπειρης τάξης: self(g) = g(g) (όχι στη Haskell) 115

116 Ένα μεγαλύτερο παράδειγμα Treesort Παίρνει σαν input μία μη διατεταγμένη λίστα, τη μετατρέπει σε δυαδικό δέντρο και μετά μετατρέπει το δέντρο σε λίστα treesort xs = flatten (maketree xs) maketree [] = Empty maketree (x:xs) = insert x (maketree xs) insert x Empty = Node x Empty Empty insert x (node a l r) = if (x< =a) then (Node a (insert x l) r) else (Node a l (insert x r ) 116

117 Συναρτήσεις Η flatten είναι σαν τη elements, που ορίσαμε πιο πριν flatten Empty = [] flatten (Node v l r) = (flatten l)++[v]++(flatten r) 117

118 Εξαγωγή τύπων Αν μία γλώσσα υποστηρίζει αυτόματη εξαγωγή και έλεγχο τύπων, τότε ο προγραμματιστής διευκολύνεται και πολλά από τα λάθη εντοπίζονται «at compile-time» Ένας τύπος, που περιέχει μία τουλάχιστον μεταβλητή τύπου ονομάζεται πολυμορφικός Ένας τύπος, που δεν περιέχει μεταβλητές τύπου ονομάζεται μονομορφικός 118

119 Εξαγωγή τύπων Όταν προσπαθούμε να εξάγουμε τύπους μιας συνάρτησης ενός προγράμματος ψάχνουμε στην ουσία να βρούμε τον πιο γενικό τύπο της συνάρτησης (με την έννοια ότι κάθε μονομορφικός τύπος, που μπορεί να πάρει η συνάρτηση αυτή είναι ειδική περίπτωση του πιο γενικού αυτού τύπου) 119

120 Παράδειγμα Δίνεται η συνάρτηση: map(f,m) = if null(m) then [] else f(head(m)): map(f, tail(m)) σ null = [τ 1 ] Bool σ[] = [τ 2 ] σ head = [τ 3 ] τ 3 σ tail = [τ 4 ] [t 4 ] σ : = (τ 5, [t 5 ]) [t 5 ] Τύποι για τις βασικές συναρτήσεις για list-processing Μπορούμε τώρα να γράψουμε εξισώσεις, που εξασφαλίζουν συνέπεια τύπων στον ορισμό της παραπάνω συνάρτησης 120

121 Συνέχεια Γνωρίζουμε τώρα ότι οι δύο κλάδοι ενός if πρέπει να έχουν τον ίδιο τύπο σ[] = [τ 2 ] = [t 5 ] t 2 = t 5 Η null και η head έχουν την ίδια παράμετρο. Το ίδιο και η tail. [t 1 ] = [t 3 ] t 1 = t 3 και [t 4 ] = [t 3 ] t 1 = t 3 = t 4 Και συνεπώς σ[] = [t 1 ] 121

122 Συνέχεια Η παράμετρος της f έχει τον ίδιο τύπο με αυτόν, που επιστρέφει η head. Το αποτέλεσμα της f έχει τον ίδιο τύπο με το πρώτο όρισμα της «:». Επομένως: σ f = τ 3 τ 4 (από τα παραπάνω) σ f = t 1 t 2 Τέλος, ο τύπος της map είναι: σ map = ((t 1 t 2, [t 1 ]) [t 2 ] 122

123 Αλγόριθμος Hindley-Milner Η εξαγωγή τύπων για γλώσσες, που υποστηρίζουν τον λεγόμενο παραμετρικό πολυμορφισμό γίνεται με τον αλγόριθμο των Hindley-Milner (ο οποίος στην ουσία λύνει ένα σύνολο από εξισώσεις της παραπάνω μορφής και επιστρέφει τον πιο γενικό τύπο για κάθε συνάρτηση του προγράμματος). 123

124 Κλάσεις τύπων και υπερφόρτωση (Type classes and overloading) Ο πολυμορφισμός για τον οποίο έχουμε ήδη μιλήσει ονομάζεται συνήθως παραμετρικός πολυμορφισμός (parametric polymorphism). Υπάρχει και ένα άλλο είδος πολυμορφισμού, που ονομάζεται πολυμορφισμός κατά περίπτωση (ad hoc polymorphism) ή υπερφόρτωση (overloading) 124

125 Παράδειγμα Οι αριθμοί 1,2 κλπ χρησιμοποιούνται, για να αναπαραστήσουν κανονικούς ακέραιους (Int), αλλά και ακεραίους οποιασδήποτε ακρίβειας (integer). Αριθμητικοί τελεστές, όπως το + δουλεύουν σε διαφορετικά είδη αριθμών Ο τελεστής ισότητας «==» δουλεύει για αριθμούς, αλλά και για άλλους τύπους της Haskell (όχι όμως για όλους τους τύπους) 125

126 Είναι σημαντικό να τονίσουμε ότι στην περίπτωση της υπερφόρτωσης ένας τελεστής μπορεί να εφαρμόζεται σε διαφορετικούς τύπους δεδομένων και η συμπεριφορά του να είναι διαφορετική για κάθε τύπο. Αυτό έρχεται σε αντίθεση με την έννοια του παραμετρικού πολυμορφισμού στον οποίο ο τύπος των στοιχείων δεν παίζει ρόλο (πχ length) 126

127 Τελεστής ισότητας Η συμπεριφορά του τελεστή αυτού δεν μπορεί να υλοποιηθεί αποτελεσματικά για όλους τους τύπους (πχ η ισότητα δύο συναρτήσεων) δεν μπορεί να εξακριβωθεί στη γενική περίπτωση). Το ακόλουθο παράδειγμα δείχνει την αναγκαιότητα της υπερφόρτωσης 127

128 Παράδειγμα Έστω η συνάρτηση member x [] = False member x (y:ys) = if (x==y) then True else (member x ys) Αν ο τύπος της member είναι a [a] Bool τότε αυτό θα σήμαινε ότι ο τελεστής ισότητας έχει τύπο a a Bool (που δεν ισχύει γιατί το «==» δεν είναι ορισμένο για όλους τους τύπους). 128

129 Ο τύπος της member δεν είναι ο παραπάνω, αλλά κάποιος, που αντανακλά το γεγονός ότι η ισότητα είναι ορισμένη μόνο για μερικούς τύπους. Είναι επιθυμητό, όταν κληθεί η member με πρώτη παράμετρο της οποίας ο τύπος δεν επιτρέπει έλεγχο ισότητας, ο compiler της Haskell να μας ενημερώνει ότι υπάρχει πρόβλημα. 129

130 Κλάσεις τύπων Τα παραπάνω θέματα αντιμετωπίζονται με τις κλάσεις τύπων (type classes). Επιτρέπουν τη δήλωση τύπων ως στιγμιότυπα (instances) μιας κλάσης και ορίζουν υπερφορτωμένες λειτουργίες, που σχετίζονται με την κλάση. 130

131 Παράδειγμα Ορισμός κλάσης τύπων με τελεστή ισότητας class Eq a where (==) :: a a Bool όπου Eq - όνομα της ορισμένης κλάσης και «==» - τελεστής, που υποστηρίζεται από την κλάση. Η παραπάνω δήλωση διαβάζεται ως: «Ένας τύπος a είναι στιγμιότυπο της Eq αν υπάρχει ένας (υπερφορτωμένος) τελεστής == ο οποίος να ορίζεται για τον τύπο αυτόν». 131

132 Όταν ένας τύπος a ανήκει στην κλάση Eq θα γράφουμε Eq a (το οποίο διαισθητικά σημαίνει ότι για τον τύπο αυτό είναι ορισμένος ένας τελεστής ισότητας). Επομένως ο τύπος της member είναι: member :: Eq a a [a] Bool Το παραπάνω διαβάζεται: «Για κάθε τύπο a, που ανήκει στην κλάση Eq η member έχει τύπο a [a] Bool». 132

133 Δηλώσεις στιγμιότυπων instance Eq Integer where x ==y = x integereq y Ο ορισμός του == ονομάζεται μέθοδος. Η συνάρτηση integereq είναι συνάρτηση της Haskell, για να συγκρίνει δύο ακεραίους για ισότητα. Ομοίως: instance (Eq a) Eq (Tree a ) where Leaf a == Leaf b = a ==b (Branch l1 r1) ==(Branch l2 r2) =(l1==l2)&&(r1==r2) - == - = False 133

134 Για σύγκριση δέντρων θα πρέπει τα στοιχεία, που βρίσκονται στους κόμβους του δέντρου να μπορούν να συγκριθούν μεταξύ τους (να ανήκουν στην κλάση Eq) Αυτό είναι και το νόημα της δήλωσης στην πρώτη γραμμή της παραπάνω μεθόδου Eq a Eq (Tree a) Οι χαρακτήρες - στην τελευταία γραμμή σημαίνουν «οτιδήποτε άλλο» (και οδηγούν στην τιμή False). 134

135 Παράδειγμα Οι κλάσεις μπορούν να επεκταθούν. Μπορεί να ορισθεί η κλάση ord η οποία κληρονομεί τους τελεστές της Eq (δηλαδή τον τελεστή == στο παράδειγμα μας) και η οποία κλάση χρησιμοποιεί κάποιους επιπλέον τελεστές: class (Eq a) (ord a) where (<), (<=), (>=), (>) :: a a Bool max, min :: a a Bool 135

136 Παράδειγμα Θα λέμε ότι η Eq είναι υπερκλάση της Ord (ή αντίστοιχα ότι η Ord είναι υπερκλάση της Eq ). Θα πρέπει να ορισθούν οι μέθοδοι της υποκλάσης, αλλά μπορούν να χρησιμοποιηθούν ελεύθερα οι μέθοδοι της υπερκλάσης Παράδειγμα: Κοίτα το standard prelude για τον ορισμό του > Παράδειγμα: Πες ότι η sort έχει τώρα τύπο: sort :: (Ord a) [a] [a] 136

137 Συναρτησιακά προγράμματα και επαγωγικές αποδείξεις Συχνά χρησιμοποιούμενη αποδεικτική διαδικασία για συναρτησιακά προγράμματα είναι η «δομική επαγωγή» Βασική ιδέα Αποδεικνύουμε κάτι για τις πολύ απλές περιπτώσεις ενός σύνθετου τύπου (παράδειγμα κενή list, empty tree,κλπ) Υποθέτουμε ότι το ζητούμενο ισχύει για αντικείμενα δεδομένης πολυπλοκότητας και αποδεικνύουμε ότι ισχύει και για μεγαλύτερη πολυπλοκότητα 137

138 Παράδειγμα append [] ys = ys append x:xs ys = x: (append xs ys) 138

139 Θεώρημα append (append xs ys) zs = append xs (append ys zs) Απόδειξη Η περίπτωση βάσης είναι για xs = [] append (append [] ys) zs = append ys zs append [] (append ys zs) = append ys zs Υποθέτουμε ότι: append (append xs ys) = append xs (append ys zs) Θα δείξουμε ότι: append (append (x:xs) ys) zs = append (x:(append xs ys)) zs = x:(append (append xs ys) zs) = x:(append xs(append ys zs)) = append (x:xs)(append ys zs) 139

140 Άσκηση Δίνεται ο ακόλουθος ορισμός της συνάρτησης add: add n 0 = n add n m+1 = 1 + add n m Να δειχθεί ότι η πρόσθεση όπως ορίζεται παραπάνω είναι προσεταιριστική και αντιμεταθετική 140

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

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

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

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

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

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

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

ΚΥΡΙΑ ΜΟΝΤΕΛΑ ΓΛΩΣΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΚΥΡΙΑ ΜΟΝΤΕΛΑ ΓΛΩΣΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 27 Κύρια προγραμματιστικά μοντέλα (1) Προστακτικός προγραμματισμός (imperative programming) FORTRAN, Algol, COBOL, BASIC, C, Pascal, Modula-2, Ada Συναρτησιακός προγραμματισμός

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στη Γλώσσα ML. Juan Miró

Εισαγωγή στη Γλώσσα ML. Juan Miró Εισαγωγή στη Γλώσσα ML Juan Miró Κωστής Σαγώνας Συναρτησιακός και Προστακτικός Προγραμματισμός Ένας τρόπος διαχωρισμού Ο προστακτικός προγραμματισμός επικεντρώνει στο πώς θα υλοποιήσουμε

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

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

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

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές Μεταβλητές 2 Δήλωση μεταβλητών Η δήλωση (declaration) πληροφορεί το μεταγλωττιστή για το όνομα και

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

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

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

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

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

Εισαγωγή στη Γλώσσα ML

Εισαγωγή στη Γλώσσα ML Συναρτησιακός και Προστακτικός Προγραμματισμός Εισαγωγή στη Γλώσσα ML Ένας τρόπος διαχωρισμού Ο προστακτικός προγραμματισμός επικεντρώνει στο πως θα υλοποιήσουμε τα συστατικά του προγράμματός μας Ο συναρτησιακός

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

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

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

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

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

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

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

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ Μάθημα 7 - Υποπρογράμματα Εργαστήριο 11 Ο TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ Βασικές Έννοιες: Υποπρόγραμμα, Ανάλυση προβλήματος, top down σχεδίαση, Συνάρτηση, Διαδικασία, Παράμετρος, Κλήση συνάρτησης, Μετάβαση

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Η ΓΛΩΣΣΑ PASCAL ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Απλοί ή στοιχειώδης Τ.Δ. Ακέραιος τύπος Πραγματικός τύπος Λογικός τύπος Χαρακτήρας Σύνθετοι Τ.Δ. Αλφαριθμητικός 1. Ακέραιος (integer) Εύρος: -32768 έως 32767 Δήλωση

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

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

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

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

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

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

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

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Κεφάλαιο 7: Υποπρογράμματα Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ορισμός Αφαίρεση με χρήση υποπρογραμμάτων (subprogram abstraction) είναι η αντιστοίχιση ενός συνόλου εισόδων σε ένα σύνολο εξόδων

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

Κεφάλαιο 1. Τι θα μάθουμε σήμερα: -AND, OR, NOT. -Ενσωματωμένες συναρτήσεις. -Μαθηματικοί τελεστές -ΤΕΛΕΣΤΕΣ DIV ΚΑΙ MOD. -Προτεραιότητα πράξεων

Κεφάλαιο 1. Τι θα μάθουμε σήμερα: -AND, OR, NOT. -Ενσωματωμένες συναρτήσεις. -Μαθηματικοί τελεστές -ΤΕΛΕΣΤΕΣ DIV ΚΑΙ MOD. -Προτεραιότητα πράξεων Κεφάλαιο 1 Αρχή ήμισυ παντός. Πλάτων, 427-347 π.χ., Φιλόσοφος Τι θα μάθουμε σήμερα: -AND, OR, NOT -Ενσωματωμένες συναρτήσεις -Μαθηματικοί τελεστές -ΤΕΛΕΣΤΕΣ DIV ΚΑΙ MOD -Προτεραιότητα πράξεων 1 Λογικές

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

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

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

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

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη. Εργαστήριο 4: 4.1 Η Δομή Ελέγχου if Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη. Γενική Μορφή: Παρατηρήσεις:

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

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

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

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

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

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

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

Κεφάλαιο 7: Υπορουτίνες

Κεφάλαιο 7: Υπορουτίνες Κεφάλαιο 7: Υπορουτίνες Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ορισμός Αφαίρεση με χρήση υπορουτινών (subroutine abstraction) είναι η αντιστοίχιση ενός συνόλου εισόδων σε ένα σύνολο εξόδων που μπορεί

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

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

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

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

Pascal Βασικοί τύποι δεδοµένων

Pascal Βασικοί τύποι δεδοµένων Pasal Βασικοί τύποι δεδοµένων «ΜΗ ΕΝ ΠΟΛΛΟΙΣ ΟΛΙΓΑ ΛΕΓΕ, ΑΛΛ ΕΝ ΟΛΙΓΟΙΣ ΠΟΛΛΑ» Σηµαίνει: "Μη λες πολλά χωρίς ουσία, αλλά λίγα που να αξίζουν πολλά" (Πυθαγόρας) Κουλλάς Χρίστος www.oullas.om oullas 2 Στόχοι

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 5 ΑΚΟΛΟΥΘΙΕΣ ΑΡΙΘΜΗΤΙΚΗ ΓΕΩΜΕΤΡΙΚΗ ΠΡΟΟΔΟΣ ΑΛΓΕΒΡΑ Β ΛΥΚΕΙΟΥ ΚΕΦΑΛΑΙΟ 5 ΑΚΟΛΟΥΘΙΕΣ ΑΡΙΘΜΗΤΙΚΗ ΓΕΩΜΕΤΡΙΚΗ ΠΡΟΟΔΟΣ ΓΙΑΝΝΗΣ ΠΑΤΕΡΑΣ ΜΑΘΗΜΑΤΙΚΟΣ ΑΛΓΕΒΡΑ Β ΛΥΚΕΙΟΥ ΑΚΟΛΟΥΘΙΕΣ ΚΕΦΑΛΑΙΟ 5 ΑΡΙΘΜΗΤΙΚΗ ΠΡΟΟΔΟΣ ΑΠΑΡΑΙΤΗΤΕΣ ΓΝΩΣΕΙΣ ΘΕΩΡΙΑΣ Ακολουθία ονομάζουμε

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

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

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

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

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

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

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

11. Ποιες είναι οι άμεσες συνέπειες της διαίρεσης;

11. Ποιες είναι οι άμεσες συνέπειες της διαίρεσης; 10. Τι ονομάζουμε Ευκλείδεια διαίρεση και τέλεια διαίρεση; Όταν δοθούν δύο φυσικοί αριθμοί Δ και δ, τότε υπάρχουν δύο άλλοι φυσικοί αριθμοί π και υ, έτσι ώστε να ισχύει: Δ = δ π + υ. Ο αριθμός Δ λέγεται

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

turnin Lab2.hs

turnin Lab2.hs ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΑΡΧΕΣ ΓΛΩΣΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΚΑΔ. ΕΤΟΣ: 2018-19 ΔΙΔΑΣΚΩΝ: Χ.ΝΟΜΙΚΟΣ 2η Σειρά Εργαστηριακών Ασκήσεων Οι εργαστηριακές ασκήσεις είναι

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

ΜΑΗΣ 2007 - ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

ΜΑΗΣ 2007 - ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ ΜΑΗΣ 2007 - ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ ΟΔΗΓΙΕΣ: ΝΑ ΑΠΑΝΤΗΣΕΤΕ ΣΕ ΟΛΕΣ ΤΙΣ ΕΡΩΤΗΣΕΙΣ. Το εξεταστικό δοκίμιο αποτελείται από δύο Ενότητες Α και Β. ΕΝΟΤΗΤΑ Α - Αποτελείται από δέκα (10) ερωτήσεις. Κάθε ορθή απάντηση

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

Τμήμα Τεχνολόγων Γεωπόνων - Φλώρινα

Τμήμα Τεχνολόγων Γεωπόνων - Φλώρινα Τμήμα Τεχνολόγων Γεωπόνων - Φλώρινα Μάθημα: Μαθηματικά Διάλεξη 1 η : Εισαγωγή-Επανάληψη βασικών εννοιών (1 ο, 2 ο, 3 ο Κεφάλαιο) 11-10-2017, 18-10-2017 Διδάσκουσα: Αριστούλα Κοντογιάννη ΩΡΕΣ ΔΙΔΑΣΚΑΛΙΑΣ

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

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 Μεταβλητές-Σταθερές-Παράμετροι Τα στοιχεία

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

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

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

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

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 Μάθημα: ΠΛΗΡΟΦΟΡΙΚΗ Ημερομηνία και ώρα εξέτασης: Τρίτη, 6 Ιουνίου 2006 07:30 10:30

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

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

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

Κεφάλαιο 11 Εκφραστικές δυνατότητες της Haskell

Κεφάλαιο 11 Εκφραστικές δυνατότητες της Haskell Κεφάλαιο 11 Εκφραστικές δυνατότητες της Haskell Σύνοψη Στο κεφάλαιο αυτό παρουσιάζονται οι περιφραστικές λίστες, μια δυνατότητα που παρέχει η Haskell και με την οποία μπορούμε πολύ εύκολα να ορίσουμε διάφορες

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Νέο Πρόγραμμα

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor ΕισαγωγήστουςΗ/Υ PHP Hypertext Preprocessor ΤιείναιηPHP; PHP είναιµία server-based scripting language σχεδιασµένη ειδικά για το web. Σε µία html σελίδα µπορούµε να ενσωµατώσουµε php κώδικα που εκτελείται

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1 Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές Δρ. Γιώργος Λαμπρινίδης amprinidis@pharm.uoa.gr 1 Αριθμητικοί Τελεστές + πρόσθεση - αφαίρεση * πολλαπλασιασμός / διαίρεση Προσοχή! Διαίρεση

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

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα

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

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

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

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

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

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

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

Εισαγωγή στην Γλώσσα Lisp

Εισαγωγή στην Γλώσσα Lisp Εισαγωγή Η γλώσσα προγραμματισμού Lisp ( από το List processing language) σχεδιάστηκε ως γλώσσα συμβολικού προγραμματισμού. Γενικά, τα σύμβολα μπορούν να χρησιμοποιηθούν για να αντιπροσωπεύσουν διαφορετικά

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων ΕΠΑΛ ΧΡΥΣΟΥΠΟΛΗΣ Γ Πληροφορική- 2015-2016 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων 1 Εισαγωγή Η εντολή Στο 4 ο κεφάλαιο γνωρίσαµε την δοµή πολλαπλής επιλογής στην οποία

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

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

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

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

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

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

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL )Βασικά στοιχεία Αναγνωριστικά (Identifiers) Τα αναγνωριστικά είναι ονόματα με τα οποία μπορούμε να αναφερόμαστε σε αποθηκευμένες

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

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

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

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

Συμπερασμός Τύπων και Πολυμορφισμός

Συμπερασμός Τύπων και Πολυμορφισμός Συμπερασμός Τύπων και Πολυμορφισμός Giorgio de Chirico, Etorre e Andromaca, 1915-1925 Κωστής Σαγώνας Νίκος Παπασπύρου Εισαγωγή: Σύγκριση μεταξύ γλωσσών C: int

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

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL ΓΕΝΙΚΗ ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ Program Ονομα_προγραμματος; «πρόγραμμα» Πρόγραμμα 1 Program Lesson1_Program1; Write('Hello World!!!'); {σχόλια} Επεξήγηση Προγράμματος Program Lesson1_Program1;

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

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

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

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

Συμπερασμός Τύπων και Πολυμορφισμός 4

Συμπερασμός Τύπων και Πολυμορφισμός 4 Συμπερασμός Τύπων και Πολυμορφισμός Εισαγωγή: Σύγκριση μεταξύ γλωσσών C: int f(char a, char b) { return a == b; ML: - fun f(a, b) = (a = b); val f = fn : ''a * ''a -> bool Giorgio de Chirico, Etorre e

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

Τι σημαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγμα επισημειώσεων τύπων στην ML. Επισημειώσεις τύπων (type annotations) f : A B σημαίνει:

Τι σημαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγμα επισημειώσεων τύπων στην ML. Επισημειώσεις τύπων (type annotations) f : A B σημαίνει: Τι σημαίνουν οι τύποι συναρτήσεων στην ML f : A B σημαίνει: Για κάθε x A, f(x) = για κάποιο στοιχείο y = f(x) B ατέρμονη εκτέλεση η εκτέλεση τερματίζει εγείροντας κάποια εξαίρεση Με λόγια: εάν η αποτίμηση

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

ΜΕΡΙΚΑ ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΙΣ ΓΛΩΣΣEΣ ΠPOΓPAMMATIΣMOY

ΜΕΡΙΚΑ ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΙΣ ΓΛΩΣΣEΣ ΠPOΓPAMMATIΣMOY ΜΕΡΙΚΑ ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΙΣ ΓΛΩΣΣEΣ ΠPOΓPAMMATIΣMOY Mία γλώσσα προγραμματισμού συνίσταται από ένα περιορισμένο υποσύνολο της αγγλικής γλώσσας και το οποίο αποτελείται από εκφράσεις σαφώς ορισμένες, χωρίς παρερμηνεία.

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

1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης

1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης 1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης Στη συγκεκριμένη ενότητα εξετάζουμε θέματα σχετικά με την αριθμητική πεπερασμένης ακρίβειας που χρησιμοποιούν οι σημερινοί υπολογιστές και τα

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

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 4: Τελεστές Τελεστές: Τελεστής Ανάθεσης 2 Το σύμβολο της ανάθεσης είναι το = Προσοχή: το σύμβολο ελέγχου ισότητας είναι το ==. Η μορφή των προτάσεων ανάθεσης είναι:

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

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

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

Εισαγωγή στην Αριθμητική Ανάλυση

Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στη MATLAB ΔΙΔΑΣΚΩΝ: ΓΕΩΡΓΙΟΣ ΑΚΡΙΒΗΣ ΒΟΗΘΟΙ: ΔΗΜΗΤΡΙΑΔΗΣ ΣΩΚΡΑΤΗΣ, ΣΚΟΡΔΑ ΕΛΕΝΗ E-MAIL: SDIMITRIADIS@CS.UOI.GR, ESKORDA@CS.UOI.GR Τι είναι Matlab Είναι ένα περιβάλλον

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

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

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

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

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

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

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

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος 2012-13 Κων/νος Φλώρος Απλοί τύποι δεδομένων Οι τύποι δεδομένων προσδιορίζουν τον τρόπο παράστασης των

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

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

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

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

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης Προγραμματισμός Υπολογιστών & Κ.Π. Γιαλούρης Στόχοι του σημερινού μαθήματος Εξοικείωση με τα περιβάλλοντα της Python Κατανόηση βασικών εννοιών & τεχνικών Τύπος δεδομένων Μεταβλητή Εντολή ανάθεση τιμής

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός

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

Μεταγλωττιστές Βελτιστοποίηση

Μεταγλωττιστές Βελτιστοποίηση Μεταγλωττιστές Βελτιστοποίηση Νίκος Παπασπύρου nickie@softlab.ntua.gr Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχ. Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Πολυτεχνειούπολη, 15780

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

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης Κ.Π. Γιαλούρης Στόχοι του σημερινού μαθήματος Εξοικείωση με τα περιβάλλοντα της Python Κατανόηση βασικών εννοιών & τεχνικών Τύπος δεδομένων Μεταβλητή Εντολή ανάθεση τιμής / εντολή αντικατάστασης Εισαγωγή

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

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017 FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017 Μ4. Συναρτήσεις, Υπορουτίνες, Ενότητες - Ασκήσεις Γεώργιος Παπαλάμπρου Επικ. Καθηγητής ΕΜΠ Εργαστήριο Ναυτικής Μηχανολογίας george.papalambrou@lme.ntua.gr

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

Δεδομένα, τελεστές, είσοδος/έξοδος

Δεδομένα, τελεστές, είσοδος/έξοδος 2 Δεδομένα, τελεστές, είσοδος/έξοδος Τι θα δούμε σε αυτό το μάθημα 1. βασικοί τύποι δεδομένων 2. ακέραιοι 3. κινητής υποδιαστολής 4. ο τύπος decimal 5. χαρακτήρες 6. bool 7. string 8. χρήση μεταβλητών

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

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

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

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

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

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

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

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

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Τελεστές - Κατηγορίες Εκφράσεις - Κατηγορίες Υπολογισμός εκφράσεων Προτάσεις - Κατηγορίες

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

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 4: Τελεστές Τελεστές: Τελεστής Ανάθεσης 2 Το σύμβολο της ανάθεσης είναι το = Προσοχή: το σύμβολο ελέγχου ισότητας είναι το ==. Η μορφή των προτάσεων ανάθεσης είναι:

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

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Συναρτήσεις εισόδου/εξόδου, τελεστές Η συνάρτηση scanf() είσοδος δεδομένων Διαβάζει από το πληκτρολόγιο (stdin) μορφοποιημένες τιμές μεταβλητών. scanf (ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, δείκτης_μεταβλητής-1,

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( ) Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική

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

Ανάλυση της Ορθότητας Προγραμμάτων (HR Κεφάλαιο 4)

Ανάλυση της Ορθότητας Προγραμμάτων (HR Κεφάλαιο 4) Ανάλυση της Ορθότητας Προγραμμάτων (HR Κεφάλαιο 4) Στην ενότητα αυτή θα μελετηθούν τα εξής θέματα: Η διαδικαστική γλώσσα προγραμματισμού WHILE Τριάδες Hoare Μερική και Ολική Ορθότητα Προγραμμάτων Κανόνες

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

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

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

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

Θεωρία Υπολογισμού Άρτιοι ΑΜ. Διδάσκων: Σταύρος Κολλιόπουλος. eclass.di.uoa.gr. Περιγραφή μαθήματος

Θεωρία Υπολογισμού Άρτιοι ΑΜ. Διδάσκων: Σταύρος Κολλιόπουλος. eclass.di.uoa.gr. Περιγραφή μαθήματος Περιγραφή μαθήματος Θεωρία Υπολογισμού Άρτιοι ΑΜ Σκοπός του μαθήματος είναι η εισαγωγή στη Θεωρία Υπολογισμού και στη Θεωρία Υπολογιστικής Πολυπλοκότητας (Θεωρία Αλγορίθμων). Διδάσκων: Σταύρος Κολλιόπουλος

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

Θεωρία Υπολογισμού Αρτιοι ΑΜ Διδάσκων: Σταύρος Κολλιόπουλος eclass.di.uoa.gr

Θεωρία Υπολογισμού Αρτιοι ΑΜ Διδάσκων: Σταύρος Κολλιόπουλος eclass.di.uoa.gr Θεωρία Υπολογισμού Άρτιοι ΑΜ Διδάσκων: Σταύρος Κολλιόπουλος eclass.di.uoa.gr Περιγραφή μαθήματος Σκοπός του μαθήματος είναι η εισαγωγή στη Θεωρία Υπολογισμού και στη Θεωρία Υπολογιστικής Πολυπλοκότητας

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

Η γλώσσα ML σε βάθος. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας

Η γλώσσα ML σε βάθος. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Γλώσσες Προγραμματισμού Ι Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας

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

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

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

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

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6) ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ ΠΑΡΑΣΚΕΥΗ 22 ΣΕΠΤΕΜΒΡΙΟΥ 2017 ΘΕΜΑ Α ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ:

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

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

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

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

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Δυνατότητα ανάπτυξης, μεταγλώττισης και εκτέλεσης προγραμμάτων στη PASCAL. Κατανόηση της σύνταξης των προτάσεων της PASCAL. Κατανόηση της εντολής εξόδου για

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

Σχεδίαση και Ανάλυση Αλγορίθμων

Σχεδίαση και Ανάλυση Αλγορίθμων Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 4.0 Επιλογή Αλγόριθμοι Επιλογής Select και Quick-Select Σταύρος Δ. Νικολόπουλος 2016-17 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros

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

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο) Προγραμματισμός Η/Υ Ενότητα 2β: Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών Σκοποί ενότητας Κατανόηση της έννοιας του Τελεστή

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

Σημειωματάριο μαθήματος 1ης Νοε. 2017

Σημειωματάριο μαθήματος 1ης Νοε. 2017 Σημειωματάριο μαθήματος 1ης Νοε. 2017 Παραδείγματα συναρτήσεων. Αναδρομικές συναρτήσεις. Ξεκινήσαμε πακετάροντας παλαιότερό μας κώδικα για τον υπολογισμό των διαιρετών ενός φυσικού αριθμού σε συνάρτηση.

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr 1 Πώς δημιουργούμε πρόγραμμα Η/Υ; 1. Ανάλυση του προβλήματος 2. Επινόηση & Σχεδιασμός

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

FORTRAN και Αντικειμενοστραφής Προγραμματισμός FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών

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

Εισαγωγή στη Fortran. Μάθημα 1 ο. Ελευθερία Λιούκα

Εισαγωγή στη Fortran. Μάθημα 1 ο. Ελευθερία Λιούκα Εισαγωγή στη Fortran Μάθημα 1 ο Ελευθερία Λιούκα liouka.eleftheria@gmail.com Περιεχόμενα Ιστορία της Fortran Βασικές γνώσεις Fortran Επιτρεπτοί χαρακτήρες Μορφή προγράμματος Τύποι μεταβλητών Πράξεις και

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

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

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

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