Αποστολέας Θέμα: Απορία  (Αναγνώστηκε 807 φορές)

Ana geo

  • Νέος
  • *
  • Μηνύματα: 2
Απορία
« στις: 12 Ιουν 2021, 10:43:51 πμ »
Καλημέρα 
Θα ήθελα να ρωτήσω εάν
 Μια συνάρτηση  (υποπρόγραμμα) μπορεί να μην έχει καμία παράμετρο εισόδου;και
Εάν οι διαδικασίες ή οι συναρτήσεις μπορούν να έχουν ως παραμέτρους σταθερές; πχ
Κάλεσε διαδ(7,5,α)
Ευχαριστώ

Καλ. Ν.

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

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

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3606
  • to Iterate is human to Recurse divine
Απ: Απορία
« Απάντηση #2 στις: 12 Ιουν 2021, 05:53:29 μμ »
Μία συνάρτηση ΠΡΕΠΕΙ να έχει τουλάχιστον μία παράμετρο. Όπως στα μαθηματικά δεν ορίζεται συνάρτηση χώρις όρισμα, έτσι και στην πληροφορική. Η διαδικάσια μπορεί να μην έχει παραμέτρους.
Ισχύει μόνο στο μάθημα ΑΕΠΠ και όχι στην πληροφορική γενικά. Σε πολλές γλώσσες προγραμματισμού μπορείς άνετα να ορίσεις συνάρτηση που δεν δέχεται καμία παράμετρο.

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

Καλ. Ν.

  • Νέος
  • *
  • Μηνύματα: 2
Απ: Απορία
« Απάντηση #3 στις: 12 Ιουν 2021, 06:23:17 μμ »
Στο τετράδιο μαθητή σελ. 99 έχει κλήση διαδικασίας με σταθερές.

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

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5963
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Απορία
« Απάντηση #4 στις: 12 Ιουν 2021, 06:50:48 μμ »
Αυτό δηλαδή τι κακό έχει;

Κώδικας: ΓΛΩΣΣΑ
  1. ΠΡΟΓΡΑΜΜΑ ΈλεγχοςΤηςΓIΑ
  2. ΜΕΤΑΒΛΗΤΕΣ
  3.   ΛΟΓΙΚΕΣ: λ
  4. ΑΡΧΗ
  5.   λ <- ΓIΑΣανΤηςPascal
  6.   ΑΝ λ ΤΟΤΕ
  7.     ΓΡΑΨΕ "Σε αυτόν τον διερμηνευτή της ΓΛΩΣΣΑΣ, στο τέλος μια ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10, το ι είναι 10"
  8.   ΑΛΛΙΩΣ
  9.     ΓΡΑΨΕ "Σε αυτόν τον διερμηνευτή της ΓΛΩΣΣΑΣ, στο τέλος μια ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10, το ι είναι 11"
  10.   ΤΕΛΟΣ_ΑΝ
  11. ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
  12.  
  13. ΣΥΝΑΡΤΗΣΗ ΓIΑΣανΤηςPascal: ΛΟΓΙΚΗ
  14. ΜΕΤΑΒΛΗΤΕΣ
  15.   ΑΚΕΡΑΙΕΣ: ι
  16. ΑΡΧΗ
  17.   ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 1
  18.   ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  19.   ΓIΑΣανΤηςPascal <- ι = 1
  20. ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

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

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

Και το άλλο παράδειγμα που έχουμε συζητήσει εδώ στο Στέκι, για χρήσιμη συνάρτηση χωρίς παράμετρο, θα ήταν μια υλοποίηση της random, που θα είχε ως είσοδο "πρωτογενείς τιμές" από το ρολόι του συστήματος.

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3606
  • to Iterate is human to Recurse divine
Απ: Απορία
« Απάντηση #5 στις: 12 Ιουν 2021, 07:10:08 μμ »
Έχει βάση το σκεπτικό σου, σίγουρα.

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

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

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

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

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

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3606
  • to Iterate is human to Recurse divine
Απ: Απορία
« Απάντηση #7 στις: 14 Ιουν 2021, 04:53:42 μμ »
Άρα με το σκεπτικό αυτό ούτε στις συναρτήσεις επιτρέπονται σταθερές!

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

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

parsenopoulou

  • Οπαδός
  • **
  • Μηνύματα: 19
Απ: Απορία
« Απάντηση #8 στις: 14 Ιουν 2021, 05:49:27 μμ »
Συνάδελφοι καλησπέρα.
Με το ίδιο σκεπτικό , μπορούμε να έχουμε στη διαδικασία σαν πραγματική παράμετρο μια συμβολική σταθερά. Η απορία μου είναι πως η τυπική παράμετρος θα γυρίσει τιμή σε μια συμβολική σταθερά; Η σταθερά δεν πρέπει να μείνει αμετάβλητη μέχρι το τέλος εκτέλεσης του προγράμματος;

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3606
  • to Iterate is human to Recurse divine
Απ: Απορία
« Απάντηση #9 στις: 14 Ιουν 2021, 06:45:28 μμ »
Τέτοιο ακριβώς παράδειγμα έχει στην σελίδα 99 του τετραδίου μαθητή όπου όλες οι παράμετροι είναι σταθερές!

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

parsenopoulou

  • Οπαδός
  • **
  • Μηνύματα: 19
Απ: Απορία
« Απάντηση #10 στις: 14 Ιουν 2021, 06:50:34 μμ »
To έχω δει το παράδειγμα. Πως να εξηγήσω στους μαθητές όμως ότι αλλάζει η τιμή μιας συμβολικής σταθεράς; Θεωρώ ότι έτσι κάνω μεγαλύτερο λάθος στην προσπάθεια να ακολουθήσω το βιβλίο,  σε κάτι που κατά την ταπεινή μου γνώμη είναι λάθος.

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5963
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Απορία
« Απάντηση #11 στις: 14 Ιουν 2021, 07:26:02 μμ »
Γιατί είναι λάθος; Αφού και ο ίδιος ο συγγραφέας του κεφαλαίου όταν τον ρώτησα στο τηλέφωνο είπε "εννοείται".
Και επιπρόσθετα, στην ερώτηση "και άμα θέλουμε να περάσουμε μεταβλητή με τιμή;"
απάντησε "βάλτε παρένθεση π.χ. διαδ((χ)) όπως κάνει η Basic".

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

parsenopoulou

  • Οπαδός
  • **
  • Μηνύματα: 19
Απ: Απορία
« Απάντηση #12 στις: 14 Ιουν 2021, 07:39:39 μμ »
Δεν αμφισβητώ τα λεγόμενά σας. Απλά εξέφρασα την απορία μου. Ελπίζω να μη χρειαστεί τέτοια συζήτηση μετά τις εξετάσεις πάντως. Ευχαριστώ για το χρόνο σας.

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3606
  • to Iterate is human to Recurse divine
Απ: Απορία
« Απάντηση #13 στις: 14 Ιουν 2021, 08:53:59 μμ »
Δυστυχώς ολόκληρο αυτό το κεφάλαιο έχει πρόβλημα, γιατί διάλεξαν αυτόν τον σπάνιο τρόπο μεταβίβασης παραμέτρων που έχει νόημα μόνο σε συστήματα multithreading/multiprocessing για λόγους ασφαλείας.
Εγώ θα έλεγα στους μαθητές μου να το αποφύγουν να περάσουν σταθερά σε διαδικασία, αλλά αν το κάνουν να ξέρουν ότι δεν είναι λάθος.
Προσωπικά το θεωρώ απίθανο (αλλά όχι αδύνατο :D) να κόψει κάποιος/α για κάτι τέτοιο.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

parsenopoulou

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