Απορία

Ξεκίνησε από Ana geo, 12 Ιουν 2021, 10:43:51 ΠΜ

« προηγούμενο - επόμενο »

Ana geo

Καλημέρα 
Θα ήθελα να ρωτήσω εάν
Μια συνάρτηση  (υποπρόγραμμα) μπορεί να μην έχει καμία παράμετρο εισόδου;και
Εάν οι διαδικασίες ή οι συναρτήσεις μπορούν να έχουν ως παραμέτρους σταθερές; πχ
Κάλεσε διαδ(7,5,α)
Ευχαριστώ

Καλ. Ν.

Μία συνάρτηση ΠΡΕΠΕΙ να έχει τουλάχιστον μία παράμετρο. Όπως στα μαθηματικά δεν ορίζεται συνάρτηση χώρις όρισμα, έτσι και στην πληροφορική. Η διαδικάσια μπορεί να μην έχει παραμέτρους.

Η διαδικασία ΔΕΝ δέχεται σταθερές ως παραμέτρους, γιατί επιστρέφει πίσω στις παραμέτρους τιμές (είτε είναι όμοιες ή ανόμοιες από την κλήση της διαδικασίας). Και αφού είναι προκαθορισμένες τιμές δεν μπορούν να μεταβληθούν όπως των μεταβλητών. Και για αυτό στους πίνακες τιμών, μετά το τέλος της εκτέλεσης της διαδικασίας οι τιμές των πραγματικών παραμέτρων ξαναγράφονται, είτε μεταβλήθηκαν, είτε όχι.
Είναι σαν να κάνουμε 5 <-- 10, άτοπο. Η παράμετρος μπορεί να δεχτεί σταθερές.

evry

Παράθεση από: Καλ. Ν. στις 12 Ιουν 2021, 04:45:18 ΜΜ
Μία συνάρτηση ΠΡΕΠΕΙ να έχει τουλάχιστον μία παράμετρο. Όπως στα μαθηματικά δεν ορίζεται συνάρτηση χώρις όρισμα, έτσι και στην πληροφορική. Η διαδικάσια μπορεί να μην έχει παραμέτρους.
Ισχύει μόνο στο μάθημα ΑΕΠΠ και όχι στην πληροφορική γενικά. Σε πολλές γλώσσες προγραμματισμού μπορείς άνετα να ορίσεις συνάρτηση που δεν δέχεται καμία παράμετρο.

Παράθεση
Η διαδικασία ΔΕΝ δέχεται σταθερές ως παραμέτρους
Στο τετράδιο μαθητή σελ. 99 έχει κλήση διαδικασίας με σταθερές.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Καλ. Ν.

Παράθεση από: evry στις 12 Ιουν 2021, 05:53:29 ΜΜ
Στο τετράδιο μαθητή σελ. 99 έχει κλήση διαδικασίας με σταθερές.

Αυτό όμως δεν αντίτθεται στη λογική των διαδικασιών ότι επιστρέφουν τιμές, πίσω στις πραγματικές παραμέτρους;

alkisg

Αυτό δηλαδή τι κακό έχει;

Κώδικας: ΓΛΩΣΣΑ
ΠΡΟΓΡΑΜΜΑ ΈλεγχοςΤηςΓ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, 06:23:17 ΜΜ
Αυτό όμως δεν αντίτθεται στη λογική των διαδικασιών ότι επιστρέφουν τιμές, πίσω στις πραγματικές παραμέτρους;

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

Δεν ξέρουμε τι είχαν οι συγγραφείς του βιβλίου στο μυαλό τους για αυτή την περίπτωση αλλά είναι σίγουρο ότι το επέτρεπαν.
Αυτό αποδεικνύεται από το παράδειγμα στην σελίδα 99 του τετραδίου μαθητή που παρέθεσα παραπάνω, το οποίο αν και εκτός ύλης, δείχνει ότι οι συγγραφείς θεωρούν ότι μπορείς να περάσεις σταθερά.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Περγαντής Νικόλαος

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

evry

Άρα με το σκεπτικό αυτό ούτε στις συναρτήσεις επιτρέπονται σταθερές!

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

Φυσικά δεν εννοεί την μεταβλητή/σταθερά που εισάγουμε αλλά την παράμετρο/αντίγραφο που δημιουργείται κατά την κλήση, για αυτό λέει
μεταβλητή που επιτρέπει το πέρασμα της τιμής της από ένα τμήμα προγράμματος σε ένα άλλο
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

parsenopoulou

Συνάδελφοι καλησπέρα.
Με το ίδιο σκεπτικό , μπορούμε να έχουμε στη διαδικασία σαν πραγματική παράμετρο μια συμβολική σταθερά. Η απορία μου είναι πως η τυπική παράμετρος θα γυρίσει τιμή σε μια συμβολική σταθερά; Η σταθερά δεν πρέπει να μείνει αμετάβλητη μέχρι το τέλος εκτέλεσης του προγράμματος;

evry

Τέτοιο ακριβώς παράδειγμα έχει στην σελίδα 99 του τετραδίου μαθητή όπου όλες οι παράμετροι είναι σταθερές!

Παράθεση από: parsenopoulou στις 14 Ιουν 2021, 05:49:27 ΜΜ
Συνάδελφοι καλησπέρα.
Με το ίδιο σκεπτικό , μπορούμε να έχουμε στη διαδικασία σαν πραγματική παράμετρο μια συμβολική σταθερά. Η απορία μου είναι πως η τυπική παράμετρος θα γυρίσει τιμή σε μια συμβολική σταθερά; Η σταθερά δεν πρέπει να μείνει αμετάβλητη μέχρι το τέλος εκτέλεσης του προγράμματος;
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

parsenopoulou

To έχω δει το παράδειγμα. Πως να εξηγήσω στους μαθητές όμως ότι αλλάζει η τιμή μιας συμβολικής σταθεράς; Θεωρώ ότι έτσι κάνω μεγαλύτερο λάθος στην προσπάθεια να ακολουθήσω το βιβλίο,  σε κάτι που κατά την ταπεινή μου γνώμη είναι λάθος.

alkisg

Γιατί είναι λάθος; Αφού και ο ίδιος ο συγγραφέας του κεφαλαίου όταν τον ρώτησα στο τηλέφωνο είπε "εννοείται".
Και επιπρόσθετα, στην ερώτηση "και άμα θέλουμε να περάσουμε μεταβλητή με τιμή;"
απάντησε "βάλτε παρένθεση π.χ. διαδ((χ)) όπως κάνει η Basic".

Οι τοπικές μεταβλητές δεν είναι πια σταθερές. Είναι μεταβλητές με αρχική τιμή αυτή της πραγματικής παραμέτρου. Δεν έχουν σύνδεση "by reference".

parsenopoulou

Δεν αμφισβητώ τα λεγόμενά σας. Απλά εξέφρασα την απορία μου. Ελπίζω να μη χρειαστεί τέτοια συζήτηση μετά τις εξετάσεις πάντως. Ευχαριστώ για το χρόνο σας.

evry

Δυστυχώς ολόκληρο αυτό το κεφάλαιο έχει πρόβλημα, γιατί διάλεξαν αυτόν τον σπάνιο τρόπο μεταβίβασης παραμέτρων που έχει νόημα μόνο σε συστήματα multithreading/multiprocessing για λόγους ασφαλείας.
Εγώ θα έλεγα στους μαθητές μου να το αποφύγουν να περάσουν σταθερά σε διαδικασία, αλλά αν το κάνουν να ξέρουν ότι δεν είναι λάθος.
Προσωπικά το θεωρώ απίθανο (αλλά όχι αδύνατο :D) να κόψει κάποιος/α για κάτι τέτοιο.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

parsenopoulou

Ο προβληματισμός μου αφορά κάποιο Σωστό  - Λάθος της μορφής:
<<Κατά την κλήση μιας διαδικασίας επιτρέπεται να υπάρχει σαν παράμετρος ένας αριθμός  >>.
Ελπίζω ότι δε θα δούμε κάτι τέτοιο.