Η αντιμετώπιση σύνθετων προβλημάτων και η ανάπτυξη των αντίστοιχων προγραμμάτων μπορεί να γίνει με την ιεραρχική σχεδίαση, δηλαδή η ανάπτυξη του προγράμματος από επάνω προς τα κάτω. Κάθε πρόβλημα διαιρείται σε μικρότερα επιμέρους απλούστερα προβλήματα, τα οποία με τη σειρά τους διαιρούνται σε ακόμα απλούστερα.
Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης και ανάπτυξης προγραμμάτων ως ένα σύνολο από απλούστερα τμήματα. Είναι ένα από τα βασικότερα συστατικά του δομημένου προγραμματισμού.
Υποπρόγραμμα (subprogram) ονομάζουμε ένα τμήμα του προγράμματος το οποίο επιτελεί ένα αυτόνομο έργο και έχει γραφτεί χωριστά από το υπόλοιπο.
Κάθε υποπρόγραμμα πρέπει να έχει τις εξής ιδιότητες:
Κλήση ενός υποπρογράμματος ονομάζεται η διαδικασία κατά την οποία ένα υποπρόγραμμα ενεργοποιείται είτε από ένα άλλο υποπρόγραμμα είτε από το αρχικό (κύριο) πρόγραμμα.
Μια παράμετρος είναι μια μεταβλητή που επιτρέπει το πέρασμα της τιμής της από ένα τμήμα προγράμματος σε ένα άλλο. Τα υποπρογράμματα είναι αυτόνομα και ανεξάρτητα, αλλά πρέπει να επικοινωνούν με το υπόλοιπο πρόγραμμα που τα καλεί. Συνήθως δέχονται τιμές από το τμήμα που τα καλεί και μετά την εκτέλεση επιστρέφουν νέες τιμές / αποτελέσματα.
Υπάρχουν δύο είδη υποπρογραμμάτων: οι διαδικασίες και οι συναρτήσεις. Και τα δύο τοποθετούνται μετά το τέλος του κυρίου προγράμματος.
Μπορούν να εκτελέσουν οποιαδήποτε λειτουργία από αυτές που μπορεί να εκτελέσει ένα πρόγραμμα: να εισάγουν δεδομένα, να εκτελούν υπολογισμούς, να μεταβάλλουν τις τιμές των παραμέτρων, να τυπώνουν αποτελέσματα. Με τη χρήση παραμέτρων αυτές τις τιμές μπορούν να τις μεταφέρουν και σε άλλα υποπρογράμματα ή στο κυρίως πρόγραμμα.
Ενεργοποιούνται με την εντολή ΚΑΛΕΣΕ και την εμφάνιση του ονόματός τους συνοδευόμενο με τη λίστα παραμέτρων σε παρενθέσεις.
ΚΑΛΕΣΕ Όνομα_Διαδικασίας (λίστα παραμέτρων)
Η λειτουργία τους είναι πιο περιορισμένη. Υπολογίζουν μια τιμή (ακέραια, πραγματική, χαρακτήρα ή λογική) και μόνο αυτή επιστρέφουν στο υποπρόγραμμα που την κάλεσε. Μοιάζουν με τις μαθηματικές συναρτήσεις και η χρήση τους είναι όμοια με τις ενσωματωμένες συναρτήσεις της γλώσσας.
Εκτελούνται απλά με την εμφάνιση του ονόματός τους σε μια έκφραση ή εντολή.
ΣΥΝΑΡΤΗΣΗ Όνομα(Λίστα παραμέτρων): Τύπος_Συνάρτησης
Τμήμα Δηλώσεων
ΑΡΧΗ
...εντολές...
Όνομα ← Έκφραση
...εντολές...
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
ΔΙΑΔΙΚΑΣΙΑ Όνομα(Λίστα παραμέτρων)
Τμήμα Δηλώσεων
ΑΡΧΗ
...εντολές...
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Τα ονόματα των τυπικών και πραγματικών παραμέτρων μπορεί να είναι οποιαδήποτε. Αφού είναι ονόματα μεταβλητών σε διαφορετικά τμήματα προγράμματος, είναι υποχρεωτικά διαφορετικές μεταβλητές, άσχετα αν έχουν το ίδιο όνομα.
Όταν μια διαδικασία ή συνάρτηση καλείται από το κύριο πρόγραμμα, η αμέσως επόμενη διεύθυνση του κυρίου προγράμματος (που ονομάζεται διεύθυνση επιστροφής) αποθηκεύεται από το μεταφραστή σε μια στοίβα που ονομάζεται στοίβα χρόνου εκτέλεσης.
Μετά την εκτέλεση του υποπρογράμματος, η διεύθυνση επιστροφής απωθείται από τη στοίβα και ο έλεγχος μεταφέρεται πάλι στο κύριο πρόγραμμα. Αυτή η τεχνική εφαρμόζεται και γενικότερα, όποτε μια διαδικασία ή συνάρτηση καλεί μια άλλη.
Οι μεταβλητές στη ΓΛΩΣΣΑ έχουν ισχύ μόνο για το τμήμα προγράμματος στο οποίο έχουν δηλωθεί — ισχύουν τοπικά. Το τμήμα του προγράμματος που ισχύουν οι μεταβλητές λέγεται εμβέλεια (scope) μεταβλητών.
Ο μόνος τρόπος για να περάσει μια τιμή από ένα υποπρόγραμμα σε ένα άλλο ή από το κυρίως πρόγραμμα σε ένα υποπρόγραμμα είναι δια μέσου των παραμέτρων κατά το στάδιο της κλήσης και μετά το τέλος της εκτέλεσης.
Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης και ανάπτυξης προγραμμάτων ως ένα σύνολο από απλούστερα τμήματα. Είναι ένα από τα βασικότερα συστατικά του δομημένου προγραμματισμού.
Η χρήση του εξασφαλίζει σε μεγάλο βαθμό την επιτυχή και εύκολη δημιουργία σωστών προγραμμάτων. Ένα σύνθετο πρόβλημα αναλύεται σε μικρότερα απλούστερα υποπροβλήματα, τα οποία επιλύονται σταδιακά.
Υποπρόγραμμα (subprogram) ονομάζουμε ένα τμήμα του προγράμματος το οποίο επιτελεί ένα αυτόνομο έργο και έχει γραφτεί χωριστά από το υπόλοιπο.
Τα υποπρογράμματα είναι αυτόνομα και ανεξάρτητα τμήματα προγράμματος που πρέπει να επικοινωνούν με το υπόλοιπο πρόγραμμα που τα καλεί. Συνήθως δέχονται τιμές από το τμήμα που τα καλεί και μετά την εκτέλεση επιστρέφουν νέες τιμές / αποτελέσματα.
Κλήση ενός υποπρογράμματος ονομάζεται η διαδικασία κατά την οποία ένα υποπρόγραμμα ενεργοποιείται είτε από ένα άλλο υποπρόγραμμα είτε από το αρχικό (κύριο) πρόγραμμα.
Η εκτέλεση του προγράμματος διακόπτεται, εκτελούνται οι εντολές του υποπρογράμματος, και μετά το τέλος του η εκτέλεση συνεχίζεται από την εντολή που ακολουθεί.
Μια παράμετρος είναι μια μεταβλητή που επιτρέπει το πέρασμα της τιμής της από ένα τμήμα προγράμματος σε ένα άλλο.
Τα υποπρογράμματα είναι αυτόνομα και ανεξάρτητα, αλλά πρέπει να επικοινωνούν με το υπόλοιπο πρόγραμμα που τα καλεί. Συνήθως δέχονται τιμές από το τμήμα που τα καλεί και μετά την εκτέλεση επιστρέφουν νέες τιμές / αποτελέσματα.
Τυπικές παράμετροι (ορίσματα): καθορίζονται στη δήλωση του υποπρογράμματος.
Πραγματικές παράμετροι: καθορίζονται στην κλήση του υποπρογράμματος.
Υπάρχουν δύο είδη: οι διαδικασίες και οι συναρτήσεις.
Διαδικασίες: Μπορούν να εκτελέσουν οποιαδήποτε λειτουργία: εισαγωγή δεδομένων, υπολογισμούς, μεταβολή τιμών παραμέτρων, εκτύπωση αποτελεσμάτων. Ενεργοποιούνται με ΚΑΛΕΣΕ.
Συναρτήσεις: Υπολογίζουν μια τιμή (ακέραια, πραγματική, χαρακτήρα ή λογική) και μόνο αυτή επιστρέφουν. Μοιάζουν με μαθηματικές συναρτήσεις και ενεργοποιούνται με την εμφάνιση του ονόματός τους σε μια έκφραση.
Σημαντική διαφορά: Μια συνάρτηση δεν μπορεί να καλεί διαδικασία, μπορεί όμως να καλεί άλλη συνάρτηση.
Τα ονόματα των τυπικών και πραγματικών μπορεί να είναι οποιαδήποτε, ακόμα και ίδια, αφού είναι μεταβλητές σε διαφορετικά τμήματα προγράμματος.
Όταν μια διαδικασία ή συνάρτηση καλείται από το κύριο πρόγραμμα, η αμέσως επόμενη διεύθυνση του κυρίου προγράμματος (η διεύθυνση επιστροφής) αποθηκεύεται από το μεταφραστή σε μια στοίβα χρόνου εκτέλεσης.
Μετά την εκτέλεση του υποπρογράμματος, η διεύθυνση επιστροφής απωθείται από τη στοίβα και ο έλεγχος μεταφέρεται πάλι στο κύριο πρόγραμμα. Η τεχνική αυτή εφαρμόζεται και όταν ένα υποπρόγραμμα καλεί ένα άλλο.
Η στοίβα λειτουργεί με την αρχή LIFO (Last In – First Out): η τελευταία διεύθυνση που μπήκε είναι η πρώτη που βγαίνει.
Η εμβέλεια (scope) είναι το τμήμα του προγράμματος που ισχύουν οι μεταβλητές. Στη ΓΛΩΣΣΑ οι μεταβλητές είναι τοπικές — ισχύουν μόνο στο υποπρόγραμμα που δηλώθηκαν.
Ο μόνος τρόπος για πέρασμα τιμών μεταξύ τμημάτων είναι δια μέσου των παραμέτρων.
Τύποι εμβέλειας:
1. Τι ονομάζεται τμηματικός προγραμματισμός;
2. Ποια από τις παρακάτω ΔΕΝ είναι ιδιότητα υποπρογράμματος;
3. Ποιο από τα παρακάτω είναι πλεονέκτημα του τμηματικού προγραμματισμού;
4. Πώς ενεργοποιείται μια συνάρτηση;
5. Πώς ενεργοποιείται μια διαδικασία;
6. Τι επιστρέφει μια συνάρτηση;
7. Πού τοποθετούνται τα υποπρογράμματα στο πρόγραμμα;
8. Μια συνάρτηση μπορεί να καλέσει:
9. Ποιος κανόνας ισχύει για τις παραμέτρους;
10. Ποια εμβέλεια έχουν οι μεταβλητές στη ΓΛΩΣΣΑ;
Να γραφεί συνάρτηση που δέχεται την ακτίνα ενός κύκλου και επιστρέφει το εμβαδόν του. Να χρησιμοποιηθεί στο κύριο πρόγραμμα.
ΠΡΟΓΡΑΜΜΑ Εμβαδο_Κυκλου
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: r, εμβαδο
ΑΡΧΗ
ΓΡΑΨΕ "Δώσε ακτίνα:"
ΔΙΑΒΑΣΕ r
εμβαδο ← Εμβαδο_Κ(r)
ΓΡΑΨΕ "Το εμβαδόν είναι:", εμβαδο
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ Εμβαδο_Κ(ακτινα): ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: ακτινα
ΑΡΧΗ
Εμβαδο_Κ ← 3.14159 * ακτινα ^ 2
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Να γραφεί συνάρτηση που δέχεται δύο ακέραιους και επιστρέφει τον μεγαλύτερο.
ΠΡΟΓΡΑΜΜΑ Μεγιστος_2
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: α, β, max
ΑΡΧΗ
ΔΙΑΒΑΣΕ α, β
max ← Μεγιστος(α, β)
ΓΡΑΨΕ "Ο μεγαλύτερος είναι:", max
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ Μεγιστος(χ, ψ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: χ, ψ
ΑΡΧΗ
ΑΝ χ > ψ ΤΟΤΕ
Μεγιστος ← χ
ΑΛΛΙΩΣ
Μεγιστος ← ψ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Να γραφεί διαδικασία χωρίς παραμέτρους που εμφανίζει ένα μενού επιλογών (1. Πρόσθεση, 2. Αφαίρεση, 3. Έξοδος).
ΠΡΟΓΡΑΜΜΑ Μενου
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: επιλογη
ΑΡΧΗ
ΚΑΛΕΣΕ Εμφανισε_Μενου
ΔΙΑΒΑΣΕ επιλογη
ΓΡΑΨΕ "Επέλεξες:", επιλογη
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ Εμφανισε_Μενου
ΑΡΧΗ
ΓΡΑΨΕ "========== ΜΕΝΟΥ =========="
ΓΡΑΨΕ "1. Πρόσθεση"
ΓΡΑΨΕ "2. Αφαίρεση"
ΓΡΑΨΕ "3. Έξοδος"
ΓΡΑΨΕ "============================"
ΓΡΑΨΕ "Επίλεξε (1-3):"
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Να γραφεί διαδικασία που δέχεται δύο ακέραιες μεταβλητές και τις ανταλλάσσει (swap). Να επιβεβαιωθεί ότι οι αλλαγές επιστρέφονται στο κύριο πρόγραμμα.
ΠΡΟΓΡΑΜΜΑ Ανταλλαγη
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: α, β
ΑΡΧΗ
α ← 10
β ← 20
ΓΡΑΨΕ "Πριν:", α, β
ΚΑΛΕΣΕ Swap(α, β)
ΓΡΑΨΕ "Μετά:", α, β
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ Swap(χ, ψ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: χ, ψ, temp
ΑΡΧΗ
temp ← χ
χ ← ψ
ψ ← temp
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Να γραφεί συνάρτηση που υπολογίζει και επιστρέφει το παραγοντικό ενός ακεραίου n (n!).
ΠΡΟΓΡΑΜΜΑ Παραγοντικο
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ν, αποτελεσμα
ΑΡΧΗ
ΓΡΑΨΕ "Δώσε n:"
ΔΙΑΒΑΣΕ ν
αποτελεσμα ← Παραγοντικο(ν)
ΓΡΑΨΕ ν, "!=", αποτελεσμα
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ Παραγοντικο(ν): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ν, i, π
ΑΡΧΗ
π ← 1
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ ν
π ← π * i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Παραγοντικο ← π
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Να γραφεί συνάρτηση που δέχεται έναν ακέραιο και επιστρέφει ΑΛΗΘΗΣ αν είναι πρώτος, αλλιώς ΨΕΥΔΗΣ.
ΠΡΟΓΡΑΜΜΑ Πρωτος_Αριθμος
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ν
ΑΡΧΗ
ΔΙΑΒΑΣΕ ν
ΑΝ Πρωτος(ν) = ΑΛΗΘΗΣ ΤΟΤΕ
ΓΡΑΨΕ "Πρώτος αριθμός"
ΑΛΛΙΩΣ
ΓΡΑΨΕ "Όχι πρώτος"
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ Πρωτος(ν): ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ν, i
ΛΟΓΙΚΕΣ: flag
ΑΡΧΗ
flag ← ΑΛΗΘΗΣ
ΑΝ ν <= 1 ΤΟΤΕ
flag ← ΨΕΥΔΗΣ
ΑΛΛΙΩΣ_ΑΝ ν = 2 ΤΟΤΕ
flag ← ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ ν - 1
ΑΝ ν MOD i = 0 ΤΟΤΕ
flag ← ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΑΝ
Πρωτος ← flag
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Να γραφεί διαδικασία που δέχεται έναν πίνακα 20 ακεραίων και τον ταξινομεί κατά αύξουσα σειρά με τη μέθοδο της ευθείας ανταλλαγής.
ΠΡΟΓΡΑΜΜΑ Ταξινομηση_Διαδ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α[20], i
ΑΡΧΗ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 20
ΔΙΑΒΑΣΕ Α[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ BubbleSort(Α)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 20
ΓΡΑΨΕ Α[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ BubbleSort(Π)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Π[20], i, j, temp
ΑΡΧΗ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 20
ΓΙΑ j ΑΠΟ 20 ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
ΑΝ Π[j-1] > Π[j] ΤΟΤΕ
temp ← Π[j-1]
Π[j-1] ← Π[j]
Π[j] ← temp
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Να γραφεί συνάρτηση που δέχεται έναν ακέραιο n και επιστρέφει τον n-οστό όρο της ακολουθίας Fibonacci (1, 1, 2, 3, 5, 8...).
ΠΡΟΓΡΑΜΜΑ Fibonacci
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ν, αποτελεσμα
ΑΡΧΗ
ΓΡΑΨΕ "Δώσε n:"
ΔΙΑΒΑΣΕ ν
αποτελεσμα ← Fib(ν)
ΓΡΑΨΕ "Ο", ν, "ος όρος Fibonacci είναι:", αποτελεσμα
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ Fib(ν): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ν, i, α, β, temp
ΑΡΧΗ
ΑΝ ν <= 2 ΤΟΤΕ
Fib ← 1
ΑΛΛΙΩΣ
α ← 1
β ← 1
ΓΙΑ i ΑΠΟ 3 ΜΕΧΡΙ ν
temp ← α + β
α ← β
β ← temp
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Fib ← β
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ