2) Για το ερώτημα:
«Όταν μια συνάρτηση αλλάζει το περιεχόμενο των παραμέτρων της, οι αλλαγές αυτές επιστρέφουν πίσω στις πραγματικές παραμέτρους;»
Στην ενότητα 10.5. Διαδικασίες και συναρτήσεις (Βιβλίο Μαθητή, σελ. 210) αναφέρεται: «Οι διαδικασίες μπορούν να εκτελέσουν οποιαδήποτε λειτουργία από αυτές που μπορεί να εκτελέσει ένα πρόγραμμα. Να εισάγουν δεδομένα, να εκτελέσουν υπολογισμούς, να μεταβάλλουν τις τιμές των μεταβλητών και να τυπώσουν αποτελέσματα. Με τη χρήση των παραμέτρων αυτές τις τιμές μπορούν να τις μεταφέρουν και στα άλλα υποπρογράμματα. Αντίθετα η λειτουργία των συναρτήσεων είναι πιο περιορισμένη. Οι συναρτήσεις υπολογίζουν μόνο μία τιμή, αριθμητική, χαρακτήρα ή λογική και μόνο αυτήν επιστρέφουν στο υποπρόγραμμα που την κάλεσε». Επίσης, στη σελ. 213 του Βιβλίου Μαθητή αναφέρεται: «Ο μηχανισμός που επιτυγχάνεται αυτό, είναι ο εξής: Το κύριο πρόγραμμα πριν την κλήση της συνάρτησης … όπου η τιμή του εμβαδού εκχωρείται στη μεταβλητή Εμ».
Προκύπτει, επομένως, ότι μια συνάρτηση που αλλάζει το περιεχόμενο των παραμέτρων της δεν επιστρέφει τις αλλαγές αυτές στις πραγματικές παραμέτρους.
Νομίζω ότι υπήρχε κάποιο μπέρδεμα όταν αρχίσατε την κουβέντα λοιπόν.
Η συνάρτηση απ' όσο γνωρίζω- και εάν σε αυτό το πλαίσιο που παραθέτω αναφερόσασταν- Μπορεί να αποθηκεύσει τις τιμές άφοβα στον εαυτό τους.
Μπορείτε να την χρησιμοποιήσετε μέσα σε έκφραση και να κάνετε όλες τις εργασίες σας με αυτή. Στο τέλος, όταν γίνει η επιστροφή στο αρχικό πρόγραμμα, το αρχικό πρόγραμμα θα πάρει την τελική τιμή που έχει υπολογίσει αυτή η συνάρτηση.
Το πρόβλημα είναι στις διαδικασίες, εκεί απατείται η προσοχή. Οι διαδικασίες δέχονται κάποιες παραμέτρους, και τις επιστρέφουν μετά όλες στο κύριο πρόγραμμα. Οπότε, εάν εσείς εκτελέσετε πράξεις μέσα στην διαδικασία με τις δοθείσες από το κύριο πρόγραμμα παραμέτρους, εάν δηλαδή, τους αλλάξετε τις τιμές, τότε στο κύριο πρόγραμμα θα επιστραφούν οι τιμές τους αλλαγμένες.
Αυτό, θα επηρεάσει το πρόγραμμά σας μόνο εάν εσείς, στη συνέχεια του προγράμματος, χρειαστείτε εκείνες τις τιμές (όπως ήταν πριν την αλλαγή) και τελικά τις χρησιμοποιήσετε αλλαγμένες.
Παράδειγμα:
ΠΡΟΓΡΑΜΜΑ ΤΑΔΕ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α,Β,Γ,Δ
ΑΡΧΗ
ΔΙΑΒΑΣΕ Α,Β
ΚΑΛΕΣΕ ΑΞΙΟΛΟΓΗΣΗ(Α,Β,Γ)
ΑΝ Γ>=Α ΤΟΤΕ
ΓΡΑΨΕ Α
ΑΛΛΙΩΣ
ΓΡΑΨΕ Β
Τ_ΑΝ
ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ ΑΞΙΟΛΟΓΗΣΗ(Α,Β,Γ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α,Β,Γ,Δ
ΑΡΧΗ
Α<--Α+2
Β<--Β-3
Δ<--Α*Β-2
Γ<--Δ^2-(Α+Β)
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Εδω λοιπόν υπάρχουν λάθη.
Εμείς αυτό που θέλουμε είναι να φτιάξουμε μια διαδικασία που θα δέχετε τις τιμές Α, Β και μια άδεια τιμή Γ από το πρόγραμμα και μετά απο κάποιες πράξεις (που γίνονται με σκοπό την αλλαγή του Γ) να πάρουμε το Γ πίσω στο πρόγραμμα και να εμφανίσουμε το Α εάν το Γ είναι μεγαλύτερο ή ίσο του Α ή να εμφανίσουμε το Β εάν το Γ είναι μικρότερο του Α.
Εδώ τα λογικά λάθη είναι στο ότι εμείς ΔΕΝ ΘΕΛΑΜΕ ΝΑ ΑΛΛΑΞΟΥΝ ΟΙ ΑΡΧΙΚΕΣ ΤΙΜΕΣ ΤΟΥ Α,Β.
Θέλαμε να κανουμε σύγκριση του Γ με τις αρχικές τιμές του Α,Β.
Στη διαδικασία λοιπόν αλλάξαμε τους αριθμούς Α και Β και όταν η διαδικασία τους επέστρεψε αλλαγμένους στο κύριο πρόγραμμα, η σύγκριση που έγινε ήταν λανθασμένη.
Αυτό που θα έπρεπε να είχαμε κάνει στη διαδικασία, λοιπόν, θα ήταν να δώσουμε πρώτα πρώτα τις τιμές των Α,Β σε 2 άλλες μεταβλητές(π.χ. Μ,Ν) και μετά να χρησιμοποιήσουμε τις μεταβλητές εκείνες για όλες τις πράξεις μας μέσα στην διαδικασία. Οπότε οι τιμές των Α,Β θα επέστρεφαν αμετάβλητες στο κύριο πρόγραμμα μετά την πάροδο της διαδικασίας..
Αυτό το πρόβλημα δεν υπάρχει στην συνάρτηση (και αυτό επιβεβαιώνει αυτή η παράθεση από την εγκύκλιο).
Και αυτός είναι ένας από τους βασικότερους λόγους που ενώ μπορούμε να χρησιμοποιήσουμε διαδικασία για οποιαδήποτε ενέργεια, όταν θέλουμε να υπολογίσουμε μια μόνο τιμή, προτιμάμε να χρησιμοποιήσουμε συνάρτηση.