Συναρτησιακός προγραμματισμός : Η άλλη πλευρά του νομίσματος

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

Download "Συναρτησιακός προγραμματισμός : Η άλλη πλευρά του νομίσματος"

Transcript

1 Συναρτησιακός προγραμματισμός : Η άλλη πλευρά του νομίσματος Απόστολος Συρόπουλος 28ης Οκτωβρίου ΞΑΝΘΗ Οκτώβριος 1999 Δημοσιεύτηκε στο τεύχος Οκτωβρίου 1999 του περιοδικού RAM, σελ Εισαγωγή Πριν από μερικά χρόνια συζητούσα με κάποιο καθηγητή μου το ζήτημα της μελλοντικής μου επαγγελματικής αποκατάστασης. Ένα πρόβλημα που με απασχολούσε ιδιαίτερα ήταν αυτό της γνώσης κάποιων γλωσσών προγραμματισμού. Σκεφτόμουν ότι πολύ πιθανά κάποια εταιρεία να μου ζητούσε να γνωρίζω κάποια γλώσσα την οποία όμως εγώ δεν θα γνώριζα, ενώ θα γνώριζα κάποια παραπλήσια. Ο Bror, έτσι λένε τον καθηγητή μου, μου είπε απλά στην περίπτωση που συμβεί αυτό να πω ότι γνωρίζω την γλώσσα και το ίδιο βράδυ να βρω ένα βιβλίο εκμάθησης της γλώσσας και να την μάθω! Μου φάνηκε υπερβολικό, αλλά όμως μετά από λίγο συνειδητοποίησα το πόσο δίκαιο είχε. Σκεφτήκατε ποτέ σε ποίο ουσιαστικό σημείο διαφέρει η C από την Pascal ή η Ada από τη Modula-2, την Java ή την C++? Ο πυρήνας όλων αυτών των γλωσσών προγραμματισμού είναι η εντολή ανάθεσης, δηλαδή η εντολή με την οποία αλλάζουμε ή δίνουμε τιμή (αξία) σε μία μεταβλητή. Σκεφτείτε το! Κάνοντας ένα βήμα παραπέρα: Έχει άραγε νόημα μια γλώσσα προγραμματισμού να μην διαθέτει την εντολή ανάθεσης? Η απάντηση στο προηγούμενο ερώτημα, προς έκπληξη πολλών φαντάζομαι αναγνωστών, είναι : ΝΑΙ! Καταρχήν οι γλώσσες προγραμματισμού χωρίζονται σε δύο μεγάλες κατηγορίες : τις προστακτικές (imperative) και τις δηλωτικές (declarative). Έχοντας κανείς να λύσει ένα πρόβλημα, χρησιμοποιώντας τις πρώτες περιγράφει ακριβώς τι πρέπει να κάνει ο Η/Υ ώστε να λυθεί υπολογιστικά το πρόβλημά του. Αν όμως κανείς χρησιμοποιεί μια δηλωτική γλώσσα, απλά περιγράφει πως πρέπει να λυθεί το πρόβλημα του. Ας δούμε ένα παράδειγμα. Έστω ότι θέλουμε να γράψουμε ένα πρόγραμμα το οποίο θα υπολογίζει το άθροισμα των πρώτων n φυσικών αριθμών. Στην περίπτωση μιας προστακτικής γλώσσας, όπως η C++, το πρόγραμμά μας θα έχει την παρακάτω μορφή: sum=0; cin >> n; for(i=0; i<=n; i++) sum += i; cout << sum << '\n'; Δηλαδή χρησιμοποιώντας έναν αθροιστή και μία εντολή επανάληψης (και όχι εντολή ανακύκλωσης όπως κακώς αναφέρεται σε πολλά κείμενα), βρίσκουμε το τελικό αποτέλεσμα. Στην περίπτωση μιας δηλωτικής γλώσσας θα πρέπει να ανακαλύψουμε τις ιδιότητες του αθροίσματος και με βάση αυτές να γράψουμε το πρόγραμμά μας. Δηλαδή ότι το άθροισμα των n αριθμών είναι ίσο με n συν το άθροισμα των n 1 1

2 αριθμών, ενώ το άθροισμα το των n 1 αριθμών με n 1 συν το άθροισμα των n 2 αριθμών, κ.ο.κ. Ιδού το αντίστοιχο πρόγραμμα σε μορφή ψευδό-κώδικα: sum n = if n==0 then 0 else n + sum(n-1) n = inputstream show sum n Παρατηρήστε ότι στις δηλωτικές γλώσσες «παίζουμε» με αναδρομικές δηλώσεις λειτουργιών (functions όπως αυτές της Pascal ή της C). Μια διαδικασία ή μια λειτουργία ονομάζεται αναδρομική όταν ορίζεται με βάση τον ίδιο της τον εαυτό, π.χ., το παραγοντικό ενός αριθμού n ορίζεται ως εξής: { 1, an n = 1 n! = n (n 1)! αλλιώς Είναι φανερό ότι το παραγοντικό του n ορίζεται με βάση την τιμή του παραγοντικού του n 1, του n 1 με βάση αυτό του n 2, κ.ο.κ. Επιπλέον, υπάρχει μια τερματική συνθήκη με την οποία καθορίζουμε που θα σταματήσει ο υπολογισμός. Έτσι αν θέλουμε να υπολογίσουμε το 3! θα το κάνουμε ως εξής: 3! = 3 (3 1)! = 3 2! = 3 2 (2 1)! = 3 2 1! = = 6. Προσέξτε την σημασία της τερματικής συνθήκης. Οι δηλωτικές γλώσσες χωρίζονται σε δύο κατηγορίες : στις λογικές (logic) και στις συναρτησιακές (functional). Οι λογικές γλώσσες προγραμματισμού έχουν τα μαθηματικά τους θεμέλια στην μαθηματική θεωρία αποδείξεων (proof theory) και ουσιαστικά αποτελούν εργαλεία απόδειξης θεωρημάτων. Με άλλα λόγια, κάθε πρόγραμμα είναι ένα θεώρημα το οποίο ζητάμε να αποδείξει η υλοποίηση της γλώσσας. Η πιο γνωστές λογικές γλώσσες προγραμματισμού είναι η Prolog και οι διάφορες παραλλαγές της, όπως η λ-prolog, κ.ά. Οι συναρτησιακές έχουν τα μαθηματικά τους θεμέλια στον λογισμό λ του Alonzo Church (βλέπε πλαίσιο για μια σύντομη περιγραφή του λογισμού λ). Σε μία συναρτησιακή γλώσσα προγραμματισμού κανείς ορίζει συναρτήσεις των οποίων η σύνθεση (βλέπε επόμενη ενότητα), συνήθως, αποτελεί τη λύση στο πρόβλημα μας. Οι πιο γνωστές συναρτησιακές γλώσσες προγραμματισμού είναι η Lisp1, η SML, η LML, η Miranda, η SISAL, η Haskell, κ.ά. Όλα σχεδόν τα κείμενα που πραγματεύονται γενικά τον συναρτησιακό προγραμματισμό, χρησιμοποιούν μια γλώσσα προγραμματισμού για να δείξουν τα ιδιαίτερα χαρακτηριστικά αυτής της προγραμματιστικής φιλοσοφίας. Εμείς εδώ διαλέξαμε την Haskell2, ως γλώσσα αναφοράς μιας και αποτελεί την καλύτερη κατά τεκμήριο συναρτησιακή γλώσσα προγραμματισμού. 1Να σημειώσουμε ότι η Lisp δεν είναι συναρτησιακή γλώσσα όπως οι υπόλοιπες, αλλά έχει τα ίδια μαθηματικά θεμέλια με τις υπόλοιπες γλώσσες. 2Tο όνομά της είναι το όνομα του μεγάλου λογικολόγου (logician) Haskell B. Curry. 2

3 (Αν δεν είστε εξοικειωμένος με την έννοια της συνάρτησης απλά διαβάστε την αρχή της δεύτερης ενότητας όπου γίνεται μια σύντομή περιγραφή της έννοιας.) Ο λογισμός λ συλλήφθηκε από τον Alonzo Church, ως μέρος μια γενικότερης θεωρίας των συναρτήσεων και της λογικής που προορίζονταν να γίνει θεμέλιο των μαθηματικών. Μολονότι, όπως αποδείχθηκε, το όλο σύστημα είχε αδυναμίες, το υποσύστημα που πραγματεύονταν μόνο τις συναρτήσεις έγινε ένα επιτυχημένο μοντέλο για τις «υπολογίσιμες συναρτήσεις», δηλαδή όλων εκείνων των συναρτήσεων τις οποίες μπορεί να υπολογίσει μια μηχανή Turing. Η αναπαράσταση μιας υπολογίσιμης συνάρτησης με έναν όρο του λογισμού λ, οδηγεί στον συναρτησιακό προγραμματισμό. Ο λογισμός λ έχει δύο βασικές πράξεις. Η πρώτη είναι η εφαρμογή. Έτσι η παράσταση F A υποδηλώνει ότι τα δεδομένα F θεωρούμενα ως αλγόριθμος εφαρμόζονται στο A θεωρούμενο ως είσοδος. Είναι ενδιαφέρον να τονίσουμε ότι μπορούμε να έχουμε ως είσοδο τον ίδιο τον αλγόριθμο, πράγμα που συμβαίνει σε γλώσσες όπως η Lisp. Η άλλη βασική πράξη είναι η αφαίρεση. Αν γενικά το M είναι μια (αλγεβρική) έκφραση που περιέχει (ή εξαρτάται από) το x, τότε η παράσταση λx. δηλώνει μια συνάρτηση από το x στο πεδίο τιμών της παράστασης [x]. Για να γίνουμε πιο συγκεκριμένοι: έστω ότι = 3x + 4, τότε η αφαίρεση λx.3x + 4 δηλώνει την συνάρτηση που αντιστοιχεί κάθε x στην τιμή 3x + 4. Αν έχουμε μια αφαίρεση λάμδα, μπορούμε να την εφαρμόσουμε σε κάποια είσοδο αντικαθιστώντας κάθε εμφάνιση της μεταβλητής με την είσοδο. Για παράδειγμα η εφαρμογή (λx.3x+1/x)6 έχει ως αποτέλεσμα την παράσταση 3 6+1/6. Αν και μιλήσαμε για αφαιρέσεις λάμδα με μια εξαρτώμενη μεταβλητή, δεν υπάρχει κανένα πρόβλημα για αφαιρέσεις με πολλές μεταβλητές, π.χ., λx.λy.λz.x + 3y + 2z, κ.λπ. (Σημειώστε ότι μόνο η τελευταία τελεία είναι υποχρεωτική.) Φυσικά υπάρχουν πάρα πολλά ακόμη να λεχθούν για τον λογισμό λ, όπως για παράδειγμα το γεγονός ότι σε κάθε μαθηματική λογική (κλασική, γραμμική, κ.λπ.) αντιστοιχεί ένας λογισμός λ με ιδιαίτερα χαρακτηριστικά, εντούτοις εμείς δε μπορούμε να επεκταθούμε περισσότερο. Ο αναγνώστης που ενδιαφέρεται να μάθει περισσότερα μπορεί να διαβάσει το κλασικό πλέον βιβλίο του H.P. Barendregt με τίτλο «e lambda calculus: its syntax and semantics», το οποίο εκδίδει ο οίκος North-Holland. 2 Συναρτήσεις και συναρτησιακός προγραμματισμός Στα μαθηματικά μια συνάρτηση είναι ένας μηχανισμός που παρέχει μια αντιστοιχία από αντικείμενα ενός συνόλου, το πεδίο ορισμού, σε αντικείμενα ενός άλλου συνόλου, το πεδίο τιμών. Ένα απλό παράδειγμα συνάρτησης είναι η συνάρτηση που αντιστοιχεί σε κάθε ακέραιο αριθμό μία από τις λέξεις συν, πλην ή μηδέν, ανάλογα του αν ο αριθμός είναι θετικός, αρνητικός ή μηδέν. Ονομάζουμε αυτή την συνάρτηση πρόσημο αντανακλώντας την αντιστοιχία που επιτελεί. Υπάρχουν τρεις τρόποι ορισμού μιας συνάρτησης: 1. μέσω ενός διαγράμματος που δείχνει σε ποιο στοιχείο του πεδίου τιμών αντιστοιχεί το οποιοδήποτε στοιχείο του πεδίου ορισμού, 2. μέσω μιας σειράς εξισώσεων όπου δίνουμε την τιμή της συνάρτησης για κάθε δυνατή τιμή, και 3. μέσω της περιγραφής της αντιστοιχίας που επιτελεί η συνάρτηση. Στο σχήμα 1 φαίνονται οι τρεις αυτές μέθοδοι ορισμού συνάρτησης για την περίπτωση της συνάρτησης πρόσημο. Ειδικά στην τρίτη περίπτωση το x ονομάζεται παράμετρος και αναπαριστά οποιοδήποτε στοιχείο του πεδίου ορισμού. Όταν το x πάρει μια συγκεκριμένη τιμή, αυτή ονομάζεται όρισμα της συνάρτησης, π.χ., στην παράσταση πρόσημο(4) το 4 είναι όρισμα της συνάρτησης. Η τρίτη μέθοδος είναι αυτή που συνήθως χρησιμοποιούμε στον συναρτησιακό προγραμματισμό, ενώ σε αρκετές περιπτώσεις χρησιμοποιούμε και την δεύτερη. Φυσικά μια συνάρτηση μπορεί να έχει παραπάνω από μία παραμέτρους. Μια συνάρτηση λέγεται καλώς ορισμένη όταν κάθε στοιχείο του πεδίου ορισμού αντιστοιχεί σε μόνο ένα στοιχείο του πεδίου τιμών. Όπως αναφέρθηκε παραπάνω ένα βασικό συστατικό του συναρτησιακού προγραμματισμού είναι η δυνατότητα σύνθεσης συναρτήσεων. Τι σημαίνει όμως αυτό? Έστω ότι θέλουμε να υπολογίσουμε το μέγιστο δύο ακεραίων. Η παρακάτω συνάρτηση βρίσκει το μέγιστο δύο αριθμών: 3

4 αʹ μείον μηδέν συν βʹ. πρόσημο( 3) = μείον πρόσημο( 2) = μείον πρόσημο( 1) = μείον πρόσημο(0) = μηδέν πρόσημο(1) = συν πρόσημο(2) = συν πρόσημο(3) = συν. γʹ πρόσημο(x) = μείον, αν x < 0 μηδέν, αν x = 0 συν, αν x > 0 Σχήμα 1: Μέθοδοι ορισμού συνάρτησης. 4

5 max x y = if x>=y then x else y Το πεδίο ορισμού της συνάρτησης είναι εκείνο το σύνολο που αποτελείται από ζεύγη ακεραίων και το πεδίο τιμών το σύνολο των ακεραίων. (Βέβαια για μια πεπερασμένη μηχανή όπως ένας Η/Υ το σύνολο των ακεραίων δεν είναι παρά ένα πολύ μικρό υποσύνολό του.) Αν θέλουμε να υπολογίσουμε το μέγιστο τριών αριθμών, θα πρέπει να ορίσουμε μια νέα συνάρτηση: max3 x y z x>=y && x>z x>=z && x>y = x y>=x && y>z y>=z && y>x = y z>=x && z>y z>=y && z>x = z otherwise = x (Το σύμβολο && σημαίνει και, το σύμβολο ή και το σύμβολο αν, δηλαδή η τρίτη γραμμή της δήλωσης σημαίνει ό,τι το μέγιστο των x, y και z είναι το z αν z>=x && z>y z>=y && z>x. Τα άλλα σύμβολα, τελεστές σύγκρισης, είναι αυτονόητα.) Τώρα, ας προσπαθήσουμε να γράψουμε τον παραπάνω ορισμό με απλούστερο τρόπο. Ασφαλώς θα συμφωνείτε ότι ο παρακάτω ορισμός είναι σαφέστατα πιο κατανοητός και πιο απλός: max3 x y x = max(x,max(y,z)) Με τον τρόπο αυτό κανείς μπορεί δημιουργεί νέες συναρτήσεις βασιζόμενος σε προηγούμενη δουλειά. (Ως άσκηση, προσπαθήστε να δημιουργήσετε μια συνάρτηση η οποία θα υπολογίζει το μέγιστο τεσσάρων ακεραίων αριθμών.) Μάλιστα, αυτός είναι και ο λόγος που κάθε τυπική εγκατάσταση της Haskell συνοδεύεται από ένα μεγάλο αριθμό προκαθορισμένων συναρτήσεων. Ένα ακόμη βασικό χαρακτηριστικό κάθε συναρτησιακής γλώσσας προγραμματισμού είναι η έλλειψη παρενεργειών, η δυνατότητα χρήσης των οποίων αποτελεί βασικό χαρακτηριστικό κάθε προστακτικής γλώσσας προγραμματισμού. Όμως τι είναι οι παρενέργειες? Αν ορίσουμε μια συνάρτηση σε κάποια προστακτική γλώσσα προγραμματισμού, η οποία επιστρέφει κάποια τιμή αλλά και ταυτόχρονα αλλάζει την τιμή κάποιας καθολικής μεταβλητής, τότε λέμε ότι η συνάρτηση έχει παρενέργειες. Όσο αθώες και αν φαίνονται οι παρενέργειες, εντούτοις μπορούν εύκολα και απλά να παραβιάσουν βασικούς κανόνες των μαθηματικών και έτσι να έχουμε αναπάντεχα αποτελέσματα! Το παρακάτω πρόγραμμα σε C++ δείχνει ακριβώς το τι εννοούμε. Το πρόγραμμα απλά τυπώνει στην οθόνη του Η/Υ το άθροισμα f(1) + f(2) και το άθροισμα f(2) + f(1). Η f επιστρέφει είτε το όρισμα της, είτε το διπλάσιο του ορίσματος της, ανάλογα της τιμής της καθολικής μεταβλητής flag, της οποία όμως την τιμή μεταβάλει πριν επιστρέψει τον έλεγχο στο κύριο πρόγραμμα. #include <iostream.h> bool flag; int f(int n) { return (flag=!flag, (flag? n : 2*n)); } int main() { flag=true; cout << f(1)+f(2) << '\n'; cout << f(2)+f(1) << '\n'; } 5

6 Αν «τρέξετε» το πρόγραμμα αυτό θα διαπιστώσετε ότι παίρνουμε ως έξοδο τους αριθμούς 4 και 5, ενώ είναι γνωστό από τα μαθηματικά του γυμνασίου ότι a + b = b + a, πράγμα που εδώ προφανώς δεν ισχύει. Από την άλλη, δεν υπάρχει καμία πιθανότητα μια συναρτησιακή γλώσσα προγραμματισμού να παρουσιάσει μια ανακολουθία αυτής της μορφής. Αυτή η ιδιότητα των συναρτησιακών γλωσσών είναι γνωστή στη βιβλιογραφία ως referential transparency («αναφορική διαφάνεια»). Επίσης εντολές ανάθεσης που δημιουργούν παρενέργειες χαρακτηρίζονται ως καταστροφικές. Συμπερασματικά λέμε ό,τι αυτό που χαρακτηρίζει κάθε συναρτησιακή γλώσσα προγραμματισμού είναι ότι προγραμματίζουμε με συναρτήσεις τις οποίες μπορούμε να συνθέτουμε και οι οποίες δεν παραβιάζουν τα βασικά αξιώματα των μαθηματικών. 3 Σύντομη εισαγωγή στον συναρτησιακό προγραμματισμό με την Haskell Χονδρικά μιλώντας, όταν λέμε «τύπο» σε μια γλώσσα προγραμματισμού εννοούμε ένα σύνολο τιμών και ορισμένες πράξεις που γίνονται με στοιχεία του συνόλου αυτού. (Οι αναγνώστες με κάποιο μαθηματικό υπόβαθρο, μπορούν χονδρικά να ταυτίσουν ένα τύπο με κάποια αλγεβρική δομή, π.χ., ομάδα, δακτύλιο, κ.λπ.) Κάθε συναρτησιακή γλώσσα προγραμματισμού είναι μια γλώσσα με ένα «ισχυρό» σύστημα τύπων. Αυτό σημαίνει ότι η υλοποίηση της γλώσσας ελέγχει πάντα αν κάποια έκφραση είναι σύμφωνη με τους κανόνες που διέπουν το σύστημα τύπων της. Για παράδειγμα δεν επιτρέπεται να προσθέτουμε ένα ακέραιο με ένα χαρακτήρα. Εκείνο όμως που κάνει ξεχωριστό το σύστημα τύπων κάθε συναρτησιακής γλώσσας σε σχέση με το αντίστοιχο κάποιας προστακτικής γλώσσας είναι το γεγονός ότι δεν απαιτείται να δηλώσουμε τον τύπο των συναρτήσεων και των διαφόρων παραστάσεων, καθώς αυτός εξάγεται από την υλοποίηση της γλώσσας με απόλυτα ασφαλή μέθοδο. Οι βασικοί τύποι της Haskell είναι οι εξής: Οι τύποι Int και Integer που αναφέρονται σε ακεραίους με πεπερασμένο και απεριόριστο αριθμό ψηφίων αντίστοιχα. Οι τύποι Float και Double που αναφέρονται σε δεκαδικούς απλής και διπλής ακρίβειας αντίστοιχα. Ο τύπος Bool με τις δύο δυνατές τιμές: True και False. Ο τύπος Char που αναφέρεται σε χαρακτήρες. Σημειώστε ότι όλα τα ονόματα τύπων γράφονται με κεφαλαίο το πρώτο τους γράμμα. Εκτός όμως από τους βασικούς τύπους, υπάρχουν και αρκετές μέθοδοι δημιουργίας νέων τύπων. Αν με το γράμμα a δηλώνουμε ένα τύπο, ο τύπος [a] δηλώνει μια ακολουθία από αντικείμενα τύπου a. Οι ακολουθίες διαφέρουν από τις παρατάξεις (arrays) στο γεγονός ότι δε μπορούμε να έχουμε πρόσβαση σε οποιοδήποτε στοιχείο τους, ακριβώς όπως για παράδειγμα συμβαίνει με μία ουρά: κανείς πάει πάντα στο τέλος και περιμένει την σειρά του. Μια ακολουθία αντικειμένων είναι μια δομή δεδομένων η οποία είναι είτε κενή, οπότε γράφεται [], είτε μη-κενή και αποτελείται από ένα αντικείμενο h, την κεφαλή, και μία άλλη ακολουθία αντικειμένων t, την ουρά. Μια μη-κενή ακολουθία γράφεται h:t. Για παράδειγμα η ακολουθία 1:2:3:[] αποτελείται από τους αριθμούς 1, 2 και 3, ενώ η άδεια ακολουθία μπαίνει απλά για να ορίσουμε το τέλος της ακολουθίας. Εναλλακτικά κανείς μπορεί να γράψει την προηγούμενη ακολουθία ως εξής: [1,2,3]. Τα κορδόνια, String, δεν είναι παρά [Char], δηλαδή ακολουθίες χαρακτήρων τα οποία όμως επιτρέπεται να γράφονται και σε συμπαγή μορφή: η ακολουθία ['A',' ','S','t','r','i','n','g'] γράφεται "A String". 6

7 Αν τα a και b δηλώνουν κάποιους τύπους, ο τύπος (a,b) δηλώνει τον τύπο ζευγών που το πρώτο μέλος είναι τύπου a και το δεύτερο τύπου b. Φυσικά μπορούμε να δημιουργήσουμε τριάδες, τετράδες, κ.ο.κ., αλλά ζεύγη όπου ο ένας τύπος είναι μια τριάδα, κ.λπ. Γενικότερα οι νιάδες αντιστοιχούν σε records της Pascal ή σε structures της C. Αν τα a και b δηλώνουν κάποιους τύπους, ο τύπος a->b δηλώνει τον τύπο συναρτήσεων που έχουν ως πεδίο ορισμού τον τύπο a και ως πεδίο τιμών τον τύπο b. Για παράδειγμα η συνάρτηση strlen η οποία βρίσκει το μήκος ενός κορδονιού έχει τύπο [Char]->Int. Αφού μάθαμε τους διάφορους δυνατούς τύπους που παρέχει η γλώσσα Haskell, ας δούμε πώς γράφουμε συναρτήσεις. Κάθε συνάρτηση έχει όνομα και χαρακτηρίζεται από τον αριθμό των παραμέτρων που δέχεται καθώς και το τι υπολογίζει, το οποίο είναι μια γενικευμένη αλγεβρική παράσταση. Την ονομάζουμε γενικευμένη απλά γιατί μπορεί να περιέχει παραστάσεις συνθήκης, απλές αλγεβρικές παραστάσεις, κ.ά. Για παράδειγμα οι συναρτήσεις square y = y*y factorial x = product [1..x] sign n = if n>0 then "plus" else if n=0 then "zero" else "minus" υπολογίζουν το τετράγωνο, το παραγοντικό ενός αριθμού και το πρόσημο ενός αριθμού. Η συνάρτηση factorial ορίζεται με βάση την συνάρτηση product η οποία υπολογίζει το γινόμενο όλων των μελών μιας ακολουθίας αριθμών. Προσέξτε ότι η ακολουθία [x..y] αποτελείται από όλους τους ακεραίους από το x ως και το y. Ενώ η ακολουθία [x,y..z] αποτελείται από τους ακεραίους από το x ως το z ανά y-x, δηλαδή η ακολουθία [1,3..10] είναι ισοδύναμη με την [1,3,5,7,9]. Ένα ιδιαίτερο χαρακτηριστικό της Haskell είναι ότι υπολογίζει τα ορίσματα κάθε συνάρτησης μόνο αν χρειάζεται και όσο αυτό χρειάζεται. Έτσι αν ορίσουμε την συνάρτηση myfunc x y = x και ζητήσουμε από κάποια υλοποίηση της γλώσσας να υπολογίσει την παράσταση myfunx 3 3/0 το αποτέλεσμα θα είναι 3, επειδή σύμφωνα με τον ορισμό το δεύτερο όρισμα απλά δεν λαμβάνεται υπ όψη. Από την άλλη καμία προστακτική γλώσσα δεν θα μπορούσε να υπολογίσει την αντίστοιχη παράσταση. Αυτό το ιδιαίτερο χαρακτηριστικό πολλών συναρτησιακών γλωσσών προγραμματισμού είναι γνωστό στη διεθνή βιβλιογραφία ως lazy evaluation. Εκτός όμως από τη δυνατότητα ορισμού ακολουθιών με απλή αναγραφή των μελών της μπορούμε να βάζουμε τη γλώσσα να υπολογίζει τα μέλη μιας ακολουθίας, ακριβώς όπως όταν ορίζουμε ένα σύνολο περιγραφικά, π.χ., η ακολουθία [ x x <- [0..100], odd x ] αποτελείται από τους περιττούς αριθμούς που βρίσκονται μεταξύ του 0 και του 100. Προσέξτε ότι ο ορισμός είναι σχεδόν ίδιος με τον αντίστοιχο μαθηματικό: {x 0 x 100 και x περιττός}. Αυτή ακριβώς η δυνατότητα χρησιμοποιείται από την Haskell για τον ορισμό παρατάξεων (arrays). Έτσι αν θέλουμε να ορίσουμε μια παράταξη, πρέπει να ορίσουμε τα άκρα της καθώς και τον τρόπο δημιουργίας των στοιχείων της: squares = array(1,100)[(i,i*i) i <- [1..100]] Βλέπουμε ότι ορίζουμε η παράταξη να έχει 100 στοιχεία με δείκτες από το 1 ως το 100. Το ζεύγος στις αγκύλες χρησιμεύει στο να δείξουμε σε πιο στοιχείο της παράταξης πρέπει να βάλουμε πια τιμή. Αν θέλουμε το έβδομο στοιχείο της παράταξης, απλά γράφουμε squares!7. Στις περισσότερες προστακτικές γλώσσες προγραμματισμού, υπάρχει η δυνατότητα ορισμού επαγωγικών τύπων, όπως δένδρων, λιστών, σωρών, κ.λπ. Μόνο που εκεί συνήθως ένας ορισμός ενός επαγωγικού τύπου γίνεται με τη βοήθεια δεικτών. Οι συναρτησιακές γλώσσες δίνουν αυτή τη δυνατότητα, αλλά 7

8 επιπλέον το κάνουν με ένα πολύ απλό και σχεδόν φυσικό τρόπο. Έστω ότι θέλουμε να ορίσουμε έναν επαγωγικό τύπο που να αναπαριστά τους φυσικούς αριθμούς, τότε στην Haskell θα γράψουμε data Nat = Zero Succ Nat όπου Zero ο αριθμός μηδέν και Succ ο επόμενος κάποιου φυσικού αριθμού (το σύμβολο διαβάζεται, σε αυτή την περίπτωση, ή). Το παράδειγμα στηρίζεται στην θεώρηση ότι κάθε φυσικός αριθμός μπορεί να παρασταθεί με βάση το μηδέν και μια συνάρτηση που υπολογίζει τον επόμενο κάποιου αριθμού. Έτσι ο αριθμός 2 = SuccSuccZero. Αν θέλουμε να ορίσουμε για παράδειγμα ένα δυαδικό δένδρο, τότε πρέπει να καταφύγουμε στον ορισμό ενός παραμετρικού επαγωγικού τύπου: data BinTree a = Null Node a (BinTree a) (BinTree a) Προσέξτε ότι εδώ ορίζουμε το δυαδικό δένδρο να είναι είτε κενό, είτε να αποτελείται από ένα κόμβο που περιέχει μια πληροφορία τύπου a και δύο υπό-δένδρα, τα οποία με την σειρά των μπορούν να είναι είτε κενά, είτε να περιέχουν πληροφορίες, κ.ο.κ. Όταν έχουμε επαγωγικούς τύπους μπορούμε να χρησιμοποιήσουμε τον ορισμό των για να ορίσουμε συναρτήσεις που θα τους διαχειρίζονται. Οι συναρτήσεις αυτές ορίζονται με πρότυπα, δηλαδή γενικές περιγραφές της δομής κάποιου ορίσματος. Για παράδειγμα στο σχήμα 2 δίνουμε την υλοποίηση του αλγορίθμου ταξινόμησης QuickSort του C.A.R. Hoare σε Haskell και C/C++ για να καταδείξουμε την εκφραστική δύναμη του συναρτησιακού προγραμματισμού αλλά και για να δείξουμε ένα παράδειγμα της χρήσης προτύπων (pattern matching). Προσέξτε ότι μια ακολουθία είναι είτε άδεια είτε περιέχει κάποια στοιχεία. Αν είναι άδεια, τότε απλά επιστρέφουμε την άδεια ακολουθία. Αν είναι γεμάτη, τότε πρέπει να γνωρίζουμε το πρώτο της στοιχείο και «συλλογικά» τα υπόλοιπα. Έτσι αν θέλουμε να υπολογίσουμε το μήκος μιας ακολουθίας η παρακάτω συνάρτηση κάνει με το παραπάνω την δουλειά μας: len [] = 0 len (x:xs) = 1 + len xs Το ενδιαφέρον σε αυτό τον ορισμό είναι ότι μπορεί να εφαρμοσθεί σε κάθε είδους ακολουθία. Η δυνατότητα που έχουν πολλές συναρτησιακές γλώσσες να δηλώνει κανείς συναρτήσεις για ένα ευρύ φάσμα ομοειδών δομών ονομάζεται πολυμορφία. Ας δούμε ένα ακόμη παράδειγμα μιας πολύμορφης συνάρτησης η οποία αντιστρέφει μια ακολουθία: reverse [] = [] reverse (h:t) = reverse t ++ [h] Προσέξτε ότι εδώ δημιουργούμε νέες ακολουθίες που αποτελούνται από ένα μόνο στοιχείο. Εκτός από τους επαγωγικούς τύπους μπορούμε να έχουμε και άπειρες δομές δεδομένων, η ύπαρξη και χρήση των οποίων είναι αποτέλεσμα του lazy evaluation. Για παράδειγμα, οι παρακάτω συναρτήσεις ορίζουν η μεν πρώτη μια άπειρη ακολουθία αποτελούμενη μόνο από το ψηφίο 1, ενώ η δε δεύτερη μια ακολουθία αποτελούμενη από τους αριθμούς από κάποιο ακέραιο n ως το άπειρο. Η τρίτη αποτελεί ένα εναλλακτικό τρόπο γραφής της δεύτερης. Η παράσταση [m..] αντιστοιχεί σε μία ακολουθία από το m ως το άπειρο. Αυτή η δυνατότητα, δηλαδή το να μπορεί κανείς να γράφει κάτι με κομψό τρόπο, ονομάζεται syntactic sugar. ones = 1:ones numsfrom n = n:numsfrom(n+1) numbersfrom m = [m..] (Μπορείτε μήπως να βρείτε τον τύπο της δεύτερης συνάρτησης?) Γλώσσες όπως η C και Pascal δίνουν τη δυνατότητα σε κάποιο χρήστη να ορίζει λειτουργίες ή διαδικασίες των οποίων κάποιο όρισμα είναι μια άλλη λειτουργία ή διαδικασία. Η ίδια δυνατότητα παρέχεται και στις συναρτησιακές γλώσσες προγραμματισμού. Μάλιστα, αν μια συνάρτηση έχει ως παράμετρο μια άλλη συνάρτηση, ονομάζεται συνάρτηση υψηλότερης τάξης. Ιδού μια τέτοια συνάρτηση: 8

9 void qsort(void *v[], int left, int right, int (*comp)(void *, void *)) { int i, last; void swap(void *v[], int, int); qsort [] = [] qsort (x:xs) = qsort [y y <- xs, y<x] ++ [x] ++ qsort [y y <- xs, y>=x] Ο αλγόριθμος QuickSort σε Haskell. Ο τελεστής ++ ενώνει δύο ακολουθίες σε μία. } if(left>=right) return; swap(v,left,(left+right)/2); last=left; for(i=left+1; i<=right; i++) if((*comp)(v[i],v[left])<0) swap(v,++last,i); swap(v,left,last); qsort(v.left,last-1,comp); qsort(v,last+1,right,comp); Ο αλγόριθμος QuickSort σε C/C++. Σχήμα 2: Υλοποίηση του αλγορίθμου QuickSort σε Haskell και C/C++. map f [] = [] map f (x:xs) = f x : map f xs Έτσι η παράσταση map square [1,2,3,4,5] θα δημιουργήσει την ακολουθία [1,4,9,16,25]. Προσέξτε ότι δεν χρειάζεται να καταφύγουμε σε κόλπα με δείκτες, όπως στην C, ή σε μονολιθικές δηλώσεις, όπως στην Pascal, για να ορίσουμε μια συνάρτηση υψηλότερης τάξης. Η υλοποίηση αναλαμβάνει τα πάντα! Ένα άλλο ενδιαφέρον χαρακτηριστικό των συναρτησιακών γλωσσών αποτελεί η δυνατότητα ορισμού κάποιου συμβόλου ή λέξης ως δυαδικού τελεστή, όπως, π.χ., το +, το *, κ.λπ. Ορίστε πως ορίζεται στην Haskell ο τελεστής ++: [] ++ ys = ys (x:xs) ++ ys = x:(xs ++ ys) Βέβαια, δεν καλύψαμε πλήρως τη γλώσσα, αλλά δώσαμε μια γεύση των δυνατοτήτων της. Το σημαντικό ερώτημα που πολλοί νέοι στο χώρο θέτουν είναι: Όντως είναι ενδιαφέρουσες και μαθηματικά κομψές οι συναρτησιακές γλώσσες προγραμματισμού, έχουν όμως χρησιμοποιηθεί σε «πραγματικές» εφαρμογές; 4 Συναρτησιακές γλώσσες και εφαρμογές Οι συναρτησιακές γλώσσες προγραμματισμού έχουν χρησιμοποιηθεί επιτυχώς σε αρκετά σημαντικά προγράμματα (projects). Για παράδειγμα o Mobility Server, ένα προϊόν που πωλείται σε δώδεκα ευρωπαϊκές χώρες, ελέγχει τα κινητά τηλέφωνα του Ευρωπαϊκού Κοινοβουλίου στο Στρασβούργο. Το σύστημα αυτό είναι γραμμένο στην Erlang, μια συναρτησιακή γλώσσα προγραμματισμού σχεδιασμένη από την Ericsson για τηλεπικοινωνιακές εφαρμογές. Η φιλοσοφία της εταιρείας είναι στα επόμενα χρόνια ότι λογισμικό παράγει, να γράφεται σε Erlang (το όνομα της δεν προέρχεται από τα αρχικά των λέξεων Ericsson language, αλλά από το όνομα του δανού μαθηματικού A.K. Erlang). Περισσότερες πληροφορίες σχετικά με την Erlang μπορείτε να βρείτε στο URL: Μια άλλη εφαρμογή στον τηλεπικοινωνιακό τομέα είναι το σύστημα Pdiff το οποίο είναι γραμμένο σε SML και αποτελεί τμήμα 9

10 του τηλεπικοινωνιακού συστήματος 5ESS (phone switch system). Το σύστημα αυτό παράγεται από τα Εργαστήρια Bell. Ένα άλλο είδος εφαρμογών στο οποίο χρησιμοποιούνται κύρια συναρτησιακές γλώσσες προγραμματισμού είναι τα συστήματα αυτόματης απόδειξης θεωρημάτων. Για παράδειγμα το σύστημα HOL( Higher Order Logic) χρησιμοποιήθηκε στην παραγωγή των επεξεργαστών HP9000 της εταιρείας Hewlett-Packard. Μάλιστα μπόρεσε να διαγνώσει προβλήματα τα οποία δεν ήταν δυνατό να ανακαλυφθούν μετά από έξι μήνες προσομοίωσης. Επίσης ο Οργανισμός Αμυντικής Τεχνολογίας και Επιστήμης του Υπουργείου Αμύνης της Αυστραλίας, χρησιμοποιεί το σύστημα Isabelle για την επαλήθευση των συνθηκών οπλισμού παγίδων βλημάτων. Τα δύο αυτά συστήματα είναι γραμμένα σε SML. Η γλώσσα SML είναι απόγονος της γλώσσας ML η οποία χρησιμοποιούταν ως «μεταγλώσσα» στο σύστημα LCF, ενός πρωτοποριακού συστήματος απόδειξης θεωρημάτων. Κάθε πτήση από ή προς τα αεροδρόμια Orly και Roissy του Παρισιού επεξεργάζεται από ένα έμπειρο σύστημα το οποίο ονομάζεται Ivanhoe το οποίο είναι γραμμένο στο κέλυφος εμπείρων συστημάτων Natural Expert. Το κέλυφος αυτό παρέχει μια γλώσσα προγραμματισμού η οποία μοιάζει πάρα πολύ με την Haskell. Έτσι κανείς ουσιαστικά προγραμματίζει έμπειρα συστήματα σε μία συναρτησιακή γλώσσα προγραμματισμού. Παράλληλα, στην Γαλλία η εταιρεία Polygram, η οποία ελέγχει το ένα τρίτο της ευρωπαϊκής αγοράς CD και κασετών, χρησιμοποιεί το έμπειρο σύστημα Colisage στην γραμμή πακεταρίσματος. Το σύστημα αυτό είναι γραμμένο στο κέλυφος Natural Expert. Η Εnsemble είναι μια βιβλιοθήκη πρωτοκόλλων η οποία μπορεί να χρησιμοποιηθεί για την εύκολη αλλά και γρήγορη δημιουργία κατανεμημένων (distributed) εφαρμογών. Το σύστημα Εnsemble βρίσκεται σε καθημερινή χρήση στο Πανεπιστήμιο Cornell, όπου μεταξύ άλλων χρησιμοποιείται για την υποστήριξη της αποθήκευσης ηχητικών CD αλλά και της αναπαραγωγής των. Το ίδιο σύστημα χρησιμοποιείται από μια σειρά εταιρειών (BBN, Lockheed Martin, Microso, κ.ά.) για τη δημιουργία εμπορικών προϊόντων. Το πρόγραμμα είναι γραμμένο στη γλώσσα Objective Caml, μιας διαλέκτου της SML. Επιπλέον σε μια προσπάθεια να φανούν οι δυνατότητες του συναρτησιακού προγραμματισμού, ερευνητές του Πανεπιστημίου Carnegie Mellon δημιούργησαν όλα τα εργαλεία που απαιτούνται για το στήσιμο ενός συστήματος πρόσβασης σε ιστοσελίδες (web server). Για περισσότερες πληροφορίες για το σύστημα μπορείτε να διαβάσετε τα σχετικά στο URL: Περισσότερες πληροφορίες για μεγάλες εφαρμογές των συναρτησιακών γλωσσών προγραμματισμού μπορείτε να βρείτε στο παρακάτω URL: Αφού λοιπόν έχουν τόσες εφαρμογές οι συναρτησιακές γλώσσες προγραμματισμού, γιατί δεν είναι ευρέως διαδεδομένες; Καταρχήν ένας σημαντικός λόγος είναι το γεγονός ότι οι περισσότερες από τις συναρτησιακές γλώσσες αναπτύχθηκαν σε ερευνητικά κέντρα στα οποία ενδιαφέρονταν για γλώσσες μαθηματικώς «καθαρές». Η πραγματικότητα όμως επιβάλει τη δυνατότητα κλήσης ρουτινών σε άλλες γλώσσες (κυρίως σε C), μιας και δεν υπάρχει κανένας λόγος να ανακαλύπτουμε συνεχώς το τροχό. Αντιλαμβανόμενοι αυτό το μειονέκτημα, πολλά ενεργά μέλη της κοινότητας του συναρτησιακού προγραμματισμού προχώρησαν σε βήματα προς τον ορθό δρόμο. Έτσι η Erlang παρέχει τη δυνατότητα κλήσης λειτουργιών σε C, ενώ η SISAL υπορουτινών σε FORTRAN. Επίσης πρόσφατες εξελίξεις επιτρέπουν κάθε πρόγραμμα Haskell να γίνεται ένα στοιχείο COM, ενώ κάθε τέτοιο στοιχείο μπορεί να χρησιμοποιείται από οποιοδήποτε πρόγραμμα σε Haskell. Ένα άλλο σημαντικό στοιχείο αποτελεί το γεγονός ότι οι περισσότερες συναρτησιακές γλώσσες έχουν παρά μόνο βασικές βιβλιοθήκες. Από την άλλη η Java δεν οφείλει την επιτυχία της τόσο στο ότι είναι μια πραγματικά σπουδαία γλώσσα, αλλά στο γεγονός ότι παρέχει μια τεράστια βιβλιοθήκη με δυνατότητες σχεδιασμού γραφικών, επεξεργασίας εικόνας, τηλεφωνίας, κ.ο.κ. Βέβαια υπάρχουν βιβλιοθήκες και για την Haskell για, π.χ., σχεδιασμό γραφικών και δημιουργία εφαρμογών τύπου GUI, δηλαδή με γραφικό διάμεσο, αλλά με κανένα τρόπο δεν φτάνουν την πληθώρα των βιβλιοθηκών της Java. Αυτό ίσως να σχετίζεται και με το γεγονός ότι μόνο ελάχιστες συναρτησιακές γλώσσες προγραμματισμού είναι πραγματικά εμπορικά προϊόντα όπως: η Erlang, η ML Works της Harlequin (http://www.harlequin.com/ products/ads/ml/), η Miranda της Research So ware Limited, και μερικές ακόμη. 10

11 Στην εποχή που η Java και η Perl διαφημίζονται ως γλώσσες στις οποίες γράφεις ένα πρόγραμμα και αυτό τρέχει σε οποιαδήποτε υπολογιστική πλατφόρμα, οι συναρτησιακές γλώσσες δυστυχώς δεν έχουν υλοποιηθεί παρά στις πλέον γνωστές. Βέβαια αυτό δεν είναι μεγάλο πρόβλημα, αφού κανείς μπορεί εύκολα να φτιάξει μια εν δυνάμει μηχανή (virtual machine) σε C και αυτή να λειτουργεί σε οποιαδήποτε πλατφόρμα, ακριβώς όπως συμβαίνει με την Java. Στο σημείο αυτό αξίζει να αναφέρουμε ότι η Java έγινε γνωστή και για το γεγονός ότι δεν απαιτεί από τον χρήστη της να διαχειρίζεται τη μνήμη μιας και το κάνει αυτό αυτόματα (η τεχνική αυτή ονομάζεται «αποκομιδή σκουπιδιών» ή garbage collection). Όμως η τεχνική αυτή είναι γνωστή στους κύκλους των συναρτησιακών προγραμματιστών εδώ και δεκαετίες! Ένας άλλος λόγος που κάνει σχετικά δύσκολη τη χρήση των συναρτησιακών γλωσσών προγραμματισμού είναι η ελλιπής κατάρτιση των προγραμματιστών. Δεν αρκεί κάποιος να γνωρίζει μία (προστακτική) γλώσσα ώστε να μπορεί να μάθει μια συναρτησιακή. Απαιτούνται δύο περίπου βδομάδες ώστε κάποιος να μάθει να προγραμματίζει συνθέτοντας συναρτήσεις και μη έχοντας στη διάθεσή του μεταβλητές, παρά μόνο σταθερές. Βέβαια έχουν γίνει βήματα για την αντιμετώπιση του προβλήματος, αλλά αυτό που ουσιαστικά απαιτείται είναι οι φοιτητές των τμημάτων των υπολογιστικών επιστημών να αποκτούν εξοικείωση με αυτού του είδους τις γλώσσες. Να σημειωθεί ότι η εκμάθηση της Lisp είναι όχι μόνο παρωχημένη αλλά και δεν προσφέρει τίποτα το ουσιαστικό πλέον. Όλοι οι παραπάνω είναι λόγοι που αποτρέπουν αρκετό κόσμο να ασχοληθεί σοβαρά με τον συναρτησιακό προγραμματισμό, ενώ υπάρχουν και δύο βασικοί μύθοι οι οποίοι διαψεύδονται από τα γεγονότα. Μύθος πρώτος: οι υλοποιήσεις των συναρτησιακών γλωσσών είναι αργές. Αυτό δεν ισχύει αφού σε πολλές περιπτώσεις υπάρχουν συναρτησιακά προγράμματα που «τρέχουν» γρηγορότερα από τα αντίστοιχα προγράμματα σε C. Επιπλέον, η Java που είναι τόσο δημοφιλής είναι μια σχετικά αργή γλώσσα, ακόμη και σε Solaris! Μύθος δεύτερος: ο συναρτησιακός προγραμματισμός είναι δύσκολος. Μια ανακρίβεια που οφείλεται στο γεγονός ότι απαιτείται κανείς να μάθει να σκέφτεται διαφορετικά. Όμως το ίδιο δεν συμβαίνει όταν κανείς μαθαίνει μια άλλη (φυσική) γλώσσα, π.χ., γαλλικά, ρωσικά, κ.ά. 5 Περισσότερες πληροφορίες Αν έχετε πιεσθεί ότι αξίζει τον κόπο να ασχοληθείτε με τον συναρτησιακό προγραμματισμό, θα πρέπει να «κατεβάσετε» μια γλώσσα για το υπολογιστικό σας σύστημα. Αυτό είναι πολύ απλό: επισκεφθείτε το URL: Εκεί θα βρείτε πάρα πολλές πληροφορίες σχετικά με την Haskell, την υλοποίησης της γλώσσας αλλά και βιβλιογραφία σχετικά με τον συναρτησιακό προγραμματισμό γενικότερα. Εμείς για αρχή σας προτείνουμε να πειραματιστείτε με την Hugs, έναν διερμηνευτή της Haskell. Αρκετές πληροφορίες, σχετικά με τον συναρτησιακό προγραμματισμό αλλά και άλλες γλώσσες προγραμματισμού, μπορείτε να βρείτε στις σελίδες των ερευνητικών ομάδων στα αντίστοιχα τμήματα των Πανεπιστημίων Chalmers & Goteborg της Σουηδίας (http://www.cs.chalmers.se/cs/research/ Functional/), του Πανεπιστημίου της Γλασκόβης στη Σκοτία (http://www.dcs.glasgow.ac.uk/ fp/) και του Πανεπιστημίου Yale στις ΗΠΑ (http://www.cs.yale.edu/haskell/yale-fp.html). Επιπλέον, μπορείτε να διαβάζεται το newsgroup comp.lang.faunctional. Επίσης υπάρχει και ένα επιστημονικό περιοδικό σχετικά με τον συναρτησιακό προγραμματισμό: Journal of Functional Programming (http://www.cup.cam.ac.uk/scripts/webjrn1.asp?mnemonic=jfp) που εκδίδεται από τον εκδοτικό οίκο Cambridge University Press. Τέλος, υπάρχει και μια στήλη στο περιοδικό SIGPLAN Notices της ACM με θέματα σχετικά με τον συναρτησιακό προγραμματισμό. Ελπίζουμε η σύντομη αυτή παρουσίαση να συντελέσει στην άνοδο της χρήσης αυτού του τόσο γοητευτικού τρόπου επίλυσης υπολογιστικών προβλημάτων! 11

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δρ. Κόννης Γιώργος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος και του Προγράμματος/Αλγορίθμου

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

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

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

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

Προγραµµατισµός Η/Υ. Μέρος2

Προγραµµατισµός Η/Υ. Μέρος2 Προγραµµατισµός Η/Υ Μέρος2 Περιεχόμενα Επανάληψη Βασικών Σύμβολων Διαγραμμάτων Ροής Αλγόριθμος Ψευδοκώδικας Παραδείγματα Αλγορίθμων Γλώσσες προγραμματισμού 2 Επανάληψη Βασικών Σύμβολων Διαγραμμάτων Ροής

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

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

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

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

Εισαγωγή στην Πληροφορική Προγραμματισμός-Λειτουργικά

Εισαγωγή στην Πληροφορική Προγραμματισμός-Λειτουργικά Εισαγωγή στην Πληροφορική Προγραμματισμός-Λειτουργικά Ηλ. Γκρίνιας Τ. Ε. Ι. Σερρών Τμήμα Πληροφορικής και Επικοινωνιών Αλγόριθμοι Ορισμός: ο αλγόριθμος είναι μια σειρά από πεπερασμένα βήματα που καθορίζουν

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

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Βιβλιογραφία "C Προγραμματισμός", Deitel & Deitel, Πέμπτη Έκδοση, Εκδόσεις

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

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

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

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

Αυτόματα. Παράδειγμα: πωλητής καφέ (iii) Παράδειγμα: πωλητής καφέ (iv) Εισαγωγή στην Επιστήμη των Υπολογιστών 6

Αυτόματα. Παράδειγμα: πωλητής καφέ (iii) Παράδειγμα: πωλητής καφέ (iv) Εισαγωγή στην Επιστήμη των Υπολογιστών 6 Εισαγωγή στην Επιστήμη των Υπολογιστών 3η ενότητα: Αυτόματα και Τυπικές Γραμματικές http://www.corelab.ece.ntua.gr/courses/ Αυτόματα Τρόπος κωδικοποίησης αλγορίθμων. Τρόπος περιγραφής συστημάτων πεπερασμένων

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

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

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

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

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

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

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

Η ΑΕΠΠ IN A GLANCE! ΦΡΟΝΤΙΣΤΗΡΙΑ ΠΟΛΥΜΕΝΗ

Η ΑΕΠΠ IN A GLANCE! ΦΡΟΝΤΙΣΤΗΡΙΑ ΠΟΛΥΜΕΝΗ Η ΑΕΠΠ IN A GLANCE! Κατανομή μονάδων: 40 μονάδες το 1 ο Θέμα, από 20 τα υπόλοιπα τρία. Μην χαίρεστε όμως γιατί η «καθαρή» θεωρία περιορίζεται συνήθως- σε 5 ερωτήσεις σωστού ή λάθους και σε 1-2 ερωτήσεις

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή Στο εργαστήριο αυτό θα μάθουμε για τη χρήση συναρτήσεων με σκοπό την κατασκευή αυτόνομων τμημάτων προγραμμάτων που υλοποιούν μία συγκεκριμένη διαδικασία, τα οποία

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

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

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

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

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 19 Hashing - Κατακερματισμός 1 / 23 Πίνακες απευθείας πρόσβασης (Direct Access Tables) Οι πίνακες απευθείας

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

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

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

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

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

ΑΚΡΟΤΑΤΑ ΣΥΝΑΡΤΗΣΕΩΝ ΠΟΛΛΩΝ ΜΕΤΑΒΛΗΤΩΝ 6 KΕΦΑΛΑΙΟ 3 ΑΚΡΟΤΑΤΑ ΣΥΝΑΡΤΗΣΕΩΝ ΠΟΛΛΩΝ ΜΕΤΑΒΛΗΤΩΝ Η θεωρία μεγίστων και ελαχίστων μιας πραγματικής συνάρτησης με μια μεταβλητή είναι γνωστή Στο κεφάλαιο αυτό θα δούμε τη θεωρία μεγίστων και ελαχίστων

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

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος Εισαγωγή στους Αλγόριθµους Αλγόριθµοι Τι είναι αλγόριθµος; Τι µπορεί να υπολογίσει ένας αλγόριθµος; Πως αξιολογείται ένας αλγόριθµος; Παύλος Εφραιµίδης pefraimi@ee.duth.gr Αλγόριθµοι Εισαγωγικές Έννοιες

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

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

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

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

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

Μ Ε Ρ Ο Σ Γ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Μ Ε Ρ Ο Σ Γ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Γλώσσες Προγραμματισμού 6.1.1 Γλώσσες μηχανής (1 η γενιά) Η γλώσσα στην οποία ένας ηλεκτρονικός υπολογιστής καταλαβαίνει

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Σκοπός του μαθήματος Σκοπός του παρόντος μαθήματος είναι να μάθετε να κάνετε εισαγωγή δεδομένων σε πίνακες και περαιτέρω επεξεργασία

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΩΝ ΚΑΙ ΑΥΤΟΜΑΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΩΝ ΚΑΙ ΑΥΤΟΜΑΤΩΝ Τελικές εξετάσεις 3 Ιανουαρίου 27 Διάρκεια εξέτασης: 3 ώρες (2:-5:) ΘΕΜΑ ο

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

ΚΕΦΑΛΑΙΟ 2 ΔΙΑΤΑΞΕΙΣ, ΜΕΤΑΘΕΣΕΙΣ, ΣΥΝΔΥΑΣΜΟΙ

ΚΕΦΑΛΑΙΟ 2 ΔΙΑΤΑΞΕΙΣ, ΜΕΤΑΘΕΣΕΙΣ, ΣΥΝΔΥΑΣΜΟΙ ΚΕΦΑΛΑΙΟ ΔΙΑΤΑΞΕΙΣ ΜΕΤΑΘΕΣΕΙΣ ΣΥΝΔΥΑΣΜΟΙ Εισαγωγή. Οι σχηματισμοί που προκύπτουν με την επιλογή ενός συγκεκριμένου αριθμού στοιχείων από το ίδιο σύνολο καλούνται διατάξεις αν μας ενδιαφέρει η σειρά καταγραφή

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

Θεωρία Υπολογισμού και Πολυπλοκότητα Μαθηματικό Υπόβαθρο

Θεωρία Υπολογισμού και Πολυπλοκότητα Μαθηματικό Υπόβαθρο Θεωρία Υπολογισμού και Πολυπλοκότητα Μαθηματικό Υπόβαθρο Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Σύνολα Συναρτήσεις και Σχέσεις Γραφήματα Λέξεις και Γλώσσες Αποδείξεις ΕΠΛ 211 Θεωρία

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός

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

Ενδεικτική περιγραφή μαθήματος

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

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

Πειραματιζόμενοι με αριθμούς στο περιβάλλον του Microworlds Pro: διαθεματική προσέγγιση περί «πολλαπλασίων και διαιρετών»

Πειραματιζόμενοι με αριθμούς στο περιβάλλον του Microworlds Pro: διαθεματική προσέγγιση περί «πολλαπλασίων και διαιρετών» Πειραματιζόμενοι με αριθμούς στο περιβάλλον του Microworlds Pro: διαθεματική προσέγγιση περί «πολλαπλασίων και διαιρετών» μια Νίκος Δαπόντες Φυσικός Δευτεροβάθμιας Εκπαίδευσης Το περιβάλλον Microworlds

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

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο 2015. Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο 2015. Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης Οικονοµικό Πανεπιστήµιο Αθηνών Τµήµα Πληροφορικής Φθινοπωρινό Εξάµηνο 2015 Δοµές Δεδοµένων - Εργασία 2 Διδάσκων: E. Μαρκάκης Ταξινόµηση και Ουρές Προτεραιότητας Σκοπός της 2 ης εργασίας είναι η εξοικείωση

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

ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ Α : ΘΕΜΑΤΑ ΒΑΣΗΣ 1. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ...11 2. ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ...30

ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ Α : ΘΕΜΑΤΑ ΒΑΣΗΣ 1. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ...11 2. ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ...30 ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ Α : ΘΕΜΑΤΑ ΒΑΣΗΣ 1. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ...11 1.1 Τι είναι Πληροφορική;...11 1.1.1 Τι είναι η Πληροφορική;...12 1.1.2 Τι είναι ο Υπολογιστής;...14 1.1.3 Τι είναι το Υλικό και το

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Αριθμητική Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Δεύτερο Πρόγραμμα 1 / * Second Simple Program : add 2 numbers * / 2

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

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

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

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

Πληρουορική Γ Γσμμασίοσ

Πληρουορική Γ Γσμμασίοσ Πληρουορική Γ Γσμμασίοσ Προγραμματισμός και Αλγόριθμοι Από το και τημ Χελώμα στημ Ευριπίδης Βραχνός http://evripides.mysch.gr/ 2014 2015 1 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Ενότητα:

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

Διάλεξη 6: Δείκτες και Πίνακες

Διάλεξη 6: Δείκτες και Πίνακες Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 6: Δείκτες και Πίνακες (Κεφάλαιο 12, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 6-1 Περιεχόμενο

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

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

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ και ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ 2.1 Να δοθεί ο ορισμός

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

Κεφάλαιο 1: Εισαγωγή. Αρχές Γλωσσών και Προγραμματισμού και Μεταφραστών. Γιάννης Γαροφαλάκης ΤΜΗΥΠ - Πανεπιστήμιο Πατρών

Κεφάλαιο 1: Εισαγωγή. Αρχές Γλωσσών και Προγραμματισμού και Μεταφραστών. Γιάννης Γαροφαλάκης ΤΜΗΥΠ - Πανεπιστήμιο Πατρών Κεφάλαιο 1: Εισαγωγή Αρχές Γλωσσών και Προγραμματισμού και Μεταφραστών Εισαγωγή (1) Γιατί υπάρχουν τόσες πολλές Γλώσσες Προγραμματισμού (ΓΠ); o Εξέλιξη έχουμε μάθει καλύτερους τρόπους να κάνουμε πράγματα

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

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 1: Εισαγωγή Ποιος είμαι εγώ! Ναύπλιο, 4/1976-9/1993 Williamsburg, VA, USA, 7/2004-7/2006 2 Πάτρα, 9/1993-6/2004 Μυτιλήνη, 10/2006-2/2007 Βόλος, 2/2007 - Ο Υπεύθυνος των

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

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Κεφάλαιο 3

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

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

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης Περιεχόμενα Δομές δεδομένων 37. Δομές δεδομένων (θεωρητικά στοιχεία)...11 38. Εισαγωγή στους μονοδιάστατους πίνακες...16 39. Βασικές επεξεργασίες στους μονοδιάστατους πίνακες...25 40. Ασκήσεις στους μονοδιάστατους

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

Α3. Ποια είναι τα πλεονεκτήματα του Δομημένου προγραμματισμού; (Μονάδες 10)

Α3. Ποια είναι τα πλεονεκτήματα του Δομημένου προγραμματισμού; (Μονάδες 10) ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 08 / 02 / 2015 ΕΠΙΜΕΛΕΙΑ ΔΙΑΓΩΝΙΣΜΑΤΟΣ: Ι. ΜΙΧΑΛΕΑΚΟΣ Γ.ΝΙΤΟΔΑΣ ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις

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

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Στοίβες Ουρές Στοίβες: Βασικές Έννοιες. Ουρές: Βασικές Έννοιες. Βασικές Λειτουργίες. Παραδείγματα. Στοίβες Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη

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

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η 53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η ΠΑΓΚΡΑΤΙ: Φιλολάου & Εκφαντίδου 26 : 210/76.01.470 210/76.00.179 ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς

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

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

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

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

Γλώσσες Προγραμματισμού Μεταγλωττιστές

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

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

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

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

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

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

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

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

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

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

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

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις Ενώσεις δεδομένων (union) τι και γιατί Συσκευές με μικρή μνήμη => ανάγκη εξοικονόμησης πόρων Παρατήρηση: αχρησιμοποίητη μνήμη. Έστω

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

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

Περιεχόμενα. Πρόλογος... 17 Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για

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

Τυπικές χρήσεις της Matlab

Τυπικές χρήσεις της Matlab Matlab Μάθημα 1 Τι είναι η Matlab Ολοκληρωμένο Περιβάλλον Περιβάλλον ανάπτυξης Διερμηνευμένη γλώσσα Υψηλή επίδοση Ευρύτητα εφαρμογών Ευκολία διατύπωσης Cross platform (Wintel, Unix, Mac) Τυπικές χρήσεις

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

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα.

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα. i Π Ρ Ο Λ Ο Γ Ο Σ Το βιβλίο αυτό αποτελεί μια εισαγωγή στα βασικά προβλήματα των αριθμητικών μεθόδων της υπολογιστικής γραμμικής άλγεβρας (computational linear algebra) και της αριθμητικής ανάλυσης (numerical

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

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β. ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β. Καβακλή Χειμερινό Εξάμηνο 2001 1 Σύνολο χαρακτήρων της Pascal Για

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07 Ακαδ έτος 2007-2008 ΠΛΗΡΟΦΟΡΙΚΗ Ι Φερεντίνος 22/11/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με ΑΜ σε 3, 7, 8 & 9 22/11/07 Παράδειγμα με if/else if και user input: import javautil*; public class Grades public

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

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

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

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

Πρόσθεση, αφαίρεση και πολλαπλασιασμός φυσικών αριθμών

Πρόσθεση, αφαίρεση και πολλαπλασιασμός φυσικών αριθμών Πρόσθεση, αφαίρεση και πολλαπλασιασμός φυσικών αριθμών TINΑ ΒΡΕΝΤΖΟΥ www.ma8eno.gr www.ma8eno.gr Σελίδα 1 Πρόσθεση, αφαίρεση και πολλαπλασιασμός φυσικών αριθμών Στους πραγματικούς αριθμούς ορίστηκαν οι

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

Δύο λόγια από τη συγγραφέα

Δύο λόγια από τη συγγραφέα Δύο λόγια από τη συγγραφέα Τα μαθηματικά ή τα λατρεύεις ή τα μισείς! Για να λατρέψεις κάτι πρέπει να το κατανοήσεις, για τη δεύτερη περίπτωση τα πράγματα μάλλον είναι λίγο πιο απλά. Στόχος αυτού του βιβλίου

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

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

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

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

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

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

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

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

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

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

Δομές δεδομένων (2) Αλγόριθμοι

Δομές δεδομένων (2) Αλγόριθμοι Δομές δεδομένων (2) Αλγόριθμοι Παράγωγοι τύποι (struct) σύνοψη προηγουμένων Πίνακες: πολλές μεταβλητές ίδιου τύπου Παράγωγοι τύποι ή Δομές (struct): ομαδοποίηση μεταβλητών διαφορετικού τύπου struct Student

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ Γ ΛΥΚΕΙΟΥ - 02/05/2014 ΘΕΜΑ Α Α1. Έστω ο παρακάτω αλγόριθμος ταξινόμησης: Για κ από.. μέχρι 19 Για λ από 19 μέχρι κ με_βήμα -1

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

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης ΚΕΦΑΛΑΙΟ 1ο 3ο 1. Συμπληρώστε τα κενά με τη λέξη που λείπει. α. Ένα πρόβλημα το χωρίζουμε σε άλλα απλούστερα, όταν είναι ή όταν έχει τρόπο επίλυσης. β. Η επίλυση ενός προβλήματος προϋποθέτει την του. γ.

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

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

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

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

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

ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΙΚΑ Β ΓΥΜΝΑΣΙΟΥ. ΜΕΡΟΣ 1ο ΑΛΓΕΒΡΑ 1. Τι καλείται μεταβλητή; ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΙΑ Β ΓΥΜΝΑΣΙΟΥ ΜΕΡΟΣ 1ο ΑΛΓΕΒΡΑ Μεταβλητή είναι ένα γράμμα (π.χ., y, t, ) που το χρησιμοποιούμε για να παραστήσουμε ένα οποιοδήποτε στοιχείο ενός συνόλου..

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Μια δομή δεδομένων στην πληροφορική, συχνά αναπαριστά οντότητες του φυσικού κόσμου στον υπολογιστή. Για την αναπαράσταση αυτή, δημιουργούμε πρώτα ένα αφηρημένο μοντέλο στο οποίο προσδιορίζονται

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

Γνωστό: P (M) = 2 M = τρόποι επιλογής υποσυνόλου του M. Π.χ. M = {A, B, C} π. 1. Π.χ.

Γνωστό: P (M) = 2 M = τρόποι επιλογής υποσυνόλου του M. Π.χ. M = {A, B, C} π. 1. Π.χ. Παραδείγματα Απαρίθμησης Γνωστό: P (M 2 M τρόποι επιλογής υποσυνόλου του M Τεχνικές Απαρίθμησης Πχ M {A, B, C} P (M 2 3 8 #(Υποσυνόλων με 2 στοιχεία ( 3 2 3 #(Διατεταγμένων υποσυνόλων με 2 στοιχεία 3 2

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

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει;

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει; ΜΑΘΗΜΑ 7 Κλήση αλγορίθμου από αλγόριθμο Αναδρομή Σ χ ο λ ι κ ο Β ι β λ ι ο ΥΠΟΚΕΦΑΛΑΙΟ 2.2.7: ΕΝΤΟΛΕΣ ΚΑΙ ΔΟΜΕΣ ΑΛΓΟΡΙΘΜΟΥ ΠΑΡΑΓΡΑΦΟI 2.2.7.5: Κλήση αλγορίθμου από αλγόριθμο 2.2.7.6: Αναδρομή εισαγωγη

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

Αριθμητική εύρεση ριζών μη γραμμικών εξισώσεων

Αριθμητική εύρεση ριζών μη γραμμικών εξισώσεων Αριθμητική εύρεση ριζών μη γραμμικών εξισώσεων Με τον όρο μη γραμμικές εξισώσεις εννοούμε εξισώσεις της μορφής: f( ) 0 που προέρχονται από συναρτήσεις f () που είναι μη γραμμικές ως προς. Περιέχουν δηλαδή

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

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

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

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

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

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

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης Γλώσσες Προγραμματισμού Εργαστήριο 2ο Τύποι Δεδομένων - Είσοδος / Έξοδος Εργαστήριο 2ο Περίγραμμα Εργαστηριακής Άσκησης Εργαστήριο 2ο...1 Θεωρία εργαστηρίου...2 Τύποι δεδομένων...2 Η συνάρτηση printf()...3

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

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές Μορφές Εντολών Είδη εντολών Απλές εντολές Εκτελούν κάποια ενέργεια Εντολές ελέγχου Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές Εντολές και παραστάσεις Μιαεντολήείναιμιαπαράστασηπου ακολουθείται

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

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

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΣΚΗΣΕΙΣ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΡΩΤΗΣΕΙΣ ΣΩΣΤΟ ΛΑΘΟΣ Σημειώστε αν είναι σωστή ή

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

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Τρίτη Διάλεξη Εντολές Επιλογής και Επανάληψης Εντολές επιλογής Εντολή if Η πιο απλή μορφή της if συντάσσεται ως εξής: if ( συνθήκη ) Οι εντολές μέσα στα άγκιστρα αποτελούν

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές

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

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

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

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

Τεχνητή Νοημοσύνη. 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος. http://www.aueb.gr/users/ion/

Τεχνητή Νοημοσύνη. 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος. http://www.aueb.gr/users/ion/ Τεχνητή Νοημοσύνη 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται στα βιβλία: Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β. Γκιούρδας

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

ΚΑΤΑΓΡΑΦΗ ΓΝΩΣΕΩΝ & ΕΝΔΙΑΦΕΡΟΝΤΩΝ

ΚΑΤΑΓΡΑΦΗ ΓΝΩΣΕΩΝ & ΕΝΔΙΑΦΕΡΟΝΤΩΝ ΚΑΤΑΓΡΑΦΗ ΓΝΩΣΕΩΝ & ΕΝΔΙΑΦΕΡΟΝΤΩΝ Αυτό το ερωτηματολόγιο αποσκοπεί στη συγκέντρωση στοιχείων που αφορούν τόσο τις γνώσεις όσο και τα ενδιαφέροντά σας. Χωρίζεται σε τρία μέρη: το πρώτο έχει ερωτήσεις για

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

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να αναπτύξουν ένα πρόγραμμα όπου θα επαναλάβουν τα βήματα ανάπτυξης μιας παραθυρικής εφαρμογής.

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07 Τμήμα θεωρίας: Α.Μ. 8, 9 Κάθε Πέμπτη, 11πμ-2μμ, ΑΜΦ23. Διδάσκων: Ντίνος Φερεντίνος Γραφείο 118 email: kpf3@cornell.edu Μάθημα: Θεωρία + προαιρετικό

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ομή Επανάληψης

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ομή Επανάληψης ΕΠ.1 Να αναπτυχθεί αλγόριθμος που θα εκτυπώνει τους διψήφιους άρτιους ακέραιους. Η άσκηση στην ουσία θα πρέπει να εκτυπώσει του αριθμούς 10, 12, 14,.,96, 98. Μεμιαπρώτηματιάθαμπορούσαμενατηνλύσουμεμετοναπροσπελάσουμετιςτιμές

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

Αλγόριθμοι και Πολυπλοκότητα

Αλγόριθμοι και Πολυπλοκότητα Αλγόριθμοι και Πολυπλοκότητα Ροή Δικτύου Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Μοντελοποίηση Δικτύων Μεταφοράς Τα γραφήματα χρησιμοποιούνται συχνά για την μοντελοποίηση

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

Τα παρακάτω σύνολα θα τα θεωρήσουμε γενικά γνωστά, αν και θα δούμε πολλές από τις ιδιότητές τους: N Z Q R C

Τα παρακάτω σύνολα θα τα θεωρήσουμε γενικά γνωστά, αν και θα δούμε πολλές από τις ιδιότητές τους: N Z Q R C Κεφάλαιο 1 Εισαγωγικές έννοιες Στο κεφάλαιο αυτό θα αναφερθούμε σε ορισμένες έννοιες, οι οποίες ίσως δεν έχουν άμεση σχέση με τους διανυσματικούς χώρους, όμως θα χρησιμοποιηθούν αρκετά κατά τη μελέτη τόσο

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

Ν!=1*2*3* *(N-1) * N => N! = (Ν-1)! * N έτσι 55! = 54! * 55

Ν!=1*2*3* *(N-1) * N => N! = (Ν-1)! * N έτσι 55! = 54! * 55 ΑΝΑ ΡΟΜΗ- ΑΣΚΗΣΕΙΣ Μια µέθοδος είναι αναδροµική όταν καλεί τον εαυτό της και έχει µια συνθήκη τερµατισµού π.χ. το παραγοντικό ενός αριθµού Ν, µπορεί να καλεί το παραγοντικό του αριθµού Ν-1 το παραγοντικό

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

ΑΠΑΝΤΗΣΕΙΣ. H διαδικασία ανεύρεσης λογικών λαθών περιλαμβάνει : β- Σωστό. Διαπίστωση του είδους του λάθους γ- Σωστό δ- Λάθος

ΑΠΑΝΤΗΣΕΙΣ. H διαδικασία ανεύρεσης λογικών λαθών περιλαμβάνει : β- Σωστό. Διαπίστωση του είδους του λάθους γ- Σωστό δ- Λάθος ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ ΕΠΑΛ (ΟΜΑΔΑ Α ) & ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΕΠΑΛ (ΟΜΑΔΑ Β ) ΤΕΤΑΡΤΗ 08/04/2015 - ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΟΚΤΩ (8) ΘΕΜΑ Α ΑΠΑΝΤΗΣΕΙΣ Α1. Α2. α-

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

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

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

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