Υποπρογράμματα
Κεφ. 10 · Τμηματικός προγραμματισμός, παράμετροι, συναρτήσεις, διαδικασίες, εμβέλεια
Μια εφαρμογή τράπεζας έχει εκατομμύρια γραμμές κώδικα. Κανείς δεν τις γράφει σε ένα κομμάτι: χωρίζονται σε μικρές ανεξάρτητες ενότητες — «υπολόγισε τόκο», «έλεγξε υπόλοιπο» — που γράφονται και ελέγχονται χωριστά.
Στις Πανελλαδικές το Θέμα Δ ζητά συχνά συνάρτηση ή διαδικασία. Οι λεπτομέρειες (τύπος συνάρτησης, ΚΑΛΕΣΕ, αντιστοιχία παραμέτρων) κρίνουν τις μονάδες.
Τμηματικός προγραμματισμός
Τμηματικός προγραμματισμός είναι η τεχνική σχεδίασης και ανάπτυξης προγραμμάτων ως ένα σύνολο από απλούστερα τμήματα, τα υποπρογράμματα. Κάθε υποπρόγραμμα επιτελεί μια συγκεκριμένη, αυτόνομη λειτουργία.
Χαρακτηριστικά των υποπρογραμμάτων:
- έχουν μόνο μία είσοδο και μία έξοδο,
- είναι ανεξάρτητα από τα άλλα υποπρογράμματα,
- δεν είναι πολύ μεγάλα, ώστε να είναι εύκολα κατανοητά.
Πλεονεκτήματα του τμηματικού προγραμματισμού:
- διευκολύνει την ανάπτυξη του αλγορίθμου και του προγράμματος,
- διευκολύνει την κατανόηση και τη διόρθωση του προγράμματος,
- απαιτεί λιγότερο χρόνο και προσπάθεια στη συγγραφή (ένα υποπρόγραμμα γράφεται μία φορά και καλείται πολλές),
- επεκτείνει τις δυνατότητες των γλωσσών προγραμματισμού (δημιουργούμε δικές μας «εντολές»).
Παράμετροι
Παράμετρος είναι μια μεταβλητή που επιτρέπει το πέρασμα τιμών από ένα τμήμα προγράμματος σε ένα άλλο. Στη ΓΛΩΣΣΑ οι παράμετροι είναι ο μόνος τρόπος επικοινωνίας μεταξύ υποπρογραμμάτων.
- Πραγματικές παράμετροι: αυτές που γράφονται στην κλήση του υποπρογράμματος.
- Τυπικές παράμετροι: αυτές που γράφονται στον ορισμό (την επικεφαλίδα) του υποπρογράμματος.
Οι πραγματικές και οι τυπικές παράμετροι πρέπει να αντιστοιχούν ένα προς ένα: ίδιος αριθμός, ίδια σειρά, ίδιος τύπος. Τα ονόματα μπορεί να διαφέρουν — η αντιστοίχιση γίνεται με βάση τη θέση.
Ποια απαίτηση δεν ισχύει για την αντιστοιχία πραγματικών και τυπικών παραμέτρων στη ΓΛΩΣΣΑ;
Συναρτήσεις
Η συνάρτηση υπολογίζει και επιστρέφει μία τιμή, μέσω του ονόματός της, και καλείται μέσα σε έκφραση — όπως οι ενσωματωμένες Τ_Ρ ή Α_Τ.
ΣΥΝΑΡΤΗΣΗ όνομα(λίστα_παραμέτρων): τύπος_συνάρτησης ΜΕΤΑΒΛΗΤΕΣ δηλώσεις ΑΡΧΗ εντολές όνομα ← έκφραση ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Ο τύπος της συνάρτησης είναι ΑΚΕΡΑΙΑ, ΠΡΑΓΜΑΤΙΚΗ, ΧΑΡΑΚΤΗΡΑΣ ή ΛΟΓΙΚΗ. Μέσα στο σώμα πρέπει να υπάρχει εκχώρηση στο όνομα της συνάρτησης — αυτή είναι η τιμή που επιστρέφεται. Οι τυπικές παράμετροι δηλώνονται στο τμήμα ΜΕΤΑΒΛΗΤΕΣ του υποπρογράμματος. Στις λύσεις των εξετάσεων η συνάρτηση δεν διαβάζει, δεν εμφανίζει και δεν αλλάζει τις παραμέτρους της: απλώς υπολογίζει την τιμή που επιστρέφει.
Διαδικασίες
Η διαδικασία μπορεί να εκτελέσει οποιαδήποτε λειτουργία (διάβασμα, εμφάνιση, αλλαγή τιμών) και να επιστρέψει καμία, μία ή περισσότερες τιμές μέσω των παραμέτρων της. Καλείται με την εντολή ΚΑΛΕΣΕ.
ΔΙΑΔΙΚΑΣΙΑ όνομα(λίστα_παραμέτρων) ΣΤΑΘΕΡΕΣ δηλώσεις ΜΕΤΑΒΛΗΤΕΣ δηλώσεις ΑΡΧΗ εντολές ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Κλήση: ΚΑΛΕΣΕ όνομα(πραγματικές_παράμετροι). Οι αλλαγές που κάνει η διαδικασία στις τυπικές παραμέτρους της μεταφέρονται στις αντίστοιχες πραγματικές όταν τελειώσει. Τα υποπρογράμματα γράφονται μετά το ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ του κυρίως προγράμματος.
Παράδειγμα 1: Συνάρτηση που επιστρέφει τον μεγαλύτερο από δύο αριθμούς, και χρήση της για τρεις αριθμούς.
ΣΥΝΑΡΤΗΣΗ Μεγ2(α, β): ΠΡΑΓΜΑΤΙΚΗ ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: α, β ΑΡΧΗ ΑΝ α > β ΤΟΤΕ Μεγ2 ← α ΑΛΛΙΩΣ Μεγ2 ← β ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Στο κυρίως πρόγραμμα, ο μεγαλύτερος των x, y, z:
μ ← Μεγ2(Μεγ2(x, y), z)
Για x = 4, y = 11, z = 7: Μεγ2(4, 11) = 11, μετά Μεγ2(11, 7) = 11. Η συνάρτηση καλείται μέσα σε έκφραση, ποτέ με ΚΑΛΕΣΕ.
Θέμα τύπου Πανελλαδικών: Τι εμφανίζει το πρόγραμμα;
ΠΡΟΓΡΑΜΜΑ Κλησεις ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: x, y ΑΡΧΗ x ← 3 y ← 8 ΚΑΛΕΣΕ Αλλαξε(x, y) ΓΡΑΨΕ x, y ΓΡΑΨΕ Διπλο(y) + x ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ Αλλαξε(α, β) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: α, β ΑΡΧΗ α ← α + β β ← α - β ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΣΥΝΑΡΤΗΣΗ Διπλο(ν): ΑΚΕΡΑΙΑ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: ν ΑΡΧΗ Διπλο ← 2 * ν ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Λύση: Στην κλήση α = 3, β = 8. Μέσα στη διαδικασία: α ← 3 + 8 = 11, β ← 11 − 8 = 3. Στο τέλος οι τιμές επιστρέφουν: x = 11, y = 3. Εμφανίζεται 11 3. Μετά Διπλο(3) = 6 και 6 + 11 = 17: εμφανίζεται 17.
Ποια κλήση είναι σωστή για μια συνάρτηση ΣΥΝΑΡΤΗΣΗ Εμβ(ρ): ΠΡΑΓΜΑΤΙΚΗ;
Εμβέλεια μεταβλητών και σταθερών
Εμβέλεια είναι το τμήμα του προγράμματος στο οποίο μια μεταβλητή ή σταθερά είναι γνωστή και μπορεί να χρησιμοποιηθεί.
- Απεριόριστη εμβέλεια: οι μεταβλητές είναι καθολικές — γνωστές σε όλα τα τμήματα του προγράμματος.
- Περιορισμένη εμβέλεια: οι μεταβλητές είναι τοπικές — γνωστές μόνο στο υποπρόγραμμα όπου δηλώνονται.
- Μερικώς περιορισμένη εμβέλεια: μια μεταβλητή είναι γνωστή στο υποπρόγραμμα όπου δηλώνεται και στα υποπρογράμματα που περιέχονται σε αυτό.
Η ΓΛΩΣΣΑ υποστηρίζει την περιορισμένη εμβέλεια: όλες οι μεταβλητές είναι τοπικές και κάθε τιμή περνά μόνο μέσω παραμέτρων. Πλεονεκτήματα: τα υποπρογράμματα είναι πραγματικά ανεξάρτητα και μπορούμε να χρησιμοποιούμε τα ίδια ονόματα σε διαφορετικά υποπρογράμματα χωρίς να επηρεάζει το ένα το άλλο.
Μέθοδος: συνάρτηση ή διαδικασία;
- Επιστρέφεται ακριβώς μία τιμή και δεν χρειάζεται ΔΙΑΒΑΣΕ/ΓΡΑΨΕ; → συνάρτηση (δήλωσε τον τύπο της).
- Επιστρέφονται περισσότερες από μία τιμές ή καμία, ή χρειάζεται είσοδος/έξοδος; → διαδικασία.
- Γράψε την επικεφαλίδα με τις τυπικές παραμέτρους και δήλωσέ τες στο ΜΕΤΑΒΛΗΤΕΣ του υποπρογράμματος (πίνακες με το μέγεθός τους).
- Σε συνάρτηση, βεβαιώσου ότι σε κάθε διαδρομή γίνεται εκχώρηση στο όνομά της.
- Στην κλήση, έλεγξε αριθμό, σειρά και τύπο των πραγματικών παραμέτρων.
Παράδειγμα 2: Διαδικασία που δέχεται πίνακα 30 βαθμών και επιστρέφει τον μέσο όρο και το πλήθος των βαθμών κάτω από 10 — δύο τιμές, άρα διαδικασία.
ΔΙΑΔΙΚΑΣΙΑ Στατ(Β, ΜΟ, κατω) ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: Β[30], ΜΟ, Σ ΑΚΕΡΑΙΕΣ: κατω, i ΑΡΧΗ Σ ← 0 κατω ← 0 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30 Σ ← Σ + Β[i] ΑΝ Β[i] < 10 ΤΟΤΕ κατω ← κατω + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΜΟ ← Σ / 30 ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Κλήση από το κυρίως πρόγραμμα: ΚΑΛΕΣΕ Στατ(ΒΑΘ, μεσος, αποτυχ). Οι Σ και i είναι τοπικές μεταβλητές της διαδικασίας και δεν είναι γνωστές στο κυρίως πρόγραμμα.
Γιατί στη ΓΛΩΣΣΑ δύο διαφορετικά υποπρογράμματα μπορούν να έχουν μεταβλητή με το ίδιο όνομα i, χωρίς να επηρεάζει η μία την άλλη;
Η ιδέα της επαναχρησιμοποιήσιμης «υπορουτίνας» είναι σχεδόν τόσο παλιά όσο οι ίδιοι οι υπολογιστές: περιγράφεται ήδη από τους Maurice Wilkes, David Wheeler και Stanley Gill στο βιβλίο τους του 1951 για τον υπολογιστή EDSAC του Cambridge, το πρώτο εγχειρίδιο προγραμματισμού στην ιστορία. Η τεχνική κλήσης υπορουτίνας που χρησιμοποιούσαν ονομάστηκε «Wheeler jump».
Συνάρτηση = Σε έκφραση, Σκέτη μία τιμή, Στο όνομά της. Διαδικασία = Διάταξη ΚΑΛΕΣΕ, Διάφορες τιμές (0, 1 ή πολλές) μέσω παραμέτρων.
Γράψε μια λογική συνάρτηση Πρωτος(ν) που επιστρέφει ΑΛΗΘΗΣ αν ο ακέραιος ν ≥ 2 είναι πρώτος, και χρησιμοποίησέ την για να εμφανίσεις πόσοι πρώτοι υπάρχουν από 2 έως 100.
Δοκίμασε πρώτα μόνος σου — μετά δες τη λύση
Ελέγχουμε διαιρέτες από 2 μέχρι να βρεθεί ένας ή να ξεπεράσουμε την τετραγωνική ρίζα του ν (αν ο ν έχει διαιρέτη, έχει και έναν ).
ΣΥΝΑΡΤΗΣΗ Πρωτος(ν): ΛΟΓΙΚΗ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: ν, δ ΛΟΓΙΚΕΣ: π ΑΡΧΗ π ← ΑΛΗΘΗΣ δ ← 2 ΟΣΟ δ * δ <= ν ΚΑΙ π = ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ ΑΝ ν MOD δ = 0 ΤΟΤΕ π ← ΨΕΥΔΗΣ ΤΕΛΟΣ_ΑΝ δ ← δ + 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Πρωτος ← π ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Στο κυρίως πρόγραμμα:
πλ ← 0 ΓΙΑ κ ΑΠΟ 2 ΜΕΧΡΙ 100 ΑΝ Πρωτος(κ) = ΑΛΗΘΗΣ ΤΟΤΕ πλ ← πλ + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ πλ
Εμφανίζεται 25 (οι πρώτοι 2, 3, 5, 7, …, 97). Η βοηθητική μεταβλητή π χρειάζεται γιατί η εκχώρηση στο όνομα της συνάρτησης γίνεται μία φορά, στο τέλος.
- Κλήση συνάρτησης με ΚΑΛΕΣΕ ή κλήση διαδικασίας μέσα σε έκφραση.
- Ξεχνάς να δηλώσεις τις τυπικές παραμέτρους στο ΜΕΤΑΒΛΗΤΕΣ του υποπρογράμματος.
- Συνάρτηση χωρίς εκχώρηση στο όνομά της σε κάποια διαδρομή (π.χ. μόνο μέσα στο ΑΝ, όχι στο ΑΛΛΙΩΣ).
- Χρήση μεταβλητής του κυρίως προγράμματος μέσα σε υποπρόγραμμα χωρίς να περαστεί ως παράμετρος: στη ΓΛΩΣΣΑ δεν είναι γνωστή.
- Υποπρογράμματα: μία είσοδος–μία έξοδος, ανεξάρτητα, όχι πολύ μεγάλα· 4 πλεονεκτήματα του τμηματικού προγραμματισμού.
- Πραγματικές (κλήση) και τυπικές (ορισμός) παράμετροι: ίδιος αριθμός, σειρά, τύπος.
- Συνάρτηση: μία τιμή μέσω του ονόματος, κλήση σε έκφραση, τύπος ΑΚΕΡΑΙΑ/ΠΡΑΓΜΑΤΙΚΗ/ΧΑΡΑΚΤΗΡΑΣ/ΛΟΓΙΚΗ.
- Διαδικασία: 0, 1 ή πολλές τιμές μέσω παραμέτρων, κλήση με ΚΑΛΕΣΕ.
- ΓΛΩΣΣΑ: περιορισμένη εμβέλεια — όλες οι μεταβλητές τοπικές, επικοινωνία μόνο με παραμέτρους.