Στη ΓΛΩΣΣΑ η συναρτηση επιστρέφει ΜΟΝΟ τη μεταβλητη του ονοματος της και δεν επιστρέφει νεες τιμες (αν υπάρχουν αλλαγες) στις παραμετρους κλησης.
Η διαδικασια επιστρέφει νέες τιμες σε ολες τις παραμετρους κλησης. Οπότε ο 1ος τρόπος ειναι λάθος
Ζητείται η μεταροπή της ακόλουθης συνάρτησης σε διαδικασία και να γραφεί ξανά το κύριο πρόγραμμα.
...
Διάβασε α, β
γ <- Βασίλης (α, β)
Γράψε α, β, γ
...
Συνάρτηση Βασίλης (χ, υ): Ακέραια
...
χ <- χ + 4
υ <- υ - 2
Βασίλης <- (χ + υ)^2
Τέλος_συνάρτησης
Δίνονται οι παρακάτω λύσεις:
1η λύση
...
Διάβασε α, β
κ <- α
λ <- β
Κάλεσε Βασίλης (κ, λ, γ)
Γράψε α, β, γ
...
Διαδικασία Βασίλης (χ, υ, ζ)
...
χ <- χ + 4
υ <- υ - 2
ζ <- (χ + υ)^2
Τέλος_διαδικασίας
2η λύση
...
Διάβασε α, β
Κάλεσε Βασίλης (α, β, γ)
Γράψε α, β, γ
...
Διαδικασία Βασίλης (χ, υ, ζ)
...
κ <- χ
λ <- υ
κ <- κ + 4
λ <- λ - 2
ζ <- (κ + λ)^2
Τέλος_διαδικασίας
Θα θεωρηθούν αμφότερες σωστές;
Όταν μετατρέπω από ΣΥΝΑΡΤΗΣΗ σε ΔΙΑΔΙΚΑΣΙΑ, προσέχω η ΔΙΑΔΙΚΑΣΙΑ να είναι ισοδύναμη της ΣΥΝΑΡΤΗΣΕΩΣ.
Προτού εξηγήσω, να πω κάτι πολύ σημαντικό. Στη ΓΛΩΣΣΑ, η συνάρτηση, η ίδια, επιστρέφει μία τιμή. Γι' αυτό όταν την ορίζεις, θέτεις και τύπο. Για να ορίσεις ποια τιμή θα επιστρέψει η συνάρτηση, χρησιμοποιείς την ονομασία της.
Δεν είναι μεταβλητή αυτό. Απαγορεύεται μεταβλητή με το ίδιο όνομα συνάρτησης και δεν ορίζεις μεταβλητή με τέτοιο όνομα στο Τμήμα Δηλώσεών της ή στο Τμήμα Δηλώσεων του κεντρικού προγράμματος.
Μπορεί να έχει τρεις τελείτσες στο παράδειγμά αντί Τμήμα Δηλώσεων, θέλει όμως πολλή προσοχή.
Η συνάρτηση, το μόνο πράγμα που μπορεί να κάνει στη ΓΛΩΣΣΑ στα πλαίσια του μαθήματος, είναι να επιστρέψει τιμή.
Δεν επηρεάζει τις παραμέτρους που της περνάς. Αντιθέτως μία διαδικασία, έχει τη δυνατότητα να αλλάξει πολλαπλές τιμές σε πολλές μεταβλητές.
Η 2η λύση λοιπόν είναι λάθος!Κάλεσε Βασίλης (α, β, γ) θα επηρεάσει κατ ευθείαν τις τιμές των α,β και γ, κάτι που η συνάρτηση δε μπορεί να κάνει. Δεν ισχύουν οι από πάνω δύο γραμμές, είδα λάθος. Και οι δύο λύσεις είναι σωστές, ευχαριστώ τον @vasilis723 που το αμφισβήτησε!
Η συνάρτηση θα επιστρέψει τιμή στη γ μεταβλητή μόνο. Δεν αγγίζει τα α και β.
Για να αποφύγει αυτό, στη 1η λύση έβαλε επιπλέον μεταβλητές.
Η 1η λύση είναι σωστότερη κι αν μη τι άλλο αποδεκτή,
ενώ η 2η είναι απαράδεκτη. Στο τέλος της δεύτερης έχουν αλλάξει τιμή τα α,β,γ. Αυτό, πώς θα το κάνεις με συνάρτιση ακριβώς; Αυτό έκανε η αρχική συνάρτηση; Η 2η λύση λοιπόν, αφού ΔΕΝ έχει σφάλμα, είναι καλύτερη κιόλας, επειδή ενθυλακώνει την όλη διαδικασία με τις μεταβλητές μέσα της και δε τη διαχέει στο κεντρικό πρόγραμμα!