Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Μήνυμα ξεκίνησε από: Ana geo στις 12 Ιουν 2021, 10:43:51 ΠΜ

Τίτλος: Απορία
Αποστολή από: Ana geo στις 12 Ιουν 2021, 10:43:51 ΠΜ
Καλημέρα 
Θα ήθελα να ρωτήσω εάν
Μια συνάρτηση  (υποπρόγραμμα) μπορεί να μην έχει καμία παράμετρο εισόδου;και
Εάν οι διαδικασίες ή οι συναρτήσεις μπορούν να έχουν ως παραμέτρους σταθερές; πχ
Κάλεσε διαδ(7,5,α)
Ευχαριστώ
Τίτλος: Απ: Απορία
Αποστολή από: Καλ. Ν. στις 12 Ιουν 2021, 04:45:18 ΜΜ
Μία συνάρτηση ΠΡΕΠΕΙ να έχει τουλάχιστον μία παράμετρο. Όπως στα μαθηματικά δεν ορίζεται συνάρτηση χώρις όρισμα, έτσι και στην πληροφορική. Η διαδικάσια μπορεί να μην έχει παραμέτρους.

Η διαδικασία ΔΕΝ δέχεται σταθερές ως παραμέτρους, γιατί επιστρέφει πίσω στις παραμέτρους τιμές (είτε είναι όμοιες ή ανόμοιες από την κλήση της διαδικασίας). Και αφού είναι προκαθορισμένες τιμές δεν μπορούν να μεταβληθούν όπως των μεταβλητών. Και για αυτό στους πίνακες τιμών, μετά το τέλος της εκτέλεσης της διαδικασίας οι τιμές των πραγματικών παραμέτρων ξαναγράφονται, είτε μεταβλήθηκαν, είτε όχι.
Είναι σαν να κάνουμε 5 <-- 10, άτοπο. Η παράμετρος μπορεί να δεχτεί σταθερές.
Τίτλος: Απ: Απορία
Αποστολή από: evry στις 12 Ιουν 2021, 05:53:29 ΜΜ
Παράθεση από: Καλ. Ν. στις 12 Ιουν 2021, 04:45:18 ΜΜ
Μία συνάρτηση ΠΡΕΠΕΙ να έχει τουλάχιστον μία παράμετρο. Όπως στα μαθηματικά δεν ορίζεται συνάρτηση χώρις όρισμα, έτσι και στην πληροφορική. Η διαδικάσια μπορεί να μην έχει παραμέτρους.
Ισχύει μόνο στο μάθημα ΑΕΠΠ και όχι στην πληροφορική γενικά. Σε πολλές γλώσσες προγραμματισμού μπορείς άνετα να ορίσεις συνάρτηση που δεν δέχεται καμία παράμετρο.

Παράθεση
Η διαδικασία ΔΕΝ δέχεται σταθερές ως παραμέτρους
Στο τετράδιο μαθητή σελ. 99 έχει κλήση διαδικασίας με σταθερές.
Τίτλος: Απ: Απορία
Αποστολή από: Καλ. Ν. στις 12 Ιουν 2021, 06:23:17 ΜΜ
Παράθεση από: evry στις 12 Ιουν 2021, 05:53:29 ΜΜ
Στο τετράδιο μαθητή σελ. 99 έχει κλήση διαδικασίας με σταθερές.

Αυτό όμως δεν αντίτθεται στη λογική των διαδικασιών ότι επιστρέφουν τιμές, πίσω στις πραγματικές παραμέτρους;
Τίτλος: Απ: Απορία
Αποστολή από: alkisg στις 12 Ιουν 2021, 06:50:48 ΜΜ
Αυτό δηλαδή τι κακό έχει;

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

ΠΡΟΓΡΑΜΜΑ ΈλεγχοςΤηςΓIΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΛΟΓΙΚΕΣ: λ
ΑΡΧΗ
  λ <- ΓIΑΣανΤηςPascal
  ΑΝ λ ΤΟΤΕ
    ΓΡΑΨΕ "Σε αυτόν τον διερμηνευτή της ΓΛΩΣΣΑΣ, στο τέλος μια ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10, το ι είναι 10"
  ΑΛΛΙΩΣ
    ΓΡΑΨΕ "Σε αυτόν τον διερμηνευτή της ΓΛΩΣΣΑΣ, στο τέλος μια ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10, το ι είναι 11"
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ ΓIΑΣανΤηςPascal: ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ι
ΑΡΧΗ
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓIΑΣανΤηςPascal <- ι = 1
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


Στον Διερμηνευτή εμφανίζει 11, στην Pascal εμφανίζει 10 (άρα π.χ. και στην παλιά Γλωσσομάθεια).
Η χρησιμότητα της συνάρτησης είναι να ελέγχει την υλοποίηση του διερμηνευτή. Αυτό συνηθίζεται σε πολλά προγράμματα, που μετά είτε σταματάνε την εκτέλεσή τους όταν βλέπουν ότι τρέχουν κάτω από ασύμβατο διερμηνευτή/compiler, είτε χρησιμοποιούν διαφορετικές εσωτερικές υλοποιήσεις κάποιων καίριων υποπρογραμμάτων.

Η Javascript είναι γεμάτη με τέτοια, λόγω ασυμβατότητας στις υλοποιήσεις των browsers.
Και αν στη ΓΛΩΣΣΑ φτιάχναμε μεγάλα προγράμματα που θα έπρεπε να τρέχουν κάτω από όλους τους διερμηνευτές, θα είχαμε αναγκαστικά κάποιες τέτοιες συναρτήσεις για να παρακάμπτουμε τις ασάφειες που θα είχαν υλοποιηθεί διαφορετικά σε κάθε διερμηνευτή.

Και το άλλο παράδειγμα που έχουμε συζητήσει εδώ στο Στέκι, για χρήσιμη συνάρτηση χωρίς παράμετρο, θα ήταν μια υλοποίηση της random, που θα είχε ως είσοδο "πρωτογενείς τιμές" από το ρολόι του συστήματος.
Τίτλος: Απ: Απορία
Αποστολή από: evry στις 12 Ιουν 2021, 07:10:08 ΜΜ
Έχει βάση το σκεπτικό σου, σίγουρα.

Παράθεση από: Καλ. Ν. στις 12 Ιουν 2021, 06:23:17 ΜΜ
Αυτό όμως δεν αντίτθεται στη λογική των διαδικασιών ότι επιστρέφουν τιμές, πίσω στις πραγματικές παραμέτρους;

Όμως εξαρτάται από την υλοποίηση της γλώσσας κάτι που δεν είμαστε σε θέση να γνωρίζουμε.
Για παράδειγμα η αντιγραφή μπορεί να γίνεται μόνο όταν περάσουμε μεταβλητή και όχι σταθερά.
Η ουσία είναι ότι αν κάποιος μαθητής επιχειρήσει να περάσει σταθερά σε διαδικασία στις εξετάσεις ο βαθμολογητής δεν μπορεί σε καμία περίπτωση να του κόψει, πρέπει να το πάρει σωστό.

Δεν ξέρουμε τι είχαν οι συγγραφείς του βιβλίου στο μυαλό τους για αυτή την περίπτωση αλλά είναι σίγουρο ότι το επέτρεπαν.
Αυτό αποδεικνύεται από το παράδειγμα στην σελίδα 99 του τετραδίου μαθητή που παρέθεσα παραπάνω, το οποίο αν και εκτός ύλης, δείχνει ότι οι συγγραφείς θεωρούν ότι μπορείς να περάσεις σταθερά.
Τίτλος: Απ: Απορία
Αποστολή από: Περγαντής Νικόλαος στις 14 Ιουν 2021, 09:29:20 ΠΜ
Ορισμός από το βιβλίο μαθητή, παράγραφος 10.4 "Μία παράμετρος είναι μία μεταβλητή που επιτρέπει το πέρασμα της
τιμής της από ένα τμήμα προγράμματος σε ένα άλλο." Εδώ λέει ότι παράμετρος είναι μία μεταβλητή κι όχι σταθερά. Έτσι προτείνω στους μαθητές τον κώδικα ως εξής:
χ <- 10
Κάλεσε Δ(χ)
Για να έχουμε το κεφάλι μας ήσυχο.
Τίτλος: Απ: Απορία
Αποστολή από: evry στις 14 Ιουν 2021, 04:53:42 ΜΜ
Άρα με το σκεπτικό αυτό ούτε στις συναρτήσεις επιτρέπονται σταθερές!

Παράθεση από: Περγαντής Νικόλαος στις 14 Ιουν 2021, 09:29:20 ΠΜ
Ορισμός από το βιβλίο μαθητή, παράγραφος 10.4 "Μία παράμετρος είναι μία μεταβλητή που επιτρέπει το πέρασμα της
τιμής της από ένα τμήμα προγράμματος σε ένα άλλο." Εδώ λέει ότι παράμετρος είναι μία μεταβλητή κι όχι σταθερά. Έτσι προτείνω στους μαθητές τον κώδικα ως εξής:
χ <- 10
Κάλεσε Δ(χ)
Για να έχουμε το κεφάλι μας ήσυχο.

Φυσικά δεν εννοεί την μεταβλητή/σταθερά που εισάγουμε αλλά την παράμετρο/αντίγραφο που δημιουργείται κατά την κλήση, για αυτό λέει
μεταβλητή που επιτρέπει το πέρασμα της τιμής της από ένα τμήμα προγράμματος σε ένα άλλο
Τίτλος: Απ: Απορία
Αποστολή από: parsenopoulou στις 14 Ιουν 2021, 05:49:27 ΜΜ
Συνάδελφοι καλησπέρα.
Με το ίδιο σκεπτικό , μπορούμε να έχουμε στη διαδικασία σαν πραγματική παράμετρο μια συμβολική σταθερά. Η απορία μου είναι πως η τυπική παράμετρος θα γυρίσει τιμή σε μια συμβολική σταθερά; Η σταθερά δεν πρέπει να μείνει αμετάβλητη μέχρι το τέλος εκτέλεσης του προγράμματος;
Τίτλος: Απ: Απορία
Αποστολή από: evry στις 14 Ιουν 2021, 06:45:28 ΜΜ
Τέτοιο ακριβώς παράδειγμα έχει στην σελίδα 99 του τετραδίου μαθητή όπου όλες οι παράμετροι είναι σταθερές!

Παράθεση από: parsenopoulou στις 14 Ιουν 2021, 05:49:27 ΜΜ
Συνάδελφοι καλησπέρα.
Με το ίδιο σκεπτικό , μπορούμε να έχουμε στη διαδικασία σαν πραγματική παράμετρο μια συμβολική σταθερά. Η απορία μου είναι πως η τυπική παράμετρος θα γυρίσει τιμή σε μια συμβολική σταθερά; Η σταθερά δεν πρέπει να μείνει αμετάβλητη μέχρι το τέλος εκτέλεσης του προγράμματος;
Τίτλος: Απ: Απορία
Αποστολή από: parsenopoulou στις 14 Ιουν 2021, 06:50:34 ΜΜ
To έχω δει το παράδειγμα. Πως να εξηγήσω στους μαθητές όμως ότι αλλάζει η τιμή μιας συμβολικής σταθεράς; Θεωρώ ότι έτσι κάνω μεγαλύτερο λάθος στην προσπάθεια να ακολουθήσω το βιβλίο,  σε κάτι που κατά την ταπεινή μου γνώμη είναι λάθος.
Τίτλος: Απ: Απορία
Αποστολή από: alkisg στις 14 Ιουν 2021, 07:26:02 ΜΜ
Γιατί είναι λάθος; Αφού και ο ίδιος ο συγγραφέας του κεφαλαίου όταν τον ρώτησα στο τηλέφωνο είπε "εννοείται".
Και επιπρόσθετα, στην ερώτηση "και άμα θέλουμε να περάσουμε μεταβλητή με τιμή;"
απάντησε "βάλτε παρένθεση π.χ. διαδ((χ)) όπως κάνει η Basic".

Οι τοπικές μεταβλητές δεν είναι πια σταθερές. Είναι μεταβλητές με αρχική τιμή αυτή της πραγματικής παραμέτρου. Δεν έχουν σύνδεση "by reference".
Τίτλος: Απ: Απορία
Αποστολή από: parsenopoulou στις 14 Ιουν 2021, 07:39:39 ΜΜ
Δεν αμφισβητώ τα λεγόμενά σας. Απλά εξέφρασα την απορία μου. Ελπίζω να μη χρειαστεί τέτοια συζήτηση μετά τις εξετάσεις πάντως. Ευχαριστώ για το χρόνο σας.
Τίτλος: Απ: Απορία
Αποστολή από: evry στις 14 Ιουν 2021, 08:53:59 ΜΜ
Δυστυχώς ολόκληρο αυτό το κεφάλαιο έχει πρόβλημα, γιατί διάλεξαν αυτόν τον σπάνιο τρόπο μεταβίβασης παραμέτρων που έχει νόημα μόνο σε συστήματα multithreading/multiprocessing για λόγους ασφαλείας.
Εγώ θα έλεγα στους μαθητές μου να το αποφύγουν να περάσουν σταθερά σε διαδικασία, αλλά αν το κάνουν να ξέρουν ότι δεν είναι λάθος.
Προσωπικά το θεωρώ απίθανο (αλλά όχι αδύνατο :D) να κόψει κάποιος/α για κάτι τέτοιο.
Τίτλος: Απ: Απορία
Αποστολή από: parsenopoulou στις 14 Ιουν 2021, 10:00:26 ΜΜ
Ο προβληματισμός μου αφορά κάποιο Σωστό  - Λάθος της μορφής:
<<Κατά την κλήση μιας διαδικασίας επιτρέπεται να υπάρχει σαν παράμετρος ένας αριθμός  >>.
Ελπίζω ότι δε θα δούμε κάτι τέτοιο.
Τίτλος: Απ: Απορία
Αποστολή από: evry στις 14 Ιουν 2021, 10:36:10 ΜΜ
Με το να καθόμαστε να σκεφτόμαστε ακραία ΣΛ σε ένα μάθημα με άπειρα γκρίζα σημεία μόνο καλό δεν κάνουμε.

Παράθεση από: parsenopoulou στις 14 Ιουν 2021, 10:00:26 ΜΜ
Ο προβληματισμός μου αφορά κάποιο Σωστό  - Λάθος της μορφής:
<<Κατά την κλήση μιας διαδικασίας επιτρέπεται να υπάρχει σαν παράμετρος ένας αριθμός  >>.
Ελπίζω ότι δε θα δούμε κάτι τέτοιο.

Ξέρετε πόσα ΣΛ μπορούμε να βγάλουμε που να μην έχουν απάντηση?
π.χ.
Επιτρέπεται σε πραγματική μεταβλητή να εκχωρήσουμε ακέραια τιμή;
Σωστό ή Λάθος;
Τίτλος: Απ: Απορία
Αποστολή από: George Eco στις 15 Ιουν 2021, 12:44:11 ΠΜ
Παράθεση από: parsenopoulou στις 14 Ιουν 2021, 10:00:26 ΜΜ
Ο προβληματισμός μου αφορά κάποιο Σωστό  - Λάθος της μορφής:
<<Κατά την κλήση μιας διαδικασίας επιτρέπεται να υπάρχει σαν παράμετρος ένας αριθμός  >>.
Ελπίζω ότι δε θα δούμε κάτι τέτοιο.

Νομίζω πως η παράμετρος μια χαρά θα μπορούσε να είναι αριθμός. Σε αυτή τη περίπτωση δε δέχεται αλλαγές, ενώ αν "κουμπώσουμε" μεταβλητή, οι αλλαγές μεταφέρονται κανονικά. Προσωπικά δε με βασανίζει αυτό κι υποθέτω πως αυτή η Σ/Λ θα είχε απάντηση ΣΩΣΤΟ, μόνο και μόνο για τον εξής λόγο:

! ...
! Κάπου σε ένα πρόγραμμα...
ΚΑΛΕΣΕ ΑΑΑ(10)
!... κλπ...

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΑΑΑ(Χ)
  ΜΕΤΑΒΛΗΤΕΣ
     ΑΚΕΡΑΙΕΣ: Χ, Ι
ΑΡΧΗ
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Χ
     ΓΡΑΨΕ 'ΟΡΙΣΤΕ!'
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Δε βρίσκω λόγο να μη γίνεται αυτό.





Παράθεση από: evry στις 14 Ιουν 2021, 10:36:10 ΜΜ
Με το να καθόμαστε να σκεφτόμαστε ακραία ΣΛ σε ένα μάθημα με άπειρα γκρίζα σημεία μόνο καλό δεν κάνουμε.

Ξέρετε πόσα ΣΛ μπορούμε να βγάλουμε που να μην έχουν απάντηση?
π.χ.
Επιτρέπεται σε πραγματική μεταβλητή να εκχωρήσουμε ακέραια τιμή;
Σωστό ή Λάθος;

ΑΥΤΟ δε θα πέσει... ελπίζω... γιατί θα πρέπει by the book να πούμε ΛΑΘΟΣ κλαίγοντας.
Βέβαια evry τι θα κάνουμε με Χ πραγματική;
Χ <- 12 * 1.0
για να αναθέσουμε τιμή;  :D