Συνάρτηση ή Διαδικασία;
Όταν ένα υποπρόγραμμα θέλουμε να υπολογίζει και να επιστρέφει στο κυρίως πρόγραμμα ΜΙΑ μόνο μεταβλητή και χωρίς να χρειάζεται τις εντολές ΔΙΑΒΑΣΕ ΚΑΙ ΓΡΑΨΕ , τότε πρέπει να χρησιμοποιούμαι Συνάρτηση. Σε όλες τις άλλες περιπτώσεις, Διαδικασία.
Παραδείγματα όπου πρέπει να χρησιμοποιείται συνάρτηση.
- Υπολογισμός μέσου όρου κάποιων αριθμών.
- Εύρεση μεγίστου – ελαχίστου
- Υπολογισμός του ΦΠΑ ενός προϊόντος
Παραδείγματα όπου πρέπει να χρησιμοποιείται διαδικασία.
- Υπολογισμός μέσου όρου κάποιων αριθμών και εμφάνιση του (Δεν επιτρέπεται σε συνάρτηση η ΓΡΑΨΕ).
- Διάβασμα τιμών και υπολογισμός του μέσου όρου (Δεν επιτρέπεται σε συνάρτηση η ΔΙΑΒΑΣΕ).
- Ταξινόμηση πίνακα (Θέλουμε να επιστραφεί πίνακας, ο οποίος δεν θεωρείται μία τιμή αλλά πολλές).
- Εύρεση της μέγιστης και ελάχιστης τιμής σε πίνακα (Επιστρέφει δύο τιμές).
Ορισμοί
Η συνάρτηση είναι ένας τύπος υποπρογράμματος που υπολογίζει και επιστρέφει μόνο μία τιμή με το όνομά της (όπως οι μαθηματικές συναρτήσεις).
Η διαδικασία είναι ένας τύπος υποπρογράμματος που μπορεί να εκτελεί όλες τις λειτουργίες ενός προγράμματος.
Δομή Συνάρτησης και Διαδικασίας
Δομή Συνάρτησης
ΣΥΝΑΡΤΗΣΗ «όνομα» («λίστα παραμέτρων») : «τύπος της τιμής που θα επιστραφεί»
«δήλωση σταθερών και μεταβλητών όπως σε ένα πρόγραμμα»
ΑΡΧΗ
«εντολές»
«όνομα» ← «έκφραση»
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Δομή Διαδικασίας
ΔΙΑΔΙΚΑΣΙΑ «όνομα» («λίστα παραμέτρων»)
«δήλωση σταθερών και μεταβλητών όπως σε ένα πρόγραμμα»
ΑΡΧΗ
«εντολές»
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Για να καλέσουμε μια συνάρτηση απλά γράφουμε το όνομα της συνάρτησης.
Για να καλέσουμε μια διαδικασία πρέπει να γράψουμε ΚΑΛΕΣΕ και το όνομα της διαδικασίας.
Παραδείγματα
ΠΡΟΓΡΑΜΜΑ Ασκηση1
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: α,β, γ
ΑΡΧΗ
α ← 10
β ← 20
ΓΡΑΨΕ ΣΥΝ(α,β), α, β
ΚΑΛΕΣΕ ΔΙΑΔ(α,β,γ)
ΓΡΑΨΕ α,β,γ
ΤΕΛΟΣ_ ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ ΣΥΝ (x,y) : ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: x,y
ΑΡΧΗ
ΣΥΝ ← (x+y)/2
x ← 0
y ← 0
ΤΕΛΟΣ_ ΣΥΝΑΡΤΗΣΗΣ
ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΔ (ω,φ,θ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ω, φ
ΠΡΑΓΜΑΤΙΚΕΣ: θ
ΑΡΧΗ
θ ← (ω+φ)/2
ω ← 0
φ ← 0
ΤΕΛΟΣ_ ΔΙΑΔΙΚΑΣΙΑΣ
Αν τρέξουμε το παραπάνω πρόγραμμα , η πρώτη εντολή ΓΡΑΨΕ θα εμφανίσει τις τιμές: 15.0, 10, 20 ενώ η δεύτερη τις τιμές: 0, 0 , 15.0.
Τύποι Διαδικασιών
Διαδικασίες που δεν δέχονται ούτε επιστρέφουν τιμές στο κύριο πρόγραμμα
ΔΙΑΔΙΚΑΣΙΑ ΤΥΠΟΣ1()
ΜΕΤΑΒΛΗΤΕΣ
ΑΡΧΗ
ΓΡΑΨΕ “Ζήτω η τρέλα !”
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Διαδικασίες που δέχονται τιμές αλλά δεν επιστρέφουν τιμές στο κύριο πρόγραμμα
ΔΙΑΔΙΚΑΣΙΑ ΤΥΠΟΣ2(Χ)
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ : Χ
ΑΡΧΗ
ΓΡΑΨΕ Χ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Διαδικασίες που δέχονται και επιστρέφουν τιμές στο κύριο πρόγραμμα
ΔΙΑΔΙΚΑΣΙΑ ΤΥΠΟΣ2(Χ,Υ)
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ : Χ, Υ
ΑΡΧΗ
Υ← 2* Χ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Παρατηρήσεις
- Δεν επιτρέπεται η χρήση των εντολών ΔΙΑΒΑΣΕ και ΓΡΑΨΕ στις συναρτήσεις.
- Μπορούμε να καλούμε ένα υποπρόγραμμα χρησιμοποιώντας ως παραμέτρους σταθερές τιμές (π.χ. Fun(2,5)); Στις συναρτήσεις ναι, στις διαδικασίες οι γνώμες διίστανται.
- Σελίδα 179 (10.5.2), βιβλίο μαθητή: “Κάθε διαδικασία ή συνάρτηση μπορεί να καλείται από το κύριο πρόγραμμα ή από άλλη διαδικασία ή συνάρτηση…”.
Προσοχή! Η συνάρτηση δεν μπορεί όμως να καλεί διαδικασία. - Πολλές γλώσσες προγραμματισμού (C , Python) δεν κάνουν διάκριση μεταξύ συνάρτησης και διαδικασίας.
- Το πλαίσιο στην σελίδα 182 (10.5.3) της εξεταστέας ύλης αναφέρεται στις στοίβες που είναι από φέτος (2016-2017) εκτός ύλης. Λογικά δεν μπορεί να ζητηθεί στις εξετάσεις.
Παράμετροι
Δεν είναι απαραίτητο οι παράμετροι στο κυρίως πρόγραμμα και στο υποπρόγραμμα να έχουν τα ίδια ονόματα.
Αν μία συνάρτηση μεταβάλει τις τιμές των παραμέτρων της αυτό δεν επηρεάζει τις τιμές των αντίστοιχων παραμέτρων του κυρίως προγράμματος. Δεν ισχύει το ίδιο στις διαδικασίες.
Οι παράμετροι του κυρίως προγράμματος λέγονται πραγματικές, ενώ οι παράμετροι των υποπρογραμμάτων τυπικές.
Για τις τυπικές και πραγματικές παραμέτρους πρέπει να ισχύουν τα εξής:
- το πλήθος των τυπικών και πραγματικών παραμέτρων να είναι το ίδιο
- η πρώτη πραγματική παράμετρος αντιστοιχεί στην πρώτη τυπική, η δεύτερη στην δεύτερη κοκ.
- Οι αντίστοιχες παράμετροι πρέπει να είναι του ιδίου τύπου.
Στοίβα χρόνου εκτέλεσης
Η Στοίβα χρόνου εκτέλεσης είναι μια στοίβα που χρησιμοποιεί ο υπολογιστής για να τρέξει ένα πρόγραμμα που έχει και υποπρογράμματα. Πατήστε το κουμπί για να δείτε πως λειτουργεί.
Ερωτήσεις ανάπτυξης απο Πανελλαδικές εξετάσεις
- Ποια η διαφορά μεταξύ: α. μεταβλητών και παραμέτρων; β. τυπικών και πραγματικών παραμέτρων; (Ε2007-Θ1Γ3)
- Να αναφέρετε τους κανόνες που πρέπει να ακολουθούν οι λίστες των παραμέτρων κατά την κλήση ενός υποπρογράμματος. (2006-Θ1Β)
- Να αναφέρετε τους κανόνες που πρέπει να ακολουθούν οι λίστες των παραμέτρων στη χρήση υποπρογραμμάτων. (Ε2010-Α4, 2020-A2)
- Όταν καλείται ένα υποπρόγραμμα, η διεύθυνση επιστροφής αποθηκεύεται σε μια στοίβα. Να εξηγήσετε γιατί απαιτείται η χρήση στοίβας και όχι ουράς. (Ε2014-Α4)
- Δίνεται το παρακάτω τμήμα προγράμματος και ένα υποπρόγραμμα, το οποίο καλείται από αυτό:
ΠΡΟΓΡΑΜΜΑ Α4 ... Α ← 5 Β ← 7 ΚΑΛΕΣΕ Πράξεις (Α, Β, Διάφ1, Άθρ1) ... Α ← 9 Β ← 6 ΚΑΛΕΣΕ Πράξεις (Α, Β, Διάφ2, Άθρ2) ... ΔΙΑΔΙΚΑΣΙΑ Πράξεις (Χ, Υ, Διαφορά, Άθροισμα) ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: Χ, Υ, Διαφορά, Άθροισμα ΑΡΧΗ Διαφορά <-- Χ - Υ Άθροισμα <-- Χ + Υ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Να γράψετε στο τετράδιό σας, σε ξεχωριστές γραμμές: α. τη λέξη ΠΡΑΓΜΑΤΙΚΕΣ και δίπλα όλες τις πραγματικές παραμέτρους και β. τη λέξη ΤΥΠΙΚΕΣ και δίπλα όλες τις τυπικές παραμέτρους. (ΕΞ2016-Α4) - Δίνεται το παρακάτω πρόγραμμα και υποπρογράμματα: ΠΡΟΓΡΑΜΜΑ Κύριο ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Α, Β, Γ ΑΡΧΗ ΔΙΑΒΑΣΕ Α, Β, Γ ΚΑΛΕΣΕ Διαδ1(Α, Β, Γ) ΓΡΑΨΕ Α, Β, Γ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΙΑΔΙΚΑΣΙΑ Διαδ1(Β, Α, Γ) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Α, Β, Γ ΑΡΧΗ Α ← Α + 2 Β ← Β - 3 Γ ← Α + Β ΓΡΑΨΕ Α, Β, Γ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Τι θα εμφανιστεί κατά την εκτέλεση του προγράμματος, αν ως τιμές εισόδου δοθούν οι αριθμοί 5, 7, 10; (2006-Θ1Γ)
- Δίνεται το παρακάτω πρόγραμμα και ένα υποπρόγραμμα:
Πρόγραμμα ΘέμαΒ Μεταβλητές Ακέραιες: z,w Αρχή z ← 1 w ← 3 Όσο z≤35 επανάλαβε Κάλεσε Διαδ(z,w) Γράψε z Τέλος_επανάληψης Τέλος_Προγράμματος Διαδικασία Διαδ(w,z) Μεταβλητές Ακέραιες: z,w Αρχή w ← w+z z ← z+2 Γράψε z Τέλος_Διαδικασίας - Δίνεται το παρακάτω πρόγραμμα και υποπρογράμματα:ΠΡΟΓΡΑΜΜΑ Κύριο ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: α, β, χ ΑΡΧΗ α ← 1 β ← 2 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΑΝ α<=4 ΤΟΤΕ ΚΑΛΕΣΕ Διαδ1(α, β, χ) ΑΛΛΙΩΣ Χ ← Συν1(α, β) ΤΕΛΟΣ_ΑΝ ΓΡΑΨΕ α, β, χ ΜΕΧΡΙΣ_ΟΤΟΥ χ>11 ΓΡΑΨΕ χ ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΙΑΔΙΚΑΣΙΑ Διαδ1(λ, κ, μ) ΑΡΧΗ κ ←κ + 1 λ← λ + 3 μ←κ+λ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΣΥΝΑΡΤΗΣΗ Συν1(ε, ζ) : ΑΚΕΡΑΙΑ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: ε, ζ ΑΡΧΗ ζ ← ζ + 2 ε ← ε*2 Συν1 ← ε + ζ ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ Να γράψετε στο τετράδιό σας τις τιμές που θα εμφανιστούν κατά την εκτέλεση του προγράμματος. (Ε2006-Θ2)
- Δίνονται οι παρακάτω δηλώσεις υποπρογραμμάτων και των παραμέτρων τους:
ΣΥΝΑΡΤΗΣΗ Α (χ, ψ) : ΠΡΑΓΜΑΤΙΚΗ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: χ ΧΑΡΑΚΤΗΡΕΣ: θ[10], υ ΔΙΑΔΙΚΑΣΙΑ Β (χ, ψ, ζ) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: ψ ΠΡΑΓΜΑΤΙΚΕΣ: χ, ζ - π ← Α (κ, υ)
- ΚΑΛΕΣΕ Α (μ, θ)
- ΚΑΛΕΣΕ Β (π, μ)
- υ ← Α (μ, θ)
- κ ← Β (π, μ, ρ[1])
- a) Να γράψετε στο τετράδιό σας τον αριθμό (1-5) της καθεμιάς εντολής και δίπλα να περιγράψετε το λάθος.
- b) Να γράψετε στο τετράδιό σας τον αριθμό (1-5) της καθεμιάς εντολής και δίπλα να γράψετε την εντολή σωστά χρησιμοποιώντας μόνο μεταβλητές που υπάρχουν στο τμήμα δηλώσεων του κύριου προγράμματος. (2019-B2)
- Δίνεται το παρακάτω πρόγραμμα και ένα υποπρόγραμμα:
Πρόγραμμα Θέμα_Β2 Μεταβλητές Ακέραιες: a, b Αρχή a ← 1 b ← 3 Όσο a<35 επανάλαβε Κάλεσε Διαδ(a,b) Γράψε b Τέλος_επανάληψης Τέλος_προγράμματος Διαδικασία Διαδ(a,b) Μεταβλητές Ακέραιες: a, b Αρχή b ← b + a a ← a + 8 Γράψε a Τέλος_διαδικασίας - Τι είναι συνάρτηση (σε προγραμματιστικό περιβάλλον); (2003-Θ1Δ)
- Τι είναι διαδικασία (σε προγραμματιστικό περιβάλλον); (2003-Θ1Ε)
- Για ποιες από τις παρακάτω περιπτώσεις μπορεί να χρησιμοποιηθεί συνάρτηση:α. εισαγωγή ενός δεδομένου β. υπολογισμός του μέσου όρου πέντε ακεραίων γ. υπολογισμός του δύο μικρότερου από πέντε ακεραίους δ. έλεγχος αν δύο αριθμοί είναι ίσοι ε. ταξινόμηση πέντε αριθμών στ. έλεγχος αν ένας χαρακτήρας είναι φωνήεν ή σύμφωνο. (2007-Θ1Β2)
- Δίνεται το παρακάτω τμήμα προγράμματος και μια συνάρτηση:Διάβασε Κ L ← 2 A ← 1 Όσο A < 8 επανάλαβε Αν K MOD L = 0 τότε X ← Fun(A, L) αλλιώς X ← A + L Τέλος_αν Εμφάνισε L, A, X A ← A + 2 L ← L + 1 Τέλος_επανάληψης ... Συνάρτηση Fun(B, Δ) : Ακέραια Μεταβλητές Ακέραιες: B, Δ Αρχή Fun ← (B + Δ) DIV 2 Τέλος_συνάρτησης Να γράψετε στο τετράδιό σας τις τιμές των μεταβλητών L, A, X, όπως αυτές εκτυπώνονται σε κάθε επανάληψη, όταν για είσοδο δώσουμε την τιμή 10. (2005-Θ2)
- Δίνεται το παρακάτω πρόγραμμα:01 Πρόγραμμα Κλήση_Υποπρογραμμάτων
02 Μεταβλητές
03 Ακέραιες: α, β, γ, π
04 Αρχή
05 Διάβασε α
06 β ← 3
07 γ ← Φ(α, β)
08 α ← α + γ
09 Αν α > 20 τότε
10 γ ← Φ(β, α)
11 Αλλιώς
12 γ ← Φ(α, β)
13 Τέλος_αν
14 π ← 0
15 Όσο γ mod 10 = 0 επανάλαβε
16 π ← π + 1
17 γ ← γ div 10
18 Τέλος_επανάληψης
19 Γράψε γ, π
20 Τέλος_προγράμματος
21 Συνάρτηση Φ(μ, λ) : Ακέραια
22 Μεταβλητές
23 Ακέραιες: κ, λ, μ
24 Αρχή
25 κ ← λ + μ
26 Φ ← κ ^ μ
27 Τέλος_συνάρτησης
Για την παρακολούθηση της εκτέλεσης του προγράμματος με τιμή εισόδου α=2, δίνεται το παρακάτω υπόδειγμα πίνακα τιμών, μερικώς συμπληρωμένο ως εξής:
- Στη στήλη με τίτλο «αριθμός γραμμής» καταγράφεται ο αριθμός γραμμής της εντολής που εκτελείται.
- Στη στήλη με τίτλο «έξοδος» καταγράφεται η τιμή εξόδου, εφόσον η εντολή που εκτελείται είναι εντολή εξόδου.
- Στη στήλη με τίτλο «συνθήκη» καταγράφεται η λογική τιμή ΑΛΗΘΗΣ ή ΨΕΥΔΗΣ, εφόσον η εντολή που εκτελείται περιλαμβάνει συνθήκη.
- Οι υπόλοιπες στήλες του πίνακα αντιστοιχούν στις μεταβλητές του κύριου προγράμματος.
- Σε όποια σημεία καλείται υποπρόγραμμα και κατά τη διάρκεια της εκτέλεσής του, ο πίνακας επεκτείνεται με μια στήλη για κάθε μεταβλητή του υποπρογράμματος.
Να μεταφέρετε τον πίνακα στο τετράδιό σας και να προσθέσετε τις γραμμές που χρειάζονται, συνεχίζοντας την εκτέλεση του προγράμματος, ως εξής: Για κάθε εντολή που εκτελείται, να γράψετε τον αριθμό της γραμμής της εντολής σε νέα γραμμή του πίνακα και το αποτέλεσμα της εκτέλεσης της εντολής στην αντίστοιχη στήλη. (E2014-B)
- Δίνεται το παρακάτω πρόγραμμα το οποίο διαβάζει τις θερμοκρασίες διαφόρων ημερών του μήνα, έστω 30, και υπολογίζει τη μέση θερμοκρασία του μήνα.ΠΡΟΓΡΑΜΜΑ Θερμοκρασίες
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: Θερμοκρασία [30], Μέση, Σύνολο
ΑΚΕΡΑΙΕΣ: i
ΑΡΧΗ
Σύνολο ← 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30
ΓΡΑΨΕ "Δώσε τη θερμοκρασία"
ΔΙΑΒΑΣΕ Θερμοκρασία [i]
Σύνολο ← Σύνολο + Θερμοκρασία [i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Μέση ← Σύνολο / 30
ΓΡΑΨΕ "Μέση Θερμοκρασία:", Μέση
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
α) Να γράψετε αντίστοιχο πρόγραμμα (που να κάνει τους ίδιους υπολογισμούς) χωρίς τη χρήση πίνακα.
β) Έστω ότι οι τιμές των θερμοκρασιών έχουν δοθεί στη κλίμακα Κελσίου. Να τροποποιηθεί το πρόγραμμα που δόθηκε έτσι, ώστε να γίνεται χρήση συνάρτησης για να μετατρέπονται οι θερμοκρασίες από την κλίμακα Κελσίου σε κλίμακα Φαρενάιτ. Ο τύπος μετατροπής από Κελσίου σε Φαρενάιτ είναι:
(E2005-Θ2)
- Δίνεται παρακάτω ένα πρόγραμμα με ένα υποπρόγραμμα:ΠΡΟΓΡΑΜΜΑ Υπολογισμοί
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: α, β, γ
ΑΡΧΗ
ΔΙΑΒΑΣΕ α, β
γ ← α + Πράξη (α, β)
ΓΡΑΨΕ γ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ Πράξη (χ, ψ): ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: χ, ψ
ΑΡΧΗ
ΑΝ χ >= ψ ΤΟΤΕ
Πράξη ← χ - ψ
ΑΛΛΙΩΣ
Πράξη ← χ + ψ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
α. Να ξαναγράψετε το πρόγραμμα ώστε να επιτελεί την ίδια λειτουργία χρησιμοποιώντας διαδικασία αντί της συνάρτησης, την οποία διαδικασία και να κατασκευάσετε.
β. Να ξαναγράψετε το πρόγραμμα που δόθηκε αρχικά, ώστε να επιτελεί την ίδια λειτουργία χωρίς τη χρήση υποπρογράμματος.
γ. Να γράψετε στο τετράδιό σας τις τιμές που θα εμφανιστούν κατά την εκτέλεση του αρχικού προγράμματος που δόθηκε, αν οι τιμές εισόδου δοθούν οι αριθμοί:
- α = 10, β = 5
- α = 5, β = 5
- α = 3, β = 5 (2007-Θ2 )
- χχ