Professional Documents
Culture Documents
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
(ΚΑΤΕΥΘΥΝΣΗ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ)
ΕΥΑΓΓΕΛΟΣ Χ. ΖΙΟΥΛΑΣ
(ΚΑΘΗΓΗΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ)
e-mail : vczioulas@yahoo.com
url : http://www.zioulas.gr
www.zioulas.gr
ΣΧΟΛΙΚΟ ΕΤΟΣ 2016 - 2017
Ευάγγελος Χ. Ζιούλας (Καθηγητής Πληροφορικής) 1
ΑΕΠΠ – ΚΑΤΕΥΘΥΝΣΗΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ
ΠΕΡΙΕΧΟΜΕΝΑ
ΠΑΡΑΡΤΗΜΑΤΑ
Η λέξη προέρχεται από μια μελέτη του πέρση μαθηματικού Abu Ja’far
Mohammed ibn Musa al Khwarizmi (825 π.Χ) η οποία αποτελεί την πρώτη
πλήρη πραγματεία άλγεβρας.
ΕΞΟΔΟΣ (output)
Κάθε αλγόριθμος πρέπει να δημιουργεί τουλάχιστον μία ή περισσότερες τιμές εξόδου που
είναι τα αποτελέσματά του. Αυτά τα αποτελέσματα απευθύνονται προς το χρήστη ή προς
ένα επόμενο αλγόριθμο.
ΚΑΘΟΡΙΣΤΙΚΟΤΗΤΑ (definiteness)
Κάθε εντολή θα πρέπει να είναι αυστηρά καθορισμένη, δηλαδή να μην αφήνει καμία
αμφιβολία για τον τρόπο εκτέλεσής της. π.χ. μια εντολή διαίρεσης θα πρέπει να λαμβάνει
υπόψη και την περίπτωση που ο διαιρέτης έχει την τιμή 0.
ΠΕΡΑΤΟΤΗΤΑ (finiteness)
Ο αλγόριθμος θα πρέπει να επιλύει το πρόβλημα με την εκτέλεση πεπερασμένου αριθμού
εντολών σε πεπερασμένο χρόνο. Μια διαδικασία που δεν τελειώνει μετά από
πεπερασμένο αριθμό βημάτων ονομάζεται «υπολογιστική διαδικασία» και δεν αποτελεί
αλγόριθμο.
ΑΠΟΤΕΛΕΣΜΑΤΙΚΟΤΗΤΑ (effectiveness)
Κάθε εντολή του αλγορίθμου πρέπει να είναι απλή, δηλαδή δεν αρκεί να έχει ορισθεί αλλά
να είναι και εκτελέσιμη. π.χ. η εκχώρηση πραγματικής τιμής σε ακέραια μεταβλητή δεν
αποτελεί μια αποτελεσματική εντολή.
ΚΩΔΙΚΟΠΟΙΗΣΗ (coding)
Χρήση ενός προγράμματος (εκφρασμένου σε ψευδογλώσσα ή κάποια γλώσσα
προγραμματισμού) που όταν εκτελεστεί θα δώσει τα ίδια αποτελέσματα με τον αλγόριθμο.
Να δοθεί αλγόριθμος που διαβάζει το γραπτό και προφορικό βαθμό ενός μαθητή και ελέγχει αν
προβιβάζεται στην επόμενη τάξη ή όχι. Ο μαθητής προβιβάζεται, όταν ο μέσος όρος προφορικού
και γραπτού βαθμού είναι μεγαλύτερος του 9.5.
ΕΛΕΥΘΕΡΟ ΚΕΙΜΕΝΟ
Πάρε τον γραπτό και προφορικό βαθμό του μαθητή. Πρόσθεσε τους δύο βαθμούς και
διαίρεσε το άθροισμα με το 2. Αν το αποτέλεσμα είναι μεγαλύτερο από το 9.5, τότε ο
μαθητής περνάει την τάξη, διαφορετικά δεν την περνάει
ΚΩΔΙΚΟΠΟΙΗΣΗ
Αλγόριθμος Μαθητής
Διάβασε Γραπτός, Προφορικός
Άθροισμα Γραπτός + Προφορικός
ΜΟ Άθροισμα / 2
Αν ΜΟ > 9.5 τότε
Εμφάνισε ″Περνάει″
Αλλιώς
Εμφάνισε ″Δεν Περνάει″
Τέλος_αν
Τέλος Μαθητής
ΣΤΟΙΧΕΙΑ ΑΛΓΟΡΙΘΜΟΥ
Ένας αλγόριθμος διατυπωμένος σε ψευδογλώσσα αρχίζει πάντα με τη λέξη «Αλγόριθμος»
ακολουθούμενη από το όνομα του αλγορίθμου και τελειώνει με την λέξη «Τέλος»
ακολουθούμενη πάλι από το ίδιο όνομα.
Αλγόριθμος Όνομα
δηλωτικές εντολές
Δεδομένα // … //
εντολή 1
Γενική μορφή εντολή 2
αλγορίθμου εκτελεστέες εντολές
..............
εντολή Ν
Αποτελέσματα // … //
δηλωτικές εντολές
Τέλος Όνομα
Μια εκτελεστέα εντολή εκτελεί μια συγκεκριμένη λειτουργία, ενώ μια δηλωτική εντολή
δηλώνει και δεν εκτελεί κάποια ενέργεια.
Δηλωτικές εντολές είναι οι: Αλγόριθμος, Τέλος, Δεδομένα // //, Αποτελέσματα // //.
Εκτελεστέες εντολές είναι οι: Εμφάνισε, Εκτύπωσε, Διάβασε, εντολές εκχώρησης.
ΤΕΛΕΣΤΕΟΙ
Είναι οντότητες του αλγορίθμου που διακρίνονται σε σταθερές και μεταβλητές.
ΣΤΑΘΕΡΕΣ
ώρες 24
Οι σταθερές τιμές μέσα σε ένα αλγόριθμο μπορεί να είναι
π 3,14
κυριολεκτικές υπό μορφή απλής τιμής (π.χ. 24, 3.14, ″Μαρία″, όνομα “Maria”
Αληθής) ή συμβολικές υπό μορφή αναγνωριστικών ονομάτων. βρέθηκε Αληθής
ΜΕΤΑΒΛΗΤΕΣ
ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ
Όλα τα δεδομένα που χειρίζεται ο υπολογιστής δεν είναι ίδια και για να μπορέσει να τα
επεξεργαστεί, ομαδοποιούνται σε κατηγορίες. Κάθε κατηγορία δεδομένων ονομάζεται
τύπος δεδομένων. Οι κυριότεροι τύποι δεδομένων της ψευδογλώσσας είναι:
Στις αριθμητικές τιμές περιλαμβάνονται όλοι οι ακέραιοι και πραγματικοί αριθμοί και
για να δημιουργηθούν χρησιμοποιούνται οι χαρακτήρες + και – καθώς και το κόμμα (,)
ως δεκαδικό σημείο.
Οι αλφαριθμητικές τιμές αποτελούνται από συμβολοσειρές (strings) μέσα σε διπλά
εισαγωγικά που περιέχουν γράμματα, ψηφία ή σημεία στίξης.
Οι λογικές τιμές, σε αντίθεση με τους άλλους δύο τύπους, είναι μόνο δύο, Αληθής και
Ψευδής.
Για παράδειγμα, η αριθμητική τιμή 10 δεν έχει καμία σχέση με την αλφαριθμητική τιμή
"10" που είναι μία συμβολοσειρά αποτελούμενη από τα ψηφία 1 και 0.
X 10
Y "10"
Z X + 2 (επιτρεπτή εντολή)
Z Y + 2 (λάθος, μη αποτελεσματική εντολή)
ΚΑΝΟΝΕΣ ΟΝΟΜΑΤΩΝ
Τα αναγνωριστικά (identifiers) που επιλέγουμε για το όνομα ενός αλγορίθμου, όπως
και για τα συμβολικά ονόματα των σταθερών και μεταβλητών του, πρέπει να
πληρούν τους εξής περιορισμούς:
Αποτελούνται μόνο από επιτρεπτά σύμβολα
γράμματα ελληνικά (Α..Ω, α..ω) ή λατινικά (A..Z, a..z) Προτείνεται να
ψηφία (0..9) χρησιμοποιούνται
ονόματα μεταβλητών
χαρακτήρας _ (κάτω παύλα, underscore) και σταθερών τέτοια
Πρέπει υποχρεωτικά να αρχίζουν με γράμμα που να παραπέμπουν
Δεν αποτελούν δεσμευμένες λέξεις της ψευδογλώσσας στο περιεχόμενο
ΔΕΣΜΕΥΜΕΝΕΣ ΛΕΞΕΙΣ
Οι δεσμευμένες λέξεις (reserved words) είναι λέξεις που έχουν αυστηρά
προκαθορισμένη σημασία στον αλγόριθμο.
ΤΕΛΕΣΤΕΣ
Είναι τα σύμβολα που υλοποιούν τις διάφορες πράξεις. Διακρίνονται σε τρία είδη :
Ο τελεστής div υπολογίζει το ακέραιο πηλίκο μιας διαίρεσης ενώ ο τελεστής mod το
ακέραιο υπόλοιπο μιας διαίρεσης π.χ.
ΕΚΦΡΑΣΕΙΣ
Είναι προτάσεις που αποτελούνται από τελεστέους (σταθερές και μεταβλητές), τελεστές,
συναρτήσεις και παρενθέσεις. Το αποτέλεσμα που προκύπτει από την αποτίμηση της
έκφρασης, μπορεί να αποδίδεται σε μία μεταβλητή, ή να συνιστά στην εκτέλεση μιας
πράξης. Η τελική τιμή της έκφρασης εξαρτάται από την ιεραρχία των πράξεων και την
χρήση των παρενθέσεων.
Λογικές Εκφράσεις
Είναι εκφράσεις που υλοποιούν συγκρίσεις και δίνουν ως αποτέλεσμα μια λογική
τιμή Αληθής ή Ψευδής.
Για τη σύνταξη μιας λογικής έκφρασης χρησιμοποιούμε μεταξύ άλλων συγκριτικούς
και λογικούς τελεστές, σταθερές, μεταβλητές, παρενθέσεις και αριθμητικές
εκφράσεις.
x+1 > y-2
όνομα = ″ΑΕΠΠ″
x>5 KAI x<10
ΟΧΙ(α>0)
μεταβλητή έκφραση
Η σημασιολογία της εντολής είναι ότι υπολογίζεται η τιμή της έκφρασης που
βρίσκεται στα δεξιά του συμβόλου και το αποτέλεσμα που βρίσκουμε
εκχωρείται στην μεταβλητή που βρίσκεται στα αριστερά του συμβόλου .
Η ίδια μεταβλητή μπορεί να βρίσκεται και δεξιά και αριστερά του τελεστή εκχώρησης
π.χ.
Στην εντολή Χ Χ + 2 η μεταβλητή Χ αυξάνεται κατά 2.
Στην εντολή Α ΟΧΙ(Α) η μεταβλητή Α αλλάζει λογική τιμή.
Σε μια εντολή εκχώρησης η μεταβλητή και η έκφραση πρέπει να είναι του ιδίου τύπου
δεδομένων π.χ.
Στην εντολή Χ A div Β η μεταβλητή Χ είναι ακεραίου τύπου
Στην εντολή Υ A / Β η μεταβλητή Υ είναι πραγματικού τύπου
Στην εντολή Α Αληθής η μεταβλητή Α είναι λογικού τύπου
Στην εντολή Z ″Καλημέρα″ η μεταβλητή Ζ είναι αλφαριθμητικού τύπου
Με την εντολή Διάβασε διακόπτεται η ροή εκτέλεσης του αλγορίθμου, μέχρι τη στιγμή
που ο χρήστης θα εισάγει (από το πληκτρολόγιο) τόσα δεδομένα όσα χρειάζονται για τις
μεταβλητές που βρίσκονται δεξιά της εντολής Διάβασε.
Η έξοδος των αποτελεσμάτων γίνεται με την εκτελεστέα εντολή Εμφάνισε (ή την εντολή
Εκτύπωσε ή την εντολή Γράψε) που συντάσσεται ως εξής:
Α 7
Β 5 10
Εμφάνισε 10 Εμφάνιση Α = 7
Εμφάνισε ″Α = ″,Α στην Β = 5
Εμφάνισε ″Β = ″,Β Α+Β = 12
Εμφάνισε ″Α+Β = ″,Α+Β
Εναλλακτικά της εντολής Διάβασε, τα δεδομένα εισόδου (αν υπάρχουν) περιγράφονται στη
δεύτερη γραμμή του αλγορίθμου με τη δηλωτική εντολή Δεδομένα // .... //
Εναλλακτικά της εντολής Εμφάνισε (στην οθόνη) ή Εκτύπωσε (στον εκτυπωτή), τα
αποτελέσματα εξόδου δίνονται στην προτελευταία γραμμή του αλγορίθμου με τη δηλωτική
εντολή Αποτελέσματα // .... //
Συνθήκη είναι μια λογική έκφραση η οποία μπορεί πάντα να πάρει δύο
εναλλακτικές τιμές, Αληθής ή Ψευδής.
ΑΠΛΕΣ ΣΥΝΘΗΚΕΣ
ΑΛΗΘΕΙΣ ΨΕΥΔΕΙΣ
Μια απλή συνθήκη βασίζεται στη σύγκριση 5 > 2 -3 > 10
δύο τιμών με χρήση κατάλληλων ″A″ < ″F″ ″Β″ > ″Δ″
συγκριτικών τελεστών (=, >, <, ≥, ≤, ≠). 10 ≤ 15 35 = 10
″John″ ≠ ″john″ ″ΑΒΓ″ = ″ΑΒC″
ΣΥΝΘΕΤΕΣ ΣΥΝΘΗΚΕΣ
Μπορούμε να δημιουργήσουμε σύνθετες συνθήκες χρησιμοποιώντας τους λογικούς
τελεστές ΚΑΙ (σύζευξη), Ή (διάζευξη), ΟΧΙ (άρνηση).
Τα αποτελέσματα κάθε πράξης, φαίνονται στον παρακάτω πίνακα αληθείας.
Θεωρούμε ότι τα Α, Β είναι λογικές μεταβλητές ή λογικές εκφράσεις (συνθήκες).
Α Β Α ΚΑΙ Β Α ‘Η Β ΟΧΙ(Α)
Αληθής Αληθής Αληθής Αληθής Ψευδής
Αληθής Ψευδής Ψευδής Αληθής Ψευδής
Ψευδής Αληθής Ψευδής Αληθής Αληθής
Ψευδής Ψευδής Ψευδής Ψευδής Αληθής
Παρατήρηση: Τις συνθήκες τις συναντάμε κυρίως μέσα στις δομές επιλογής και επανάληψης ή
ακόμα και σε εντολές εκχώρησης (αρκεί η μεταβλητή στην οποία εκχωρείται μια λογική
έκφραση, να είναι μία λογική μεταβλητή) π.χ.
α 10 ( α ακέραια μεταβλητή με τιμή 10 )
y α > 5 ( y λογική μεταβλητή με τιμή Αληθής )
ΔΟΜΕΣ ΕΝΤΟΛΩΝ
Στον Δομημένο Προγραμματισμό όλες οι διαδικασίες ακολουθούν τρία βασικά
σχήματα δομών εντολών για τη κατασκευή του αλγορίθμου. Αυτές οι δομές εντολών
ονομάζονται και αλγοριθμικές δομές ή συνιστώσες και μας επιτρέπουν να λύσουμε
το οποιοδήποτε πρόβλημα. Αυτές είναι:
ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ
Σύμφωνα με την δομή αυτή, που χρησιμοποιείται πρακτικά για την αντιμετώπιση
απλών προβλημάτων, οι εντολές του αλγορίθμου εκτελούνται σειριακά
(ακολουθιακά), δηλαδή η μία μετά την άλλη. Ο αλγόριθμος ξεκινάει με την
επικεφαλίδα, ακολουθεί η είσοδος των δεδομένων, η επεξεργασία τους, η έξοδος
των αποτελεσμάτων και τέλευταία η εντολή του τέλους του αλγορίθμου.
ΔΟΜΗ ΕΠΙΛΟΓΗΣ
Με την δομή αυτή καταργείται η ακολουθιακή ροή εκτέλεσης των εντολών του
αλγορίθμου. Αυτό γίνεται βάσει του αποτελέσματος της συνθήκης μιας εντολής
επιλογής, που μπορεί να πάρει δύο εναλλακτικές τιμές, (Αληθής ή Ψευδής). Βάσει
του αποτελέσματος, μόνο ένα τμήμα της εντολής επιλογής εκτελείται κάθε φορά.
ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ
Η λογική των επαναληπτικών διαδικασιών εφαρμόζεται στις περιπτώσεις όπου μία
ακολουθία εντολών πρέπει να εφαρμοσθεί σε ένα σύνολο περιπτώσεων, που έχουν
κάτι κοινό.
Και στη δομή αυτή καταργείται η ακολουθιακή ροή εκτέλεσης των εντολών. Βάσει
του αποτελέσματος μιας συνθήκης, επαναλαμβάνεται για κάποιες φορές ένα
συγκεκριμένο τμήμα εντολών του αλγορίθμου. Στις εντολές επανάληψης χρειάζεται
προσοχή ώστε να μην καταστρατηγηθεί η ιδιότητα της περατότητας του αλγορίθμου
(ατελείωτες επαναλήψεις).
ΑΠΛΗ ΕΠΙΛΟΓΗ
Αν η συνθήκη είναι αληθής τότε εκτελούνται οι εντολές, διαφορετικά δεν γίνεται τίποτα.
ΣΥΝΘΕΤΗ ΕΠΙΛΟΓΗ
Αν η συνθήκη είναι αληθής τότε εκτελούνται οι εντολές 1, διαφορετικά οι εντολές 2.
ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
Οι συνθήκες ελέγχονται με τη σειρά και η πρώτη που βρεθεί Αληθής εκτελούνται οι εντολές της.
Αν καμία δεν βρεθεί Αληθής, τότε εκτελούνται οι εντολες του Αλλιώς (προαιρετικό τμήμα).
ΟΣΟ … ΕΠΑΝΑΛΑΒΕ
Όσο η συνθήκη είναι Αληθής, εκτελούνται οι εντολές που βρίσκονται μέσα στο σώμα της εντολής
ΟΣΟ.
Όταν η συνθήκη γίνει Ψευδής, η εντολή ΟΣΟ τερματίζει την εκτέλεσή της.
Τύπος Εντολής Διάγραμμα Ροής Παράδειγμα
α 1
Όσο Συνθήκη επανάλαβε Όσο α <= 100 επανάλαβε
εντολές Εμφάνισε α
Τέλος_επανάληψης α α + 1
Τέλος_Επανάληψης
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ … ΜΕΧΡΙΣ_ΟΤΟΥ
Οι εντολές της επανάληψης εκτελούνται τουλάχιστον 1 φορά. Η επαναληπτική τους εκτέλεση
συνεχίζεται όσο η συνθήκη είναι Ψευδής. Όταν η συνθήκη γίνει Αληθής, η εντολή ΜΕΧΡΙΣ_ΟΤΟΥ
τερματίζει την εκτέλεσή της.
α 1
Αρχή_Επανάληψης Αρχή_Επανάληψης
εντολές Εμφάνισε α
Μέχρις_ότου Συνθήκη α α + 1
Μέχρις_Ότου α > 100
Και οι τρεις παραπάνω εντολές κάνουν το ίδιο πράγμα (εμφανίζουν τους αριθμούς από 1 έως 100).
Οι δύο πρώτες (ΟΣΟ, ΜΕΧΡΙΣ_ΟΤΟΥ) για να εξασφαλίσουν την περατότητα, προσαυξάνουν τον δείκτη i κατά
1 μέσα σε κάθε επανάληψη, πράγμα που στην τρίτη εντολή (ΓΙΑ) γίνεται αυτόματα από το βήμα.
Η ΟΣΟ έχει την συνθήκη στην αρχή και η ΜΕΧΡΙΣ ΟΤΟΥ στο τέλος της επανάληψης.
Οι συνθήκες περιέχουν εντελώς αντίθετους συγκριτικούς τελεστές, αλλά όμως κάνουν το ίδιο πράγμα,
δηλαδή ελέγχουν τον δείκτη i να μην υπερβεί το πάνω όριο που είναι 100.
Έστω ότι θέλουμε να εμφανίσουμε όλους τους άρτιους αριθμούς από το 1 έως το 100
i 2
Για A από 2 μέχρι 100 με_βήμα 2 Όσο i <= 100 επανάλαβε
Εμφάνισε A Εμφάνισε i
Τέλος_επανάληψης i i + 2
Τέλος_επανάληψης
(*) Οι ενέργειες είναι ανάλογες στην περίπτωση που το βήμα είναι αρνητικό
ΕΜΦΩΛΕΥΜΕΝΕΣ ΔΟΜΕΣ
Είναι σύνθετες δομές εντολών, σύμφωνα με τις οποίες, μέσα στο σώμα μιας δομής
εντολών ανοίγει και ολοκληρώνεται μια άλλη δομή εντολών, του ιδίου ή άλλου
τύπου. Οι εντολές που ανοίγουν τελευταίες πρέπει να κλείνουν πρώτες π.χ.
ΕΜΦΩΛΕΥΜΕΝΕΣ ΑΝ..ΑΛΛΙΩΣ
Αν (Συνθ 1) τότε
Εντολές 1
αλλιώς
Αν (Συνθ 2) τότε
Εντολές 2
αλλιώς
Αν (Συνθ 3) τότε
Εντολές 3
αλλιώς
Εντολές 4
Τέλος_αν
Τέλος_αν
Τέλος_αν
ΣΧΟΛΙΑ (Comments)
Είναι επεξηγηματικές φράσεις του αλγορίθμου, οι οποίες για να διαχωριστούν από τις
λέξεις κλειδιά του αλγορίθμου (δεσμευμένες λέξεις και εντολές), γράφονται αρχίζοντας με
τον χαρακτήρα !
Δηλαδή ότι ακολουθεί τον χαρακτήρα ! μέσα στον αλγόριθμο και μέχρι το τέλος της
τρέχουσας γραμμής, θεωρείται ως σχόλιο (επεξηγηματική φράση) και δεν λαμβάνεται
υπόψη ως εντολή από τον αλγόριθμο.
Αλγόριθμος Όνομα_Αλγορίθμου
Δεδομένα // ....... //
...
...
εντολές
...
...
Αποτελέσματα // ......... //
Τέλος Όνομα_Αλγορίθμου
ΟΛΙΣΘΗΣΗ (SHIFT)
Μέσα στον υπολογιστή όλα τα δεδομένα (αριθμοί, λέξεις, σύμβολα κλπ) παρουσιάζονται
με δυαδικά ψηφία 0 και 1. Ένας αριθμός μπορεί για παράδειγμα να παρασταθεί από 1 byte
δηλαδή από 8 bits π.χ. 17 00010001.
► Ολίσθηση προς τα αριστερά σημαίνει ότι χάνεται το αριστερότερο ψηφίο της
δυαδικής ακολουθίας η οποία και συμπληρώνεται από τα δεξιά με 0.
► Ολίσθηση προς τα δεξιά σημαίνει ότι χάνεται το δεξιότερο ψηφίο της δυαδικής
ακολουθίας η οποία και συμπληρώνεται από τα αριστερά με 0.
Η ολίσθηση προς τα αριστερά ισοδυναμεί με πολλαπλασιασμό επί 2
Η ολίσθηση προς τα δεξιά ισοδυναμεί με ακέραια διαίρεση διά 2
Αλγόριθμος Πολ_αλά_Ρωσικά
Δεδομένα // Α, Β //
S 0
Όσο Β > 0 επανάλαβε
Αν Β mod 2 = 1 τότε
S S + Α
Τέλος_Αν
Α Α * 2
Β B div 2
Τέλος_επανάληψης
Αποτελέσματα // S //
Τέλος Πολ_αλά_Ρωσικά
Α Β
45 19 45
90 9 90
180 4
360 2
720 1 + 720
1440 0
Άθροισμα 855
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ
Τα δεδομένα ενός προβλήματος αποθηκεύονται συστηματικά (και όχι τυχαία) στη κύρια ή
στη δευτερεύουσα μνήμη του υπολογιστή υπό μορφή δομών δεδομένων.
Κάθε μορφή δομής δεδομένων αποτελείται από ένα σύνολο κόμβων (στοιχείων).
Οι πράξεις που γίνονται πάνω στις δομές δεδομένων είναι οι εξής οκτώ :
ΠΡΟΣΠΕΛΑΣΗ (Access)
Πρόσβαση σε κόμβο για εξέταση ή τροποποίηση του περιεχομένου του
ΕΙΣΑΓΩΓΗ (Insertion)
Προσθήκη νέου ή νέων κόμβων στην δομή
Πράξεις που απαγορεύονται στις
ΔΙΑΓΡΑΦΗ (Deletion) στατικές δομές (πίνακες)
Αφαίρεση κόμβου ή κόμβων από τη δομή
ΑΝΑΖΗΤΗΣΗ (Searching)
Προσπέλαση κόμβων με σκοπό να εντοπιστούν αυτοί που πληρούν μια συγκεκριμένη
ιδιότητα (π.χ. Σειριακή, Δυαδική Αναζήτηση)
ΤΑΞΙΝΟΜΗΣΗ (Sorting)
Διάταξη των κόμβων της δομής κατά αύξουσα ή φθίνουσα σειρά του περιεχομένου τους
(π.χ. Ταξινόμηση Φυσαλίδα)
ΑΝΤΙΓΡΑΦΗ (Copying)
Μερικοί ή όλοι οι κόμβοι μιας δομής αντιγράφονται σε μία άλλη δομή
ΣΥΓΧΩΝΕΥΣΗ (Merging)
Δύο ή περισσότερες δομές συνενώνονται σε μία νέα ενιαία δομή
ΔΙΑΧΩΡΙΣΜΟΣ (Separation)
Διάσπαση δομής σε δύο ή περισσότερες επιμέρους δομές
Παρατηρήσεις:
Σπάνια χρησιμοποιούνται και οι οκτώ πράξεις σε κάποια δομή.
Κάποια δομή μπορεί να είναι αποδοτικότερη από κάποια άλλη με κριτήριο κάποια
λειτουργία, ή λιγότερο αποδοτική για κάποια άλλη λειτουργία.
Ο αλγόριθμος και οι δομές δεδομένων είναι έννοιες που εξαρτώνται άμεσα μεταξύ τους
και για το λόγο αυτό, το πρόγραμμα τις βλέπει σαν μια αδιάσπαστη ενότητα.
Οι Δομές Δεδομένων διακρίνονται σε δύο βασικές κατηγορίες : τις στατικές δομές (static
data structures) και τις δυναμικές δομές (dynamic data structures).
ΣΤΑΤΙΚΕΣ (Static)
ΔΥΝΑΜΙΚΕΣ (Dynamic)
ΠΙΝΑΚΕΣ
Πίνακας (matrix) είναι μια στατική δομή δεδομένων που περιέχει πάντα
στοιχεία του ιδίου τύπου (δηλαδή ακέραιες, πραγματικές, χαρακτήρες ή
λογικές τιμές).
Οι πίνακες χαρακτηρίζονται από την διάσταση τους καθώς και από τον τύπο των στοιχείων
που περιέχουν. Έτσι έχουμε μονοδιάστατους, δισδιάστατους, τρισδιάστατους ή
πολυδιάστατους πίνακες.
Μονοδιάστατοι
Έχουν μία διάσταση και σχηματικά έχουν την μορφή μιας γραμμής ή μιας στήλης. Κάθε
στοιχείο χαρακτηρίζεται από το όνομα του πίνακα και έναν αριθμό εντός αγκύλης ή
παρένθεσης (διατακτικός αριθμός, η δείκτης) που αφορά στην αντίστοιχη θέση του
στοιχείου μέσα στον πίνακα π.χ. table [ i ]
Δισδιάστατοι
Έχουν δύο διαστάσεις και κατά την χρήση τους αναφέρονται πρώτα οι γραμμές (οριζόντιες)
και μετά οι στήλες (κάθετες) . Κάθε στοιχείο χαρακτηρίζεται από το όνομα του πίνακα και
δύο αριθμούς (διατακτικοί αριθμοί ή δείκτες) εντός αγκύλης ή παρένθεσης που ο πρώτος
αφορά στην αντίστοιχη γραμμή και ο δεύτερος στην αντίστοιχη στήλη του πίνακα π.χ. table
[i,j]
Ο πίνακας που
έχει ίδιο αριθμό
γραμμών και
στηλών, καλείται
τετραγωνικός.
Για την επεξεργασία των στοιχείων ενός πίνακα συνήθως χρησιμοποιούμε την
επαναληπτική δομή ΓΙΑ, αφού το πλήθος των στοιχείων που επεξεργαζόμαστε
είναι γνωστό.
Πιο συγκεκριμένα, η ανάγνωση των στοιχείων των δύο πινάκων της προηγούμενης
σελίδας θα γίνει ως εξής:
Δισδιάστατος table 5*6 κατά γραμμές Δισδιάστατος table 5*6 κατά στήλες
ΣΤΟΙΒΑ (Stack)
Είναι μία δομή δεδομένων που μοιάζει με μία στοίβα από πιάτα.
Τα στοιχεία εισάγονται και εξάγονται από την στοίβα βάσει της τεχνικής LIFO (Last
in First out) δηλαδή το τελευταίο στοιχείο που εισάγεται στη στοίβα, εξάγεται
πρώτο.
ΚΥΡΙΕΣ ΛΕΙΤΟΥΡΓΙΕΣ
ΩΘΗΣΗ (PUSH) ΑΠΩΘΗΣΗ (POP)
Τοποθέτηση ενός νέου στοιχείου Εξαγωγή ενός στοιχείου
στην κορυφή της στοίβας από την κορυφή της στοίβας
ΟΥΡΑ (Queue)
Είναι μια δομή δεδομένων στην οποία τα στοιχεία εισάγονται και εξάγονται βάσει
της τεχνικής FIFO (First in First out) δηλαδή το πρώτο στοιχείο που εισάγεται,
εξάγεται πρώτο (όπως μια ουρά έκδοσης εισιτηρίων).
Η ουρά αποτελεί ως προς την επίδοσή της, αντικείμενο μελέτης ενός κλάδου των
μαθηματικών που ονομάζεται Επιχειρησιακή Έρευνα και ειδικότερα του κλάδου
που ονομάζεται Θεωρία Ουρών.
ΚΥΡΙΕΣ ΛΕΙΤΟΥΡΓΙΕΣ
ΕΙΣΑΓΩΓΗ (ENQUEUE) ΕΞΑΓΩΓΗ (DEQUEUE)
Εισαγωγή στοιχείου στο Εξαγωγή στοιχείου από το
πίσω άκρο της ουράς Εμπρός άκρο της ουράς
Κάθε φορά θα πρέπει να γίνεται έλεγχος κατά την εισαγωγή αν υπάρχει ελεύθερος χώρος
στον πίνακα και κατά την εξαγωγή αν υπάρχει ένα τουλάχιστον στοιχείο.
ΑΛΓΟΡΙΘΜΟΙ ΑΝΑΖΗΤΗΣΗΣ
ΣΕΙΡΙΑΚΗ - ΓΡΑΜΜΙΚΗ ΑΝΑΖΗΤΗΣΗ
Με τη λειτουργία της αναζήτησης προσπελάζουμε τους κόμβους μιας δομής για να
εντοπίσουμε όσους από αυτούς έχουν μία δεδομένη ιδιότητα. Η λειτουργία αυτή μπορεί
να εφαρμοστεί σε πίνακα που περιέχει αριθμητικά (ακέραια ή πραγματικά) ή
αλφαριθμητικά δεδομένα. Η εφαρμογή μιας μεθόδου αναζήτησης σε πίνακα εξαρτάται
από δύο βασικούς παράγοντες :
Αν ο πίνακας περιέχει επαναλαμβανόμενα στοιχεία
Αν ο πίνακας είναι ταξινομημένος ή όχι
Η μέθοδος της Σειριακής Αναζήτησης (Sequential Search) ή Γραμμικής Αναζήτησης (Linear
Search) είναι η πιο απλή μέθοδος. Ο Αλγόριθμος ελέγχει μια-μια τις θέσεις του πίνακα με
την σειρά για να εντοπίσει το προς αναζήτηση στοιχείο (έστω key). Μόλις το στοιχείο
βρεθεί, ο αλγόριθμος επιστρέφει την θέση (έστω pos) που το περιέχει.
Σε πίνακα χωρίς επαναλήψεις στοιχείων, ο αλγόριθμος σταματάει την αναζήτηση μόλις το
στοιχείο βρεθεί. Αυτό ισχύει είτε ο πίνακας είναι ταξινομημένος είτε όχι.
Σε πίνακα μη ταξινομημένο με επαναλήψεις στοιχείων, ο αλγόριθμος θα ελέγξει όλες τις
θέσεις του πίνακα, έστω και αν το στοιχείο έχει ήδη βρεθεί.
Σε πίνακα ταξινομημένο με επαναλήψεις, ο αλγόριθμος συνεχίζει την αναζήτηση μέχρι να
βρεθεί στοιχείο μεγαλύτερο από αυτό που αναζητιέται.
Το αποτέλεσμα του αλγορίθμου είναι μια λογική μεταβλητή (έστω done, found, ή
βρέθηκε), η οποία παίζει το ρόλο της σημαίας (flag) και είναι ψευδής όσο το στοιχείο δεν
βρέθηκε, ενώ γίνεται αληθής όταν βρεθεί.
Η Σειριακή μέθοδος είναι η πιο απλή αλλά και η πιο αναποτελεσματική μέθοδος.
Η χρήση της δικαιολογείται όταν :
1. Ο πίνακας είναι μη ταξινομημένος
2. Ο πίνακας είναι μικρού μεγέθους (ν 20)
3. Η αναζήτηση γίνεται σπάνια
ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ
Μια εναλλακτική μέθοδος αναζήτησης, είναι η Δυαδική Αναζήτηση (Binary Search) η οποία
είναι σαφώς γρηγορότερη από την Σειριακή μέθοδο αλλά μπορεί να εφαρμοστεί μόνο σε
ταξινομημένο πίνακα.
Με τον αλγόριθμο της Δυαδικής αναζήτησης ψάχνουμε μια τιμή (έστω key) στον ταξινομημένο
(κατά αύξουσα σειρά) πίνακα. Η μέθοδος χρησιμοποιεί δύο δείκτες με ονόματα start και end
που καθορίζουν το διάστημα στο οποίο θα πραγματοποιηθεί η αναζήτηση, δηλαδή το διάστημα
[start, end].
Στην συνέχεια, χωρίζει το διάστημα αναζήτησης στη μέση δημιουργώντας ένα δείκτη με όνομα
μέσος (ή med), ο οποίος προσδιορίζει το μεσαίο στοιχείο του διαστήματος με βάση τον
υπολογισμό μέσος = (start+end) div 2. Με επαναληπτική διαδικασία αναζητά το στοιχείο
key στο διάστημα αναζήτησης [start,end] ως εξής:
Αν το μεσαίο στοιχείο είναι ίσο με το key, αυτό σημαίνει ότι βρέθηκε το στοιχείο στη μεσαία
θέση του διαστήματος και η αναζήτηση τερματίζεται.
Αν το μεσαίο στοιχείο είναι μικρότερο από το key, η αναζήτηση συνεχίζεται στο δεύτερο μισό
του διαστήματος που καθορίζεται από το διάστημα [μέσος+1,end].
Αν το μεσαίο στοιχείο είναι μεγαλύτερο από το key, η αναζήτηση συνεχίζεται στο πρώτο μισό
του διαστήματος που καθορίζεται από το διάστημα [start,μέσος+1].
Η παραπάνω διαδικασία επαναλαμβάνεται μέχρι να εντοπιστεί το στοιχείο key στη μεσαία θέση
κάποιου διαστήματος αναζήτησης ή ο δείκτης start να γίνει μεγαλύτερος από το δείκτη end,
πράγμα που σημαίνει ότι το στοιχείο δεν βρέθηκε.
ΑΛΓΟΡΙΘΜΟΙ ΤΑΞΙΝΟΜΗΣΗΣ
Ταξινόμηση (Sorting) ή Διάταξη (Ordering) είναι η τακτοποίηση των κόμβων μιας δομής
δεδομένων με μια ιδιαίτερη σειρά (αύξουσα ή φθίνουσα). Σκοπός της ταξινόμησης είναι να
διευκολύνει την αναζήτηση στοιχείων στον πίνακα.
temp A[j]
Δοθέντων των στοιχείων α1, α2, .., αν η ταξινόμηση συνίσταται στη μετάθεση
A[j] A[j-1] της
θέσης των στοιχείων, ώστε να τοποθετηθούν σε μια σειρά ακ1,A[j-1]
ακ2, .., ακν και
temp
δοθείσης μιας συνάρτησης διάταξης F να ισχύει: F(ακ1) ≤ F(ακ2) ≤ … ≤ F(ακν)
Η Ταξινόμηση Ευθείας Ανταλλαγής – Φυσαλίδα (Bubble Sort) βασίζεται στην αρχή της
σύγκρισης και ανταλλαγής ζευγών γειτονικών στοιχείων. Η ανταλλαγή των στοιχείων
ονομάζεται αντιμετάθεση, και για την υλοποίησή της χρησιμοποιείται μια βοηθητική
μεταβλητή, έστω temp.
Κάθε φορά γίνονται διαδοχικές προσπελάσεις στον πίνακα και μετακινείται το μικρότερο
κλειδί προς τις αρχικές θέσεις του πίνακα.
Σε κάθε πέρασμα του αλγορίθμου από τον πίνακα ταξινομείται και ένα στοιχείο. Σε ένα
πίνακα μεγέθους Ν στοιχείων, χρειάζονται Ν-1 περάσματα για να ταξινομηθεί.
Ο αλγόριθμος Φυσαλίδας είναι ο πιο απλός και ταυτόχρονα ο πιο αργός αλγόριθμος
ταξινόμησης. Εναλλακτικές μέθοδοι ταξινόμησης είναι:
η ταξινόμηση με επιλογή (selection sort)
η ταξινόμηση με παρεμβολή – εισαγωγή (insertion sort)
η γρήγορη ταξινόμηση (quick sort)
ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΕΠΙΛΟΓΗ
Επιλογή του στοιχείου με το ελάχιστο κλειδί και ανταλλαγή του στοιχείου αυτού με το
πρώτο στοιχείο του πίνακα. Αυτές οι λειτουργίες επαναλαμβάνονται για τα υπόλοιπα
στοιχεία του πίνακα. Στο τέλος απομένει το μεγαλύτερο στοιχείο στη τελευταία θέση.
Σε μεγάλες εφαρμογές, επειδή η κύρια μνήμη (RAM) δεν επαρκεί ως αποθηκευτικός χώρος
δεδομένων, γίνεται χρήση της δευτερεύουσας μνήμης (κυρίως του μαγνητικού δίσκου),
όπου τα δεδομένα σώζονται υπό μορφή αρχείων.
Μια βασική διαφορά κύριας και δευτερεύουσας μνήμης, είναι ότι στη δευτερεύουσα τα
δεδομένα διατηρούνται ακόμα και στην περίπτωση που διακοπεί η παροχή ρεύματος. Έτσι
τα δεδομένα διατηρούνται και μετά τον τερματισμό του προγράμματος, ενώ στις δομές
δεδομένων της κύριας μνήμης, όπως είναι οι πίνακες, αυτό δεν ισχύει.
Το πεδίο που ταυτοποιεί μια εγγραφή ονομάζεται Πρωτεύον Κλειδί (primary key), ή απλά
κλειδί. Με δεδομένο ένα πρωτεύον κλειδί, μπορεί να χρησιμοποιηθεί και δεύτερο πεδίο
για να ταυτοποιήσουμε μια εγγραφή. Αυτό το πεδίο ονομάζεται δευτερεύον κλειδί
(secondary key).
πρωτεύον δευτερεύον
κλειδί κλειδί
Αριθμός Ονοματεπώνυμο Έτος γέννησης Τάξη Τμήμα Τηλέφωνο
μητρώου
εγγραφή
πεδία
ΛΙΣΤΕΣ
Οι λίστες (lists) είναι δομές δεδομένων που οι κόμβοι τους συνήθως βρίσκονται
σε απομακρυσμένες θέσεις μνήμης και η σύνδεσή τους γίνεται με δείκτες.
Ο δείκτης (pointer) είναι ένας ιδιαίτερος τύπος δεδομένων που προσφέρεται από
τις περισσότερες σύγχρονες γλώσσες προγραμματισμού. Ο δείκτης δεν λαμβάνει
αριθμητικές τιμές, αλλά οι τιμές του είναι διευθύνσεις στην κύρια μνήμη και
χρησιμοποιείται ακριβώς για τη σύνδεση των διαφόρων στοιχείων μιας δομής, που
είναι αποθηκευμένα σε μη συνεχόμενες θέσεις μνήμης.
Κάθε κόμβος μιας λίστας αποτελείται από δύο πεδία:
Ο όρος index
αναφέρεται σε
τα δεδομένα (μία ή περισσότερες αριθμητικές ή θέση πίνακα ενός
αλφαριθμητικές πληροφορίες) ο όρος pointer σε
θέση μνήμης.
τον δείκτη (που δείχνει στον επόμενο κόμβο)
Για την εισαγωγή (παρεμβολή) ενός νέου κόμβου στη λίστα (π.χ. μεταξύ 2ου και 3ου)
γίνεται αναδιάταξη των κατάλληλων δεικτών. Έτσι, ενώ η λογική σειρά των κόμβων
διατηρείται, οι φυσικές θέσεις της μνήμης είναι διαφορετικές.
Για την διαγραφή ενός κόμβου, αρκεί να αλλάξει τιμή ο δείκτης του προηγούμενου
κόμβου και να δείχνει τον επόμενο του διαγραμμένου κόμβου. Ο διαγραμμένος
κόμβος αποτελεί πλέον άχρηστο δεδομένο και ο χώρος μνήμης που καταλάμβανε
παραχωρείται για άλλη χρήση.
ΔΕΝΤΡΑ
ΓΡΑΦΟΙ
Ένας γράφος (graph) είναι δομή δεδομένων που αποτελείται από ένα σύνολο
κόμβων (ή σημείων ή κορυφών) και ένα σύνολο γραμμών (ή ακμών ή τόξων)
που ενώνουν μερικούς ή όλους τους κόμβους.
Ο γράφος είναι η πιο γενική δομή δεδομένων, αφού όλες οι προηγούμενες δομές
μπορούν να θεωρηθούν περιπτώσεις γράφων.
Πολλά καθημερινά προβλήματα μπορούν να
περιγραφούν με τη βοήθεια γράφων (π.χ. εύρεση
ταχύτερης διαδρομής). Λόγω της μεγάλης πληθώρας των
προβλημάτων που σχετίζονται με γράφους, έχει
αναπτυχθεί η Θεωρία Γράφων, η οποία συχνά αποτελεί
αυτοδύναμο μάθημα σε πανεπιστημιακά τμήματα.
Οι δυναμικές δομές δεδομένων χρησιμοποιούν δείκτες και κατά την υλοποίησή τους
δεν απαιτείται εκ των προτέρων καθορισμός του μέγιστου αριθμού κόμβων.
Οι δομές αυτές είναι πιο ευέλικτες από τις στατικές δομές γιατί μπορούν να αλλάζουν
το μέγεθος τους κατά τη διάρκεια εκτέλεσης του προγράμματος.
Για την λύση ενός προβλήματος, είναι δυνατό να υπάρχουν περισσότεροι από ένας
αλγόριθμοι. Το ζητούμενο είναι η εύρεση του βέλτιστου αλγορίθμου, δηλαδή του πιο
αποδοτικού.
Η επίδοσης ενός αλγορίθμου επηρεάζεται από δύο βασικούς παράγοντες:
τη χειρότερη περίπτωση του αλγορίθμου
το μέγεθος του προβλήματος
ΧΕΙΡΟΤΕΡΗ ΠΕΡΙΠΤΩΣΗ
ΠΑΡΑΔΕΙΓΜΑ: Για τον επόμενο αλγόριθμο είναι προφανές ότι η χειρότερη περίπτωση
προκύπτει όταν γίνουν 10 επαναλήψεις (δηλαδή n = 10).
Αλγόριθμος Παράδειγμα
n ← 0
S ← 0
Αρχή_επανάληψης
Διάβασε α
S ← S + α
n ← n + 1
Μέχρις_ότου (α = 0) ή (n = 10)
Εκτύπωσε S
Τέλος Παράδειγμα
ΑΠΟΔΟΤΙΚΟΤΗΤΑ ΑΛΓΟΡΙΘΜΩΝ
Ένα πρόβλημα μπορεί κάποιες φορές να λυθεί με περισσότερους από έναν αλγόριθμους.
Η αποδοτικότητα κάθε αλγορίθμου είναι ένα μέτρο σύγκρισης για να ελεγχθεί αν αυτός
είναι καλύτερος ή χειρότερος σε σχέση με κάποιον άλλο.
Ένας αποδοτικός αλγόριθμος μπορεί να:
Επιστρέφει τα αποτελέσματα στο συντομότερο δυνατό χρόνο
Κάνει χρήση της λιγότερης δυνατής μνήμης
Οι παράγοντες αποδοτικότητας που επηρεάζουν το χρόνο εκτέλεσης ενός αλγορίθμου
είναι:
Τύπος ηλεκτρονικού υπολογιστή
Γλώσσα προγραμματισμού
Δομή προγράμματος και δομές δεδομένων
Χρόνος πρόσβασης στο δίσκο και ενέργειες εισόδου - εξόδου
Είδος συστήματος (ενός ή πολλών χρηστών)
ΠΟΛΥΠΛΟΚΟΤΗΤΑ ΑΛΓΟΡΙΘΜΩΝ
Υπάρχουν δύο βασικοί τρόποι μέτρησης της επίδοσης ενός αλγορίθμου: ο εμπειρικός (εκ
των υστέρων) και ο θεωρητικός (εκ των προτέρων).
ΕΜΠΕΙΡΙΚΟΣ (a posteriori)
Είναι απλούστερος τρόπος μέτρησης
Ο αλγόριθμος υλοποιείται και εφαρμόζεται σε ένα σύνολο δεδομένων, ώστε να
υπολογισθεί ο απαιτούμενος χρόνος επεξεργασίας και η χωρητικότητα μνήμης.
Παρουσιάζει 2 βασικά μειονεκτήματα που μπορούν να οδηγήσουν σε λανθασμένη
εκτίμηση για την επίδοση του αλγορίθμου:
- είναι δύσκολο να προβλεφθεί η συμπεριφορά του αλγορίθμου για κάποιο άλλο σύνολο
δεδομένων
- ο χρόνος επεξεργασίας εξαρτάται από το υλικό, τη γλώσσα προγραμματισμού, το
μεταφραστή και τη δεινότητα του προγραμματιστή.
O συμβολισμός Ο δίνει ένα άνω φράγμα για την πολυπλοκότητα ενός αλγορίθμου,
δηλαδή ένα μέτρο, που ποτέ δεν πρόκειται να ξεπεράσει ο αλγόριθμος προς τα επάνω.
Η πολυπλοκότητα αλγορίθμου δίνει ένα μέτρο της χρονικής καθυστέρησης και άρα
της ταχύτητας εκτέλεσης του αλγορίθμου για την επίλυση του προβλήματος.
Γραμμική Αναζήτηση:
Η πολυπλοκότητα του αλγορίθμου αναζήτησης εξαρτάται από:
το πλήθος των συγκρίσεων των στοιχείων που απαιτούνται
Το κόστος των συγκρίσεων συμβολίζεται με Α αν η αναζήτηση είναι ανεπιτυχής και
με Ε αν η αναζήτηση είναι επιτυχής.
Σε περίπτωση επιτυχούς αναζήτησης, οι συγκρίσεις κλειδιών που
πραγματοποιούνται κατά μέσο όρο είναι:
1 + 2 + 3 + ⋯+ 𝑛 𝑛(𝑛 + 1) 𝑛+1
𝐶= = =
𝑛 2𝑛 2
Άρα εφόσον τα κλειδιά αναζητούνται ισοπίθανα, η πολυπλοκότητα του αλγορίθμου
Σειριακής Αναζήτησης είναι O(n).
Στην περίπτωση ανεπιτυχούς αναζήτησης, ο αλγόριθμος αναγκάζεται να
προσπελάσει όλα τα στοιχεία του πίνακα και άρα η πολυπλοκότητα είναι πάλι
γραμμικής τάξης Ο(n).
Τέλος, σε περίπτωση που ο πίνακας είναι ταξινομημένος, η αναζήτηση βελτιώνεται
αλλά η πολυπλοκότητα παραμένει γραμμικής τάξης.
Η ιεραρχική σχεδίαση βασίζεται στην μέθοδο «από πάνω προς τα κάτω» (Top-
Down Design) και χρησιμοποιεί τη στρατηγική της συνεχούς διαίρεσης του
προβλήματος σε υποπροβλήματα.
Πιο συγκεκριμένα, η ιεραρχική σχεδίαση περιλαμβάνει :
τον καθορισμό των βασικών λειτουργιών του προβλήματος σε ανώτερο επίπεδο.
την διάσπαση των λειτουργιών αυτών σε μικρότερες λειτουργίες, μέχρι το τελευταίο
επίπεδο, ώστε να είναι τόσο απλές που να μην μπορούν να υποστούν περαιτέρω
διάσπαση.
Την σύνθεση των λύσεων των επιμέρους προβλημάτων για την παραγωγή της λύσης
του συνολικού προβλήματος.
ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Η ιεραρχική σχεδίαση στην πράξη υλοποιείται με
τον τμηματικό προγραμματισμό, σύμφωνα με τον
οποίο κάθε υποπρόβλημα αντιμετωπίζεται ως
ανεξάρτητη ενότητα (module).
Κάθε υποπρόβλημα που προβλέπει η ιεραρχική
σχεδίαση, υλοποιείται με ανεξάρτητο τμήμα
προγράμματος που καλείται υποπρόγραμμα.
Βασικά πλεονεκτήματα του τμηματικού
προγραμματισμού είναι ότι:
Διευκολύνει την δημιουργία του προγράμματος
Μειώνει τα λάθη
Ευκολότερη παρακολούθηση, κατανόηση και συντήρηση του προγράμματος
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Είναι η μεθοδολογία που σήμερα έχει επικρατήσει σε όλες σχεδόν τις σύγχρονες γλώσσες,
και είναι επινόηση του καθηγητή E. Dijkstra το 1968.
Στηρίζεται στη χρήση τριών και μόνο στοιχειωδών λογικών δομών :
- Ακολουθία
- Επιλογή
- Επανάληψη
Όλα τα προγράμματα γράφονται χρησιμοποιώντας μόνο αυτές τις τρεις δομές, ή
συνδυασμό τους. Κάθε προγραμματιστής μπορεί να γράφει σύνθετα προγράμματα
μειώνοντας ταυτόχρονα τα λάθη και διευκολύνοντας την κατανόηση και τη συντήρηση.
Κάθε πρόγραμμα καθώς και κάθε ενότητα προγράμματος, έχει μόνο μία είσοδο και μόνο
μία έξοδο.
Ο Δομημένος Προγραμματισμός περιέχει τις έννοιες της Ιεραρχικής Σχεδίασης και του
Τμηματικού Προγραμματισμού
Η λογική του δομημένου προγραμματισμού ξεκίνησε από την ανάγκη κατάργησης ή
τουλάχιστον περιορισμού της χρήσης της εντολής GOTO (Πήγαινε στο), η οποία
προκαλούσε την αλλαγή της ροής εκτέλεσης του προγράμματος. Η αλόγιστη χρήση της
εντολής αυτής άλλαζε συνεχώς την ροή του προγράμματος και έκανε δύσκολη την
κατανόηση, την παρακολούθηση και την συντήρησή του.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΕΡΙΒΑΛΛΟΝΤΑ
Κάθε πρόγραμμα που γράφεται, πρέπει να μετατραπεί σε γλώσσα κατανοητή από τον
υπολογιστή, ώστε να μπορεί να εκτελεστεί. Αυτή είναι η γλώσσα μηχανής.
Υπάρχουν δύο βασικές κατηγορίες μεταφραστικών προγραμμάτων που το επιτυγχάνουν
αυτό. Οι Μεταγλωττιστές και οι Διερμηνευτές.
ΜΕΤΑΓΛΩΤΤΙΣΤΗΣ (Compiler)
Δέχεται σαν είσοδο το πρόγραμμα της γλώσσας υψηλού επιπέδου και παράγει το
ισοδύναμο της γλώσσας μηχανής.
Αυτό είναι ανεξάρτητο από το αρχικό πρόγραμμα και εκτελείται σε οποιονδήποτε
υπολογιστή οποιαδήποτε στιγμή.
Κάνει έλεγχο συντακτικών λαθών και σε περίπτωση που βρεθούν το πρόγραμμα
υποβάλλεται ξανά προς μεταγλώττιση μέχρι να παραχθεί το σωστό εκτελέσιμο.
Άρα κάθε πρόγραμμα πριν εκτελεστεί πρέπει πρώτα να περάσει από διαδικασία
μεταγλώττισης (αρκετές φορές μέχρι να διορθωθούν όλα τα λάθη) και της σύνδεσης.
ΔΙΕΡΜΗΝΕΥΤΗΣ (Interpreter)
Διαβάζει μία – μία τις εντολές του αρχικού προγράμματος και ταυτόχρονα μεταφράζει
και εκτελεί την καθεμιά σε εντολές γλώσσας μηχανής.
Σε αντίθεση με τον μεταγλωττιστή, κάνει άμεση εκτέλεση και άρα άμεση διόρθωση.
Είναι όμως πιο αργός από το ισοδύναμο εκτελέσιμο πρόγραμμα του μεταγλωττιστή.
ΣΥΝΤΑΚΤΗΣ (Editor)
Είναι ειδικό πρόγραμμα που χρησιμοποιείται για την συγγραφή του αρχικού
προγράμματος (πηγαίου). Λειτουργεί ως ένας μικρός επεξεργαστής κειμένου που επιτρέπει
την γρήγορη συγγραφή προγραμμάτων.
ΚΑΤΗΓΟΡΙΕΣ ΛΑΘΩΝ
Συντακτικά: εμφανίζονται κατά την μεταγλώττιση και οφείλονται σε παραβίαση των
γραμματικών κανόνων της γλώσσας. Προκύπτουν συνήθως από ορθογραφικά ή
συντακτικά σφάλματα (π.χ. αναγραμματισμός εντολών), παράληψη δηλώσεων
μεταβλητών ή ασυμβατότητα τύπων και πρέπει πάντα να διορθωθούν για να παραχθεί
το εκτελέσιμο πρόγραμμα π.χ. Χ (Α+Β+Γ):3
Λογικά: εμφανίζονται κατά την εκτέλεση και είναι πιο σημαντικά λάθη και δυσκολότερα
στην διόρθωση αφού οφείλονται σε εσφαλμένη υλοποίηση του αλγορίθμου π.χ. Χ
Α+Β+Γ/3
ΑΠΑΙΤΟΥΜΕΝΑ ΠΡΟΓΡΑΜΜΑΤΑ
Ένα προγραμματιστικό περιβάλλον χρειάζεται να διαθέτει μια σειρά προγραμμάτων
προκειμένου να επιτρέπει στον προγραμματιστή να δημιουργήσει, να μεταφράσει και να
εκτελέσει ένα πρόγραμμα: Α) Συντάκτης, Β) Μεταγλωττιστής , Γ) Συνδέτης
Συντάκτης ΠΗΓΑΙΟ
ΠΗΓΑΙΟ ΤΕΛΙΚΟ
Μεταγλωττιστής
ΤΕΛΙΚΟ ΕΚΤΕΛΕΣΙΜΟ
Συνδέτης
ΑΛΦΑΒΗΤΟ ΓΛΩΣΣΑΣ
ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ
Η «ΓΛΩΣΣΑ» υποστηρίζει τους εξής τέσσερις τύπους δεδομένων :
ΑΚΕΡΑΙΟΣ
Περιλαμβάνει τους αρνητικούς και θετικούς ακέραιους π. χ 253, 0, -40, 3490
ΠΡΑΓΜΑΤΙΚΟΣ
Περιλαμβάνει τους πραγματικούς (δεκαδικούς) αριθμούς π. χ 3.14, 0.25, -85.25
ΧΑΡΑΚΤΗΡΑΣ
Περιλαμβάνει αλφαριθμητικά δεδομένα που μπορούν να περιέχουν οποιοδήποτε
χαρακτήρα παράγεται από το πληκτρολόγιο. Πρέπει πάντα να περικλείονται μέσα
σε απλά εισαγωγικά ′ ′ π.χ. 'Κ', 'Hello', '10', 'ΑΒ30', 'George', 'ΑΕΠΠ'
ΛΟΓΙΚΟΣ
Δέχεται μόνο δύο τιμές Αληθής και Ψευδής.
ΣΤΑΘΕΡΕΣ
ΜΕΤΑΒΛΗΤΕΣ
Ενώ η τιμή της μεταβλητής αλλάζει, αυτό που μένει αναλλοίωτο είναι ο τύπος δεδομένων
της (δηλαδή ακέραιος, πραγματικός, χαρακτήρας ή λογικός).
Η δήλωση μεταβλητών γίνεται πάντα μετά την δήλωση των σταθερών ως εξής :
ΜΕΤΑΒΛΗΤΕΣ
Τύπος : Λίστα Μεταβλητών
Τύπος : Λίστα Μεταβλητών
ΚΑΝΟΝΕΣ ΟΝΟΜΑΤΩΝ
Τα ονόματα που επιλέγουμε για τις σταθερές και μεταβλητές του προγράμματος πρέπει να
πληρούν τους εξής περιορισμούς:
Αποτελούνται από γράμματα (ελληνικά ή λατινικά), νούμερα και το σύμβολο _
(underscore)
Πρέπει υποχρεωτικά να αρχίζουν με γράμμα
Δεν αποτελούν δεσμευμένες λέξεις της ΓΛΩΣΣΑΣ
Δεν περιέχουν κενά ή άλλα σύμβολα
Παραδείγματα λανθασμένων ονομάτων : 100Α, ΑΒ@, Κόστος$, ΤΟΤΕ, Μέση Τιμή
ΤΕΛΕΣΤΕΣ
ΑΡΙΘΜΗΤΙΚΟΙ ΣΥΓΚΡΙΤΙΚΟΙ ΛΟΓΙΚΟΙ
+ = ΚΑΙ
- <> Η
* > ΟΧΙ
/ >=
^ <
DIV <=
MOD
ΙΕΡΑΡΧΙΑ ΠΡΑΞΕΩΝ
Όλες οι μεταβλητές που εμφανίζονται σε μία έκφραση, πρέπει να έχουν προηγουμένως
δηλωθεί στο τμήμα Σταθερών και Μεταβλητών.
Η ιεραρχία που ακολουθείται στις πράξεις έχει ως εξής :
Από αριστερά προς τα δεξιά
Παρενθέσεις (πρώτα οι εσωτερικές) ( )
Ύψωση σε δύναμη ^
Πολλαπλασιασμοί και διαιρέσεις *, /, div, mod
Προσθέσεις και αφαιρέσεις +, -
Συγκριτικοί τελεστές >, < , =, >=, <= , <>
Λογικοί τελεστές KAI, H, OXI
Ένα από τα πιο συνηθισμένα λάθη είναι ο διαφορετικός αριθμός αριστερών από δεξιές
παρενθέσεις.
ΕΝΤΟΛΗ ΕΚΧΩΡΗΣΗΣ
Η τιμή του δεξιού μέλους της εντολής εκχώρησης αποδίδεται στην μεταβλητή του
αριστερού μέλους.
Μεταβλητή Έκφραση
Η εκτέλεση της εντολής ΔΙΑΒΑΣΕ οδηγεί στην είσοδο τιμών από το πληκτρολόγιο και την
εκχώρησή τους στις μεταβλητές που αναφέρονται. Η εντολή ΓΡΑΨΕ χρησιμοποιείται για
την εμφάνιση σταθερών τιμών καθώς και των τιμών των μεταβλητών που αναφέρονται στη
λίστα των στοιχείων που εμφανίζονται.
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ
Κάθε πρόγραμμα έχει συγκεκριμένη δομή. Ξεκινάει με την επικεφαλίδα που περιέχει το
όνομά του, ακολουθείται από το τμήμα ορισμού σταθερών (αν έχει) και δήλωσης
μεταβλητών και ολοκληρώνεται με το κυρίως μέρος το οποίο περικλείεται ανάμεσα σε
εντολές ΑΡΧΗ και ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ.
Αν ο πρώτος χαρακτήρας της γραμμής είναι το θαυμαστικό (!), τότε η γραμμή περιέχει μη
εκτελέσιμες εντολές, οι οποίες ονομάζονται σχόλια και έχουν επεξηγηματικό χαρακτήρα.
Αν μια εντολή δεν χωράει σε μία γραμμή, τότε συνεχίζει στην επόμενη γραμμή που ο
πρώτος χαρακτήρας της είναι ο (&).
ΑΝ ( Συνθ ) ΤΟΤΕ
εντολές
ΑΝ (α >= 0) ΤΟΤΕ
ΤΕΛΟΣ_ΑΝ
ρίζα Τ_Ρ(α)
Κλείνει πάντα με ΤΕΛΟΣ_ΑΝ ανεξάρτητα από το
ΤΕΛΟΣ_ΑΝ
πλήθος των εντολών που περιέχει
ΑΝ (Συνθ) ΤΟΤΕ
ΑΝ (A < B) ΤΟΤΕ
εντολές min A
ΑΛΛΙΩΣ ΑΛΛΙΩΣ
εντολές min B
ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ
ΑΝ (Συνθ) ΤΟΤΕ
εντολές ΑΝ (x < 10) ΤΟΤΕ
ΓΡΑΨΕ 'ΑΠΟΡΡΙΠΤΕΤΑΙ'
ΑΛΛΙΩΣ_ΑΝ (Συνθ) ΤΟΤΕ
ΑΛΛΙΩΣ_ΑΝ (x < 12) ΤΟΤΕ
εντολές ΓΡΑΨΕ 'ΜΕΤΡΙΑ'
ΑΛΛΙΩΣ_ΑΝ (Συνθ) ΤΟΤΕ ΑΛΛΙΩΣ_ΑΝ (x < 15) ΤΟΤΕ
εντολές ΓΡΑΨΕ 'ΚΑΛΑ'
.................... ΑΛΛΙΏΣ_ΑΝ (x < 18) ΤΟΤΕ
ΓΡΑΨΕ 'ΠΟΛΥ ΚΑΛΑ'
ΑΛΛΙΩΣ
ΑΛΛΙΩΣ
εντολές ΓΡΑΨΕ 'ΑΡΙΣΤΑ'
ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ
ΓΕΝΙΚΕΣ ΠΑΡΑΤΗΡΗΣΕΙΣ
Οι συνθήκες μπορούν να περιέχουν συγκρίσεις ανάμεσα σε αριθμητικές αλλά και
αλφαριθμητικές τιμές (αλφαβητική σύγκριση όπου ότι έπεται αλφαβητικά θεωρείται
και μεγαλύτερο π.χ. ‘Α’ < ‘Β’ < ‘Γ’ κλπ.).
AN αριθμός = 0 ΤΟΤΕ …
ΌΣΟ λέξη < > 'Hello' ΕΠΑΝΑΛΑΒΕ …
ΑΝ Χ+Υ >= (Α+Β)/Γ ΤΟΤΕ …
Καλό είναι να αποφεύγεται ο έλεγχος περιττών συνθηκών μέσα στις εντολές επιλογής.
Στις εντολές επανάληψης πρέπει υποχρεωτικά να υπάρχει μέσα στο βρόχο μία εντολή
που να μεταβάλλει την τιμή της μεταβλητής που ελέγχεται με την συνθήκη. Διαφορετικά
έχουμε άπειρη ανακύκλωση.
Α 1 Α 1
ΟΣΟ (Α <= 100) ΕΠΑΝΑΛΑΒΕ ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
…… ……
Α Α + ... Α Α + ...
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΜΕΧΡΙΣ_ΟΤΟΥ (Α > 100)
Στην περίπτωση που δεν είναι γνωστός ο αριθμός των επαναλήψεων, είναι προσωπική
επιλογή του προγραμματιστή για το ποια από τις εντολές επανάληψης θα
χρησιμοποιήσει (ΟΣΟ ή ΜΕΧΡΙΣ_ΟΤΟΥ).
Α 1 Α1
ΟΣΟ (Α <= 50) ΕΠΑΝΑΛΑΒΕ ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Α ΓΡΑΨΕ Α
ΑΑ+2 ΑΑ+2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΜΕΧΡΙΣ_ΟΤΟΥ (Α > 50)
Το αντίθετο δεν ισχύει πάντα. Αν ο αριθμός των επαναλήψεων είναι γνωστός τότε
μπορούμε άνετα να μετατρέψουμε μια ΟΣΟ ή ΜΕΧΡΙΣ_ΟΤΟΥ σε ΓΙΑ, ενώ αν είναι
άγνωστος, η μετατροπή αυτή καθίσταται αδύνατη.
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ Α
ΔΙΑΒΑΣΕ Α
ΟΣΟ (Α <> 0) ΕΠΑΝΑΛΑΒΕ
ΑΝ Α <> 0 ΤΟΤΕ
S S + A
S S + A
ΔΙΑΒΑΣΕ Α
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΕΧΡΙΣ_ΟΤΟΥ (Α = 0)
ΚΕΦ.9 – ΠΙΝΑΚΕΣ
Ο δείκτης είναι μια ακέραια έκφραση σταθερή ή μεταβλητή που τοποθετείται μέσα σε
αγκύλες [ ] π.χ.
Α[3] προσπέλαση του 3ου στοιχείου ενός πίνακα με όνομα Α
Μαθητές[7] προσπέλαση του 7ου στοιχείου ενός πίνακα με όνομα Μαθητές
Β[5,8] προσπέλαση του στοιχείου της 5ης γραμμής και 8ης στήλης ενός πίνακα με όνομα Β
Η ανάγνωση, η επεξεργασία και η εκτύπωση των στοιχείων ενός πίνακα γίνεται εύκολα με
την εντολή επανάληψης ΓΙΑ
Η χρήση του πίνακα δεν είναι πάντα απαραίτητη, αλλά κρίνεται αναγκαία όταν χρειάζεται
η αποθήκευση μιας σειράς ομοειδών τιμών για περεταίρω επεξεργασία.
ΠΑΡΑΔΕΙΓΜΑ 1
Να γραφεί πρόγραμμα που διαβάζει τις 30 θερμοκρασίες ενός μήνα και υπολογίζει και εμφανίζει
την μέση θερμοκρασία του μήνα.
Η χρήση του πίνακα σε αυτό το παράδειγμα δεν κρίνεται
ΠΡΟΓΡΑΜΜΑ Χωρίς_πίνακα απαραίτητη, αφού και οι 30 διαφορετικές τιμές αποθηκεύονται
ΜΕΤΑΒΛΗΤΕΣ διαδοχικά στη μεταβλητή Θ.
ΠΡΑΓΜΑΤΙΚΕΣ: Θ,S,ΜΟ
ΑΚΕΡΑΙΕΣ: i Το πρόγραμμα υπολογίζει το άθροισμα και τον μέσο όρο των 30
ΑΡΧΗ τιμών χωρίς την ανάγκη πίνακα.
S 0 Με την λήξη της εντολής ΓΙΑ, η μεταβλητή Θ θα διατηρεί την
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30 τελευταία (30η) τιμή.
ΔΙΑΒΑΣΕ Θ
ΠΡΟΓΡΑΜΜΑ Με_πίνακα
S S + Θ
ΜΕΤΑΒΛΗΤΕΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΠΡΑΓΜΑΤΙΚΕΣ: Θ[30],S,ΜΟ
ΜΟ S / 30
ΑΚΕΡΑΙΕΣ: i
ΓΡΑΨΕ ΜΟ
ΑΡΧΗ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
S 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30
ΠΑΡΑΔΕΙΓΜΑ 2 ΔΙΑΒΑΣΕ Θ[i]
Αν στο παραπάνω πρόγραμμα ζητηθεί να εμφανιστούν S S + Θ[i]
και οι θερμοκρασίες των ημερών που είναι μικρότερες ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΟ S / 30
της μέσης τιμής, τότε η χρήση πίνακα κρίνεται αναγκαία.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30
ΑΝ Θ[i] < ΜΟ ΤΟΤΕ
ΓΡΑΨΕ Θ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΠΛΕΟΝΕΚΤΗΜΑΤΑ
☺ Η χρήση πινάκων είναι ο πιο βολικός τρόπος για την διαχείριση πολλών
δεδομένων του ιδίου τύπου.
ΜΕΙΟΝΕΚΤΗΜΑΤΑ
Οι πίνακες απαιτούν μνήμη.
Κάθε πίνακας δεσμεύει κατά την δήλωσή του πολλές θέσεις μνήμης, άσχετα από
τον αν τις χρησιμοποιεί όλες ή όχι.
ΚΕΦ.10 - ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ
ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Όπως γνωρίζουμε ήδη, τα σύνθετα προβλήματα προκειμένου να αντιμετωπισθούν και
να γραφούν τα αντίστοιχα προγράμματα, πρέπει πρώτα να ακολουθηθεί η τεχνική της
Ιεραρχικής Σχεδίασης (top-down design) από πάνω προς τα κάτω.
Έτσι κάθε δοθέν πρόβλημα αναλύεται σε μικρότερα και αυτά σε ακόμα μικρότερα μέχρι
το σημείο στο οποίο φτάνουμε σε προβλήματα με προφανή και εύκολη λύση.
Τότε οι αλγόριθμοι και τα τμήματα προγράμματος μπορούν να σχεδιαστούν και να
γραφούν εύκολα για κάθε υποπρόβλημα.
ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΥΠΟΠΡΟΓΡΑΜΜΑΤΩΝ
Ο χωρισμός του προγράμματος σε ανεξάρτητα υποπρογράμματα προϋποθέτει το
αρχικό πρόβλημα να έχει αναλυθεί σε υποπροβλήματα βάσει της ιεραρχικής σχεδίασης.
Δεν υπάρχουν κανόνες σωστής ανάλυσης.
Ο τμηματικός προγραμματισμός απαιτεί μελέτη και ανάλυση του προβλήματος,
εμπειρία στο προγραμματισμό, γνώσεις και ταλέντο.
ΙΔΙΟΤΗΤΕΣ ΥΠΟΠΡΟΓΡΑΜΜΑΤΟΣ
ΠΑΡΑΜΕΤΡΟΙ
Η ενεργοποίηση ενός υποπρογράμματος γίνεται μέσα από την κλήση του (το
κάλεσμά του).
Η κλήση ενός υποπρογράμματος γίνεται από το αρχικό πρόγραμμα ή από κάποιο
άλλο υποπρόγραμμα που λέγεται κύριο πρόγραμμα.
Το υποπρόγραμμα δέχεται τιμές από το τμήμα προγράμματος που το καλεί και αφού
κάνει την εκτέλεσή του, επιστρέφει σε αυτό νέες τιμές ως αποτελέσματα.
ΚΑΤΗΓΟΡΙΕΣ ΥΠΟΠΡΟΓΡΑΜΜΑΤΩΝ
Ανάλογα με την λειτουργία που εκτελούν, τα υποπρογράμματα διακρίνονται σε δύο
βασικές κατηγορίες :
διαδικασίες (εκτελούν κάθε λειτουργία που μπορεί να εκτελέσει και το πρόγραμμα)
συναρτήσεις (η χρήση τους είναι πιο περιορισμένη).
ΣΥΝΑΡΤΗΣΗ (Function)
Η συνάρτηση επιστρέφει την τιμή στο υποπρόγραμμα που την κάλεσε και η χρήση της είναι
παρόμοια με αυτή των ενσωματωμένων συναρτήσεων που παρέχει η γλώσσα
προγραμματισμού.
Η τιμή που επιστρέφει μπορεί να είναι κάθε δυνατού τύπου δεδομένων, δηλαδή ακεραίου,
πραγματικού, χαρακτήρα, λογικού.
Η βασική δομή μιας συνάρτησης είναι η ακόλουθη :
Το όνομα της συνάρτησης πρέπει να είναι έγκυρο σύμφωνα με τους κανόνες ονομάτων της
ΓΛΩΣΣΑΣ.
Η λίστα παραμέτρων είναι μια λίστα από μεταβλητές, στις οποίες μεταβιβάζονται τιμές από
το κυρίως πρόγραμμα κατά την κλήση της συνάρτησης.
Επειδή η συνάρτηση επιστρέφει την τιμή της στο κυρίως πρόγραμμα μέσα από το όνομά
της, θα πρέπει στο σώμα της να περιέχει μια εντολή εκχώρησης τιμής στο όνομα της
συνάρτησης (δηλαδή όνομα έκφραση).
ΣΗΜΕΙΩΣΗ
Μια συνάρτηση μπορεί να κληθεί ακριβώς στα ίδια σημεία του προγράμματος που
καλούνται οι ενσωματωμένες μαθηματικές συναρτήσεις της ΓΛΩΣΣΑΣ, δηλαδή:
ΔΙΑΔΙΚΑΣΙΑ (Procedure)
Η διαδικασία μεταβιβάζει τιμές στα άλλα υποπρογράμματα με χρήση παραμέτρων και όχι
του ονόματός της
Το όνομα της διαδικασίας πρέπει να είναι έγκυρο σύμφωνα με τους κανόνες της ΓΛΩΣΣΑΣ.
Η βασική δομή μιας διαδικασίας είναι η ακόλουθη :
Με την κλήση της διαδικασίας, η εκτέλεση του κυρίως προγράμματος διακόπτεται και
εκτελούνται οι εντολές του σώματος της διαδικασίας.
Όταν ολοκληρωθεί η εκτέλεση των εντολών της διαδικασίας, η εκτέλεση του προγράμματος
συνεχίζεται από την επόμενη εντολή (επιστροφή στο σημείο κλήσης).
Ο μόνος τρόπος για να περάσει μία τιμή από ένα υποπρόγραμμα σε ένα άλλο ή από το
κυρίως πρόγραμμα σε ένα υποπρόγραμμα είναι διαμέσου των παραμέτρων κατά το στάδιο
της κλήσης του υποπρογράμματος και μετά το τέλος της εκτέλεσης του υποπρογράμματος.
μεταβλητή σταθερά
Εκχώρηση τιμής μεταβλητή μεταβλητή
μεταβλητή έκφραση
Αν συνθ τότε
Αν συνθ τότε εντολές 1
εντολές αλλιώς
Τέλος_αν εντολές 2
Τέλος_αν
Αν (συνθ) τότε
εντολές
Δομές επιλογής Αλλιώς_αν (συνθ) τότε
εντολές
Αλλιώς_αν (συνθ) τότε
εντολές
………
Αλλιώς
εντολές
Τέλος_αν
ΣΤΑΘΕΡΕΣ
Ορισμός σταθερών όνομα_1 = τιμή1
όνομα_Ν = τιμήΝ
ΜΕΤΑΒΛΗΤΕΣ
Δήλωση μεταβλητών Τύπος δεδομένων : λίστα μεταβλητών
Τύπος δεδομένων : λίστα μεταβλητών
ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
Συνήθεις αλγόριθμοι για ένα πίνακα Α με Ν στοιχεία
Δεδομένα // A,N //
Για i από 2 μέχρι N
j i
F Ψευδής
Όσο j > 1 και F = Ψευδής επανάλαβε
Αν Α[j] < Α[j-1] τότε
temp A[j]
A[j] A[j-1]
A[j-1] temp
j j -1
αλλιώς
F Αληθής
Τέλος_αν
Τέλος_επανάληψης
Τέλος_επανάληψης
Αποτελέσματα // A //
ΔΙΣΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
Συνήθεις αλγόριθμοι για ένα πίνακα Α με Ν γραμμές και Μ στήλες
Δεδομένα // Α,Ν,M,key //
found ← Ψευδής
Για i από 1 μέχρι Ν
Για j από 1 μέχρι Μ
Αν Α[i,j] = key τότε
found ← Αληθής
Εμφάνισε "Βρέθηκε στην",i,j
Τέλος_Αν
Τέλος_επανάληψης
Τέλος_επανάληψης
Αν found = Ψευδής τότε
Εμφάνισε "Στοιχείο δεν βρέθηκε"
Τέλος_Αν
ΤΕΤΡΑΓΩΝΙΚΟΙ ΠΙΝΑΚΕΣ
Αν στον παρακάτω τετραγωνικό πίνακα N*N θεωρήσουμε τον δείκτη i ως δείκτη γραμμών και τον
δείκτη j ως δείκτη στηλών, τότε για κάθε στοιχείο (i,j) του πίνακα μπορούμε να αποφανθούμε ότι
βρίσκεται:
Α’ τρόπος (προσπέλαση ολόκληρου του πίνακα) Β’ τρόπος (προσπέλαση μόνο των διαγώνιων)
ΕΜΦΑΝΙΣΗ ΣΤΟΙΧΕΙΩΝ ΑΝΩ ΤΡΙΓΩΝΙΚΟΥ (ΜΟΝΟ) ΕΜΦΑΝΙΣΗ ΣΤΟΙΧΕΙΩΝ ΚΑΤΩ ΤΡΙΓΩΝΙΚΟΥ (ΜΟΝΟ)
Για i από 1 μέχρι Ν-1 Για j από 1 μέχρι Ν-1
Για j από i+1 μέχρι Ν Για i από j+1 μέχρι Ν
Εμφάνισε Α[i,j] Εμφάνισε Α[i,j]
Τέλος_επανάληψης Τέλος_επανάληψης
Τέλος_επανάληψης Τέλος_επανάληψης
Για την υλοποίηση της στοίβας χρησιμοποιούμε τον μονοδιάστατο πίνακα table με Ν θέσεις και
την μεταβλητή top που δείχνει στο κορυφαίο στοιχείο του πίνακα.
Για την υλοποίηση της ουράς χρησιμοποιούμε τον μονοδιάστατο πίνακα table με Ν θέσεις και τις
μεταβλητές front, rear που δείχνουν στο πρώτο και τελευταίο στοιχείο του πίνακα αντίστοιχα.