Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεΣταμάτιος Κολιάτσος Τροποποιήθηκε πριν 6 χρόνια
1
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ (Α.Ε.Π.Π.)
ΙΟΡΔΑΝΗΣ ΣΑΒΒΟΥΛΙΔΗΣ
2
ΣΚΟΠΟΣ ΜΑΘΗΜΑΤΟΣ Το μάθημα έχει ως σκοπό να αναπτύξει την σκέψη των μαθητών, ώστε να κατανοούν και να επιλύουν «προβλήματα» με τη βοήθεια του Η/Υ. Η επίλυση γίνεται με τη δημιουργία αλγορίθμων στο χαρτί και στη συνέχεια προγραμμάτων σε μια υποθετική γλώσσα προγραμματισμού με όνομα «ΓΛΩΣΣΑ» Η «ΓΛΩΣΣΑ», ακολουθεί τις γενικές αρχές των πραγματικών γλωσσών προγραμματισμού, αλλά δεν παράγει αληθινές εφαρμογές (ψευδογλώσσα) Χρησιμοποιείται ώστε να μας εισάγει με ένα γενικό τρόπο στον συναρπαστικό κόσμο του προγραμματισμού Η/Υ Η μετατροπή ενός προγράμματος από «ΓΛΩΣΣΑ» σε πραγματική γλώσσα προγραμματισμού (π.χ. Pascal, C, Fortran, Java, Visual Basic κ.λπ.) είναι απλή υπόθεση Κάθε γλώσσα προγραμματισμού, σχεδιάζεται για συγκεκριμένο σκοπό, αλλά όλες έχουν κοινά χαρακτηριστικά και επεξεργάζονται τους ίδιους τύπους δεδομένων, με παρόμοιο λεξιλόγιο
3
ΚΕΦΑΛΑΙΟ 1ο ΑΝΑΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ
ΚΕΦΑΛΑΙΟ 1ο ΑΝΑΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ
4
ΤΙ ΕΙΝΑΙ «ΠΡΟΒΛΗΜΑ» ΟΡΙΣΜΟΣ Πρόβλημα, θεωρείται μια κατάσταση την οποία πρέπει να επιλύσουμε, χωρίς να είναι απαραίτητα γνωστή ή προφανής η λύσης της. Π.χ. Τρύπα του όζοντος, πληθωρισμός, αργή ταχύτητα μετάδοσης δεδομένων, ιοί υπολογιστών κ.λπ.
5
ΚΑΤΑΝΟΗΣΗ ΠΡΟΒΛΗΜΑΤΟΣ
Η κατανόηση ενός προβλήματος προϋποθέτει: Σαφήνεια διατύπωσής του από αυτόν που μας το αναθέτει Σωστή ερμηνεία από εμάς που αναλαμβάνουμε να το επιλύσουμε Οδηγούμαστε σε προβληματικές καταστάσεις αν ένα από τα παραπάνω δεν πληρείται (χάσιμο χρόνου, χρημάτων, εργατοωρών κ.λπ.). Η επόμενη διαφάνεια το απεικονίζει απόλυτα!
6
Το αποτέλεσμα δεν είναι πάντα το αναμενόμενο
1. Τι μας ζήτησαν 2. Τι καταλάβαμε 3. Τι περιγράψαμε 4. Πως διορθώσαμε 5. Τι προγραμματίσαμε 6. Τι παραδώσαμε
7
ΓΙΑ ΤΗΝ ΕΠΙΛΥΣΗ ΕΝΟΣ ΠΡΟΒΛΗΜΑΤΟΣ
Η σωστή και πλήρης αποσαφήνιση των δεδομένων και των ζητούμενων του προβλήματος 1. ΚΑΤΑΝΟΗΣΗ Το αρχικό πρόβλημα διασπάται σε άλλα επί μέρους απλούστερα προβλήματα (υποπροβλήματα) 2. ΑΝΑΛΥΣΗ Υλοποιείται η λύση του προβλήματος, λύνοντας τα επιμέρους προβλήματα 3. ΕΠΙΛΥΣΗ
8
ΔΟΜΗ ΤΟΥ ΠΡΟΒΛΗΜΑΤΟΣ Κάθε πρόβλημα έχει μια δομή την οποία πρέπει να αναλύσουμε και να αποτυπώσουμε. Η καταγραφή της δομής του προβλήματος, σημαίνει και την ανάλυσή του σε μικρότερα και απλούστερα υποπροβλήματα. ΟΡΙΣΜΟΣ Δομή προβλήματος, είναι τα επιμέρους τμήματα που αποτελούν το πρόβλημα (υποπροβλήματα) και ο τρόπος αλληλοσύνδεσής τους.
9
ΔΙΑΓΡΑΜΜΑΤΙΚΗ ΑΠΕΙΚΟΝΙΣΗ ΔΟΜΗΣ ΕΝΟΣ ΠΡΟΒΛΗΜΑΤΟΣ
Απλοποιούμε (αποδομούμε) όσο το δυνατόν περισσότερο το πρόβλημα σε ευκολότερα τμήματα
10
ΚΑΘΟΡΙΣΜΟΣ ΑΠΑΙΤΗΣΕΩΝ
Για τη σωστή επίλυση ενός προβλήματος : Προσδιορίζουμε τα δεδομένα που μας παρέχονται Καταγράφουμε τα ζητούμενα Δεν είναι πάντα εύκολο να διακρίνουμε τα δεδομένα. Δεν υπάρχει συγκεκριμένη μέθοδολογία. Το ίδιο ισχύει και για τα ζητούμενα.
11
ΟΡΙΣΜΟΙ Δεδομένο, είναι οποιοδήποτε στοιχείο μπορούμε να αντιληφθούμε σε ένα πρόβλημα και αναπαρίσταται με κάποια τιμή (αριθμητική, ημερομηνία, κείμενο, κλπ). Π.χ. 1562, 24/5/2005, «ΚΑΛΗΜΕΡΑ ΣΑΣ» Πληροφορία, είναι το αποτέλεσμα της επεξεργασίας δεδομένων. Επεξεργασία δεδομένων, είναι η διαδικασία με την οποία ο μηχανισμός επίλυσης ενός προβλήματος δέχεται δεδομένα, τα επεξεργάζεται με συγκεκριμένο τρόπο και παράγει πληροφορία.
12
ΚΑΤΗΓΟΡΙΕΣ ΠΡΟΒΛΗΜΑΤΩΝ
Βάσει της δυνατότητας επίλυσης τους: Επιλύσιμα Η λύση τους μπορεί να διατυπωθεί χωρίς πρόβλημα Ανοικτά Είναι αυτά που πιθανώς λύνονται, αλλά δεν έχει βρεθεί ακόμα η λύση τους Άλυτα Απλά δεν επιλύονται
13
ΚΑΤΗΓΟΡΙΕΣ ΠΡΟΒΛΗΜΑΤΩΝ (συνέχεια)
Βάσει της δομής των λύσεων τους: Δομημένα Μπορούν να αυτοματοποιηθούν με συγκεκριμένη διαδικασία (π.χ. στα μαθηματικά) Ημιδομημένα Υπάρχουν διαφορετικές γνωστές λύσεις, αλλά αφήνεται στον ανθρώπινο παράγοντα η επιλογή τους. Αδόμητα Δεν μπορούν να δομηθούν οι λύσεις τους. Προέχει η ανθρώπινη διαίσθηση
14
ΚΑΤΗΓΟΡΙΕΣ ΠΡΟΒΛΗΜΑΤΩΝ (συνέχεια)
Βάσει του είδους επίλυσής τους: Απόφασης Απάντηση με τη μορφή ΝΑΙ ή ΟΧΙ (αληθές ή ψευδές) Υπολογιστικά Η λύση στηρίζεται σε υπολογισμούς ώστε να βρούμε τις τιμές που ικανοποιούν τα δεδομένα Βελτιστοποίησης Όπου ζητούμε τη βέλτιστη λύση με τα δεδομένα που έχουμε.
15
ΠΡΟΒΛΗΜΜΑΤΑ ΣΕ Η/Υ Ο Η/Υ δεν έχει νόηση όπως ο άνθρωπος
Ο λόγος που αναθέτουμε την επίλυση ενός προβλήματος σε Η/Υ είναι γιατί: Κάνει πολύπλοκους υπολογισμούς Εκτελεί επαναληπτικές διαδικασίες Χειρίζεται τεράστιο πλήθος δεδομένων Είναι ταχύτατος και... Δεν παραπονιέται! Και όλα αυτά, ο Η/Υ μπορεί να τα κάνει μόνο με προσθέσεις, συγκρίσεις και μεταφορά!
16
Το παραπάνω πρόβλημα είναι επιλύσιμο, δομημένο και υπολογιστικό
ΠΑΡΑΔΕΙΓΜΑ Να βρεθεί η λύση της συνάρτησης: f(x) = 2x2 – 3x + 4 ΚΑΤΑΝΟΗΣΗ Πρόκειται για β’ θμια εξίσωση με α=2, β=-3, γ=4 ΑΝΑΛΥΣΗ Για να βρεθεί η λύση πρέπει να βρούμε τη διακρίνουσα (Δ). Ο τύπος που δίνει τη διακρίνουσα είναι Δ = β2 – 4αγ Έλεγχος για Δ < 0 ; Η λύση προκύπτει από τον τύπο x1,x2 = (-β ± √ Δ) / 2α ΕΠΙΛΥΣΗ Το μόνο που μένει είναι να εφαρμόσουμε τα παραπάνω βήματα (αλγόριθμο) σε Η/Υ Το παραπάνω πρόβλημα είναι επιλύσιμο, δομημένο και υπολογιστικό
17
ΚΕΦΑΛΑΙΟ 2ο ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ
ΚΕΦΑΛΑΙΟ 2ο ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ
18
ΤΙ ΕΙΝΑΙ ΑΛΓΟΡΙΘΜΟΣ Αλγόριθμος, είναι μια πεπερασμένη σειρά αυστηρά καθορισμένων και εκτελέσιμων βημάτων (ενεργειών), που στοχεύουν στην επίλυση ενός προβλήματος Ο αλγόριθμος ΔΕΝ είναι το ίδιο το πρόγραμμα Τα προγράμματα δημιουργούνται, μετατρέποντας τον αλγόριθμο, χρησιμοποιώντας μια γλώσσα προγραμματισμού (π.χ. ΓΛΩΣΣΑ) σε ειδικό περιβάλλον εργασίας. Ιστορικό σημείωμα: Η λέξη προέρχεται από έναν Πέρση μαθηματικό του 825 μ.Χ., τον Abu Jafar Mohammed ibn Musa al Khowarizmi. Ο αλγόριθμος είναι σαν μια συνταγή μαγειρικής που διαχειρίζεται συγκεκριμένα υλικά (δεδομένα εισόδου), όπου μετά το μαγείρεμα με ένα συγκεκριμένο τρόπο (επεξεργασία), παράγεται το φαγητό (έξοδος)
19
ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΑΛΓΟΡΙΘΜΩΝ
Κάθε αλγόριθμος ικανοποιεί τα παρακάτω: Δέχεται είσοδο (input) δεδομένων, δηλ. καμία ή περισσότερες τιμές Παράγει έξοδο (output), δηλαδή τουλάχιστον ένα αποτέλεσμα Αποτελείται από καθορισμένα βήματα (όχι ασάφειες) π.χ. Σε μια συνταγή λέει : «Βάζουμε λίγο αλάτι...». Δηλ. πόσο; Αποτελείται από πεπερασμένα βήματα, δηλ. δεν εκτελείται επ’ άπειρον (περατότητα) Είναι αποτελεσματικός (κάθε βήμα είναι απλό και εκτελέσιμο) π.χ. Η εντολή «Βρες το μεγαλύτερο από 100 αριθμούς» δεν υπάρχει. Πρέπει να αναλυθεί σε πολλές απλούστερες εντολές, δηλ. Πάρε με τη σειρά κάθε αριθμό, έλεγξε αν αυτός είναι ο μεγαλύτερος και αφού τελειώσουν εμφάνισε τον. ΕΙΣΟΔΟΣ ΕΠΕΞΕΡΓΑΣΙΑ ΕΞΟΔΟΣ
20
ΜΕΛΕΤΗ ΑΛΓΟΡΙΘΜΩΝ Η Πληροφορική μελετά τους αλγορίθμους από τις ακόλουθες σκοπιές : Του υλικού Επηρεάζεται η εκτέλεση ενός προγράμματος από την απόδοση ή την αρχιτεκτονική του υλικού; Των γλωσσών προγραμματισμού Αν κάποια γλώσσα μπορεί να υποστηρίξει τον αλγόριθμο, ή χρειάζονται περισσότερες εντολές Θεωρητική Αν υπάρχει κάποιος αποδοτικός αλγόριθμος για τη λύση ενός προβλήματος Αναλυτική Μελετώνται οι πόροι που απαιτούνται από έναν αλγόριθμο (μνήμη, χρόνος, είσοδος/έξοδος, κλπ)
21
ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΩΝ
Με ελεύθερο κείμενο (free text) Δεν είναι αποτελεσματικός γιατί επιδέχεται παρανόηση Με διαγράμματα ροής (flow charts) Σπανίζουν ωστόσο, γιατί είναι δύσχρηστα και καταλαμβάνουν πολύ χώρο. Παρόλα αυτά, μπορείτε να τα χρησιμοποιήσετε. Με ψευδοκώδικα (pseudocode) Μια υποθετική γλώσσα (ψευδοκώδικας), πιο κοντά στη φυσική γλώσσα, αλλά με συγκεκριμένη σύνταξη και δομή, που όταν εκτελεστεί θα δώσει τα ίδια αποτελέσματα με τον αλγόριθμο.
22
ΑΛΓΟΡΙΘΜΟΣ ΜΕ ΕΛΕΥΘΕΡΟ ΚΕΙΜΕΝΟ (παράδειγμα)
ΕΙΣΟΔΟΣ: Δύο αριθμοί Α και Β ΕΞΟΔΟΣ: Πηλίκο της διαίρεσής Α/Β αρκεί Β ≠ 0 Κάνε εισαγωγή του Α και του Β Έλεγξε αν ο Β ≠ 0 Αν ναι, υπολόγισε το αποτέλεσμα Α / Β και τοποθέτησέ το στο Χ και εμφάνισέ το Αλλιώς, εμφάνισε το μήνυμα «ΛΑΘΟΣ στο Β»
23
ΑΛΓΟΡΙΘΜΟΣ ΜΕ ΔΙΑΓΡΑΜΜΑ ΡΟΗΣ (παράδειγμα)
ΑΡΧΗ ΤΕΛΟΣ Διάβασε Α και Β Χ Α / Β Εκτύπωσε Χ Β ≠ 0 ; ΝΑΙ ΟΧΙ Εκτύπωσε «ΛΑΘΟΣ στο Β» ΑΡΧΗ Δηλώνει την αρχή ή τέλος του αλγορίθμου ΤΕΛΟΣ Διακλάδωση εκτέλεσης οδηγιών του αλγορίθμου ΙΣΧΥΕΙ Η ΣΥΝΘΗΚΗ; ΝΑΙ ΟΧΙ Είσοδος ή έξοδος δεδομένων Είσοδος ή Έξοδος Αριθμητική πράξη, εκχώρηση τιμής, κ.λπ. Εκτέλεση ενέργειας Όλα τα σχήματα ενώνονται με γραμμές που καταλήγουν σε βέλος
24
ΑΛΓΟΡΙΘΜΟΣ ΜΕ ΨΕΥΔΟΚΩΔΙΚΑ (παράδειγμα)
ΑΛΓΟΡΙΘΜΟΣ ΜΕ ΨΕΥΔΟΚΩΔΙΚΑ (παράδειγμα) Αλγόριθμος Πηλίκο Διάβασε Α, Β Αν Β <> 0 τότε Χ Α / Β Εμφάνισε Χ Αλλιώς Εμφάνισε «ΛΑΘΟΣ στο Β» Τέλος_αν Τέλος Πηλίκο
25
ΣΥΝΙΣΤΩΣΕΣ ΑΛΓΟΡΙΘΜΟΥ
Δομή ακολουθίας Εκτέλεση των βημάτων του αλγορίθμου βάσει της σειράς εμφάνισης τους. Στο εξής τα βήματα θα τα ονομάζουμε εντολές Δομές επιλογής (4) Η εκτέλεση των εντολών διακλαδώνεται με βάση την επαλήθευση ή όχι, κάποιας συνθήκης. Δομές επανάληψης (3) Η εκτέλεση των εντολών μπορεί να γίνεται επαναληπτικά.
26
ΣΤΟΙΧΕΙΑ ΑΛΓΟΡΙΘΜΟΥ Μεταβλητές (variables) Θέσεις μνήμης με όνομα, στις οποίες εκχωρούμε κάποια τιμή η οποία μπορεί αργότερα να αλλάξει. Σταθερές (constants) Θέσεις μνήμης με όνομα, αλλά με προκαθορισμένη τιμή, σταθερή πάντα (π.χ. Π : 3,14 ή ΦΠΑ : 21%) Τελεστές (operators) Είναι τα σύμβολα που χρησιμοποιούνται στην τέλεση των πράξεων (+, - , * , / , < , > , , ΚΑΙ, Ή, ΟΧΙ, ^ , MOD, DIV, κ.λπ.) Εντολές (commands) και Συναρτήσεις Είναι ειδικές δεσμευμένες λέξεις και δομές, τις οποίες χρησιμοποιούμε με συγκεκριμένο συντακτικό κατά την εκτέλεση των βημάτων και άλλων υπολογισμών του αλγορίθμου Εκφράσεις/παραστάσεις (expressions) Αποτελούνται από μεταβλητές ή σταθερές και παράγουν ένα αποτέλεσμα που εκχωρείται () σε μεταβλητή. Π.χ. Στη μεταβλητή Α εκχωρείται το αποτέλεσμα της έκφρασης Χ + 15 / Υ Α Χ + 15 / Υ Σχόλια προγραμματιστή Είναι ελεύθερο κείμενο που συμπληρώνει ο προγραμματιστής σε σημεία του αλγορίθμου που τον ενδιαφέρουν, ώστε να κάνει τον αλγόριθμο πιο κατανοητό. Πρέπει να ξεκινούν με το χαρακτήρα του θαυμαστικού (!)
27
1. ΜΕΤΑΒΛΗΤΕΣ Χρησιμοποιούμε μεταβλητές όταν θέλουμε να αποθηκεύσουμε μια τιμή. Οι μεταβλητές είναι θέσεις μνήμης με όνομα, τύπο και περιεχόμενο Το όνομα μπορεί να είναι ένα απλό γράμμα ή μια μόνο λέξη και δεν μπορεί να αρχίζει με αριθμό ή άλλο σύμβολο. Το μόνο επιτρεπτό σύμβολο είναι η κάτω παύλα ( _ ) για χρήση ανάμεσα στα γράμματα του όνοματος π.χ. Επώνυμο, ΑΒ_Κ12, Status , Χ, Υποχρεωτικό Μέσος *** Επίσης, οι μεταβλητές απαγορεύεται να ονομάζονται χρησιμοποιώντας δεσμευμένες λέξεις (π.χ. Αλγόριθμος) *** Τύπος, είναι το είδος των πιθανών τιμών που μπορεί να λάβει η μεταβλητή π.χ. Ακέραιος, δεκαδικός, κείμενο (χαρακτήρας/αλφαριθμητικό), λογική τιμή (δηλ. «Αληθές» ή «Ψευδές») κ.λπ. Σημ.: Ορίζουμε τον τύπο όταν γράφουμε σε γλώσσα προγραμματισμού (π.χ. «ΓΛΩΣΣΑ»). Όχι σε αλγόριθμο. Τιμή, είναι το περιεχόμενο της μεταβλητής π.χ. 50, , «ΝΙΚΟΣ», ΑΛΗΘΕΣ Κάθε μεταβλητή μπορεί να έχει μόνο μια τιμή τη φορά. >>> Αν θέσουμε νέα τιμή, η προηγούμενη αντικαθίσταται. <<< ΣΩΣΤΕΣ ΛΑΘΟΣ
28
1. ΜΕΤΑΒΛΗΤΕΣ (παραδείγματα)
1. ΜΕΤΑΒΛΗΤΕΣ (παραδείγματα) Η εκχώρηση τιμής σε μεταβλητή γίνεται με τον τελεστή δηλ. από τα δεξιά προς τα αριστερά Εκχώρηση της τιμής «ΑΙΘΡΙΟΣ ΚΑΙΡΟΣ», στη μεταβλητή με όνομα Status Status “ΑΙΘΡΙΟΣ ΚΑΙΡΟΣ” Εκχώρηση της τιμής 200, στη μεταβλητή με όνομα Y3 Y3 200 Εκχώρηση του αποτελέσματος της έκφρασης Υ , στη μεταβλητή Χ, δηλαδή ό,τι περιέχει η μεταβλητή Υ3 συν 100 Χ Υ Αύξηση της τιμής Υ3 κατά 1. Υπολογίζεται πρώτα η έκφραση Υ3 + 1 με την τρέχουσα τιμή της Υ3 και εκχωρείται το αποτέλεσμα πάλι στην Υ3 Υ3 Υ3 + 1 ΑΙΘΡΙΟΣ ΚΑΙΡΟΣ Status 200 Y3 300 Χ 201 Y3
29
2. ΣΤΑΘΕΡΕΣ Οι σταθερές, μοιάζουν με τις μεταβλητές, στο ότι είναι κι αυτές θέσεις μνήμης με όνομα και περιεχόμενο. Ο τύπος υπονοείται βάσει της αρχικής τιμής. Η τιμή αυτή όμως είναι πάντα σταθερή σε όλο τον αλγόριθμο και είναι προκαθορισμένη στην αρχή (πριν τις δηλώσεις μεταβλητών). Η εκχώρηση τιμής σε σταθερές γίνεται με το σύμβολο (=), π.χ. Π=3.14 Αντί λοιπόν της ίδιας της τιμής της σταθεράς, μπορούμε να χρησιμοποιήσουμε το όνομα της (πολύ βολικό αν την αναφέρουμε σε διάφορα σημεία στον αλγόριθμο) Αν τυχόν αργότερα αποφασίσουμε ότι, η αρχική τιμή της σταθεράς πρέπει να είναι άλλη, θα κάνουμε τη ρύθμιση αυτή μόνο μια φορά στην αρχή και όχι σε κάθε σημείο που θα χρησιμοποιούσαμε την τιμή της. Το παρακάτω παράδειγμα είναι απολύτως αντιπροσωπευτικό: 21% Π.χ. ΦΠΑ
30
2. ΣΤΑΘΕΡΕΣ (παράδειγμα)
2. ΣΤΑΘΕΡΕΣ (παράδειγμα) Έστω ότι πρέπει να υπολογίσουμε το ποσό που αντιστοιχεί στο ποσοστό ΦΠΑ (21%) τριών προϊόντων. Αυτό προκύπτει αν πολλαπλασσιάσουμε την αρχική αξία του κάθε προϊόντος, με το αντίστοιχο ποσοστό ΦΠΑ (Αρχική_αξία x ποσοστό_ΦΠΑ) ΦΠΑ_παπουτσιών x 0.21 ΦΠΑ_παντελονιών x ΦΠΑ_παλτό x 0.21 Παρατηρείτε ότι το 0.21 χρησιμοποιείται 3 φορές στον παραπάνω αλγόριθμο. Αν αλλάξει η νομοθεσία και το ποσοστό γίνει 0.23, τότε πρέπει να κάνουμε την αλλαγή και στα 3 σημεία. Αυτό δεν είναι ευέλικτο και σε μεγάλες εφαρμογές οδηγεί σε πολλά σφάλματα. Μπορούμε να αλλάξουμε τον αλγόριθμο εισάγοντας μια σταθερά για τον ΦΠΑ: Ποσοστό_ΦΠΑ = 0.21 ΦΠΑ_παπουτσιών x Ποσοστό_ΦΠΑ ΦΠΑ_παντελονιών x Ποσοστό_ΦΠΑ ΦΠΑ_παλτό x Ποσοστό_ΦΠΑ Αν το ποσοστό ΦΠΑ αλλάξει σε 0.23, αρκεί να κάνουμε την αλλαγή μόνο μία φορά στην αρχή του αλγορίθμου, αφού χρησιμοποιούμε μόνο το όνομα της σταθεράς Σταθερά με αρχική τιμή Χρήση ονόματος της σταθεράς
31
3. ΤΕΛΕΣΤΕΣ Οι τελεστές είναι τα σύμβολα τα οποία χρησιμοποιούμε σε διάφορες εκφράσεις για να εκτελέσουμε κάποιον υπολογισμό. ΤΕΛΕΣΤΗΣ ΕΠΕΞΗΓΗΣΗ ΠΑΡΑΔΕΙΓΜΑ ΕΚΧΩΡΗΣΗ ΤΙΜΗΣ ΣΕ ΜΕΤΑΒΛΗΤΗ Χ1 10 (Χ1: 10) + ΠΡΟΣΘΕΣΗ Χ1 (Χ1: 30) - ΑΦΑΙΡΕΣΗ Χ1 10 – 20 (Χ1: -10) * ΠΟΛΛΑΠΛΑΣΣΙΑΣΜΟΣ Χ1 10 * 20 (Χ1: 200) / ΔΙΑΙΡΕΣΗ Χ1 10 / 2 (Χ1: 5) ^ ΥΨΩΣΗ ΣΕ ΔΥΝΑΜΗ Χ1 10 ^ 2 (Χ1: 100) DIV ΠΗΛΙΚΟ ΑΚΕΡΑΙΑΣ ΔΙΑΙΡΕΣΗ Χ1 10 DIV 3 (Χ1: 3) MOD ΥΠΟΛΟΙΠΟ ΑΚΕΡΑΙΑΣ ΔΙΑΙΡΕΣΗΣ Χ1 10 MOD 3 (Χ1: 1) < , <= ΜΙΚΡΟΤΕΡΟ, ΜΙΚΡΟΤΕΡΟ ‘Η ΙΣΟ Χ1 (5 < 7) (Χ1: ΑΛΗΘΕΣ) > , >= ΜΕΓΑΛΥΤΕΡΟ, ΜΕΓΑΛΥΤΕΡΟ ‘Η ΙΣΟ Χ1 (5 >= 7) (Χ1: ΨΕΥΔΕΣ) = , <> ΙΣΟ ΜΕ , ΔΙΑΦΟΡΟ ΤΟΥ Χ1 (5 <> 7) (Χ1: ΑΛΗΘΕΣ) ΚΑΙ ΣΥΖΕΥΞΗ ΛΟΓΙΚΩΝ ΤΙΜΩΝ (Α / Ψ) Χ1 (4 > 3) ΚΑΙ (6 < 2) (Χ1: ΨΕΥΔΕΣ) Ή ΔΙΑΖΕΥΞΗ ΛΟΓΙΚΩΝ ΤΙΜΩΝ (Α / Ψ) Χ1 (4 > 3) Ή (6 < 2) (Χ1: ΑΛΗΘΕΣ) ΌΧΙ ΑΡΝΗΣΗ ΛΟΓΙΚΗΣ ΤΙΜΗΣ (Α / Ψ) Χ1 ΌΧΙ (4 < 3) (Χ1: ΑΛΗΘΕΣ)
32
4. ΕΝΤΟΛΕΣ ( Συνοπτικός πίνακας σύνταξης τους )
ΤΡΟΠΟΣ ΣΥΝΤΑΞΗΣ ΕΝΤΟΛΗΣ ΤΙ ΚΑΝΕΙ Η ΕΝΤΟΛΗ ΠΑΡΑΔΕΙΓΜΑ Αλγόριθμος όνομα_αλγορίθμου Δήλωση αρχής αλγορίθμου Αλγόριθμος ΜΟ Τέλος όνομα_αλγορίθμου Δήλωση τέλους αλγορίθμου Τέλος ΜΟ Διάβασε μεταβλητή1, μεταβλητή2 Είσοδος δεδομένων από το χρήστη σε μεταβλητές Διάβασε Χ1, Χ2 Εμφάνισε/εκτύπωσε μεταβλητή1 , μεταβλητή2 Εμφάνιση τιμής μεταβλητής σε οθόνη/εκτυπωτή Εμφάνισε Χ1, Χ2 Εκτύπωσε Χ2 Αν μια_συνθήκη_ισχύει τότε εκτέλεση ομάδας εντολών αλλιώς εκτέλεση άλλης ομάδας εντολών τέλος_αν Διακλάδωση της εκτέλεσης του αλγορίθμου προς τη μια ή την άλλη ομάδα εντολών, ανάλογα με τη συνθήκη Αν χ = 5 τότε y 10 αλλιώς y 20 τέλος_αν Όσο μια_συνθήκη_ισχύει επανάλαβε εκτέλεση διάφορων εντολών τέλος_επανάληψης Επαναληπτική εκτέλεση των εντολών ΟΣΟ ισχύει η συνθήκη Όσο χ < 5 επανάλαβε χ χ + 1 τέλος_επανάληψης Αρχή_επανάληψης εκτέλεση διάφορων εντολών Μέχρις_ότου μια_συνθήκη_ισχύσει Επαναληπτική εκτέλεση των εντολών ΜΕΧΡΙ να ισχύσει η συνθήκη Αρχή_επανάληψης χ χ +1 μέχρις_ότου χ = 5 Για μεταβλητή1 από Χ μέχρι Υ εκτέλεση διάφορων εντολών τέλος_επανάληψης Επαναληπτική εκτέλεση των εντολών για ΣΥΓΚΕΚΡΙΜΕΝΟ πλήθος επαναλήψεων Για i από 1 μέχρι 10 χ χ + 5 τέλος_επανάληψης
33
4. ΣΥΝΑΡΤΗΣΕΙΣ (Ενσωματωμένες)
Οι ενσωματωμένες συναρτήσεις έχουν την ίδια χρήση όπως και στα μαθηματικά. Μπορούν να χρησιμοποιηθούν συνδυαστικά. Π.χ : Ζ ΗΜ ( ΣΥΝ ( Χ ) + Α_Μ ( Υ ) ) + 50 ΣΥΝΑΡΤΗΣΗ ΕΠΕΞΗΓΗΣΗ ΠΑΡΑΔΕΙΓΜΑ ΑΠΟΤΕΛΕΣΜΑ ΗΜ(Χ) Υπολογισμός ημιτόνου Υ ΗΜ(200) Υ = 0.71 ΣΥΝ(Χ) Υπολογισμός συνημιτόνου Υ ΣΥΝ(50) Υ = 0.64 ΕΦ(Χ) Υπολογισμός εφαπτομένης Υ ΕΦ(45) Υ = 1.73 Τ_Ρ(Χ) Υπολογισμός τετραγωνικής ρίζας Υ Τ_Ρ(16) Υ = 4 ΛΟΓ(Χ) Υπολογισμός φυσικού λογάριθμου Υ ΛΟΓ(40) Υ = 3.69 Ε(Χ) Υπολογισμός ex Υ Ε(3) Υ = 20.09 Α_Μ(Χ) Ακέραιο μέρος του Χ Υ Α_Μ(32,6) Υ = 32 Α_Τ(Χ) Απόλυτη τιμή του Χ Υ Α_Τ(-5) Υ = 5
34
ΠΩΣ ΓΡΑΦΟΥΜΕ ΑΛΓΟΡΙΘΜΟ ΜΕ ΨΕΥΔΟΚΩΔΙΚΑ (Γενική θεώρηση)
Ξεκινάμε πάντα με τη δήλωση: Αλγόριθμος όνομα_αλγορίθμου Αρχικοποιούμε τυχόν σταθερές. Δίνουμε τιμή στις απαραίτητες μεταβλητές, είτε με την εντολή Διάβασε, είτε με απ’ ευθείας εκχώρηση (). Χρησιμοποιούμε όπου χρειάζεται δομές διακλάδωσης (Αν ), και δομές επανάληψης Για , Όσο, Μέχρις_ότου) Κάνουμε τους υπολογισμούς μας εκχωρώντας τα αποτελέσματα πάλι σε μεταβλητές () Εμφανίζουμε (σε οθόνη ή εκτυπωτή) τα αποτελέσματα με τις εντολές: Εμφάνισε ή εκτύπωσε μεταβλητή1,2...Ν Τα βήματα 2 ως 6 μπορεί να εμφανίζονται αρκετές φορές και με οποιαδήποτε σειρά, ανάλογα με το πρόβλημα Τελειώνουμε πάντα με τη δήλωση Τέλος όνομα_αλγορίθμου (ίδιο όνομα με το βήμα 1) Παράδειγμα Αλγόριθμος εμβαδό_κύκλου π = 3.14 Διάβασε ρ Εμβ π * ρ ^ 2 Εμφάνισε “Eμβαδό=“,Εμβ Τέλος εμβαδό_κύκλου
35
ΠΩΣ ΓΡΑΦΟΥΜΕ ΕΝΑ ΠΡΟΓΡΑΜΜΑ ΣΕ «ΓΛΩΣΣΑ» (Γενική θεώρηση)
ΠΩΣ ΓΡΑΦΟΥΜΕ ΕΝΑ ΠΡΟΓΡΑΜΜΑ ΣΕ «ΓΛΩΣΣΑ» (Γενική θεώρηση) Παράδειγμα Ξεκινάμε πάντα με τη δήλωση: ΠΡΟΓΡΑΜΜΑ όνομα_προγράμματος Μετά γράφουμε τις σταθερές με τη δήλωση: ΣΤΑΘΕΡΕΣ και από την επόμενη γραμμή τις αρχικοποιούμε, χρήση του ίσον (=) Μετά δηλώνουμε τις μεταβλητές με τη δήλωση: ΜΕΤΑΒΛΗΤΕΣ και από την επόμενη γραμμή τις ονομάζουμε, δίνοντας και τον τύπο τους Ξεκινούμε το κύριο σώμα του προγράμματος με τη δήλωση: ΑΡΧΗ Δίνουμε τιμή στις απαραίτητες μεταβλητές, είτε με την εντολή ΔΙΑΒΑΣΕ, είτε με απ’ ευθείας εκχώρηση (). Χρησιμοποιούμε όπου χρειάζεται δομές διακλάδωσης (ΑΝ ) και δομές επανάληψης (ΓΙΑ , ΟΣΟ, ΜΕΧΡΙΣ_ΟΤΟΥ) Κάνουμε τους υπολογισμούς μας εκχωρώντας τα αποτελέσματα πάλι σε μεταβλητές () Εμφανίζουμε τα αποτελέσματα με τις εντολές: ΓΡΑΨΕ μεταβλητή1,2...Ν Τελειώνουμε το κύριο σώμα του προγράμματος με τη δήλωση: ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΠΡΟΓΡΑΜΜΑ εμβαδό_κύκλου ΣΤΑΘΕΡΕΣ π = 3.14 ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: Εμβ, ρ ΑΡΧΗ ΔΙΑΒΑΣΕ ρ Εμβ π * ρ ^ 2 ΓΡΑΨΕ “Eμβαδό=“,Εμβ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Τα κεφαλαία γράμματα στις εντολές δεν είναι υποχρεωτικά αλλά ΣΥΝΙΣΤΩΝΤΑΙ
36
ΔΙΑΦΟΡΕΣ ΣΤΗ ΣΥΓΓΡΑΦΗ ΑΛΓΟΡΙΘΜΟΥ & ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ «ΓΛΩΣΣΑ»
ΔΙΑΦΟΡΕΣ ΣΤΗ ΣΥΓΓΡΑΦΗ ΑΛΓΟΡΙΘΜΟΥ & ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ «ΓΛΩΣΣΑ» Ένας αλγόριθμος γραμμένος με ψευδοκώδικα, έχει λίγες μόνο διαφορές στη συγγραφή του, από ένα πρόγραμμα γραμμένο σε «ΓΛΩΣΣΑ», γι’ αυτό πιθανώς να υπάρξει μια μικρή σύγχυση. Αναλυτικότερα έχουμε: Η έναρξη στον αλγόριθμο γίνεται με τη δήλωση Αλγόριθμος, ενώ στο πρόγραμμα με τη δήλωση ΠΡΟΓΡΑΜΜΑ Οι μεταβλητές και οι σταθερές δηλώνονται μόνο στο πρόγραμμα. Στον αλγόριθμο, απλά γράφουμε //μεταβλητή1, μεταβλητή2,...// στην αρχή Μόνο στο πρόγραμμα έχουμε έναρξη του κύριου σώματος με τη δήλωση ΑΡΧΗ Στον αλγόριθμο η έξοδος γίνεται με την εντολή Εμφάνισε, ενώ στο πρόγραμμα με την εντολή ΓΡΑΨΕ Το τέλος στον αλγόριθμο, γίνεται με το Τέλος όνομα_αλγορίθμου ενώ στο πρόγραμμα, μόνο με το ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
37
ΣΥΝΙΣΤΩΣΕΣ ΑΛΓΟΡΙΘΜΟΥ
Δομή ακολουθίας Εκτέλεση των βημάτων του αλγορίθμου βάσει της σειράς εμφάνισης τους. Στο εξής τα βήματα θα τα ονομάζουμε εντολές 4 δομές επιλογής Η εκτέλεση των εντολών διακλαδώνεται με βάση την επαλήθευση ή όχι, κάποιας συνθήκης. 3 δομές επανάληψης Η εκτέλεση των εντολών μπορεί να γίνεται επαναληπτικά.
38
4. ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ Παράδειγμα #1
Σημαίνει ότι η εκτέλεση των εντολών, γίνεται με τη σειρά που εμφανίζονται (ακολουθιακά) Αλγόριθμος μέσος_όρος Διάβασε χ1, χ2, χ3 Πλήθος 3 ΜΟ (χ1+χ2+χ3) / Πλήθος Εμφάνισε ΜΟ Τέλος μέσος_όρος Δήλωση έναρξης αλγορίθμου Εισαγωγή τιμών στις χ1,χ2,χ3 από το χρήστη Εκχώρηση τιμής στη μεταβλητή Πλήθος Υπολογισμός και εκχώρηση τιμής στη MO Εμφάνιση αποτελέσματος ΜΟ Δήλωση τέλους αλγορίθμου
39
4. ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ Παράδειγμα #1 (συνέχεια)
4. ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ Παράδειγμα #1 (συνέχεια) Με διάγραμμα ροής Με ψευδοκώδικα Με πρόγραμμα Αλγόριθμος μέσος_όρος Διάβασε χ1, χ2, χ3 Πλήθος 3 ΜΟ (χ1+χ2+χ3) / Πλήθος Εμφάνισε ΜΟ Τέλος μέσος_όρος ΠΡΟΓΡΑΜΜΑ μέσος_όρος ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: χ1,χ2,χ3,Πλήθος ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ ΑΡΧΗ ΔΙΑΒΑΣΕ χ1, χ2, χ3 Πλήθος 3 ΜΟ (χ1+χ2+χ3) / Πλήθος ΓΡΑΨΕ ΜΟ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΑΡΧΗ ΤΕΛΟΣ Διάβασε χ1, χ2, χ3 Πλήθος 3 ΜΟ (χ1 + χ2 + χ3) / Πλήθος Εμφάνισε ΜΟ
40
4. ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ Παράδειγμα #2
4. ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ Παράδειγμα #2 Ο κλασσικός τρόπος αντιμετάθεσης (Swap) τιμών δύο μεταβλητών ΤΟ ΛΑΘΟΣ ΠΟΥ ΓΙΝΕΤΑΙ ΤΟ ΣΩΣΤΟ 8 5 8 8 5 5 5 8 8 Ζ Χ Υ Χ Υ 1. Ζ Χ 1. Χ Υ ΒΟΗΘΗΤΙΚΗ ΜΕΤΑΒΛΗΤΗ 2. Χ Υ 3. Υ Ζ Χάνουμε την τιμή της Χ και κάνουμε και τις δύο ίσες
41
4. ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ Παράδειγμα #2 (Αντιμετάθεσης συνέχεια)
4. ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ Παράδειγμα #2 (Αντιμετάθεσης συνέχεια) Με διάγραμμα ροής Με ψευδοκώδικα Με πρόγραμμα Αλγόριθμος Swap Διάβασε x, y z x x y y z Εμφάνισε x, y Τέλος Swap ΠΡΟΓΡΑΜΜΑ Swap ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: x, y, z ΑΡΧΗ ΔΙΑΒΑΣΕ x, y z x x y y z ΓΡΑΨΕ x, y ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΑΡΧΗ ΤΕΛΟΣ Διάβασε x, y z x x y y z Εμφάνισε χ, y
42
ΑΛΓΕΒΡΑ BOOLE
43
ΑΛΓΕΒΡΑ BOOLE ( Εισαγωγή στις Λογικές Πράξεις – George Boole, Άγγλος μαθημ. )
Χρησιμοποιούνται κατά κόρον στον προγραμματισμό Σε συγκρίσεις, δομές επιλογής και επανάληψης, δηλ. παντού Κάνουν χρήση τουλάχιστον μιας συνθήκης Το αποτέλεσμα είναι πάντα μια από τις τιμές (ΑΛΗΘΗΣ , ΨΕΥΔΗΣ ) Λογικοί τελεστές (κατά σειρά προτεραιότητας) 1. ΌΧΙ (ένας τελεστέος) Αντιστρέφει την πρόταση που την ακολουθεί 2. ΚΑΙ (δύο τελεστέοι, λογική σύζευξη) Πρέπει και οι δύο προτάσεις να έχουν τιμή ΑΛΗΘΗΣ για να είναι τελικά ΑΛΗΘΗΣ 3. Ή (δύο τελεστέοι, λογική διάζευξη) Πρέπει τουλάχιστον η μια πρόταση να είναι ΑΛΗΘΗΣ για να είναι τελικά ΑΛΗΘΗΣ 43
44
ΑΛΓΕΒΡΑ BOOLE (με παραδείγματα λογικών τελεστών)
ΌΧΙ (Α) ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΌΧΙ (Χ = 5) ισούται με (Χ<>5) ΌΧΙ (ΑΛΗΘΗΣ) ισούται με ΨΕΥΔΗΣ ΌΧΙ (ΑΠΑΝΤΗΣΗ = «Ν») ισούται με ΑΠΑΝΤΗΣΗ <> «Ν» (Χ=5) ΚΑΙ (Χ=10) είναι ΨΕΥΔΗΣ (Χ>5) ΚΑΙ (Χ<10) είναι ΑΛΗΘΗΣ για 5<Χ< ΨΕΥΔΗΣ για κάθε άλλο Χ (Α=Β) ΚΑΙ (Α=Γ) είναι ΑΛΗΘΗΣ για Β=Γ ΨΕΥΔΗΣ για Β<>Γ (ΠΟΛΗ = «ΠΑΤΡΑ») ΚΑΙ (ΟΝΟΜΑ <> «ΝΙΚΟΣ») Α Β Α ΚΑΙ Β ΨΕΥΔΗΣ ΑΛΗΘΗΣ Α Β Α Ή Β ΨΕΥΔΗΣ ΑΛΗΘΗΣ (Χ=5) Ή (Χ=10) είναι ΑΛΗΘΗΣ για Χ=5 ή Χ=10 και ΨΕΥΔΗΣ για κάθε άλλο Χ (Χ>5) Ή (Χ<10) είναι ΑΛΗΘΗΣ πάντα (ΠΟΛΗ=«ΠΑΤΡΑ») Ή (Χ=15)
45
ΑΛΓΕΒΡΑ BOOLE (Εξάσκηση)
Να συμπληρώσετε τους παρακάτω πίνακες με τις τιμές ΑΛΗΘΗΣ,ΨΕΥΔΗΣ Α Β Γ (Α>4) ΚΑΙ (Β<Γ) (Α=Β) Ή (Γ<Β) 6 4 -1 5 -2 3 2 10 20 ΨΕΥΔΗΣ ΑΛΗΘΗΣ ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ ΑΛΗΘΗΣ ΑΛΗΘΗΣ Α Β Γ Α < “Ξ” ΚΑΙ Β<=Γ Α >= “Ο” Ή Γ<Β “Ν” 3 5 “Ο” 9 “Χ” 8 “Α” -2 ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ 45
46
ΣΥΝΙΣΤΩΣΕΣ ΑΛΓΟΡΙΘΜΟΥ
Δομή ακολουθίας Εκτέλεση των βημάτων του αλγορίθμου βάσει της σειράς εμφάνισης τους. Στο εξής τα βήματα θα τα ονομάζουμε εντολές 4 δομές επιλογής Η εκτέλεση των εντολών διακλαδώνεται με βάση την επαλήθευση ή όχι, κάποιας συνθήκης. 3 δομές επανάληψης Η εκτέλεση των εντολών μπορεί να γίνεται επαναληπτικά.
47
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Απλή) Η εντολή Αν/τότε Η ροή εκτέλεσης των εντολών του αλγορίθμου εξαρτάται από την επαλήθευση ή όχι, μιας συνθήκης Αλγόριθμος αποτελέσματα Διάβασε μ1, μ2, μ3 Πλήθος 3 ΜΟ (μ1+μ2+μ3) / Πλήθος Αν ΜΟ >= 10 τότε Εμφάνισε «ΠΕΡΑΣΕΣ» Εμφάνισε ΜΟ τέλος_αν Τέλος αποτελέσματα Αν συνθήκη_ισχύει τότε εντολές Τέλος_Αν
48
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Απλή) (συνέχεια)
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Απλή) (συνέχεια) Με διάγραμμα ροής Με πρόγραμμα ΑΡΧΗ ΤΕΛΟΣ Διάβασε χ1, χ2, χ3 Πλήθος 3 ΜΟ (χ1 + χ2 + χ3) / Πλήθος Εμφάνισε «ΠΕΡΑΣΕΣ» Εμφάνισε ΜΟ ΜΟ >= 10 ΝΑΙ ΟΧΙ ΠΡΟΓΡΑΜΜΑ αποτελέσματα ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: μ1,μ2,μ3,Πλήθος ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ ΑΡΧΗ ΔΙΑΒΑΣΕ μ1, μ2, μ3 Πλήθος 3 ΜΟ (μ1+μ2+μ3) / Πλήθος ΑΝ ΜΟ >= 10 ΤΟΤΕ ΓΡΑΨΕ «ΠΕΡΑΣΕΣ» ΓΡΑΨΕ ΜΟ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
49
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Σύνθετη)
Αλγόριθμος αποτελέσματα Διάβασε μ1, μ2, μ3 Πλήθος 3 ΜΟ (μ1+μ2+μ3) / Πλήθος Αν ΜΟ >= 10 τότε Εμφάνισε «ΠΕΡΑΣΕΣ» Εμφάνισε ΜΟ αλλιώς Εμφάνισε «ΚΟΠΗΚΕΣ» τέλος_αν Τέλος αποτελέσματα Μια άλλη συνήθης μορφή Αν συνθήκη_ισχύει τότε εντολές αλλιώς εντολές Τέλος_Αν
50
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Σύνθετη) (συνέχεια)
Με διάγραμμα ροής Με πρόγραμμα ΑΡΧΗ ΤΕΛΟΣ Διάβασε χ1, χ2, χ3 Πλήθος 3 ΜΟ (χ1 + χ2 + χ3) / Πλήθος Εμφάνισε «ΠΕΡΑΣΕΣ» Εμφάνισε ΜΟ ΜΟ >= 10 ΝΑΙ ΟΧΙ Εμφάνισε «ΚΟΠΗΚΕΣ» ΠΡΟΓΡΑΜΜΑ αποτελέσματα ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: μ1,μ2,μ3,Πλήθος ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ ΑΡΧΗ ΔΙΑΒΑΣΕ μ1, μ2, μ3 Πλήθος 3 ΜΟ (μ1+μ2+μ3) / Πλήθος ΑΝ ΜΟ >= 10 ΤΟΤΕ ΓΡΑΨΕ «ΠΕΡΑΣΕΣ» ΓΡΑΨΕ ΜΟ ΑΛΛΙΩΣ ΓΡΑΨΕ «ΚΟΠΗΚΕΣ» ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
51
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Πολλαπλή)
Η πλήρης μορφή της Αν Αν συνθήκη_1_ισχύει τότε εντολές αλλιώς_αν συνθήκη_2_ισχύει τότε εντολές αλλιώς_αν συνθήκη_Ν_ισχύει τότε εντολές αλλιώς εντολές Τέλος_Αν Αλγόριθμος αποτελέσματα Διάβασε μ1, μ2, μ3 Πλήθος 3 ΜΟ (μ1+μ2+μ3) / Πλήθος Αν ΜΟ < 10 τότε Εμφάνισε «ΚΟΠΗΚΕΣ» αλλιώς_αν ΜΟ <= 15 τότε Εμφάνισε «ΜΕΤΡΙΑ» αλλιώς_αν ΜΟ <= 18 τότε Εμφάνισε «ΠΟΛΥ ΚΑΛΑ» αλλιώς Εμφάνισε «ΑΡΙΣΤΑ» τέλος_αν Τέλος αποτελέσματα
52
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Πολλαπλή) (συνέχεια)
Με διάγραμμα ροής Με πρόγραμμα ΠΡΟΓΡΑΜΜΑ αποτελέσματα ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: μ1,μ2,μ3,Πλήθος ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ ΑΡΧΗ ΔΙΑΒΑΣΕ μ1, μ2, μ3 Πλήθος 3 ΜΟ (μ1+μ2+μ3) / Πλήθος ΑΝ ΜΟ < 10 ΤΟΤΕ ΓΡΑΨΕ «ΚΟΠΗΚΕΣ» ΑΛΛΙΩΣ_ΑΝ ΜΟ <= 15 ΤΟΤΕ ΓΡΑΨΕ «ΜΕΤΡΙΑ» ΑΛΛΙΩΣ_ΑΝ ΜΟ <= 18 ΤΟΤΕ ΓΡΑΨΕ «ΠΟΛΥ ΚΑΛΑ» ΑΛΛΙΩΣ ΓΡΑΨΕ «ΑΡΙΣΤΑ» ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΕΛΟΣ Εμφάνισε «ΚΟΠΗΚΕΣ» ΜΟ < 10 ΝΑΙ ΟΧΙ ΜΟ <= 15 Εμφάνισε «ΜΕΤΡΙΑ» ΜΟ <= 18 Εμφάνισε «ΠΟΛΥ ΚΑΛΑ» Εμφάνισε «ΑΡΙΣΤΑ»
53
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Πολλαπλή)
Αλγόριθμος αποτελέσματα Διάβασε ηλικία Επίλεξε ηλικία Περίπτωση < Εμφάνισε «βρέφος» Περίπτωση < Εμφάνισε «νήπιο» Περίπτωση < Εμφάνισε «παιδί» Περίπτωση < Εμφάνισε «ανήλικος» Περίπτωση < Εμφάνισε «ενήλικας» Περίπτωση αλλιώς Εμφάνισε «ηλικιωμένος» Τέλος_επιλογών Τέλος αποτελέσματα Άλλη μορφή πολλαπλής επιλογής Επίλεξε μεταβλητή Περίπτωση τιμή1ή σύγκριση Περίπτωση τιμή2 ή σύγκριση Περίπτωση τιμή3 ή σύγκριση Περίπτωση αλλιώς Τέλος_επιλογών Λειτουργεί ακριβώς όπως και η πολλαπλή ΑΝ
54
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Φωλιασμένη)
Αλγόριθμος αποτελέσματα Διάβασε μ1, μ2, μ3 Πλήθος 3 Ηλικία 14 ΜΟ (μ1+μ2+μ3) / Πλήθος Αν ΜΟ < 10 τότε Αν Ηλικία < 15 τότε Εμφάνισε «ΚΟΠΗΚΕΣ ΜΙΚΡΕ» αλλιώς Εμφάνισε «ΚΟΠΗΚΕΣ ΜΕΓΑΛΕ» τέλος_αν αλλιώς Αν Ηλικία < 15 τότε Εμφάνισε «ΠΕΡΑΣΕΣ ΜΙΚΡΕ» αλλιώς Εμφάνισε «ΠΕΡΑΣΕΣ ΜΕΓΑΛΕ» τέλος_αν τέλος_αν Τέλος αποτελέσματα Φωλιασμένη εντολή Αν μέσα σε Αν Αν συνθήκη_1_ισχύει τότε Αν συνθήκη_2_ισχύει τότε εντολές αλλιώς εντολές τέλος_αν αλλιώς Αν συνθήκη_3_ισχύει τότε εντολές αλλιώς εντολές τέλος_αν τέλος_αν
55
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Φωλιασμένη) (συνέχεια)
4. ΔΟΜΗ ΕΠΙΛΟΓΗΣ (Φωλιασμένη) (συνέχεια) Με διάγραμμα ροής Με πρόγραμμα ΠΡΟΓΡΑΜΜΑ αποτελέσματα ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: μ1,μ2,μ3,Πλήθος, Ηλικία ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ ΑΡΧΗ ΔΙΑΒΑΣΕ μ1, μ2, μ3 Πλήθος 3 Ηλικία 14 ΜΟ (μ1+μ2+μ3) / Πλήθος ΑΝ ΜΟ < 10 ΤΟΤΕ Αν Ηλικία < 15 ΤΟΤΕ ΓΡΑΨΕ «ΚΟΠΗΚΕΣ ΜΙΚΡΕ» αλλιώς ΓΡΑΨΕ «ΚΟΠΗΚΕΣ ΜΕΓΑΛΕ» ΤΕΛΟΣ_ΑΝ ΑΛΛΙΩΣ ΑΝ Ηλικία < 15 ΤΟΤΕ ΓΡΑΨΕ «ΠΕΡΑΣΕΣ ΜΙΚΡΕ» ΑΛΛΙΩΣ ΓΡΑΨΕ «ΠΕΡΑΣΕΣ ΜΕΓΑΛΕ» ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΕΛΟΣ Εμφάνισε «ΚΟΠΗΚΕΣ ΜΙΚΡΕ» ΜΟ < 10 ΝΑΙ ΟΧΙ Ηλικία < 15 Εμφάνισε «ΚΟΠΗΚΕΣ ΜΕΓΑΛΕ» Εμφάνισε «ΠΕΡΑΣΕΣ ΜΙΚΡΕ» Εμφάνισε «ΠΕΡΑΣΕΣ ΜΕΓΑΛΕ»
56
ΣΥΝΙΣΤΩΣΕΣ ΑΛΓΟΡΙΘΜΟΥ
Δομή ακολουθίας Εκτέλεση των βημάτων του αλγορίθμου βάσει της σειράς εμφάνισης τους. Στο εξής τα βήματα θα τα ονομάζουμε εντολές 4 δομές επιλογής Η εκτέλεση των εντολών διακλαδώνεται με βάση την επαλήθευση ή όχι, κάποιας συνθήκης. 3 δομές επανάληψης Η εκτέλεση των εντολών μπορεί να γίνεται επαναληπτικά.
57
4. ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ (ή Βρόχοι) (Τί είναι ;)
Οι δομές επανάληψης χρησιμοποιούνται στις περιπτώσεις όπου μια ακολουθία εντολών πρέπει να εκτελεστεί πολλές φορές Προσοχή! Εννοούμε την ίδια ακολουθία εντολών, δηλαδή τις ίδιες ενέργειες συνεχώς. Π.χ. : Εμφάνιση ενός μηνύματος πολλές φορές Εισαγωγή πολλών στοιχείων Εισαγωγή στοιχείου μέχρι να δοθεί κάποιο συγκεκριμένο (έλεγχος εισόδου) Επαναλαμβανόμενες πράξεις σε μια αριθμητική ακολουθία Οι δομές επανάληψης πρέπει να ολοκληρώνονται! Αλγοριθμικό κριτήριο περατότητας 57
58
4. ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ (ή Βρόχοι) (Τι θα κάναμε χωρίς αυτές ;)
Εμφάνισε 1 Εμφάνισε 2 Εμφάνισε 3 Εμφάνισε 4 Εμφάνισε 15 Άθροισμα 0 Διάβασε Βαθμός1 Άθροισμα Άθροισμα + Βαθμός1 Διάβασε Βαθμός2 Άθροισμα Άθροισμα + Βαθμός2 Διάβασε Βαθμός6 Άθροισμα Άθροισμα + Βαθμός6 ΜΟ Άθροισμα / 6 Θετικοί 0 Διάβασε Αριθμός1 Αν Αριθμός1 > 0 Τότε Θετικοί Θετικοί + 1 Τέλος_Αν Διάβασε Αριθμός7 Αν Αριθμός7 > 0 Τότε Εμφάνισε Θετικοί Χ1 Όσο Χ <= 15 Εμφάνισε Χ ΧΧ + 1 Τέλος_επανάληψης Άθροισμα 0 Χ 1 Αρχή_επανάληψης Διάβασε Βαθμός Άθροισμα Άθροισμα + Βαθμός Χ Χ + 1 Μέχρις_ότου X > 6 ΜΟ Άθροισμα / 6 Θετικοί 0 Για Χ από 1 μέχρι 3 Διάβασε Αριθμός Αν Αριθμός2 > 0 Τότε Θετικοί Θετικοί + 1 Τέλος_Αν Τέλος_επανάληψης Εμφάνισε Θετικοί 58
59
4. ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ (ή Βρόχοι) (Τι κερδίσαμε;)
Πολύ χρόνο Φανταστείτε στην προηγούμενη διαφάνεια, να είχαμε 1000 βαθμούς Απλότητα, καθαρότητα στον αλγόριθμο Εύκολα κάποιος αντιλαμβάνεται ότι θέλεις να τυπώσεις 15 αριθμούς ή να προσθέσεις 6 βαθμούς Εκφραστικότητα Εκφράζουμε πιο σωστά τη μέθοδο επίλυσης του προβλήματος 59
60
4. ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ (ή Βρόχοι)
Όλες οι δομές επανάληψης περιλαμβάνουν : Μια ακολουθία εντολών που εκτελείται. Ενδέχεται να περιλαμβάνονται άλλοι βρόχοι σ’ αυτή την ακολουθία (Επανάληψη μέσα σε άλλη επανάληψη) Μια συνθήκη που ελέγχει (ή στην αρχή ή στο τέλος) εάν η επανάληψη πρέπει να ολοκληρωθεί ή να τερματιστεί Προσοχή… Πρέπει μέσα στο βρόγχο να υπάρχουν εντολές που αλλάζουν την συνθήκη, αλλιώς η επανάληψη θα εκτελείται επ’ άπειρον. Π.χ. αν θέλω να εμφανίσω ένα μήνυμα 10 φορές, στο βρόγχο, εκτός από την εντολή «Εμφάνισε» πρέπει να υπάρχει και μια μεταβλητή που θα μετράει πόσες φορές έγινε εμφάνιση του μηνύματος και θα αυξάνεται κάθε φορά, ώστε κάποια στιγμή να σταματήσει. 60
61
4. ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ (Βρόχοι) (Τα είδη)
Υπάρχουν 3 είδη δομών επανάληψης : Όσο ισχύει μια συνθήκη (κριτήριο). Π.χ. Όσο η μεταβλητή Χ είναι μεγαλύτερη του 0 συνέχισε τη μείωσή της κατά 5 Συνεχής εισαγωγή ακεραίων όσο δεν πληκτρολογούμε το 0 Μέχρις ότου ισχύσει μια συνθήκη. Π.χ. Αύξησε την τιμή της Κ κατά 10, μέχρις ότου η τρέχουσα ώρα γίνει 14:00μμ. Διάβασμα αρχείων μέχρι να τελειώσει το περιεχόμενό τους Για γνωστό πλήθος επαναλήψεων. Π.χ. Ν ή Ν-5 + Ν ή Ν! (Ν παραγοντικό) Ταξινόμηση συγκεκριμένης λίστας στοιχείων Δημιουργία όλων των τιμών μιας συνάρτησης F(x) όπου x 1-100
62
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» Χρησιμοποιείται σε ΟΛΕΣ τις περιπτώσεις και σίγουρα όταν ΔΕΝ είναι γνωστός ο αριθμός επαναλήψεων Όσο μια_συνθήκη_ισχύει επανάλαβε εντολές Τέλος_επανάληψης Όπου: μια_συνθήκη_ισχύει : είναι μια έκφραση, της οποίας το αποτέλεσμα είναι η λογική τιμή ΑΛΗΘΗΣ ή ΨΕΥΔΗΣ (π.χ. ΜΟ >= 10) Η συνθήκη της δομής «ΟΣΟ» αποτιμάται στην αρχή, γι’ αυτό πρέπει να είναι ήδη ΑΛΗΘΗΣ, αλλιώς δεν θα εκτελεστούν ποτέ οι εντολές. Καθώς εκτελούνται οι εντολές, πρέπει κάποια στιγμή να αλλάξουν τη συνθήκη, γιατί... Μετά από κάθε επανάληψη των εντολών, η τιμή της συνθήκης αποτιμάται και πάλι, ώστε να αποφασιστεί η έξοδος ή όχι, από τη δομή. Αν λοιπόν σε κάθε επανάληψη, η συνθήκη παραμένει πάντα ΑΛΗΘΗΣ, τότε θα εκτελείται επ’ άπειρον (ατέρμων βρόχος) και θα παρατηρήσουμε ότι η εφαρμογή μας έχει κολλήσει. x 20 Όσο x >= 10 επανάλαβε y y + 2 * x x x – 1 τέλος_επανάληψης περιοχή εντολών
63
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» (διαγραμματικά)
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» (διαγραμματικά) Αρχικοποίηση συνθήκης Συνθήκη ισχύει ακόμη; Εντολές. (Περιλαμβάνουν και την αλλαγή της συνθήκης) ΝΑΙ ΌΧΙ
64
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» Παράδειγμα #1
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» Παράδειγμα #1 Να γραφεί αλγόριθμος ο οποίος να εμφανίζει όλους τους ακεραίους αριθμούς μεταξύ 1 και 100 Εδώ, παρόλο που γνωρίζουμε το πλήθος των επαναλήψεων, μπορούμε να χρησιμοποιήσουμε τη δομή «ΟΣΟ» Πριν ακόμη εκτελεστεί η «ΟΣΟ», η συνθήκη της είναι ΑΛΗΘΗΣ (το i είναι 1 δηλ. ≤ 100), οπότε η εκτέλεση των εντολών αρχίζει Σε κάθε εκτέλεση, το (i) που συμμετέχει στη συνθήκη, αλλάζει Μετά από κάθε εκτέλεση, η ροή πηγαίνει ξανά στην αρχή όπου αποτιμάται και πάλι η συνθήκη. Αν είναι και πάλι ΑΛΗΘΗΣ, οι εντολές ξαναεκτελούνται Μόλις η i γίνει 101, η συνθήκη παύει να ισχύει, και η ροή συνεχίζει μετά το τέλος_επανάληψης Αλγόριθμος ακέραιοι_1_100 i 1 Όσο i <= 100 επανάλαβε Εμφάνισε i i i + 1 τέλος_επανάληψης Εμφάνισε «ΤΕΛΟΣ» Τέλος ακέραιοι_1_100
65
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» Παράδειγμα #2
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» Παράδειγμα #2 Να γραφεί αλγόριθμος που να διαβάζει ένα άγνωστο πλήθος αριθμών και να εμφανίζει τελικά το άθροισμα τους Εδώ πρέπει να καθορίσουμε πότε πρέπει να σταματήσει να εκτελείται ο αλγόριθμος (περατότητα) Αν εκτελούνταν από εμάς, κάθε φορά που θα προσθέταμε έναν αριθμό στο τρέχον άθροισμα, θα μπορούσαμε να σταματήσουμε. Στον Η/Υ όμως, παρουσιάζεται η ιδιομορφία ότι πρέπει να λάβει εντολή για να σταματήσει (δεν έχει νόηση όπως έχουμε πει) Κάνουμε λοιπόν τη σύμβαση ότι πρέπει να συνεχίζει όσο λαμβάνει τιμή ≠ 0 (το μηδέν δεν προσφέρει έτσι κι αλλιώς τίποτε στο άθροισμα – ουδέτερο στοιχείο πρόσθεσης) Η γραμμή (στο σχόλιο SOS) χρειάζεται οπωσδήποτε, για να δώσουμε την ευκαιρία να ξανααποτιμηθεί η συνθήκη, αλλιώς θα εγκλωβιστούμε σε ατέρμονα βρόχο. Αλγόριθμος Αθροίσματος S 0 Διάβασε α Όσο α ≠ 0 επανάλαβε S S + α Διάβασε α !!! SOS !!! τέλος_επανάληψης Εμφάνισε S Τέλος Αθροίσματος
66
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» Παράδειγμα #3
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» Παράδειγμα #3 Να γραφεί αλγόριθμος ο οποίος να εμφανίζει τον μέγιστο και τον ελάχιστο, ενός μη δεδομένου πλήθους θετικών αριθμών μεταξύ 1 και 100, καθώς επίσης και το ίδιο το πλήθος Εδώ δεν γνωρίζουμε το πλήθος των αριθμών από την αρχή. Πρέπει όμως, να το βρούμε στη συνέχεια. Επίσης, πρέπει να καθορίσουμε πότε θα τελειώσει η διαδικασία υπολογισμού (περατότητα). Ας θεωρήσουμε ότι τελειώνει όταν δοθεί αριθμός <1 ή >100 Θα αποθηκεύουμε τα αποτελέσματα στις αντίστοιχες μεταβλητές Το πλήθος θα αυξάνεται κατά 1, για κάθε αριθμό που δίνουμε Η γραμμή (στο σχόλιο SOS) χρειάζεται οπωσδήποτε, για να δώσουμε την ευκαιρία να ξανααποτιμηθεί η συνθήκη, αλλιώς θα εγκλωβιστούμε σε ατέρμονα βρόχο. Αλγόριθμος MinMax Μέγ 0 !!! Σίγουρα θα βρεθεί μεγαλύτερος Ελάχ 101 !!! Σίγουρα θα βρεθεί μικρότερος Πλήθος 0 Διάβασε α Όσο α >= 1 ΚΑΙ α <= 100 επανάλαβε Αν α > Μέγ τότε Μέγ α Αν α < Ελάχ τότε Ελάχ α Πλήθος Πλήθος + 1 Διάβασε α !!!! SOS !!!! τέλος_επανάληψης Εμφάνισε Ελάχ, Μέγ, Πλήθος Τέλος MinMax
67
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» Παράδειγμα #4
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» Παράδειγμα #4 ΑΛΓΟΡΙΘΜΟΣ ΠΟΛΛΑΠΛΑΣΣΙΑΣΜΟΥ ΑΛΑ ΡΩΣΙΚΑ ΣΕ ΦΥΣΙΚΗ ΓΛΩΣΣΑ Παίρνουμε δύο θετικούς ακέραιους αριθμούς Α, Β Διπλασιάζουμε τον Α και υποδιπλασιάζουμε τον Β (αγνοώντας τα δεκαδικά ψηφία) Συνεχίζουμε όσο ο Β είναι > 0 Προσθέτουμε τους αριθμούς της 1ης στήλης για τους οποίους ο αριθμός στη 2η στήλη είναι περιττός Το άθροισμα που προκύπτει είναι το γινόμενο των δύο αρχικών αριθμών A B 45 19 90 9 180 4 360 2 720 1 Άθροισμα 855
68
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΟΣΟ» Παράδειγμα #4 – ΠΟΛ/ΣΜΟΣ ΑΛΑ ΡΩΣΙΚΑ (συνέχεια)
Με διάγραμμα ροής Με ψευδοκώδικα ΑΡΧΗ Αλγόριθμος Aλά_Ρώσικα Διάβασε α, β S 0 Όσο β > 0 επανάλαβε Αν β MOD 2 = 1 τότε S S + α τέλος_αν α α * 2 β β DIV 2 τέλος_επανάληψης Εμφάνισε S Τέλος Aλά_Ρώσικα ΔΙΑΒΑΣΕ α, β β ← β DIV 2 α ← α * 2 S ← 0 ΟΧΙ S ← S + α β > 0 ΝΑΙ β MOD 2 = 1 ΝΑΙ ΟΧΙ Εμφάνισε S ΤΕΛΟΣ
69
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΜΕΧΡΙΣ ΟΤΟΥ»
Χρησιμοποιείται επίσης όταν ΔΕΝ είναι γνωστός ο αριθμός επαναλήψεων Αρχή_επανάληψης εντολές Μέχρις_ότου μια_συνθήκη_ισχύσει Όπου: μια_συνθήκη_ισχύσει : είναι μια έκφραση, της οποίας το αποτέλεσμα είναι η λογική τιμή ΑΛΗΘΗΣ ή ΨΕΥΔΗΣ. π.χ. ΜΕΣΟΣ_ΟΡΟΣ >= 10 ή ΤΑΞΗ = “Γ” κ.λπ. Οι εντολές θα εκτελεστούν τουλάχιστον μία φορά, αφού η συνθήκη αποτιμάται στο τέλος. Καθώς εκτελούνται οι εντολές, πρέπει κάποια στιγμή να αλλάξουν τη συνθήκη, ώστε να αποφασιστεί η έξοδος ή όχι, από τη δομή. Αν λοιπόν σε κάθε επανάληψη, η συνθήκη παραμένει πάντα ΨΕΥΔΗΣ, τότε θα εκτελείται επ’ άπειρον (ατέρμων βρόχος) και θα παρατηρήσουμε ότι η εφαρμογή μας έχει κολλήσει. Διαφέρει από τη δομή «ΟΣΟ», στο ότι (α) η συνθήκη εξετάζεται στο τέλος και (β) η συνθήκη είναι η αντίθετη (έχουμε επανάληψη όσο είναι ΨΕΥΔΗΣ) x 50 Αρχή_επανάληψης y y + 2 * x x x – 1 Μέχρις_ότου x = 0 περιοχή εντολών
70
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΜΕΧΡΙΣ ΟΤΟΥ» (διαγραμματικά)
Εντολές (Περιλαμβάνουν Και την αλλαγή της συνθήκης) Συνθήκη ισχύει ακόμη; ΟΧΙ ΝΑΙ
71
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΜΕΧΡΙΣ_ΟΤΟΥ» Παράδειγμα #1
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΜΕΧΡΙΣ_ΟΤΟΥ» Παράδειγμα #1 Να γραφεί αλγόριθμος ο οποίος να εμφανίζει όλους τους ακεραίους αριθμούς μεταξύ 1 και 100 Εδώ, παρόλο που γνωρίζουμε το πλήθος των επαναλήψεων, μπορούμε να χρησιμοποιήσουμε τη δομή «ΜΕΧΡΙΣ_ΟΤΟΥ» Η εκτέλεση των εντολών αρχίζει έτσι κι αλλιώς, αφού δεν υπάρχει κάποια συνθήκη να τη σταματήσει Σε κάθε εκτέλεση, το (i) που συμμετέχει στη συνθήκη, αλλάζει Μετά από κάθε εκτέλεση, αποτιμάται η συνθήκη. Αν είναι και πάλι ΨΕΥΔΗΣ, οι εντολές ξαναεκτελούνται Μόλις η i γίνει 101, η συνθήκη ισχύει, και η ροή συνεχίζει μετά την εντολή μέχρις_ότου Αλγόριθμος ακέραιοι_1_100 i 1 Αρχή_επανάληψης Εμφάνισε I i i + 1 μέχρις_ότου i > 100 Εμφάνισε «ΤΕΛΟΣ» Τέλος ακέραιοι_1_100
72
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΜΕΧΡΙΣ_ΟΤΟΥ» Παράδειγμα #2
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΜΕΧΡΙΣ_ΟΤΟΥ» Παράδειγμα #2 Να γραφεί αλγόριθμος που να διαβάζει ένα άγνωστο πλήθος αριθμών και να εμφανίζει τελικά το άθροισμα τους Εδώ πρέπει να καθορίσουμε πότε πρέπει να σταματήσει να εκτελείται ο αλγόριθμος (περατότητα) Αν εκτελούνταν από εμάς, κάθε φορά που θα προσθέταμε έναν αριθμό στο τρέχον άθροισμα, θα μπορούσαμε να σταματήσουμε. Στον Η/Υ όμως, παρουσιάζεται η ιδιομορφία ότι πρέπει να λάβει εντολή για να σταματήσει (δεν έχει νόηση όπως έχουμε πει) Κάνουμε λοιπόν τη σύμβαση ότι πρέπει να σταματήσει όταν λάβει την τιμή 0 (το μηδέν δεν προσφέρει έτσι κι αλλιώς τίποτε στο άθροισμα – ουδέτερο στοιχείο πρόσθεσης) Αλγόριθμος Αθροίσματος S 0 Αρχή_επανάληψης Διάβασε α S S + α Μέχρις_ότου α = 0 Εμφάνισε S Τέλος Αθροίσματος
73
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΜΕΧΡΙΣ_ΟΤΟΥ» Παράδειγμα #3
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΜΕΧΡΙΣ_ΟΤΟΥ» Παράδειγμα #3 Να γραφεί αλγόριθμος ο οποίος να εμφανίζει τον μέγιστο και τον ελάχιστο, ενός μη δεδομένου πλήθους θετικών αριθμών μεταξύ 1 και 100, καθώς επίσης και το ίδιο το πλήθος Εδώ δεν γνωρίζουμε το πλήθος των αριθμών από την αρχή. Πρέπει όμως, να το βρούμε στη συνέχεια. Επίσης, πρέπει να καθορίσουμε πότε θα τελειώσει η διαδικασία υπολογισμού (περατότητα). Ας θεωρήσουμε ότι τελειώνει όταν δοθεί αριθμός εκτός του ορίου Θα αποθηκεύουμε τα αποτελέσματα στις αντίστοιχες μεταβλητές Το πλήθος θα αυξάνεται κατά 1, για κάθε αριθμό που δίνουμε Όταν η έκφραση (α < 1 ‘Η α > 100) γίνει ΑΛΗΘΗΣ, τότε η επανάληψη σταματά Αλγόριθμος MinMax Μέγ 0 !!! Σίγουρα θα βρεθεί μεγαλύτ. Ελάχ 101 !!! Σίγουρα θα βρεθεί μικρότ. Πλήθος 0 Αρχή_επανάληψης Διάβασε α Αν α > Μέγ τότε Μέγ α Αν α < Ελάχ τότε Ελάχ α Πλήθος Πλήθος Μέχρις_ότου α < 1 ‘Η > 100 Εμφάνισε Ελάχ, Μέγ, Πλήθος Τέλος MinMax
74
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΓΙΑ» Χρησιμοποιείται όταν ΕΙΝΑΙ γνωστός ο αριθμός επαναλήψεων Για μεταβλητή1 από Χ μέχρι Υ με βήμα Ζ εντολές Τέλος_επανάληψης Όπου : μεταβλητή1 : η μεταβλητή της οποίας η τιμή θα περάσει από το κάτω όριο στο άνω όριο Χ : κάτω όριο Υ : άνω όριο, μεγαλύτερο ή ίσο του Χ Ζ : βήμα μεταβολής (Αν είναι 1, τότε η φράση με βήμα Ζ , παραλείπεται Αν είναι αρνητικό, πρέπει Χ >= Υ) Η δομή «ΓΙΑ» αναλαμβάνει αυτόματα την μεταβολή της μεταβλητής1 σε κάθε επανάληψη και συνεπώς την αποτίμηση της συνθήκης, η οποία σε αντίθεση με τις εντολές ΟΣΟ/ΜΕΧΡΙΣ_ΟΤΟΥ, λειτουργεί στο παρασκήνιο. Είναι σίγουρο λοιπόν, ότι η επανάληψη θα τελειώσει. Οι εντολές, μπορούν να κάνουν χρήση της μεταβλητής1. Δεν επιτρέπεται όμως, να αλλάζουν την τιμή της, γιατί θα αλλοιώσουν το πλήθος επαναλήψεων. Για x από 1 μέχρι y y + 2 * x z x – Εμφάνισε y, z τέλος_επανάληψης περιοχή εντολών
75
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΓΙΑ» (διαγραμματικά)
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΓΙΑ» (διαγραμματικά) Αρχικοποίηση συνθήκης Συνθήκη ισχύει ακόμη; Εντολές (Περιλαμβάνουν και την αλλαγή της συνθήκης) ΝΑΙ ΌΧΙ Διαγραμματικά είναι ίδια με την δομή επανάληψης «ΟΣΟ»
76
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΓΙΑ» Πόσες φορές θα εκτελεστούν οι παρακάτω επαναλήψεις; Για Α από 10 μέχρι 20 Για Β από 10 μέχρι 10 Για Ε από 30 μέχρι 20 A1 10 A2 21 Για ΜΕΤΡΗΤΗ από Α1 μέχρι Α2 Για Γ από -10 μέχρι 10 Για Δ από -10 μέχρι -20 11 φορές 1 φορά Καμία φορά 12 φορές 21 φορές Καμία φορά 76
77
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΓΙΑ» παράδειγμα #1
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΓΙΑ» παράδειγμα #1 Υπολογισμός του αθροίσματος Με διάγραμμα ροής Με ψευδοκώδικα ΑΡΧΗ ΤΕΛΟΣ i 1 Sum 0 Εμφάνισε Sum i <= 100 ΝΑΙ ΟΧΙ i i + 1 Sum Sum + i Αλγόριθμος άθροισμα_100 Sum 0 Για i από 1 μέχρι Sum Sum + i Τέλος_επανάληψης Εμφάνισε Sum Τέλος άθροισμα_100 Διαγραμματικά είναι ίδια με τη δομή επανάληψης ΟΣΟ
78
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΓΙΑ» παράδειγμα #2
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΓΙΑ» παράδειγμα #2 Να γραφεί αλγόριθμος που θα υπολογίζει το άθροισμα όλων των περιττών αριθμών από το 1 ως το 10 1ος Τρόπος 2ος Τρόπος Αλγόριθμος ΔΠ3 Άθροισμα 0 Για i από 1 μέχρι 10 με_βήμα 2 Άθροισμα Άθροισμα + i Τέλος_επανάληψης Εμφάνισε Άθροισμα Τέλος ΔΠ3 Αλγόριθμος ΔΠ3 Άθροισμα 0 Για i από 1 μέχρι 10 Αν i MOD 2 = 1 Τότε Άθροισμα Άθροισμα + i Τέλος_Αν Τέλος_επανάληψης Εμφάνισε Άθροισμα Τέλος ΔΠ3 Γιατί εκτελείται πιο αργά; 78
79
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΓΙΑ» παράδειγμα #3
4. ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ «ΓΙΑ» παράδειγμα #3 Διάστημα βολής για t από 1 ως 100sec κάθε 5sec και γ=3m/sec2 s = ½ . γ . t 2 Με διάγραμμα ροής Με ψευδοκώδικα Αλγόριθμος Διάστημα γ 3 Για t από 1 μέχρι 100 με_βήμα 5 s 1 / 2 * γ * t^2 Εμφάνισε t, s Τέλος_επανάληψης Τέλος Διάστημα_100 ΑΡΧΗ ΤΕΛΟΣ γ 3 t 1 t <= 100 ΝΑΙ ΟΧΙ S 1 / 2 * γ * t^2 Εμφάνισε t, S t t + 5 Διαγραμματικά είναι ίδια με τη δομή επανάληψης ΟΣΟ
80
ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ ΑΝΤΙΣΤΟΙΧΙΑ
Στις περισσότερες περιπτώσεις, μπορούν να χρησιμοποιηθούν και οι τρεις δομές επανάληψης. Π.χ.: Να γραφεί αλγόριθμος που να εμφανίζει τους αριθμούς 1-100 Αλγόριθμος Χρήση_Όσο i 1 Όσο i <= 100 επανάλαβε Εμφάνισε i i i + 1 Τέλος_επανάληψης Τέλος Χρήση_Όσο Αλγόριθμος Χρήση_Μέχρις_ότου i 1 Αρχή_επανάληψης Εμφάνισε i i i + 1 Μέχρις_ότου i > 100 Τέλος Χρήση_Μέχρις_ότου Αλγόριθμος Χρήση_Για Για i από 1 μέχρι 100 Εμφάνισε i Τέλος_επανάληψης Τέλος Χρήση_Για ΓΕΝΙΚΑ Χρησιμοποιείται σε όλες τις περιπτώσεις συνθηκών (αριθμητικών και μη), είτε απλών είτε σύνθετων ΓΕΝΙΚΑ Ισχύουν τα ίδια με την ΟΣΟ, με τη διαφορά ότι οι εντολές επανάληψης εκτελούνται σίγουρα μια φορά. ΓΕΝΙΚΑ Χρησιμοποιείται μόνο σε γνωστό πλήθος επαναλήψεων.
81
ΕΜΦΩΛΕΥΜΕΝΗ «ΓΙΑ» Αλγόριθμος Λύσεις Για x από 1 μέχρι 100 Για y από 1 μέχρι 100 Για z από 1 μέχρι 100 Αν 3*x+2*y-7*z = 5 τότε Τύπωσε x, y, z Τέλος_Αν Τέλος_επανάληψης Τέλος Λύσεις Ο εσωτερικός βρόχος βρίσκεται πάντα ολόκληρος μέσα στον εξωτερικό, δηλ. ο βρόχος που ξεκινάει τελευταίος ολοκληρώνεται πρώτος Η είσοδος σε κάθε βρόχο γίνεται υποχρεωτικά από την αρχή του ΔΕΝ πρέπει να χρησιμοποιηθεί η ίδια μεταβλητή ως μετρητής δύο ή περισσότερων βρόχων (x, y, z) Η «Αν» θα εκτελεστεί 100x100x100 φορές! Αλγόριθμος Λύσεις Χ 0 Όσο Χ<=100 επανάλαβε Υ 0 Όσο Υ <= 100 επανάλαβε Ζ 0 Όσο Ζ <= 100 επανάλαβε Αν 3*Χ + 2*Υ – 7*Ζ = 5 τότε Τύπωσε Χ,Υ,Ζ Τέλος_αν Ζ Ζ + 1 Τέλος_επανάληψης Υ Υ + 1 Χ Χ + 1 Τέλος Διοφαντική ΠΡΟΓΡΑΜΜΑ Λύσεις ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Χ, Υ, Ζ ΠΡΑΓΜΑΤΙΚΕΣ: μο_α, μο_κ, μο ΑΡΧΗ Χ ← 0 ΟΣΟ Χ <= 100 ΕΠΑΝΑΛΑΒΕ Υ ← 0 ΟΣΟ Υ <= 100 ΕΠΑΝΑΛΑΒΕ Ζ ← 0 ΟΣΟ Ζ <= 100 ΕΠΑΝΑΛΑΒΕ ΑΝ 3*Χ + 2*Υ - 7*Ζ = 5 ΤΟΤΕ ΓΡΑΨΕ Χ, Υ, Ζ ΤΕΛΟΣ_ΑΝ Ζ ← Ζ + 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Υ ← Υ + 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Χ ← Χ + 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
82
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ
83
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Τα βασικά)
Δεδομένα Ακατέργαστα στοιχεία (π.χ. ονόματα, ποσά, ημερομηνίες, βάρος, φύλο, κλπ) Ως αυτόνομες τιμές, δεν έχουν κάποια αξία Πληροφορίες Είναι το αποτέλεσμα της επεξεργασίας των δεδομένων, ώστε να χρησιμοποιηθεί για τις κατάλληλες αποφάσεις Αλγόριθμος Ο τρόπος εξαγωγής της πληροφορίας (επεξεργασία) από τη χρήση των δεδομένων ΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΩΝ (Information Theory) Είναι ένας κλάδος της επιστήμης της Πληροφορικής, που ασχολείται με τη μέτρηση, κωδικοποίηση και μετάδοση της πληροφορίας
84
ΜΕΛΕΤΗ ΤΩΝ ΔΕΔΟΜΕΝΩΝ Η Πληροφορική μελετά τα δεδομένα από τις ακόλουθες σκοπιές: Υλικό Με ποια μορφή αποθηκεύονται τα δεδομένα στη μνήμη, στα μέσα αποθήκευσης (π.χ. ASCII,UNICODE, αριθμός bits, κλπ.) Γλώσσες προγραμματισμού Πώς περιγράφονται τα δεδομένα στις γλώσσες προγραμματισμού, οι τύποι τους, πώς ο μεταφραστής βελτιστοποιεί την αποθήκευσή τους Δομές δεδομένων Σύνολο αλληλένδετων δεδομένων + Λειτουργίες σε αυτά (π.χ. Δομή=εγγραφή πελάτη : Επώνυμο, όνομα, τηλ., και Λειτουργίες=Εισαγωγή νέου, διαγραφή, μεταβολή, κλπ) Ανάλυση δεδομένων Τρόποι μοντελοποίησης των συσχετίσεων μεταξύ δεδομένων και καταγραφής αυτών. (π.χ. Bάσεις δεδομένων, Data modeling)
85
ΤΙ ΕΙΝΑΙ ΔΟΜΗ ΔΕΔΟΜΕΝΩΝ
Δομή δεδομένων είναι ένα σύνολο αποθηκευμένων δεδομένων που υφίστανται επεξεργασία από ένα σύνολο λειτουργιών. Λειτουργίες είναι οι ακόλουθες: Προσπέλαση Εισαγωγή Διαγραφή Αναζήτηση Ταξινόμηση Αντιγραφή Συγχώνευση Διαχωρισμός Βασικότερες Υπάρχει εξάρτηση μεταξύ της δομής δεδομένων και του αλγορίθμου που την επεξεργάζεται. Έτσι ο Niklaus Wirth (κατασκεύασε τη γλώσσα προγρ/σμού PASCAL) έγραψε το 1976: Αλγόριθμοι + Δομές δεδομένων = Προγράμματα
86
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΠΟΔΟΤΙΚΟΤΗΤΑ
Διαφορετικές δομές δεδομένων, χρειάζονται διαφορετικές λειτουργίες επεξεργασίας τους, άρα έχουν διαφορετική απόδοση. ΠΑΡΑΔΕΙΓΜΑ Έστω ότι θέλουμε έναν αλγόριθμο, που να δέχεται ως είσοδο το όνομα ενός συνδρομητή τηλεφωνίας και να δίνει ως έξοδο το τηλέφωνό του. Θα δοθεί λύση με δύο τρόπους, δηλ. με δύο διαφορετικές δομές δεδομένων με τις οποίες αποθηκεύονται τα στοιχεία και συνεπώς η επεξεργασία των δομών αυτών, θα γίνει με δύο διαφορετικές λειτουργίες. Αυτό που διαφέρει είναι η αποδοτικότητα τους.
87
ΛΥΣΗ 1η Πλεονεκτήματα; Μειονεκτήματα;
Η δομή για την αποθήκευση των δεδομένων μας είναι η παρακάτω αταξινόμητη λίστα ονομάτων/τηλεφώνων: (Ον1,Τηλ1) (Ον2,Τηλ2) (ΟνΝ,ΤηλΝ) Όνομα Τηλ 1 Παπαδόπουλος Χρ. 2 Νικολάου Ανθή 3 Κρέμπου Μαρία 4 Νικολόπουλος Πέτρος 5 Αθηναίος Κώστας 6 Βρεττάκος Γιώργος 7 Κρανιώτη Γεωργία 8 Βαρδάκης Κώστας 9 Κάππος Ανδρέας Πλεονεκτήματα; Μειονεκτήματα;
88
ΛΥΣΗ 2η Χρησιμοποιούμε δύο δομές:
1. Μία δομή, όπου τα δεδομένα μας είναι σε ταξινομημένη λίστα ονομάτων/τηλεφώνων (Ον1,Τηλ1) (Ον2,Τηλ2) (ΟνΝ,ΤηλΝ) 2. Μια δεύτερη δομή, όπου αποθηκεύουμε το πού ξεκινά η κάθε αλλαγή στο αρχικό γράμμα των ονομάτων (Α,Ν1) (Β,Ν2) (Γ,Ν3) (Δ,Ν4).....(Ω,Ν24) Ον Τηλ 1 Αθηναίος Κώστας 2 Βαρδάκης Κώστας 3 Βρεττάκος Γιώργος 4 Κάππος Ανδρέας 5 Κρανιώτη Γεωργία 6 Κρέμπου Μαρία 7 Νικολάου Ανθή 8 Νικολόπουλος Πέτρος 9 Παπαδόπουλος Χρ. Γράμμα Ν Α 1 Β 2 Κ 4 7 Π 9
89
ΚΑΤΗΓΟΡΙΕΣ ΔΟΜΩΝ ΔΕΔΟΜΕΝΩΝ
Στατικές δομές δεδομένων Αποθηκεύουν τα δεδομένα σε συνεχόμενες θέσεις. Το μέγεθος στη μνήμη είναι γνωστό από τη στιγμή του προγραμματισμού τους και όχι κατά την εκτέλεσή τους και παραμένει το ίδιο, μέχρι το τέλος του προγράμματος. Δυναμικές δομές δεδομένων Τα δεδομένα δεν αποθηκεύονται συνεχόμενα, αλλά γίνεται δυναμικά παραχώρηση, όπου βρεθεί χώρος στη μνήμη. Είναι μεταβλητού μεγέθους (π.χ. όταν προσθέτουμε ή διαγράφουμε στοιχεία). Πρέπει να υποστηρίζονται από τη γλώσσα προγραμματισμού Οι παραπάνω κατηγορίες δομών δεδομένων, υλοποιούνται με ΠΙΝΑΚΕΣ. Εμείς θα ασχοληθούμε μόνο με τις στατικές δομές. Είναι πιο εύκολες στη διαχείρισή τους.
90
ΠΙΝΑΚΕΣ Είναι στατικές δομές δεδομένων που αποθηκεύουν δεδομένα ίδιου τύπου (π.χ. Ακεραίους, χαρακτήρες, κλπ) Μπορούν να είναι οποιασδήποτε διάστασης (μονοδιάστατοι (1Δ), δισδιάστατοι (2Δ), Νδιάστατοι). Η αρίθμηση όλων των διαστάσεων ξεκινά από το 1. Η αναφορά στα στοιχεία τους, γίνεται με τη χρήση του ονόματός τους, σε συνδυασμό με το δείκτη θέσης τους. (π.χ. Ον[ 3 ], Τηλ[ 8 ], Θερμ[ 2, 5 ] κλπ). Ειδικά για τους δισδιάστατους, όταν το μέγεθος των δύο διαστάσεων είναι ίδιο, λέγονται τετραγωνικοί (όπως και στα μαθηματικά). Η δομή επανάληψης «ΓΙΑ» είναι η καταλληλότερη για την προσπέλαση των στοιχείων. Ο δείκτης της επανάληψης, χρησιμοποιείται ως δείκτης στα στοιχεία του πίνακα Γράμμα [ 7 ] Γ Τ Α Ν Ρ Ε Ψ Γράμμα[4] i Θερμ[ 3,7 ] 4 18 8 5 14 35 3 7 9 15 31 2 38 24 53 Θερμ[3,6] i j Θερμ[1,4,3] 4 48 8 5 14 35 3 7 9 15 31 2 58 24 53 18 38 Θερμ[ 3,7,3 ] i k j
91
ΠΙΝΑΚΕΣ Εκχώρηση τιμών και χρήση τους
Για να εισάγουμε τιμή σε μια θέση ενός πίνακα, ακολουθούμε ότι ισχύει και στις απλές μεταβλητές, μόνο που κάνουμε χρήση του δείκτη θέσης (και όχι μόνο το όνομα του πίνακα): Αριθμ[ 5 ] 26 Πελάτης[ i ] “ΙΩΑΝΝΟΥ” ΔΙΑΒΑΣΕ Ημέρα_εβδομάδας[ 12, 3 ] ΔΙΑΒΑΣΕ Θερμοκρασία[ i ] Για να χρησιμοποιήσουμε την τιμή ενός στοιχείου του πίνακα: Πλήθος Πλήθος + Αριθμ[ i ] ΓΡΑΨΕ Πελάτης[ i + 4, 43 ] Πίν[ i ] Πίν[ i ] + 10
92
ΠΟΤΕ ΧΡΗΣΙΜΟΠΟΙΟΥΜΕ ΠΙΝΑΚΕΣ;
Όταν θέλουμε να διαχειριστούμε πολλά δεδομένα ίδιου τύπου. (Π.χ. αν θέλουμε τους μέσους όρους 10 μαθητών, δεν θα δηλώσουμε 10 διαφορετικές μεταβλητές, αλλά έναν πίνακα 10 θέσεων). Όταν θέλουμε να συνεχίσουμε τη μαζική επεξεργασία στα ίδια στοιχεία (Π.χ εύρεση ελαχίστου/μεγίστου στοιχείου, υπολογισμός αθροισμάτων κλπ) Όταν πρέπει να εργαστούμε με ταξινομημένα στοιχεία ή να κάνουμε αναζητήσεις Για να κάνουμε το πρόγραμμα πιο ευανάγνωστο (δε χρειάζεται να σκεφτούμε τα ονόματα πολλών μεταβλητών και επίσης μπορούμε να χρησιμοποιήσουμε την εντολή «ΓΙΑ»)
93
ΠΙΝΑΚΕΣ ΜΕΡΙΚΑ ΜΕΙΟΝΕΚΤΗΜΑΤΑ
Απαιτούν τη μνήμη από την αρχή μέχρι το τέλος του προγράμματος. Αν οι απαιτήσεις του προγράμματος αλλάξουν και χρειάζονται περισσότερες θέσεις στον πίνανα, πρέπει να αλλάξουμε το πρόγραμμα Τα παραπάνω, είναι σχεδόν ασήμαντα μπροστά στη χρησιμότητα των πινάκων, συνεπώς η χρήση τους συνιστάται ανεπιφύλακτα, παρόλο που μερικά προβλήματα λύνονται και χωρίς αυτούς.
94
ΠΙΝΑΚΕΣ ΤΥΠΙΚΕΣ ΕΠΕΞΕΡΓΑΣΙΕΣ
Μερικές από τις πιο τυπικές επεξεργασίες στα στοιχεία ενός πίνακα είναι: Υπολογισμός αθροισμάτων Εύρεση μεγίστου/ελαχίστου στοιχείου Ταξινόμηση στοιχείων Αναζητήσεις Συγχωνεύσεις δύο ή περισσότερων πινάκων Σχεδόν σε όλες τις επεξεργασίες πινάκων, χρειάζεται να εξετάσουμε στοιχείο προς στοιχείο τα περιεχόμενά τους. Η διαδικασία ονομάζεται «σάρωση» του πίνακα
95
ΠΙΝΑΚΕΣ ΠΩΣ ΓΙΝΕΤΑΙ Η ΣΑΡΩΣΗ ΜΟΝΟΔΙΑΣΤΑΤΟΥ ΠΙΝΑΚΑ
Χρησιμοποιούμε κάποια δομή επανάληψης (συνήθως την «ΓΙΑ»). Η μεταβλητή της δομής επανάληψης, χρησιμοποιείται ως δείκτης στα στοιχεία του πίνακα Από τη στιγμή που δείχνει στη θέση του στοιχείου που μας ενδιαφέρει, το στοιχείο αντιμετωπίζεται όπως και οι απλές μεταβλητές, δηλ. μπορούμε να εκχωρήσουμε ή να διαβάσουμε την τιμή του K 10 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5 Πίνακας[ i ] K K K + 5 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ i Πίνακας[ 5 ] Πίνακας[ ] 1 2 3 4 5 10 15 20 25 30
96
ΠΙΝΑΚΕΣ ΜΟΝΟΔΙΑΣΤΑΤΟΣ ΠΙΝΑΚΑΣ – Παράδειγμα
ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Αριθμός[10] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 ΓΡΑΨΕ “ΔΩΣΕ TON “, i, “o ΑΡΙΘΜΟ ” ΔΙΑΒΑΣΕ Αριθμός[ i ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΙΑ i ΑΠΟ 10 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1 ΓΡΑΨΕ Αριθμός[ i ] ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να γεμίσετε έναν μονοδιάστατο πίνακα 10 θέσεων με αριθμούς από το πληκτρολόγιο. Να τους εμφανίσετε στην οθόνη, με την αντίστροφη σειρά εισαγωγής τους
97
ΠΙΝΑΚΕΣ ΜΗΔΕΝΙΣΜΟΣ ΣΤΟΙΧΕΙΩΝ ΜΟΝΟΔΙΑΣΤΑΤΟΥ ΠΙΝΑΚΑ
Δίδονται δύο πίνακες 100 θέσεων. Ο ένας περιλαμβάνει αριθμούς και ο άλλος χαρακτήρες. Να μηδενιστούν όλα τα στοιχεία του πρώτου Τα στοιχεία του δεύτερου να αντικατασταθούν με τον κενό χαρακτήρα (“”), δηλ. να διαγραφούν τα κείμενα ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Αριθμός[100] ΧΑΡΑΚΤΗΡΕΣ: Κείμενα[100] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100 Αριθμός[ i ] 0 Κείμενα[ i ] “” ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
98
ΠΙΝΑΚΕΣ ΑΝΤΙΓΡΑΦΗ ΣΕ ΑΛΛΟ ΠΙΝΑΚΑ
ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Αριθμός[5], Νέος[5] ΑΡΧΗ Αριθμός[ 1 ] 5 Αριθμός[ 2 ] 7 Αριθμός[ 3 ] 14 Αριθμός[ 4 ] 3 Αριθμός[ 5 ] 26 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5 Νέος[ i ] Αριθμός[ 6 – i ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να γεμίσετε έναν μονοδιάστατο πίνακα 5 θέσεων, με τους αριθμούς 5,7,14,3,26 Μετά να αντιγράψετε αυτά τα στοιχεία, σε έναν νέο πίνακα με την αντίστροφη σειρά
99
ΠΙΝΑΚΕΣ ΜΑΘΗΜΑΤΙΚΑ ΜΟΝΟΔΙΑΣΤΑΤΩΝ ΠΙΝΑΚΩΝ
Να γίνει η μαθηματική πρόσθεση των παρακάτω πινάκων Α και Β ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Α[5], Β[5], Γ[5] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5 Γ [ i ] Α [ i ] + Β [ i ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ A B + = _ _ _ _ _ Γ
100
ΠΙΝΑΚΕΣ ΕΥΡΕΣΗ ΜΕΓΙΣΤΟΥ ΣΤΟΙΧΕΙΟΥ
ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Αριθμός[10], θέση_μεγ ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ “ΔΩΣΕ TON ”, i , “o ΑΡΙΘΜΟ (θετικό) ” ΔΙΑΒΑΣΕ Αριθμός[ i ] ΜΕΧΡΙΣ_ΟΤΟΥ Αριθμός[ i ] > 0 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ θέση_μεγ ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 10 ΑΝ Αριθμός[ i ] > Αριθμός[ θέση_μεγ ] ΤΟΤΕ θέση_μεγ i ΤΕΛΟΣ_ΑΝ ΓΡΑΨΕ “Θέση = ”, θέση_μεγ ΓΡΑΨΕ ”Μέγιστος = “, Αριθμός[ θέση_μεγ ] ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να γεμίσετε έναν μονοδιάστατο πίνακα 10 θέσεων, με τη βαθμολογία (>0) των μαθητών σε ένα μάθημα από το πληκτρολόγιο. Μετά, να εμφανίσετε το μεγαλύτερο στοιχείο του καθώς και τη θέση του Θεωρήστε ότι οι αριθμοί δεν επαναλαμβάνονται
101
ΠΙΝΑΚΕΣ ΣΕΙΡΙΑΚΗ ΑΝΑΖΗΤΗΣΗ
Είναι η σάρωση ενός πίνακα από το πρώτο προς το τελευταίο στοιχείο του, μέχρι να βρεθεί το αναζητούμενο στοιχείο. Χρησιμοποιείται όταν ο πίνακας : Είναι μη ταξινομημένος (αφού δεν ξέρουμε τη σειρά των στοιχείων, πρέπει να σαρώσουμε τον πίνακα μέχρι να βρούμε το ζητούμενο, ή όλες τις επαναλήψεις του) Είναι μικρού μεγέθους (μερικές εκατοντάδες στοιχεία) (Όταν τα στοιχεία είναι πάρα πολλά (π.χ. Χιλιάδες) η αναζήτηση διαρκεί πάρα πολύ) Δεν χρησιμοποιείται συχνά για αναζητήσεις (Αν γίνονται σπάνια αναζητήσεις, τότε μπορούμε να κάνουμε μια εξαίρεση σε σχέση με το πλήθος στοιχείων)
102
ΠΙΝΑΚΕΣ ΣΕΙΡΙΑΚΗ ΑΝΑΖΗΤΗΣΗ – Παράδειγμα #1
ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΧΑΡΑΚΤΗΡΕΣ: i, όνομα[10], αναζητ ΛΟΓΙΚΕΣ: Βρέθηκε ΑΚΕΡΑΙΕΣ: πλήθος ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 ΔΙΑΒΑΣΕ όνομα[ i ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ πλήθος 0 ΔΙΑΒΑΣΕ αναζητ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 ΑΝ όνομα[ i ] = αναζητ ΤΟΤΕ ΓΡΑΨΕ “Βρέθηκε στη θέση:”, i πλήθος πλήθος + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ AN πλήθος = 0 ΤΟΤΕ ΓΡΑΨΕ “ΔΕΝ ΒΡΕΘΗΚΕ” ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να γεμίσετε έναν μονοδιάστατο πίνακα 10 θέσεων, με ονόματα από το πληκτρολόγιο Μετά, να αναζητήσετε κάποιο από αυτά, εμφανίζοντας σε πόσες και σε ποιες θέσεις βρίσκεται Αν δε βρεθεί, εμφανίστε το κατάλληλο μήνυμα Εδώ πρέπει να σαρώσουμε όλο τον πίνακα με την ΓΙΑ, αφού το στοιχείο μπορεί να είναι οπουδήποτε
103
ΠΙΝΑΚΕΣ ΣΕΙΡΙΑΚΗ ΑΝΑΖΗΤΗΣΗ – Παράδειγμα #2
Όπως και στην προηγούμενη άσκηση αναζήτησης, να γεμίσετε έναν μονοδιάστατο πίνακα 10 θέσεων, με ονόματα από το πληκτρολόγιο Μετά να αναζητήσετε κάποιο από αυτά, σταματώντας την αναζήτηση, στο πρώτο που θα βρεθεί. Αν δε βρεθεί, εμφανίστε μήνυμα Τώρα θα χρησιμοποιήσουμε την ΟΣΟ για όλο μεν τον πίνακα, αλλά με συνθήκη η οποία να διακόπτει την επανάληψη αν βρεθεί το στοιχείο. Η ΓΙΑ δεν μπορεί να μας βοηθήσει εδώ. Αν θέλουμε να βρούμε το τελευταίο, απλά θα ξεκινήσουμε από το τέλος, με δείκτη i 10 μειώνοντάς τον κατά 1 και με συνθήκη i >= 1 Παρατήρηση: Τα παρακάτω είναι ισοδύναμα OXI Βρέθηκε Βρέθηκε=ΨΕΥΔΗΣ ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΧΑΡΑΚΤΗΡΕΣ: i, όνομα[10], αναζητ ΛΟΓΙΚΕΣ: Βρέθηκε ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 ΔΙΑΒΑΣΕ όνομα[ i ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΔΙΑΒΑΣΕ αναζητ Βρέθηκε ΨΕΥΔΗΣ i 1 ΌΣΟ (i <= 10) ΚΑΙ (ΟΧΙ Βρέθηκε) ΕΠΑΝΑΛΑΒΕ ΑΝ όνομα[ i ] = αναζητ ΤΟΤΕ ΓΡΑΨΕ “Βρέθηκε στη θέση:”, i Βρέθηκε ΑΛΗΘΗΣ ΑΛΛΙΩΣ i i ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ AN Βρέθηκε = ΨΕΥΔΗΣ ΤΟΤΕ ΓΡΑΨΕ “ΔΕΝ ΒΡΕΘΗΚΕ” ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
104
ΑΡΧΕΙΑ ΔΕΔΟΜΕΝΩΝ (ή εγγραφών) - Μια μικρή εισαγωγή
ΑΡΧΕΙΑ ΔΕΔΟΜΕΝΩΝ (ή εγγραφών) - Μια μικρή εισαγωγή Σε πραγματικές εφαρμογές, το μέγεθος της φυσικής μνήμης RAM, δεν επαρκεί, οπότε διατηρούμε τα δεδομένα (συνήθως και διαφορετικών τύπων – Χαρακτήρες, Ακέραιοι, Πραγματικοί, Λογικοί) σε αποθηκευτικά μέσα, με τη μορφή αρχείων εγγραφών Παράδειγμα εγγραφών είναι οι μαθητές, με στοιχεία (πεδία) διαφορετικών τύπων, όπως: επώνυμο(Χ), όνομα(Χ), τηλέφωνο(Α), Μ.Ο. βαθμολογίας(Π), τάξη(Χ), τμήμα(Χ) και αρ. μητρώου(Α) το οποίο τον ταυτοποιεί (πρωτεύον κλειδί). Η αναζήτηση, μπορεί να γίνει βάσει διαφόρων πεδίων. Υποψήφια μπορεί να είναι το ονοματεπώνυμο, το τμήμα, ο αρ. Μητρώου Στοιχεία όπως αυτά του μαθητή παραπάνω, δεν μπορούν να αποθηκευτούν σε ένα πίνακα με τη χρήση της «ΓΛΩΣΣΑΣ». Συνεπώς πρέπει να ακολουθήσουμε έναν εναλλακτικό τρόπο : τους “παράλληλους” πίνακες.
105
ΠΙΝΑΚΕΣ ΠΑΡΑΛΛΗΛΟΙ ΠΙΝΑΚΕΣ
Δεν μπορούμε να αποθηκεύσουμε τα διπλανά δεδομένα (εγγραφές) σε έναν δισδιάστατο πίνακα, γιατί δεν είναι του ίδιου τύπου. Τα αποθηκεύουμε σε ανεξάρτητους μονοδιάστατους πίνακες ίδιου μεγέθους, ο καθένας με τον κατάλληλο τύπο, τους οποίους μπορούμε να γεμίσουμε ταυτόχρονα στην ίδια επανάληψη ΓΙΑ. Έτσι, φαίνεται ως δισδιάστατος πίνακας, στην ουσία όμως είναι πολλοί μονοδιάστατοι δίπλα-δίπλα (παράλληλοι) Όταν θέλουμε να ψάξουμε ένα στοιχείο, σαρώνουμε έναν από αυτούς (ανάλογα με το πρόβλημα) και χρησιμοποιούμε απ’ ευθείας τη θέση εύρεσης, ως δείκτη στους άλλους πίνακες Αν όμως και οι τρεις στήλες είναι του ίδιου τύπου, τότε ένας κανονικός δισδιάστατος πίνακας αρκεί. Οπότε θα κάνουμε χρήση δύο δεικτών θέσης, ψάχνοντας όμως κάποια τιμή, με τον ίδιο τρόπο Ποια η ηλικία του Πέτρου ; Όνομα Βάρος Ηλικία 1 Νίκος 62.5 24 2 Κώστας 80 45 3 Ιωάννα 52.3 19 4 Μαρία 62 5 Πέτρος 77.8 41 6 Μάριος 90 59 7 Άννα 58 22 i =
106
ΠΙΝΑΚΕΣ ΤΑΞΙΝΟΜΗΣΗ Είναι η αντιμετάθεση ή τακτοποίηση των στοιχείων του πίνακα με συγκεκριμένη διάταξη, είτε αύξουσα είτε φθίνουσα. Δεν έχει σημασία ο τύπος δεδομένων του πίνακα. Υπάρχουν διάφοροι αλγόριθμοι ταξινόμησης, άλλοι αργοί και άλλοι ταχύτατοι στη λειτουργία τους. Π.χ.: Bubble Sort, Quick Sort, Insertion Sort, Shell Sort, Selection Sort, κ.ά. Σκοπός είναι η διευκόλυνση των αναζητήσεων, ειδικά στις περιπτώσεις που το πλήθος στοιχείων είναι μεγάλο. Παραδείγματα όπου χρειάζεται η ταξινόμηση: Τηλεφωνικός κατάλογος, πελατολόγιο τράπεζας, κατάλογος φορολογουμένων, βιβλιοθήκες, σχολεία κλπ.
107
ΠΙΝΑΚΕΣ ΤΑΞΙΝΟΜΗΣΗ ΦΥΣΣΑΛΙΔΑΣ (σχ. βιβλίο)
ΠΡΟΓΡΑΜΜΑ Ταξινόμηση_μέθοδος_βιβλίου ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, j, Αριθμός[10] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 ΔΙΑΒΑΣΕ Αριθμός[ i ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 10 ΓΙΑ j ΑΠΟ 10 ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1 ΑΝ Αριθμός[ j - 1] > Αριθμός[ j ] ΤΟΤΕ temp ← Αριθμός[ j ] Αριθμός[ j ] ← Αριθμός[ j - 1] Αριθμός[ j - 1] ← temp ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να γεμίσετε έναν μονοδιάστατο πίνακα 10 θέσεων, με αριθμούς από το πληκτρολόγιο Μετά να ταξινομήσετε τα στοιχεία του πίνακα ΕΜΦΑΝΙΣΗ ΜΕ ΚΙΝΗΣΗ
108
ΠΙΝΑΚΕΣ Ταξινόμηση παράλληλων πινάκων
ΠΙΝΑΚΕΣ Ταξινόμηση παράλληλων πινάκων Όταν θέλουμε να ταξινομήσουμε έναν από τους παράλληλους πίνακες, πρέπει υποχρεωτικά να αντιμεταθέτουμε και τα αντίστοιχα στοιχεία στους υπόλοιπους πίνακες, ώστε να διατηρήσουμε την αντιστοιχία των δεδομένων ανά γραμμή (εγγραφή) Η αντιμετάθεση στοιχείων στους υπολοιπους πίνακες, δε σημαίνει ότι και αυτοί θα προκύψουν ταξινομημένοι. Η ταξινόμηση γίνεται μόνο στον πίνακα στον οποίο συγκρίνουμε τα στοιχεία. Πίνακας προς ταξινόμηση Α Β Γ 2 6.5 Χ Βασική αντιμετάθεση Α temp1 A[ i ] A[ i ] A [ i – 1] A[i – 1] temp1 Ταυτόχρονη αντιμετάθεση Β temp2 B[ i ] B[ i ] B[ i – 1] B[i – 1] temp2 Ταυτόχρονη αντιμετάθεση Γ temp3 Γ [ i ] Γ [ i ] Γ [ i – 1] Γ [i – 1] temp3 8 10.1 Κ 5 12.4 Γ 10 5.8 Δ ΝΑΙ ΟΧΙ ΟΧΙ Ταξινομήθηκε ;
109
ΠΙΝΑΚΕΣ ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ
Είναι μια ταχύτατη μέθοδος αναζήτησης σε ταξινομημένους πίνακες. Επαναληπτικά, ψάχνουμε πάντα στην μεσαία θέση της περιοχής αναζήτησης, χωρίζοντας την κάθε φορα σε δύο ίσα μέρη και χρησιμοποιούμε μόνο το πιο κατάλληλο κάθε φορά, μέχρι να βρεθεί το στοιχείο που ψάχνουμε Σε στοιχεία, απαιτούνται 20 το πολύ αναζητήσεις !!! Με τη σειριακή αναζήτηση, θα είχαμε κατά μέσο όρο αναζητήσεις (από 1 έως αν ήταν στο τέλος) Περιοχή αναζήτησης 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 25 34 37 46 51 57 62 65 68 73 77 80 83 Left 37 ? middle Right
110
ΠΙΝΑΚΕΣ ΣΥΓΧΩΝΕΥΣΗ Α Γ Β Είναι η ένωση των στοιχείων δύο ή περισσοτέρων πινάκων σε ένα νέο πίνακα Συνήθως, γίνεται σε ήδη ταξινομημένους πίνακες, με σκοπό να προκύψει πάλι ταξινομημένος πίνακας, χωρίς να εφαρμοστεί ο αλγόριθμος ταξινόμησης Παρόλα αυτά, δεν είναι απαραίτητο να είναι ήδη ταξινομημένοι Επίσης, μπορεί απλά να ενώνουμε τους δύο πίνακες, τον έναν κάτω από τον άλλον i 5 6 j 9 8 15 9 32 18 43 51
111
ΠΙΝΑΚΕΣ ΔΥΟ ΔΙΑΣΤΑΣΕΩΝ (Δισδιάστατοι-2Δ)
Για να αναφερθούμε σε ένα στοιχείο δισδιάστατου πίνακα, χρησιμοποιούμε δύο δείκτες θέσης, π.χ. Γράμμα[ 2, 3 ] Ο 1ος δείκτης είναι η γραμμή και ο 2ος δείκτης είναι η στήλη του στοιχείου Για τη σάρωση των στοιχείων του πίνακα χρησιμοποιούμε την εντολή ΓΙΑ μέσα σε μια άλλη ΓΙΑ Γράμμα 3 Α Η Ρ Τ 2 Γ Σ Ξ Ο Ψ Ζ Ν
112
ΠΙΝΑΚΕΣ ΠΩΣ ΛΕΙΤΟΥΡΓΕΙ Η ΣΑΡΩΣΗ ΠΙΝΑΚΑ 2 Δ
ΠΙΝΑΚΕΣ ΠΩΣ ΛΕΙΤΟΥΡΓΕΙ Η ΣΑΡΩΣΗ ΠΙΝΑΚΑ 2 Δ Να γεμίσετε δισδιάστατο πίνακα (m=4 x n=5), με ονόματα από το πληκτρολόγιο. Στην παρακάτω απεικόνιση, η σάρωση γίνεται κατά γραμμές (οριζόντια), όπως το διάβασμα ενός βιβλίου. Με την κατάλληλη χρήση των δεικτών θέσης, μπορούμε να σαρώσουμε τον πίνακα κατά στήλες (κάθετα) Ο εσωτερικός βρόχος ΓΙΑ επανεκτελείται, για κάθε μία επανάληψη του εξωτερικού Αλγόριθμος Πίνακες Δεδομένα // ονόματα // ! Οριζόντια Για i από 1 μέχρι 4 Για j από 1 μέχρι 5 Διάβασε ονόματα[ i , j ] Τέλος_επανάληψης ! Κάθετα Τέλος Πίνακες ονόματα[4,5] 1 2 3 4 5 j = i =
113
ΠΙΝΑΚΕΣ ΕΥΡΕΣΗ “ΕΓΓΡΑΦΗΣ” ΣΕ ΔΙΣΔΙΑΣΤΑΤΟ ΠΙΝΑΚΑ
Για τους 300 μαθητές ενός δημοτικού σχολείου, είναι γνωστό το μητρώο (Α.Μ.) και η ηλικία τους. Τα παραπάνω δεδομένα, είναι ήδη αποθηκευμένα με τη χρήση δισδιάστατου πίνακα, όπου στην 1η στήλη είναι οι Α.Μ και στη 2η οι ηλικίες τους Να εμφανίσετε τον Α.Μ. του μαθητή με τη μεγαλύτερη ηλικία ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, μαθητές[300,2], θέση_μεγ ΑΡΧΗ θέση_μεγ 1 ! Αρχική υπόθεση ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 300 ΑΝ μαθητής[ i, 2 ] >μαθητής[ θέση_μεγ, 2 ] ΤΟΤΕ θέση_μεγ i ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ “Το Α.Μ. του μεγαλύτερου είναι :“ ΓΡΑΨΕ μαθητής[ θέση_μεγ,1 ] ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ 1 2 ΘΕΣΗ Α Μ ΗΛ 152 6 253 8 3 231 11 ... 298 63 12 299 82 7 300 58 10
114
ΠΙΝΑΚΕΣ ΥΠΟΛΟΓΙΣΜΟΙ ΣΕ ΔΥΟ ΔΙΑΣΤΑΣΕΙΣ #1
ΠΡΟΓΡΑΜΜΑ ΜΟ_Πίνακα_2Δ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, j, Α[4,5], s ΑΡΧΗ s 0 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4 ΓΙΑ j από 1 ΜΕΧΡΙ 5 ΔΙΑΒΑΣΕ Α[ i, j ] s s + Α[ i, j ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ s / (4*5) ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να γεμίσετε έναν δισδιάστατο πίνακα 4x5 με αριθμούς από το πληκτρολόγιο Μετά να βρείτε τον μέσο όρο τους.
115
ΠΙΝΑΚΕΣ ΥΠΟΛΟΓΙΣΜΟΙ ΣΕ ΔΥΟ ΔΙΑΣΤΑΣΕΙΣ #2 (σχ. βιβλίο)
Αλγόριθμος Αθρ_Πίνακα Δεδομένα // m, n, table, col, row // sum ← 0 Για i από 1 μέχρι m row[i] ← 0 Τέλος_επανάληψης Για j από 1 μέχρι n col[j] ← 0 sum ← sum + table[i, j] row[ i ] ← row[ i ] + table[i, j] col[ j ] ← col[ j ] + table[i, j] Αποτελέσματα // row, col, sum // Τέλος Αθρ_Πίνακα Στον παρακάτω δισδιάστατο πίνακα (m=4 x n=5), να βρεθεί το άθροισμα κατά γραμμή, κατά στήλη και συνολικά (κάτι σαν τους υπολογισμούς σε Excel) 4 5 2 8 14 3 7 9 12 21 15 23 11 6 table[4,5] 46 27 41 25 35 24 45 50 55 174 col[5] row[4] i j 1 sum =
116
ΠΙΝΑΚΕΣ ΜΑΘΗΜΑΤΙΚΑ ΔΙΣΔΙΑΣΤΑΤΩΝ ΠΙΝΑΚΩΝ #1
ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, j, Α[5,5] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ ΑΝ i = j TOTE Α [ i, j ] ΑΛΛΙΩΣ Α [ i, j ] ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να δημιουργήσετε τον παρακάτω τετραγωνικό πίνακα (πίνακας “ταυτότητα” στα μαθηματικά) Α
117
ΠΙΝΑΚΕΣ ΜΑΘΗΜΑΤΙΚΑ ΔΙΣΔΙΑΣΤΑΤΩΝ ΠΙΝΑΚΩΝ #2
Να προσθέσετε τους παρακάτω πίνακες Α και Β ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, j, Α[3,3], Β[3,3], Γ[3,3] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Γ [ i, j ] Α[ i, j ] + B[ i, j ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ + Α Β Γ _ _ _ _ _ _ _ _ _
118
ΠΙΝΑΚΕΣ Οι δομές δεδομένων «Στοίβα» & «Ουρά»
ΠΙΝΑΚΕΣ Οι δομές δεδομένων «Στοίβα» & «Ουρά» Η στοίβα (stack) και η ουρά (queue), είναι από τις πιο σπουδαίες δομές δεδομένων στον προγραμματισμό εφαρμογών. Στο περιβάλλον της «ΓΛΩΣΣΑΣ», υλοποιούνται με πίνακες, οι οποίοι γεμίζουν και προσπελαύνονται με συγκεκριμένη χρήση των δεικτών στα στοιχεία. Χρησιμοποιούνται σε εφαρμογές, όπως: διαχείριση ουράς σε ταμεία, λιμάνια, αποθήκες προϊόντων, συνεργεία αυτοκινήτων ή άλλες ουρές αναμονής, εσωτερικά στο λειτουργικό σύστημα, σε παιχνίδια, αναδρομικές κλήσεις συναρτήσεων/διαδικασιών κλπ. Θα εξερευνήσουμε αυτές τις δομές δεδομένων, μόνο σε θεωρητικό επίπεδο.
119
ΠΙΝΑΚΕΣ Δομή ΣΤΟΙΒΑΣ (stack)
Είναι ένας μονοδιάστατος πίνακας, που τον σκεφτόμαστε σαν μια πραγματική στοίβα πραγμάτων, το ένα επάνω στο άλλο, όπως μια στοίβα με πιάτα. Κορυφή, είναι μια μεταβλητή που αποθηκεύει τη θέση του επάνω στοιχείου της στοίβας (δηλ. του πιο πρόσφατα τοποθετημένου). Ωθούμε (push) ένα νέο στοιχείο στη στοίβα, εισάγοντάς το πάντα στην κορυφή, προσέχοντας να υπάρχει διαθέσιμη θέση (αλλιώς έχουμε υπερχείλιση). Πριν την εισαγωγή, αυξάνουμε την κορυφή κατά 1. Απωθούμε (pop) ένα στοιχείο προς χρήση, εξάγοντάς το πάντα από την κορυφή, προσέχοντας να υπάρχει ένα τουλάχιστον (αλλιώς έχουμε υποχείλιση). Μετά μειώνουμε την κορυφή κατά 1. Η μέθοδος προσπέλασης στα στοιχεία, ονομάζεται L.I.F.O. (Last In First Out), δηλ. αυτό που τοποθετήσαμε τελευταίο, είναι το πρώτο που θα εξάγουμε προς χρήση. Στοίβα[6] 84 62 253 5 4 3 2 1 6 94 52 Κορυφή
120
ΠΙΝΑΚΕΣ ΣΤΟΙΒΕΣ : Εισαγωγή & Εξαγωγή στοιχείου
Αλγόριθμος Ώθηση_push Δεδομένα //στοίβα, Ν, κορυφή, στοιχείο// Αν κορυφή < Ν τότε κορυφή κορυφή στοίβα[ κορυφή ] στοιχείο status αληθής Αλλιώς status ψευδής Τέλος_αν Αποτελέσματα //στοίβα, κορυφή, status// Τέλος Ώθηση_push Αλγόριθμος Απώθηση_pop Δεδομένα //στοίβα, κορυφή// Αν κορυφή >= 1 τότε στοιχείο στοίβα[ κορυφή ] κορυφή κορυφή status αληθής Αλλιώς status ψευδής Τέλος_αν Αποτελέσματα //στοίβα, κορυφή, status, στοιχείο// Τέλος Απώθηση_pop
121
ΠΙΝΑΚΕΣ Δομή ΟΥΡΑΣ (queue)
Είναι επίσης ένας μονοδιάστατος πίνακας Χρειάζονται δύο δείκτες (μεταβλητές) ορίων της ουράς Για την αρχή (front) και για το τέλος (rear) της ουράς Όπως και σε μια συνηθισμένη ουρά αναμονής, οι λειτουργίες είναι : Η εισαγωγή (enqueue) στοιχείου πάντα στο τέλος της ουράς, προσέχοντας να υπάρχει διαθέσιμη θέση. Πριν την εισαγωγή, αυξάνουμε την rear. Αν φτάσουμε στο τέλος, τα μεταφέρουμε όλα προς την αρχή ώστε να αδειάσει χώρος στο τέλος Η εξαγωγή (dequeue) στοιχείου πάντα από την αρχή της ουράς, προσέχοντας να υπάρχει διαθέσιμο στοιχείο. Μετά, αυξάνουμε την front Η μέθοδος προσπέλασης στα στοιχεία, ονομάζεται F.I.F.O. (First In First Out), δηλ. όποιο στοιχείο εισάγεται πρώτο στην ουρά, εξάγεται (εξυπηρετείται) και πρώτο 723 51 Ουρά[7] 1 2 3 4 5 6 7 72 100 200 front rear
122
ΠΙΝΑΚΕΣ ΟΥΡΕΣ : Εισαγωγή & Εξαγωγή στοιχείου
Αλγόριθμος Εισαγωγή_σε_ουρά Δεδομένα //ουρά, Ν, rear, στοιχείο// Αν rear < Ν τότε rear rear ουρά[ rear ] στοιχείο status αληθής Αλλιώς status ψευδής Τέλος_αν Αποτελέσματα //ουρά, rear, status// Τέλος Εισαγωγή_σε_ουρά Αλγόριθμος Εξαγωγή_από_ουρά Δεδομένα //ουρά, front, rear// Αν front <= rear τότε στοιχείο ουρά[ front ] front front status αληθής Αλλιώς status ψευδής Τέλος_αν Αποτελέσματα //ουρά, front, στοιχείο, status// Τέλος Εξαγωγή_από_ουρά
123
ΠΙΝΑΚΕΣ ΚΥΚΛΙΚΗ ΟΥΡΑ Είναι μια παραλλαγή της απλής ουράς
front Είναι μια παραλλαγή της απλής ουράς Εξάγουμε από την αρχή (front) Η τελική θέση δεν είναι η διάσταση του πίνακα (Ν). Είναι η προηγού-μενη της front Εισάγουμε στο τέλος (rear) όσο υπάρχει θέση μέχρι τη front 1 2 12 3 Κ Α Υ 11 4 Ρ Κ Υ Λ 10 5 O Ι Η Κ 9 6 7 8 rear
124
ΠΙΝΑΚΕΣ ΚΥΚΛΙΚΕΣ ΟΥΡΕΣ : Εισαγωγή & Εξαγωγή στοιχείου
Αλγόριθμος Εισαγωγή_κυκλική_ουρά Δεδομένα //ουρά,Ν,front,rear,στοιχείο// Αν (rear mod Ν) + 1 = front τότε status ψευδής Αλλιώς rear (rear mod Ν) ουρά [rear] στοιχείο status αληθής Τέλος_αν CanGet αληθής Αποτελέσματα // ουρά, rear, status, CanGet // Τέλος Εισαγωγή_κυκλική_ουρά Αλγόριθμος Εξαγωγή_κυκλική_ουρά Δεδομένα //ουρά,Ν,front,rear,CanGet// Αν CanGet = ψευδής τότε status ψευδής αλλιώς στοιχείο ουρά [front] Αν front = rear τότε ! 1 στοιχείο μόνο CanGet ψευδής Τέλος_αν front (front mod Ν) status αληθής Τέλος_αν Αποτελέσματα //ουρά,rear,status, στοιχείο, CanGet// Τέλος Εξαγωγή_κυκλική_ουρά
125
ΙΣΤΟΡΙΑ ΓΛΩΣΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΗΣ ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ & ΔΙΕΡΜΗΝΕΥΤΕΣ
126
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ
Προγραμματισμός είναι δημιουργία προγραμμάτων δηλαδή, η υλοποίηση αλγορίθμων σε μορφή κατανοητή από τον Η/Υ, με τη χρήση κειμένου με ειδική σύνταξη (γλώσσα προγραμματισμού) Παρόλο που το hardware των Η/Υ βελτιώθηκε με τα χρόνια, οι βασικές αρχές λειτουργίας τους (Von Neumann, 1945) δεν έχουν αλλάξει. Το ίδιο ισχύει και για τις γλώσσες προγραμματισμού. Έχουν εμπλουτιστεί μεν, αλλά οι βασικές ιδιότητές τους παραμένουν οι ίδιες. Ο Η/Υ αντιλαμβάνεται μόνο δύο καταστάσεις, με τη μορφή τάσης ρεύματος, οι οποίες αντιπροσωπεύονται από δύο αριθμούς : το μηδέν (0) και το ένα (1). Ό,τι κάνει ο Η/Υ, γίνεται πάνω σε ακολουθίες αυτών των δύο ψηφίων στη μνήμη, με μεγάλη ταχύτητα Ακολουθεί μια ιστορική αναδρομή των γλωσσών προγραμματισμού από τα πρώτα χρόνια των Η/Υ, μέχρι σήμερα
127
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 1. ΓΛΩΣΣΕΣ ΜΗΧΑΝΗΣ (1η γενιά)
Οι εντολές που ο Η/Υ αναμένει για εκτέλεση, γράφονται με τη μορφή ακολουθίας δυαδικών ψηφίων (1/0) Ο προγραμματισμός αυτός είναι επίπονος, εξαρτάται από το υλικό και απαιτεί βαθιά κατανόηση της αρχιτεκτονικής του Η/Υ (άλλο hardware συνεπάγεται άλλες εντολές για το ίδιο πρόγραμμα). Τα προγράμματα αυτά, είναι ταχύτατα. Oι εντολές δε χρειάζονται κανένα στάδιο μετατροπής για την εκτέλεσή τους Ακόμη παλαιότερα, ο ENIAC (1945), προγραμματίζονταν μέσω της αναδιάρθρωσής του, αλλάζοντας τις καλωδιώσεις, τις λυχνίες κλπ. Εντολή Δεδομένο
128
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 2. ΣΥΜΒΟΛΙΚΕΣ ή ΧΑΜΗΛΟΥ ΕΠΙΠΕΔΟΥ (2η γενιά)
Δημιουργήθηκαν στην προσπάθεια να είναι πιο κατανοητές και ευκολότερες στην εκμάθηση από τον προγραμματιστή (assembly language) Εισήχθησαν σύμβολα (π.χ. ADD), στη θέση εντολών σε δυαδική μορφή Ο προγραμματισμός, επίσης εξαρτάται από το υλικό, όπως στην 1η γενιά, γι’ αυτό και λέγονται χαμηλού επιπέδου (ένα επίπεδο πάνω από τις γλώσσες μηχανής). Απλές εντολές αλλά μακροσκελή προγράμματα Ένα ειδικό πρόγραμα (ο συμβολο-μεταφραστής-assembler) μεταφράζει τις εντολές στην τελική δυαδική μορφή τους, για να εκτελεστούν INDEX=$01 SUM=$02 LDA #10 STA INDEX CLA LOOP ADD INDEX DEC INDEX STA SUM BRK
129
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 3. ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (3η γενιά)
Διόρθωσαν τις ανεπάρκειες των προηγούμενων γενεών και από τα τέλη του 1950, οι περισσότερες χρησιμοποιούνται μέχρι και σήμερα. Το συντακτικό τους μοιάζει αρκετά με τις φυσικές γλώσσες και η εκμάθησή τους έγινε πολύ πιο εύκολη Ένα ειδικό πρόγραμμα (μεταγλωττιστής/διερμηνευτής) παράγει το αντίστοιχο πρόγραμμα σε γλώσσα μηχανής για την εκτέλεσή του. Δεν υπάρχει αντιστοιχία 1 προς 1, των εντολών, με τις αντίστοιχες σε γλώσσα μηχανής Τα προγράμματα εκτελούνται λίγο πιο αργά σε σχέση με αυτά της γλώσσας μηχανής ή των συμβολικών γλωσσών Απεξάρτηση από το είδος του hardware και της αρχιτεκτονικής του Η/Υ (μεταφερσιμότητα). Το ίδιο πρόγραμμα εκτελείται σε διαφορετικό είδος Η/Υ (άλλη πλατφόρμα / CPU), αρκεί να υπάρχει ο αντίστοιχος μεταγλωττιστής για αυτό. Συντομότερη παραγωγή προγραμμάτων Ευκολότερη συντήρηση/διόρθωση των προγραμμάτων
130
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 3. ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (3η γενιά)
C PROGRAM EQUATION READ(*,1) A,B 1 FORMAT (F5.1) IF (A.EQ.0) GO TO 20 X=(-1.)*B/A WRITE (*,2) X 2 FORMAT(‘X=’,F10.2) GO TO 50 20 IF (B.EQ.0) WRITE(*,3) IF (B.NE.0) WRITE(*,4) 3 FORMAT(‘ΑΟΡΙΣΤΗ’) 4 FORMAT(‘ΑΔΥΝΑΤΗ’) 50 STOP END FORTRAN FORmula TRANslator, από την ΙΒΜ, το 1957 Χρήση σε μαθηματικές και άλλες επιστημονικές εφαρμογές μέχρι και σήμερα Υστερεί στη διαχείριση αρχείων δεδομένων Κυριότερες εκδόσεις : Fortran 77, 90/95, Visual Fortran
131
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 3. ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (3η γενιά)
IDENTIFICATION DIVISION. PROGRAM-ID. EQUATION. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-PC. OBJECT-COMPUTER. IBM-PC. DATA DIVISION. WORKING-STORAGE SECTION. 77 X PIC S9(6)V9. 77 A PIC S9(6). 77 B PIC S9(6). 77 W-X PIC -(6),-. PROCEDURE DIVISION. ARXH. DISPLAY ‘ ΔΩΣΕ Α’ COBOL COmmon Business Oriented Language, το 1960 Χρήση σε εμπορικές/λογιστικές εφαρμογές Εξειδικεύεται στη διαχείριση αρχείων δεδομένων Μακροσκελή προγράμματα Εφαρμογή σε επιχειρήσεις, διοίκηση, τράπεζες κλπ.
132
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 3. ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (3η γενιά)
ALGOL ALGOrithmic Language, το 1960 Σκοπός ήταν η παραγωγή προγραμμάτων γενικής φύσης Χρησιμοποιήθηκε ελάχιστα, αλλά επηρέασε την ανάπτυξη των επόμενων γλωσσών PL/1 Programming Language/1, το 1960 Ανεπιτυχής πορεία στην προσπάθεια να καλύψει τους τομείς στους οποίους εξειδικεύονταν η FORTRAN και η COBOL
133
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 3. ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (3η γενιά)
TO TEST :A REPEAT 4 [FD :A RT 90] PU SETPOS [20 20] PD PU HOME PD REPEAT 2 [FD :A RT 45 ] HOME END LOGO Από την ελληνική λέξη «λόγος», το 1967 Κατάλληλη για την εισαγωγή μικρών μαθητών στον προγραμματισμό LISP και PROLOG LISt Processor και PROgramming in LOGic, το 1959 Δύο γλώσσες για χρήση σε εφαρμογές τεχνητής νοημοσύνης (Artificial Intelligence - AI), επεξεργασία φυσικών γλωσσών, ρομποτική, έμπειρα συστήματα (DEFUN a-exisosi (a b) (setf apot (- (/ b a))) (princ “Η εξίσωση ”) (princ a) (princ “x + ”) (princ b) (princ “ = 0 λύση χ = ”) (princ apot))
134
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 3. ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (3η γενιά)
BASIC Beginners All purpose Symbolic Instruction Code, το 1964 Απλή, εισαγωγική, (βασική) γλώσσα για εκπαιδευτικούς σκοπούς Γνωρίζει ακόμα, εκπληκτική διάδοση. Έβαλε τον προγραμματισμό στο σπίτι, μέσω των προσιτών οικιακών μικροϋπολογιστών από τα τέλη ’70 Οι Bill Gates και Paul Allen, ίδρυσαν τη Microsoft, εκμεταλευόμενοι την δημιουργία ενός διερμηνευτή Basic (1977). Λίγο αργότερα, συνόδευσε το λειτουργικό τους σύστημα (MSDOS) στο πρώτο IBM PC (1981). Εκδόσεις οι : GWBASIC, QuickBasic, Visual Basic. Εκτελείται από διερμηνευτή (interpreter) 10 REM GWBASIC 20 INPUT “A=”,A 30 INPUT “B=”,B 40 IF A=0 THEN GOTO 100 50 X=-B/A 60 PRINT “X=”;X 70 END
135
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 3. ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (3η γενιά)
PASCAL Από Niclaus Wirth, το 1964 Γλώσσα γενικής χρήσης, κατάλληλη για την εκπαίδευση στον προγραμματισμό, μαζί με την Basic Παράγει γρήγορα προγράμματα, μέσω μεταγλωττιστή. Κατάλληλη για την παραγωγή προγραμμάτων με την τεχνική σχεδίασης του Δομημένου Προγραμματισμού Προσφέρει τη δημιουργία τύπων μεταβλητών καθορισμένων από τον προγραμματιστή Αποτέλεσε τη βάση για τις γλώσσες ADA και Modula-2 Η ΓΛΩΣΣΑ του εργαστηρίου, είναι βασισμένη στην Pascal, στα ελληνικά Program Lesson1; Var Num1,Num2,Sum:Integer; Begin Write('Input number 1:'); Readln (Num1); Writeln('Input number 2:'); Readln (Num2); Sum := Num1 + Num2; Writeln (Sum); End.
136
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 3. ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (3η γενιά)
C Εξέλιξη της γλώσσας Β, από τους Ken Thomson και Dennis Ritchie στα Bell Labs (AT&T), το 1970 Ισχυρή γλώσσα για τη δημιουργία λειτουργικών συστημάτων (ανάπτυξη των Λ/Σ UNIX, Linux, Windows), παιχνιδιών 3D, επιστημονικών εφαρμόγών κ.ά. Ταχύτατα προγράμματα γενικής χρήσης μέσω μεταγλωττιστή. Μεταφερσιμότητα προγραμμάτων σε άλλα συστηματα υπολογιστών, με ελάχιστες ή καθόλου αλλαγές. Χρήση των τεχνικών του Δομημένου Προγραμματισμού Εκδόσεις οι: C, C++, C# #include <stdio.h> int main (int argc, char* argv[ ]) { float a, b; printf (“A = ”); scanf(“%f”, &a); printf(“B = ”); scanf(“%f”, &b); if (a == 0) { if (b == 0) { printf(“ΑΟΡΙΣΤΗ\n”); }else { printf(“ΑΔΥΝΑΤΗ\n”); } printf(“X = %f\n”, -b/a); return 0;
137
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 3. ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (3η γενιά)
JAVA Από την Sun Microsystems, το 1995 Ξεκίνησε ως project για ηλεκτρονικό έλεγχο οικιακών συσκευών Χρήση συνήθως σε εφαρμογές Internet Μοιάζει με τη C, προστατεύει όμως το σύστημα σε περίπτωση σοβαρών λαθών του προγραμματιστή Παραγωγή προγραμμάτων που εκτελούνται σε διαφορετικές πλατφόρμες hardware, χωρίς αλλαγές Εκτελεί το πρόγραμμα, σε ένα εικονικό περιβάλλον μέσα στο λειτουργικό σύστημα (virtual machine) // Hello.java import javax.swing.JApplet; import java.awt.Graphics; public class Hello extends JApplet { @Override public void paintComponent(Graphics g) g.drawString("Hello, world!", 65, 95); }
138
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 3. ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (3η γενιά)
dBase Από την Ashton Tate, στα τέλη ‘70 Χρήση σε παλαιότερες εφαρμογές βάσεων δεδομένων Διαλογική μορφή με το χρήστη να υποβάλλει εντολές μέσω μενού επιλογών Εκδόσεις οι : dBase II, dBase III, Clipper (με μεταγλωττιστή) και γενικά προϊόντα που ονομάστηκαν τύπου xBase Προπομπός για προϊόντα όπως η Microsoft Access CLEAR ? “1. ΕΙΣΑΓΩΓΗ ΣΤΟΙΧΕΙΩΝ” ? “2. ΕΚΤΥΠΩΣΗ ΕΤΙΚΕΤΩΝ” ? “3. ΠΡΟΒΟΛΗ” ? “4. ΤΕΛΟΣ” INPUT “Επιλέξτε [1..4] : “ TO CHOICE DO CASE CASE CHOICE = 1 APPEND CASE CHOICE = 2 LABEL FORM PELATES CASE CHOICE = 3 BROWSE OTHERWISE QUIT END CASE
139
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 4. 4η γενιά (4GL)
SQL Structured Query Language, από την ΙΒΜ στα τέλη ‘70 Χρήση σε εφαρμογές βάσεων δεδομένων Ο χρήστης υποβάλλει ερωτήματα προς στο σύστημα διαχείρισης δεδομένων και λαμβάνει απαντήσεις με τη μορφή εγγραφών δεδομένων (γλώσσα ερωταπαντήσεων) Απόκρυψη του τεχνικού μέρους (π.χ. θέση ή όνομα αρχείων, από το χρήστη) αφήνοντας τον να εστιάσει στο πραγματικό πρόβλημα INSERT INTO YPALLHLOS VALUES (‘NIKOLAOY Α.’, ‘ ’, ); SELECT ONOMA, THL, MISTHOS FROM YPALLHLOS WHERE HMER_PROSL = ’10/5/2000’ AND MISTHOS < 1200;
140
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΣΕ ΓΡΑΦΙΚΑ ΠΕΡΙΒΑΛΛΟΝΤΑ
Η εμφάνιση του γραφικού περιβάλλοντος στους Η/Υ (Windows, MacOS, κλπ) άλλαξε τον τρόπο επικοινωνίας ανθρώπου-Η/Υ. Εμφανίστηκαν νέες γλώσσες προγραμματισμού ή εξελίχθηκαν οι υπάρχουσες, για αυτού του είδους την επικοινωνία. Άλλαξε ο τρόπος συγγραφής και χρήσης των προγραμμάτων Εμφανίστηκαν οι έννοιες : Προγραμματισμός οδηγούμενος από τα γεγονότα (event driven programming). Ο χρήστης του προγράμματος και όχι ο προγραμματιστής, καθορίζει μέσω γεγονότων που εκκινεί (π.χ. click, keypress κλπ.), το πώς χρησιμοποιείται η εφαρμογή Οπτικός προγραμματισμός (visual programming). Δημιουργία προγραμμάτων μέσα σε ολοκληρωμένα περιβάλλοντα εργασίας, που περιλαμβάνουν χρήση μενού, κουμπιά, λίστες επιλογών κλπ). Γλώσσες με το χαρακτηριστικό “Visual” ανήκουν εδώ (π.χ. Visual basic, Visual C++)
141
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΤΑΞΙΝΟΜΗΣΗ ΑΝΑ ΕΙΔΟΣ
Βάσει της οργάνωσης του κώδικα Διαδικασιακές (procedural) ή αλγοριθμικές (πλειοψηφία) Μη διαδικασιακές (non procedural) Συναρτησιακές (functional) Αντικειμενοστρεφείς (object oriented) Ερωταπαντήσεων Βάσει του πεδίου χρήσης τους Γλώσσες γενικής χρήσης Επιστημονικής κατεύθυνσης Εμπορικών εφαρμογών Πολυμέσων Προγραμματισμού λειτουργικών συστημάτων Τεχνητής νοημοσύνης Ειδικής χρήσης
142
ΠΟΙΑ ΕΙΝΑΙ Η ΚΑΛΥΤΕΡΗ Στην ιστορία του προγραμματισμού, έχουν αναπτυχθεί χιλιάδες γλώσσες προγραμματισμού Δεν υπάρχει «καλύτερη» γλώσσα προγραμματισμού. Μόνο η «καταλληλότερη» για το είδος της εφαρμογής που αναπτύσσουμε. Άλλη είναι κατάλληλη για γραφικά και παιχνίδια 3D, άλλη για πολυμέσα, άλλη για βάσεις δεδομένων κλπ Έμπειροι προγραμματιστές, γνωρίζουν καλά τουλάχιστον 2-3 γλώσσες, ώστε να ανταποκρίνονται άνετα στη συγγραφή εφαρμογών διαφόρων ειδών
143
ΦΥΣΙΚΕΣ & ΤΕΧΝΗΤΕΣ ΓΛΩΣΣΕΣ
Γενικά, μια γλώσσα (όχι απαραίτητα προγραμματισμού) προσδιορίζεται από: Το αλφάβητο της Επιτρεπτά στοιχεία (γράμματα, σύμβολα, αριθμοί, π.χ. Α-Ω, 0-9, #,%,$,+,* κλπ) Το λεξιλόγιο της Επιτρεπτοί συνδυασμοί στοιχείων του αλφαβήτου (αποδεκτές λέξεις, π.χ. ΓΡΑΨΕ και όχι ΓΡΑΨΕΘ) Τη γραμματική της Τυπικό (κανόνες για τις μορφές ή παραλλαγές μιας λέξης, π.χ ΓΡΑΦΩ, ΓΡΑΨΕ, ΓΡΑΦΟΥΜΕ,...) Συντακτικό (κανόνες για τη διάταξη των λέξεων. Μας ενδιαφέρει στις γλώσσες προγραμματισμού) Τη σημασιολογία της (semantics) Κανόνες για το νόημα των λέξεων, εκφράσεων, προτάσεων
144
ΦΥΣΙΚΕΣ & ΤΕΧΝΗΤΕΣ ΓΛΩΣΣΕΣ ΟΙ ΔΙΑΦΟΡΕΣ ΤΟΥΣ
Φυσικές γλώσσες Χρησιμεύουν στην επικοινωνία μεταξύ ανθρώπων Εξελίσσονται συνεχώς (νέες λέξεις δημιουργούνται, αλλάζουν οι κανόνες σύνταξης ή γραμματικής, κλπ.) Τεχνητές γλώσσες Χρησιμεύουν για την επικοινωνία ανθρώπου-μηχανής Συνήθως στάσιμες αφού κατασκευάζονται για ένα συγκεκριμένο σκοπό Βελτιώνονται σε μικρό σχετικά εύρος, από τους δημιουργούς τους για να ακολουθήσουν νέες εξελίξεις στα είδη εφαρμογών
145
ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΗΣ ΠΡΟΓΡΑΜΜΑΤΩΝ
Είναι συνεχής η προσπάθεια εξεύρεσης μεθοδολογιών και τεχνικών ανάπτυξης λογισμικού Κύριοι λόγοι είναι : Η απλοποίηση της οργάνωσης του κώδικα Η ευκολία διόρθωσης και γενικά η συντήρησή του από τους προγραμματιστές Η μείωση του χρόνου υλοποίησης των εφαρμογών Ακολουθούν οι κυριότερες τεχνικές σχεδίασης
146
ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΗΣ ΠΡΟΓΡΑΜΜΑΤΩΝ
ΙΕΡΑΡΧΙΚΗ ΣΧΕΔΙΑΣΗ Διάσπαση του προβλήματος σε μικρότερα, απλούστερα και κατά το δυνατόν ανεξάρτητα μέρη Λέγεται και προγραμματισμός «από επάνω προς τα κάτω» (top down program design) Χρήση ειδικών διαγραμμάτων ΦΟΡΟΛΟΓΙΑ Δεδομένα Υπολο- γισμοί Αποτελέ- σματα Φορολο- γητέο Φόρος προπληρ Εισόδημα Εκπτώση
147
ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΗΣ ΠΡΟΓΡΑΜΜΑΤΩΝ
ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Υλοποιεί την ιεραρχική σχεδίαση Κάθε υποπρόβλημα αποτελεί ξεχωριστή ενότητα (module) και γράφεται ανεξάρτητα Ο συνδυασμός των ενοτήτων συμβάλλει στην επίλυση του προβλήματος Χρειάζεται προσοχή για τη σωστή διάσπαση σε ενότητες Μειώνονται τα λάθη Καλύτερη παρακολούθηση και κατανόηση
148
ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΗΣ ΠΡΟΓΡΑΜΜΑΤΩΝ
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Είναι ένας τρόπος οργάνωσης του κώδικα του προγράμματος Παρουσιάστηκε από το 1960 και πλέον υποστηρίζεται σχεδόν από όλες τις γλώσσες προγραμματισμού Θεμελιώθηκε το 1968, στη μελέτη του Edger Dijkstra με τίτλο : «GOTO Statement Considered Harmful» Μέχρι τότε, δεν υπήρχε κάποια μεθοδολογία σχεδίασης, τα προγράμματα ήταν μπερδεμένα και η εντολή GOTO, που άλλαζε τη ροή εκτέλεσης, χρησιμοποιούνταν αλόγιστα (spagetti code) Χρειάστηκαν αρκετά χρόνια για την πλήρη αποδοχή του Στηρίζεται στις δομές ακολουθίας, επιλογής και επανάληψης και στο ότι κάθε υποενότητα πρέπει να έχει μια είσοδο και μια έξοδο Περιλαμβάνει : ιεραρχική σχεδίαση και τμηματικό προγραμματισμό
149
ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΗΣ ΠΡΟΓΡΑΜΜΑΤΩΝ
Παράδειγμα της «κακής» εντολή GO TO, που οδήγησε στο δομημένο προγραμματισμό Αυτή η απόλυτη ελευθερία να μεταφέρεται η ροή του προγράμ-ματος σε διάφορα σημεία, παρήγαγε κώδικα με την επωνυμία «spaghetti code» 90 PRINT «Νέα συναλλαγή; (Κ/ατάθεση, Χ/ρέωση, Τ/έλος)" 100 T$=INPUT$(1) 110 IF T$ <> «Κ» AND T$<> «κ» GOTO 210 INPUT «Ποσό κατάθεσης:";DEPOSIT BALANCE = BALANCE + DEPOSIT PRINT USING «Νέο υπόλοιπο: $#####.##";BALANCE GOTO 90 210 IF T$ <> «Χ» AND T$<> «χ» GOTO 300 INPUT «Ποσό χρέωσης";CHECK BALANCE = BALANCE - CHECK PRINT USING «Νέο υπόλοιπο: $#####.##";BALANCE GOTO 90 300 IF T$ <> «Τ» AND T$<> «τ» GOTO 90 410 PRINT USING “Υπόλοιπο λογ/σμού: $#####.##";BALANCE 430 END
150
ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΗΣ ΠΡΟΓΡΑΜΜΑΤΩΝ
ΠΛΕΟΝΕΚΤΗΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Απλούστερα προγράμματα Άμεση μεταφορά των αλγορίθμων σε προγράμματα Εύκολη ανάλυση του προγράμματος σε τμήματα Περιορισμός λαθών Εύκολη κατανόηση από τρίτους προγραμματιστές Εύκολη διόρθωση και συντήρηση Γρηγορότερη υλοποίηση των εφαρμογών
151
ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΗΣ ΠΡΟΓΡΑΜΜΑΤΩΝ
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Object Oriented Programming – OOP) Είναι τρόπος οργάνωσης του κώδικα και έχει πλέον επικρατήσει ως μέθοδος προγραμματισμού στις σύγχρονες γλώσσες Βασίζεται στην έννοια των αντικειμένων, δηλ. αυτόνομων οντοτήτων προγράμματος οι οποίες περιλαμβάνουν τα δεδομένα και τις αντίστοιχες ενέργειες σ’ αυτά. Π.χ. Αυτοκίνητο. Δεδομένα: Χρώμα, κυβισμός, χιλιόμετρα, ταχύτητα, τιμή Ενέργειες: Άνοιξε φώτα, Άναψε μηχανή, Τρέξε, Σταμάτα Παράγει ευέλικτα και επαναχρησιμοποιήσιμα προγράμματα Χρησιμοποιεί την ιεραρχική σχεδίαση και το δομημένο προγραμματισμό
152
ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΗΣ ΠΡΟΓΡΑΜΜΑΤΩΝ
ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Parallel programming) Είναι μέθοδος προγραμματισμού για συστήματα με περισσότερους από έναν επεξεργαστές Οι επεξεργαστές μοιράζονται από κοινού τη μνήμη Κάθε ένας, αναλαμβάνει την εκτέλεση διαφορετικού τμήματος της εφαρμογής, αρκεί το πρόγραμμα να είναι κατάλληλα γραμμένο για το σκοπό αυτό. Προϋποθέτει κατάλληλο λειτουργικό σύστημα Χρειάζεται προσοχή, όταν πρέπει να γίνει χρήση ενός κοινού πόρου, ο οποίος δεν μπορεί να μοιραστεί ταυτόχρονα. Ταχύτατη εκτέλεση εφαρμογών (συνήθως επιστημονικές, μαθηματικές, βιοϊατρικές, αστρονομικές κ.ά)
153
ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ & ΔΙΕΡΜΗΝΕΥΤΕΣ
Για τη δημιουργία προγραμμάτων χρειάζονται τουλάχιστον τρία προγράμματα: Ο συντάκτης (Editor) Ο μεταγλωττιστής ή ο διερμηνευτής (Compiler ή Interpreter) Ο συνδέτης (Linker) Παρουσιάζονται αναλυτικότερα παρακάτω :
154
ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ & ΔΙΕΡΜΗΝΕΥΤΕΣ
Ο συντάκτης (Editor) Είναι ένας ανεξάρτητος επεξεργαστής απλού κειμένου. Δεν είναι κάποια ειδική εφαρμογή. Ο προγραμματιστής μπορεί να επιλέξει οποιοδήποτε τρόπο συγγραφής, π.χ. το απλό “σημειωματάριο” του Η/Υ Με τον καιρό, ενσωματώθηκε στα ολοκληρωμένα περιβάλλοντα προγραμματισμού Απέκτησε λειτουργίες διευκόλυνσης συγγραφής κώδικα, π.χ. χρωματισμό εντολών, εύκολη διόρθωση λαθών, αυτόματη εισαγωγή ολόκληρων εντολών μετά από πληκτρολόγηση των αρχικών γραμμάτων τους, αντιγραφή, επικόλληση κλπ.
155
ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ & ΔΙΕΡΜΗΝΕΥΤΕΣ
Ο μεταγλωττιστής και ο διερμηνευτής (Compiler και Interpreter) Κάθε πρόγραμμα πρέπει να μετατραπεί σε μορφή αναγνωρίσιμη από τον Η/Υ, δηλ. σε γλώσσα μηχανής. Αυτό αναλαμβάνει ο μεταγλωττιστής και ο διερμηνευτής Ο μεταγλωττιστής, δέχεται ως είσοδο όλο το αρχικό κείμενο (πηγαίος κώδικας - source code) του προγράμματος και παράγει το αντίστοιχο πρόγραμμα σε γλώσσα μηχανής (αντικείμενο πρόγραμμα - object) Ο διερμηνευτής από την άλλη (π.χ. της ΓΛΩΣΣΑΣ), δέχεται μία προς μία τις εντολές του πηγαίου κώδικα, τις μεταφράζει σε γλώσσα μηχανής κάθε φορά (π.χ. στις επαναλήψεις) και τις εκτελεί. Έχουμε πιο αργή εκτέλεση, σε σχέση με τη μεταγλώττιση, η οποία γίνεται μία φορά για όλο τον κώδικα.
156
ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ & ΔΙΕΡΜΗΝΕΥΤΕΣ
Ο συνδέτης (Linker) Το αντικείμενο (object) πρόγραμμα που παράγει ο μεταγλωττιστής δεν μπορεί να εκτελεστεί αμέσως. Χρειάζεται να συνδεθεί με άλλα τμήματα προγράμματος (βιβλιοθήκες – libraries) τα οποία, είτε έχει γράψει ο προγραμματιστής, είτε είναι μέρος της γλώσσας προγραμματισμού, ώστε να αξιοποιηθούν και χαρακτηριστικά του λειτουργικού συστήματος Τη δουλειά αυτή αναλαμβάνει ο συνδέτης (linker), οποίος τελικά παράγει το τελικό εκτελέσιμο πρόγραμμα (executable) Συνολικά η διαδικασία αποκαλείται «μεταγλώττιση και σύνδεση» (compiling and linking) ή «χτίσιμο» (build) Συνδέτης Βιβλιοθήκες Εκτελέσιμο πρόγραμμα Αρχικό πρόγραμμα Αντικείμενο πρόγραμμα Μεταγλωττιστής
157
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΕΡΙΒΑΛΛΟΝΤΑ
Παλαιότερα, ο προγραμματιστής αναλάμβανε να εκτελέσει ξεχωριστά, κάθε ένα από τα προηγούμενα προγράμματα Σήμερα, και τα τρία (συντάκτης, μεταγλωττιστής/διερμηνευτής και συνδέτης), είναι πλέον ενοποιημένα σε ειδικά ολοκληρωμένα περιβάλλοντα εργασίας, σε όλες τις γλώσσες προγραμματισμού Χρησιμοποιείται γραφικό περιβάλλον εργασίας (Graphical User Interface – GUI) Εύκολη συγγραφή κώδικα, άμεση μεταγλώττιση σε γλώσσα μηχανής και διασύνδεση με τις βιβλιοθήκες και το λειτουργικό σύστημα Άμεση εμφάνιση συντακτικών λαθών Βοηθητικές λειτουργίες, π.χ. λήψη εφεδρικών αντιγράφων, εκτυπώσεις, αλλαγή στην εμφάνιση και στη λειτουργία κατά τις προτιμήσεις του προγραμματιστή, εισαγωγή κειμένου από άλλα προγράμματα, κ.ά.
158
ΧΕΙΡΟΚΙΝΗΤΗ ΧΡΗΣΗ ΤΡΙΩΝ ΠΡΟΓΡΑΜΜΑΤΩΝ
1. Συντάκτης Γλώσσα : C Αποθηκεύει το : main.c (απλό κείμενο με τη σύνταξη της γλώσσας) 2. Μεταγλωττιστής Διαβάζει το : main.c Παράγει το : main.obj (Αντικείμενο πρόγραμμα. Δεν εκτελείται ακόμη) Εντολή MS-DOS για λίστα αρχείων στο δίσκο (ορίστε ;) 3. Συνδέτης Διαβάζει το: main.obj Παράγει το: main.exe (εκτελέσιμο στον Η/Υ)
159
ΟΛΟΚΛΗΡΩΜΕΝΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΕΡΙΒΑΛΛΟΝΤΑ Integrated Development Environments (IDE)
Περιλαμβάνεται αναβαθμισμένος συντάκτης κειμένου Εύκολος εντοπισμός συντακτικών λαθών Ηλεκτρονικό εγχειρίδιο βοήθειας για τη γλώσσα προγραμματισμού Γραφική σύνθεση των παραθύρων της εφαρμογής Πολλαπλές εκδόσεις Το ίδιο το περιβάλλον εργασίας αναλαμβάνει τη μεταγλώττιση και σύνδεση
160
ΕΙΔΗ ΛΑΘΩΝ ΣΤΑ ΠΡΟΓΡΑΜΜΑΤΑ
Συντακτικά λάθη (syntax errors) Οφείλονται στη λανθασμένη χρήση ή ορθογραφία των εντολών από τον προγραμματιστή Εντοπίζονται αμέσως από το περιβάλλον εργασίας κατά τη μεταγλώττιση Ο προγραμματιστής πρέπει να τα διορθώσει, για να μεταγλωττιστεί το πρόγραμμα Λογικά (logical errors ή bugs) Είναι τα πιο επικίνδυνα, αφού οφείλονται σε κακή υλοποίηση του αλγορίθμου (είναι λάθη λογικής), π.χ. αντί μιας πρόσθεσης, προγραμματίστηκε μια αφαίρεση. Δύσκολα στην ανεύρεσή τους Μπορεί να οδηγήσουν σε σφάλματα εκτέλεσης (τερματισμό) του προγράμματος, π.χ. διαίρεση με το 0, ή άνοιγμα αρχείου που δεν υπάρχει, κλπ.
161
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΔΙΑΔΙΚΑΣΙΕΣ & ΣΥΝΑΡΤΗΣΕΙΣ
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΔΙΑΔΙΚΑΣΙΕΣ & ΣΥΝΑΡΤΗΣΕΙΣ
162
ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Όπως έχουμε αναφέρει, μεγάλα και σύνθετα προγράμματα γράφονται με την δομημένη σχεδίαση (τεχνική Top-Down) Ιεραρχική προσέγγιση. Το πρόβλημα διαιρείται σε μικρότερα και απλούστερα μέρη Αυτά σχεδιάζονται και υλοποιούνται τμηματικά, σύμφωνα με τις αρχές του δομημένου προγραμματισμού
163
ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Παράδειγμα (σχ. βιβλίο)
Αξιολόγηση αποτελεσμάτων Γ’ Λυκείου (μια προσέγγιση) 1. Εισαγωγή δεδομένων 1.1 Καταχώρηση 1.2 Έλεγχος τιμών 2. Επεξεργασία δεδομένων 2.1 Μέσος όρος 2.2 Κατανομή συχνοτήτων 2.3 Τυπική απόκλιση 2.4 Γραφικές παραστάσεις 3. Εμφάνιση/Εκτύπωση αποτελεσμάτων 3.1 Εμφάνιση συχνοτήτων 3.2 Εμφάνιση γραφικών παραστάσεων 3.3 Αποτελέσματα βαθμολογίας Κάθε τμήμα υλοποιείται ξεχωριστά, επιτελεί αυτόνομο έργο και γι’ αυτό ονομάζεται ΥΠΟΠΡΟΓΡΑΜΜΑ (subprogram) Διαίρεση σε τμήματα
164
ΥΠΟΠΡΟΓΡΑΜΜΑ Χαρακτηριστικά
Έχει μόνο μία είσοδο και μία έξοδο Ενεργοποιείται με τα δεδομένα εισόδου του (στην αρχή του) Εκτελεί τις λειτουργίες του Απενεργοποιείται εξάγοντας τυχόν αποτελέσματα (στο τέλος του) Είναι ανεξάρτητο από τα άλλα Μπορεί να αναπτυχθεί και να συντηρηθεί όσο το δυνατόν αυτόνομα Αλλαγές σε αυτό, δεν επηρεάζουν τα υπόλοιπα Δεν είναι μακροσκελές Εκτελεί μια λειτουργία Είναι τόσο μεγάλο, όσο χρειάζεται για να γίνεται κατανοητό Αν φτάσει να εκτελεί αρκετές λειτουργίες, καλό είναι να διαιρείται σε ακόμη μικρότερα υποπρογράμματα Τα παραπάνω δεν είναι πάντα εύκολα και εξαρτώνται από το μέγεθος και τη σύνθεση του προβλήματος. Ο τμηματικός προγραμματισμός απαιτεί σοβαρή ανάλυση, εμπειρία, ταλέντο και γνώσεις
165
ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Πλεονεκτήματα
Διευκολύνει την ανάπτυξη αλγορίθμων / προγραμμάτων Υλοποιούμε την εφαρμογή σταδιακά και σε μικρότερα τμήματα Διευκολύνει την κατανόηση και τη διόρθωση Εύκολότερες αλλαγές χωρίς να επηρεάζονται άλλα σημεία του κώδικα Διαφορετικοί προγραμματιστές κατανοούν τον κώδικα Συμβάλλει στην ταχύτερη υλοποίηση προγραμμάτων Τα υποπρογράμματα γράφονται μία φορά και χρησιμοποιούνται σε διάφορα σημεία της εφαρμογής. ΒΑΣΙΚΟ: Αν μια λειτουργία μας χρειάζεται πάνω από μία φορά, καλό είναι να τη μετατρέψουμε σε ένα υποπρόγραμμα Επεκτείνει τις δυνατότητες γλωσσών προγραμματισμού Ένα υποπρόγραμμα, μπορεί να χρησιμοποιηθεί και από άλλες εφαρμογές, αν καλύπτει κοινές λειτουργίες (βιβλιοθήκη) Είναι σαν να δημιουργούμε τις δικές μας εντολές, σε περίπτωση που η ίδια η γλώσσα δεν καλύπτει τη λειτουργία που θέλουμε
166
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράμετροι – Τί είναι;
Παρόλο που το κάθε υποπρόγραμμα γράφεται ανεξάρτητα από τα άλλα, συνήθως χρειάζεται να επικοινωνήσει με αυτά ή με το κύριο πρόγραμμα (δηλ. να δώσει ή να λάβει δεδομένα) Αυτό γίνεται μέσω μεταβλητών, οι οποίες περνούν (και πιθανόν τροποποιούνται) από και προς τα υποπρογράμματα ή το κύριο πρόγραμμα Αυτές οι μεταβλητές, λέγονται «παράμετροι» Αντί για μεταβλητών, παράμετροι μπορεί να είναι και απλές σταθερές τιμές (π.χ. 15, “ΔΕΥΤΕΡΑ”, 15.6, ΨΕΥΔΗΣ) ή εκφράσεις (π.χ. X+15, y-2x)
167
ΕΙΔΗ ΥΠΟΠΡΟΓΡΑΜΜΑΤΩΝ ΔΙΑΔΙΚΑΣΙΕΣ και ΣΥΝΑΡΤΗΣΕΙΣ
ΔΙΑΔΙΚΑΣΙΑ Εκτελεί οποιαδήποτε λειτουργία έχουμε δει στα απλά προγράμματα (εισαγωγή τιμών, υπολογισμοί, εμφάνιση κλπ.) Εκτελείται από το κύριο πρόγραμμα ή από άλλες διαδικασίες ή συναρτήσεις Οι παράμετροί της, μπορούν να επιστραφούν τροποποιημένες πίσω στο σημείο κλήσης, μετά την εκτέλεση της. ΣΥΝΑΡΤΗΣΗ Κανονικά, εκτελεί οποιαδήποτε λειτουργία όπως οι διαδικασίες. Καλό είναι, να εκτελεί μόνο υπολογισμούς (όχι είσοδο ή έξοδο) Εκτελείται από το κύριο πρόγραμμα ή από άλλες συναρτήσεις ή διαδικασίες Οι παράμετροί της, δεν μπορούν να επιστραφούν τροποιημένες πίσω στο σημείο κλήσης, μετά την εκτέλεση της. Επιστρέφει οπωσδήποτε μία μόνο τελική τιμή (όπως οι μαθηματικές συναρτήσεις)
168
ΔΙΑΔΙΚΑΣΙΕΣ Πώς γράφονται
Γράφονται πάντα μετά το τέλος του κυρίου προγράμματος Για το όνομα, ισχύει ό,τι και για τις μεταβλητές Οι παράμετροι είναι προαιρετικές. Αν όμως τις ορίσετε, πρέπει να τις δηλώσετε και στις μεταβλητές μέσα στη διαδικασία, μαζί με άλλες μεταβλητές που έχετε ΔΙΑΔΙΚΑΣΙΑ όνομα (παράμ1, παράμ2, ...) ΣΤΑΘΕΡΕΣ κατά τα γνωστά ΜΕΤΑΒΛΗΤΕΣ Τύπος_παραμέτρου1 : παράμ1 Τύπος_παραμέτρου2 : παράμ2 Άλλες μεταβλητές για τη διαδικασία (τοπικές) ΑΡΧΗ οποιεσδήποτε εντολές ή κλήσεις άλλων διαδικασιών / συναρτήσεων ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
169
ΔΙΑΔΙΚΑΣΙΕΣ Πώς χρησιμοποιούνται (καλούνται)
Οι διαδικασίες, εκτελούνται με την εντολή ΚΑΛΕΣΕ, το όνομα της και τις παραμέτρους της σε παρένθεση, χωρισμένες με κόμμα (,) Παραμέτροι κλήσης, μπορούν να είναι μεταβλητές, σταθερές τιμές ή εκφράσεις. Μόνο με τις μεταβλητές, αν αλλάξουν οι τιμές τους μέσα στη διαδικασία, συνεχίζουμε με τις νέες τιμές στο κύριο πρόγραμμα Μπορούμε να επιστρέψουμε πάνω από μία τιμές, στο κύριο πρόγραμμα ΠΡΟΓΡΑΜΜΑ άσκηση1 ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: x1, y1 ΑΡΧΗ x1 5 y1 10 ΚΑΛΕΣΕ ΔιαδικασίαΑ (x1, y1) ΚΑΛΕΣΕ ΔιαδικασίαΒ (5, 15, y1) ΚΑΛΕΣΕ ΔιαδικασίαΓ (x1+5, x1+y1) ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Οι παράμετροι κλήσης μιας διαδικασίας, πρέπει να ταιριάζουν 1:1 στη σειρά και στον τύπο, με αυτές στον ορισμό της Με την κλήση μιας διαδικασίας, η ροή του προγράμματος μεταφέρεται σ’ αυτήν. Μόλις η διαδικασία τελειώσει, η ροή συνεχίζει από τη γραμμή μετά την κλήση της
170
ΣΥΝΑΡΤΗΣΕΙΣ Πώς γράφονται
Γράφονται και αυτές μετά το τέλος του κυρίου προγράμματος Για το όνομα ισχύει, ό,τι και για τις μεταβλητές Πρέπει να δηλώσετε τις παραμέτρους της και ως μεταβλητές μέσα στη συνάρτηση μαζί με άλλες μεταβλητές που έχετε. Συνάρτηση χωρίς παραμέτρους, δεν έχει νόημα ύπαρξης. Επιστροφή τιμής στο τέλος, εκχωρώντας την στο όνομα της συνάρτησης Τύποι επιστροφής : ΑΚΕΡΑΙΑ, ΠΡΑΓΜΑΤΙΚΗ, ΛΟΓΙΚΗ, ΧΑΡΑΚΤΗΡΑΣ ΣΥΝΑΡΤΗΣΗ Όνομα (παράμ1, παράμ2, ...) : τύπος_επιστροφής ΣΤΑΘΕΡΕΣ κατά τα γνωστά ΜΕΤΑΒΛΗΤΕΣ Τύπος_παραμέτρου1 : παράμ1 Τύπος_παραμέτρου2 : παράμ2 Άλλες μεταβλητές για τη συνάρτηση (τοπικές) ΑΡΧΗ κοινές εντολές εκτός από ΓΡΑΨΕ, ΔΙΑΒΑΣΕ ή κλήσεις άλλων συναρτήσεων / διαδικασιών Όνομα τιμή_επιστροφής (ή παράσταση υπολογισμών) ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
171
ΣΥΝΑΡΤΗΣΕΙΣ Πώς χρησιμοποιούνται (καλούνται)
Οι συναρτήσεις, καλούνται ακριβώς όπως και οι ενσωματωμένες μαθηματικές συναρτήσεις της ΓΛΩΣΣΑΣ (π.χ. ΗΜ(x), Τ_Ρ(x), κλπ). Σκεφθείτε ότι δημιουργείτε τις δικές σας εντολές ή συναρτήσεις, επεκτείνοντας τις δυνατότητες της ΓΛΩΣΣΑΣ. Αλλαγές στις τιμές των παραμέτρων, δεν μεταφέρονται στο κύριο πρόγραμμα μετά την εκτέλεσή της Οι παράμετροι κλήσης μιας συνάρτησης, πρέπει να ταιριάζουν 1:1 στη σειρά και στον τύπο, με αυτές στον ορισμό της Με την κλήση μιας συνάρτησης, η ροή του προγράμματος μεταφέρεται σ’ αυτήν. Μόλις η συνάρτηση τελειώσει, η ροή συνεχίζει από τη γραμμή μετά την κλήση της ΠΡΟΓΡΑΜΜΑ άσκηση1 ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: μο, x ΑΡΧΗ x 50 μο ΜέσοςΟρος(x,40,60) ΓΡΑΨΕ μο ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
172
ΠΑΡΑΜΕΤΡΟΙ Πραγματικές και Τυπικές
Πραγματικές, λέγονται οι παράμετροι οι οποίες χρησιμοποιούνται κατά την κλήση της διαδικασίας ή συνάρτησης Τυπικές, λέγονται οι παράμετροι συγγραφής της διαδικασίας ή συνάρτησης Μπορούν να έχουν το ίδιο ακριβώς όνομα (ή όχι), είναι όμως τελείως ανεξάρτητες μεταξύ τους Κατά την κλήση διαδικασιών ή συναρτήσεων : οι πραγματικές και οι τυπικές παράμετροι, πρέπει να έχουν το ίδιο πλήθος και να βρίσκονται σε αντιστοιχία 1 προς 1, ως προς τον τύπο και τη σειρά εμφάνισης. Οι τιμές των πραγματικών, αντιγράφονται στις τυπικές Όλες οι παράμετροι έχουν τοπική ισχύ, δηλαδή, χρησιμοποιούνται μόνο από το τμήμα προγράμματος στο οποίο έχουν δηλωθεί
173
ΠΑΡΑΜΕΤΡΟΙ Πραγματικές και Τυπικές - Παράδειγμα
ΠΡΟΓΡΑΜΜΑ ΠραγματικέςΤυπικέςΠαράμετροι ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: ηλικία ΑΡΧΗ ηλικία 45 ΚΑΛΕΣΕ Πληροφορίες (”ΝΙΚΟΛΑΟΥ Α.” , ηλικία , 1.80) ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ! ΔΙΑΔΙΚΑΣΙΑ Πληροφορίες (όνομα, age, ύψος) ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: ύψος ΑΚΕΡΑΙΕΣ: age ΧΑΡΑΚΤΗΡΕΣ: όνομα ΑΡΧΗ ΓΡΑΨΕ “Πελάτης “, όνομα, “ ετών “, age, “ ύψος “, ύψος ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ 3 πραγματικές ΧΑΡ, ΑΚ,ΠΡΑΓΜ 3 τυπικές ΧΑΡ, ΑΚ,ΠΡΑΓΜ
174
ΠΑΡΑΜΕΤΡΟΙ Επιστροφή τιμών από ΔΙΑΔΙΚΑΣΙΑ – Πώς λειτουργεί
ΠΡΟΓΡΑΜΜΑ ΑλλαγήΠαράμετρων ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: δείκτης ΑΡΧΗ ΚΑΛΕΣΕ ΔείκτηςΜΣ ( 80, , δείκτης ) ΓΡΑΨΕ δείκτης ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΙΑΔΙΚΑΣΙΑ ΔείκτηςΜΣ (β, υ, δ) ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: β, υ, δ ΑΡΧΗ δ β / (υ^2) ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ 80 και 1.75 είναι σταθερές (κενή) Πραγματικές παράμετροι Τυπικές παράμετροι 26.12
175
ΠΑΡΑΜΕΤΡΟΙ Μετατροπή ΣΥΝΑΡΤΗΣΗΣ σε ΔΙΑΔΙΚΑΣΙΑ
ΔΜΣ Δείκτης Μάζας Σώματος Εκχωρούμε την τελική τιμή στο όνομα της (ΔΜΣ), για την επιστροφή της στο κύριο πρόγραμμα Εισάγουμε άλλη μία τυπική παράμετρο (δ), στην οποία εκχωρούμε την τελική τιμή. Μετά την κλήση, η τιμή αυτή μεταφέρεται στην πραγμα-τική παράμετρο (δείκτης) ΣΥΝΑΡΤΗΣΗ ΔΜΣ (β, υ):ΠΡΑΓΜΑΤΙΚΗ ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: β, υ, δ ΑΡΧΗ δ β / (υ^2) ΔΜΣ δ ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ δείκτης ΔΜΣ ( 70, 1.75 ) ΔΙΑΔΙΚΑΣΙΑ ΔΜΣ (β, υ, δ) ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: β, υ, δ ΑΡΧΗ δ β / (υ^2) ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΚΑΛΕΣΕ ΔΜΣ ( 70, 1.75, δείκτης )
176
ΔΙΑΔΙΚΑΣΙΕΣ ή ΣΥΝΑΡΤΗΣΕΙΣ; Ενδείξεις για να επιλέξετε
Διαδικασίες όταν : δεν επιστρέφουμε τιμές επιστρέφουμε >= 2 τιμές εκτελούμε τις ΓΡΑΨΕ ή ΔΙΑΒΑΣΕ επιστρέφουμε πίνακα τιμών Συναρτήσεις όταν : επιστρέφουμε μία μόνο τιμή η τελική τιμή, χρησιμοποι-είται ως παράμετρος σε άλλη κλήση υποπρογ/τος αναζητούμε τη θέση ενός στοιχείου σε πίνακα ΚΑΛΕΣΕ Β_θμια(α,β,γ,x1,x2) ΚΑΛΕΣΕ Αντιμετάθεση(x, y) ΚΑΛΕΣΕ ΓράψεΠίνακα(Α, Ν) ΚΑΛΕΣΕ ΕμφάνισηΜενού ΚΑΛΕΣΕ ΤαξινόμησηΠιν(Α, Ν) ΚΑΛΕΣΕ ΕισαγωγήΘετικού(x) μ Μέγιστος(α, β) ε Εμφανίσεις(x, Α, Ν) θ ΑναζήτησηΠίνακα(x, A, N) ο ΌγκοςΚυλίνδρου(ρ, υ) δ ΔείκτηςΜΣ(β, υ) ο Α_Μ( ΔείκτηςΜΣ(β, υ) ) ι ΜετατροπήΝομίσματος(ν)
177
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #1
ΠΡΟΓΡΑΜΜΑ Άσκηση ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: α, β ΑΡΧΗ α 5 β 10 ΚΑΛΕΣΕ Αντιμετάθεσε(α, β) ΓΡΑΨΕ α, β ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΙΑΔΙΚΑΣΙΑ Αντιμετάθεσε(x, y) ΑΚΕΡΑΙΕΣ: x,y,z z x x y y z ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Να γράψετε πρόγραμμα, που να κάνει αντιμετάθεση των τιμών δύο ακέραιων μεταβλητών, κάνοντας χρήση υποπρογράμματος
178
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #2
Όταν ζητούμε ένα αριθμό ή ένα κείμενο από το πληκτρολόγιο, συνήθως εμφανίζουμε πρώτα ένα συνοδευτικό διευκρινιστικό μήνυμα. Να γράψετε υποπρό-γραμμα, με το οποίο να αντικαθιστούμε τις δύο εντολές : ΓΡΑΨΕ “μήνυμα” και ΔΙΑΒΑΣΕ μεταβλητή με μία μόνο, για τον παραπάνω σκοπό (π.χ. για εισαγωγή ακεραίου) ΠΡΟΓΡΑΜΜΑ Άσκηση ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: x ΑΡΧΗ ΚΑΛΕΣΕ ΔώσεΑκέραιο(“Εισάγετε ακέραιο”, x) ΓΡΑΨΕ “Μόλις δώσατε τον αριθμό:”, x ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΙΑΔΙΚΑΣΙΑ ΔώσεΑκέραιο(μήνυμα, αριθμός) ΑΚΕΡΑΙΕΣ: αριθμός ΧΑΡΑΚΤΗΡΕΣ: μήνυμα ΓΡΑΨΕ μήνυμα ΔΙΑΒΑΣΕ αριθμός ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
179
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #3
ΠΡΟΓΡΑΜΜΑ Άσκηση ΜΕΤΑΒΛΗΤΕΣ ΧΑΡΑΚΤΗΡΕΣ: μ, απάντ ΑΡΧΗ μ “Θα έρθετε εκδρομή; (Ν/Ο)” ΚΑΛΕΣΕ Απάντησε(μ, “Ν”, “Ο”, απάντ) ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΙΑΔΙΚΑΣΙΑ Απάντησε( μήν, τ1, τ2, απ ) ΧΑΡΑΚΤΗΡΕΣ: μ, τ1, τ2, απ ΑΡΧΗ ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ μήν ΔΙΑΒΑΣΕ απ ΜΕΧΡΙΣ_ΟΤΟΥ απ = τ1 Ή απ = τ2 ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Να γράψετε πρόγραμμα, που να ζητά από το χρήστη να εισάγει από το πληκτρολόγιο, μόνο δύο προτεινόμενες τιμές χαρακτήρων, απαντώντας σε μήνυμα στην οθόνη, με χρήση υποπρογράμματος Το μήνυμα μπορεί να είναι: - Θα έρθετε εκδρομή;(Ν/Ο) - Δώστε το φύλο : (Α/Γ) - Χρώμα: (Κόκκινο/Λευκό) - κ.ο.κ.
180
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #4
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #4 ΔΙΑΔΙΚΑΣΙΑ ΓέμισεΠίνακα(Π) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Π[100], ι ΑΡΧΗ ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 100 ΔΙΑΒΑΣΕ Π[ ι ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΠίνακα(Κ) ΑΚΕΡΑΙΕΣ: Κ[100], ι ΓΡΑΨΕ Κ[ ι ] Να γράψετε πρόγραμμα, που να γεμίζει και να εμφανίζει δύο πίνακες 100 ακεραίων αριθμών, κάνοντας χρήση υποπρογραμμάτων ΠΡΟΓΡΑΜΜΑ Άσκηση ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Α[100], Β[100] ΑΡΧΗ ΚΑΛΕΣΕ ΓέμισεΠίνακα(Α) ΚΑΛΕΣΕ ΓέμισεΠίνακα(Β) ΚΑΛΕΣΕ ΕμφάνισεΠίνακα(Α) ΚΑΛΕΣΕ ΕμφάνισεΠίνακα(Β) ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
181
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #4 - συνέχεια
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #4 - συνέχεια Συμπληρώνοντας το προηγούμενο παράδειγμα, να γράψετε υποπρόγραμμα, με το οποίο υπολογίζεται ο μέσος όρος των στοιχείων κάθε πίνακα, μαζί με τις εντολές κλήσης του από το κύριο πρόγραμμα ΣΥΝΑΡΤΗΣΗ ΜΟ_Πίνακα(Π):ΠΡΑΓΜΑΤΙΚΗ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Π[100], ι, άθροισμα ΑΡΧΗ άθροισμα 0 ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 100 άθροισμα άθροισμα + Π[ ι ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΜΟ_Πίνακα άθροισμα / 100 ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Κλήση στο κύριο πρόγρ. : (δηλώνουμε τις μεταβλητές) μο_Α ΜΟ_Πίνακα ( Α ) μο_Β ΜΟ_Πίνακα ( Β ) ΓΡΑΨΕ μο_Α, μο_Β
182
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #5
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #5 Να γραφεί συνάρτηση, που να επιστρέφει το αν ένα όνομα υπάρχει σε ένα πίνακα 100 ονομάτων ΣΥΝΑΡΤΗΣΗ ΑνήκειΣεΠίνακα (Χ, Πίνακας) : ΛΟΓΙΚΗ ΜΕΤΑΒΛΗΤΕΣ ΧΑΡΑΚΤΗΡΕΣ: Πίνακας[100], Χ ΑΚΕΡΑΙΕΣ: ι ΛΟΓΙΚΕΣ: βρέθηκε ΑΡΧΗ βρέθηκε ΨΕΥΔΗΣ ι 1 ΟΣΟ ι <= 100 ΚΑΙ βρέθηκε = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ ΑΝ Πίνακας[ ι ] = X TOTE βρέθηκε ΑΛΗΘΗΣ ! Σταματά αμέσως ΑΛΛΙΩΣ ι ι + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΑνήκειΣεΠίνακα βρέθηκε ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
183
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #6
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #6 Να γραφεί συνάρτηση, που να επιστρέφει πόσες φορές ένας αριθμός εμφανίζεται σε ένα πίνακα 100 ακεραίων ΣΥΝΑΡΤΗΣΗ Εμφανίσεις (Χ, Πίνακας) : ΑΚΕΡΑΙΑ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Χ, Πίνακας[100], πλήθος ΑΡΧΗ πλήθος 0 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100 ΑΝ Πίνακας[ i ] = X TOTE πλήθος πλήθος + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Εμφανίσεις πλήθος ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
184
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 1/10
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 1/10 ΠΡΟΒΛΗΜΑ Να γραφεί πρόγραμμα, ώστε να ελέγχεται επαναληπτικά, αν ένα δοθέν κεφαλαίο γράμμα είναι σύμφωνο ή φωνήεν ΛΥΣΗ ΤΟΥ ΠΡΟΒΛΗΜΑΤΟΣ (Ελεύθερη προσέγγιση) Το πρόβλημα, μπορεί να λυθεί με διάφορους τρόπους. Εμείς, θεωρούμε αρχικά, το σύνολο των γραμμάτων της ελληνικής γλώσσας, με πρώτα όμως τα φωνήεντα (7), ακολουθούμενα από τα σύμφωνα (17) Αναζητώντας σειριακά για ένα κεφαλαίο γράμμα, αν το βρούμε στα πρώτα επτά, πρόκειται για φωνήεν, αλλιώς πρόκειται για σύμφωνο Στους Η/Υ, τα γράμματα αποθηκεύονται συνεχόμενα κατά αλφαβητική σειρά. Αυτό, μπορεί να χρησιμοποιηθεί για τον έλεγχο ορθότητας της τιμής αναζήτησης (να μην αναζητούμε άλλα σύμβολα). Κατεβάστε το πλήρες πρόγραμμα σε ΓΛΩΣΣΑ
185
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 2/10
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 2/10 Κάνοντας χρήση του τμηματικού προγραμματισμού (top down), διαιρούμε το πρόγραμμα σε μικρότερα και πιο διαχειρίσιμα μέρη Εισαγωγή γράμματος αναζήτησης Έλεγχος ορθότητας (δεν επιτρέπεται τίποτε πέρα από κεφαλαία) Επεξεργασία στοιχείων – σύμφωνο ή φωνήεν; 2.1 Δημιουργία λίστας γραμμάτων (φωνήεντα + σύμφωνα). Σημ: Βάζουμε αυτή τη λειτουργία εδώ, ώστε να κάνει την επεξεργασία όσο το δυνατόν πιο αυτόνομη. Το σύνολο των γραμμάτων δεν ενδιαφέρει το κύριο πρόγραμμα, αλλά μόνο την παρακάτω λειτουργία της αναζήτησης 2.2 Σειριακή αναζήτηση στη λίστα, για το γράμμα Αναζήτηση κατά τα γνωστά. Θέσεις 1-7=Φωνήεν, 8-24=Σύμφωνο Εμφάνιση αποτελεσμάτων Μήνυμα προς το χρήστη ανάλογα με το αποτέλεσμα Απάντηση για συνέχεια Απάντηση για την επανάληψη της εκτέλεσης του προγράμματος
186
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 3/10
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 3/10 Διαγραμματική αναπαράσταση της τεχνικής Top Down
187
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 4/10
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 4/10 Υλοποίηση - Κύριο πρόγραμμα ΠΡΟΓΡΑΜΜΑ ΣύμφωνοΦωνήεν ΜΕΤΑΒΛΗΤΕΣ ΧΑΡΑΚΤΗΡΕΣ: Χ, συνέχεια ΛΟΓΙΚΕΣ: απάντηση ΑΡΧΗ ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΚΑΛΕΣΕ ΓράμμαΑναζήτησης( Χ ) ! είσοδος απάντηση ΕίναιΦωνήεν( Χ ) ! επεξεργασία ΚΑΛΕΣΕ Αποτελέσματα( Χ, απάντηση ) ! έξοδος ΚΑΛΕΣΕ Απάντησε(“Συνέχεια (ν/ο);”, ”ν”, ”ο”, συνέχεια) ΜΕΧΡΙΣ_ΟΤΟΥ συνέχεια <> “ν” ΓΡΑΨΕ “ΤΕΛΟΣ” ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Διάγραμμα
188
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 5/10
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 5/10 Διαδικασία : ΓράμμαΑναζήτησης ΔΙΑΔΙΚΑΣΙΑ ΓράμμαΑναζήτησης( γρ ) ΜΕΤΑΒΛΗΤΕΣ ΧΑΡΑΚΤΗΡΕΣ: γρ ΑΡΧΗ ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ “Δώστε ένα κεφαλαίο γράμμα (Α-Ω) : ” ΔΙΑΒΑΣΕ γρ ΜΕΧΡΙΣ_ΟΤΟΥ γρ >= “A” KAI γρ <= “Ω” ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Διάγραμμα Με το τέλος της διαδικασίας, η τιμή της μεταβλητής (γρ), μεταφέρεται στη μεταβλητή (Χ) του κυρίου προγράμματος
189
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 6/10
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 6/10 Συνάρτηση : ΕίναιΦωνήεν (;) ΣΥΝΑΡΤΗΣΗ ΕίναιΦωνήεν (Χ) : ΛΟΓΙΚΗ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: θέση ΧΑΡΑΚΤΗΡΕΣ: Χ, Γράμμα[24] ΑΡΧΗ ΚΑΛΕΣΕ ΛίσταΓραμμάτων(Γράμμα) ! Γέμισμα λίστας γραμ. θέση Αναζήτηση( Χ, Γράμμα) ! θέση του Χ στον Γράμμα ΕίναιΦωνήεν (θέση <= 7) ! Είναι στις πρώτες 7; ΑΛΗΘΗΣ ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ Διάγραμμα
190
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 7/10
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 7/10 Διαδικασία : ΛίσταΓραμμάτων ΔΙΑΔΙΚΑΣΙΑ ΛίσταΓραμμάτων ( Γ ) ΜΕΤΑΒΛΗΤΕΣ ΧΑΡΑΚΤΗΡΕΣ: Γ [24] ΑΡΧΗ Γ [1] “Α” ! Τα πρώτα 7 είναι τα φωνήεντα ! Συμπληρώνουμε ενδιάμεσα Γ [7] “Ω” Γ [8] “Β” ! Εδώ ξεκινούν τα σύμφωνα ! Συμπληρώνουμε ενδιάμεσα Γ [24] “Ψ” ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Διάγραμμα Με το τέλος της διαδικασίας, η μεταβλητή πίνακα (Γ), μεταφέρεται στη μεταβλητή πίνακα (Γράμμα) της συνάρτησης «ΕίναιΦωνήεν»
191
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 8/10
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 8/10 Συνάρτηση : Αναζήτηση ΣΥΝΑΡΤΗΣΗ Αναζήτηση ( γρ, Γράμμα ): ΑΚΕΡΑΙΑ ΜΕΤΑΒΛΗΤΕΣ ΧΑΡΑΚΤΗΡΕΣ: γρ, Γράμμα [24] ΑΚΕΡΑΙΕΣ: i, θέση ΑΡΧΗ θέση ! Θα βρεθεί σίγουρα στη λίστα ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 24 ΑΝ Γράμμα[ i ] = γρ TOTE θέση i ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Αναζήτηση θέση ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ Διάγραμμα
192
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 9/10
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 9/10 Διαδικασία : Αποτελέσματα ΔΙΑΔΙΚΑΣΙΑ Αποτελέσματα ( γρ, απάντ ) ΜΕΤΑΒΛΗΤΕΣ ΛΟΓΙΚΕΣ: απάντ ΧΑΡΑΚΤΗΡΕΣ: γρ ΑΡΧΗ ΑΝ απάντ = ΑΛΗΘΗΣ ΤΟΤΕ ΓΡΑΨΕ “Το γράμμα ”, γρ , “ είναι φωνήεν” ΑΛΛΙΩΣ ΓΡΑΨΕ “Το γράμμα ”, γρ , “ είναι σύμφωνο” ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Διάγραμμα Η διαδικασίες ή συναρτήσεις, μπορούν απλά να δέχονται τις παραμέτρους εισόδου για χρήση. Δεν είναι απαραίτητο να τις τροποποιούν
193
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 10/10
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Παράδειγμα #7 (Ολοκληρωμένο) – Μέρος 10/10 Διαδικασία : Απάντησε ΔΙΑΔΙΚΑΣΙΑ Απάντησε(μήνυμα, τ1, τ2, απάντηση) ΜΕΤΑΒΛΗΤΕΣ ΧΑΡΑΚΤΗΡΕΣ: μήνυμα, τ1, τ2, απάντηση ΑΡΧΗ ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ μήνυμα ΔΙΑΒΑΣΕ απάντηση ΜΕΧΡΙΣ_ΟΤΟΥ απάντηση = τ1 Ή απάντηση = τ2 ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Διάγραμμα
194
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ (Α.Ε.Π.Π.)
ΙΟΡΔΑΝΗΣ ΣΑΒΒΟΥΛΙΔΗΣ Πίσω
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.