Μπορεί κανείς να περάσει στη συνάρτηση μία σταθερή τιμή; (χωρίς να την καταχωρήσει προηγούμενα σε μεταβλητή).
Έστω ότι σε ένα πίνακα βρίσκονται τα 100 ονόματα των μαθητών και το πρόγραμμα πρέπει να εμφανίζει το πλήθος των μαθητών που γιορτάζουν ... την πρωτοχρονιά, ο μαθητής θα μπορούσε να σχεδιάσει συνάρτηση που να υλοποιεί το μηχανισμό του μετρητή:
ΣΥΝΑΡΤΗΣΗ Πλήθος(Π, Ζητούμενη_τιμή): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: Π[100], Ζητούμενη_Τιμή
ΑΚΕΡΑΙΕΣ: Μετρητής
ΑΡΧΗ
Μετρητής <-- 0
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 100
ΑΝ Π[ι]=Ζητούμενη_Τιμή ΤΟΤΕ
Μετρητής <-- Μετρητής + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Πλήθος <-- Μετρητής
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Μπορεί κανέις να περάσει στη συνάρτηση μία σταθερή τιμή; (χωρίς να την καταχωρήσει προηγούμενα σε μεταβλητή). Δηλαδή, μπορεί να πεί:
Πλήθος_ατόμων <-- Πλήθος[Όνομα, 'Βασίλης'] + Πλήθος[Όνομα, 'Βασιλική']
ή θα πρέπει υποχρεωτικά να χρησιμοποιήσει μεταβλητές και να κάνει:
Πλήθος_Ατόμων <-- 0
Ζητούμενος <-- 'Βασίλης'
Πλήθος_Ατόμων <-- Πλήθος_Ατόμων + Πλήθος[Όνομα, Ζητούμενος]
Ζητούμενος <-- 'Βασιλική'
Πλήθος_Ατόμων <-- Πλήθος_Ατόμων + Πλήθος[Όνομα, Ζητούμενος]
Αν και, νομίζω, ότι είναι προφανές πως θα πρέπει να επιτρέπεται ΚΑΙ η πρώτη (απλή) περίπτωση με το πέρασμα σταθερών τιμών (γενικά ο μηχανισμός Call by Value το επιτρέπει) το βιβλίο μιλάει ΜΟΝΟ για αντιγραφή της τιμής της μεταβλητής του προγράμματος στη μεταβλητή της συνάρτησης άρα αποκλείει (?) το πέρασμα σταθερής τιμής (?)
Ποιά η γνώμη σας;
Και το ίδιο ερώτημα αφορά και τις διαδικασίες!!! Και κεί τα πράγματα ίσως να είναι πιό ... επικίνδυνα αφού ο μηχανισμός είναι ο copy-restore (copy-in, copy-out ή value-result)
Το βιβλίο αναφέρει ότι "... λίστα μεταβλητών των οποίων οι τιμές μεταβιβάζονται προς τη διαδικασία κατά την κλήση ή/και επιστρέφονται στο κύριο πρόγραμμα μετά το τέλος της διαδικασίας ...". Επομένως, τυπικά, δε θα πρέπει να χρησιμοποιούνται σταθερές τιμές στη λίστα παραμέτρων διαδικασίας αφού ..., κατά την επιστροφή δεν μπορεί να ... αντιγράψει στη σταθερή !!!
Αν, για παράδειγμα, υπήρχε ΚΑΙ πίνακας με χαρτζηλίκι και το πρόβλημα ζητούσε να προστεθούν 10 εωρώ σε όλους τους μαθητές, η διαδικασία θα ήταν:
ΔΙΑΔΙΚΑΣΙΑ Πρόσθεση_Τιμής(Π, Τιμή)
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: Π[100], Τιμή
ΑΚΕΡΑΙΕΣ: ι
ΑΡΧΗ
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 100
Π[ι] <-- Π[ι] + Τιμή
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Όμως η κλήση της θα μπορούσε {?) να γίνει:
ΚΑΛΕΣΕ Πρόσθεση_Τιμής(Χαρτζηλίκι, 10)
ή θα ΕΠΡΕΠΕ (?) να γίνει με τη χρήση μεταβλητής;
Αύξηση <-- 10
ΚΑΛΕΣΕ Πρόσθεση_Τιμής(Χαρτζηλίκι, Αύξηση)
ώστε να υπάρχει η μεταβλητή για να ... επιστραφεί η τιμή της μεταβλητής 'Τιμή' της διαδικασίας μετά το τέλος εκτέλεσης της διαδικασίας; (όχι ότι αλλάζει μέσα στη συνάρτηση αλλά για ... το τυπικό της υπόθεσης)
Όλα αυτά τα ερωτήματα φαίνονται πολύ ... τυπικά αλλά ... προβληματίζουν.
Ποιά η γνώμη σας;