ΣΩΣΤΟ - ΛΑΘΟΣ στα υποπρογράμματα

Ξεκίνησε από kpapad13, 12 Μαΐου 2015, 04:31:33 ΜΜ

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

kpapad13

Στο κεφάλαιο 10 λέει το σχολικό βιβλίο "Κάθε διαδικασία ή συνάρτηση μπορεί να καλείται απο το κύριο πρόγραμμα ή από άλλη διαδικασία η συνάρτηση.". Αν όμως μια διαδικασία περιέχει εντολή εισόδου-εξόδου μπορεί να κληθεί από συνάρτηση;



petrosp13

Εφόσον η διαδικασία εισόδου/εξόδου γίνεται στην διαδικασία, γιατί να μην μπορεί να γίνει;
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

kpapad13


evry

Προφανώς και ΔΕΝ μπορεί να γίνει αυτό, σε καμία περίπτωση.
Αν δεχτούμε ότι μια διαδικασία η οποία διαβάζει από το πληκτρολόγιο μπορεί να κληθεί από μια συνάρτηση τότε
η συνάρτηση ουσιαστικά θα έχει είσοδο και από εκεί και φυσικά θα μπορεί να έχει έξοδο και εκεί.
Από τη στιγμή που μια συνάρτηση δέχεται είσοδο μόνο από τη λίστα παραμέτρων και επιστρέφει αποτέλεσμα μόνο με το όνομά της και με κανένα άλλον τρόπο τότε δεν μπορεί να καλεί διαδικασία η οποία εσωτερικά έχει είσοδο/έξοδο

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

petrosp13

H συνάρτηση δέχεται είσοδο από την λίστα παραμέτρων και απαγορεύεται να υπάρχει εντολή "ΔΙΑΒΑΣΕ" στις εντολές της
Γιατί αυτό να σημαίνει ότι απαγορεύεται να καλεί μια διαδικασία που υλοποιεί είσοδο που θα επιστρέφεται στην συνάρτηση;
Δεν παραβιάζει ουσιαστικά κανέναν από τους κανόνες υλοποίησης μιας συνάρτησης

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

ΥΓ. Νομίζω ότι μιλάμε για λεπτομέρεια σε ένα κακώς διατυπωμένο ΣΛ. Αλήθεια, ποιος ο λόγος που η συνάρτηση δεν μπορεί να περιέχει αυτές τις εντολές;;;;
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

vistrian

Παράθεση από: petrosp13 στις 12 Μαΐου 2015, 04:58:09 ΜΜ
H συνάρτηση δέχεται είσοδο από την λίστα παραμέτρων και απαγορεύεται να υπάρχει εντολή "ΔΙΑΒΑΣΕ" στις εντολές της
Γιατί αυτό να σημαίνει ότι απαγορεύεται να καλεί μια διαδικασία που υλοποιεί είσοδο που θα επιστρέφεται στην συνάρτηση;
Δεν παραβιάζει ουσιαστικά κανέναν από τους κανόνες υλοποίησης μιας συνάρτησης

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

ΥΓ. Νομίζω ότι μιλάμε για λεπτομέρεια σε ένα κακώς διατυπωμένο ΣΛ. Αλήθεια, ποιος ο λόγος που η συνάρτηση δεν μπορεί να περιέχει αυτές τις εντολές;;;;

ΠΡΟΓΡΑΜΜΑ ΘΕΜΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: χ
ΑΡΧΗ
  χ <- συναρ(χ) 
  ΓΡΑΨΕ χ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ συναρ(χ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: χ
ΑΡΧΗ
  ΚΑΛΕΣΕ διαδ(χ) 
  συναρ <- χ^2
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

ΔΙΑΔΙΚΑΣΙΑ διαδ(χ) 
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: χ
ΑΡΧΗ
  ΓΡΑΨΕ 'δώσε'
  ΔΙΑΒΑΣΕ χ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


ΑΠΟΤΕΛΕΣΜΑΤΑ:
δώσε
5
25

VR in Computing

evry

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

evry

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

petrosp13

Παράθεση από: evry στις 12 Μαΐου 2015, 05:14:53 ΜΜ
Νομίζω είναι ξεκάθαρο.
Αν μπορώ να καλέσω μια διαδικασία από συνάρτηση τότε μπορώ να βάλω ένα Γράψε μέσα στη διαδικασία, κάτι που σημαίνει ότι η συνάρτηση θα έχει και δεύτερη έξοδο κάτι που απαγορεύεται ρητά στο βιβλίο. αφού η συνάρτηση επιστρέφει μια τιμή μόνο με το όνομά της.

Μα δεν λέμε αυτό
Η διαδικασία που καλείται από μια συνάρτηση μπορεί να κάνει ότι θέλει
Να διαβάζει, να εμφανίζει, να επιστρέφει 10 πίνακες στην συνάρτηση
Η συνάρτηση θα αξιοποιεί αυτά για να παράγει ένα και μοναδικό αποτέλεσμα που θα επιστρέφει στο σημείο που κλήθηκε
Δεν νομίζω ότι η έκφραση "επιστρέφει" είναι συνώνυμη της έκφρασης "εμφανίζει"
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

vistrian

Παράθεση από: evry στις 12 Μαΐου 2015, 05:16:42 ΜΜ
@vistrian
Το γεγονός ότι ίσως αυτό που έγραψες να δουλεύει δε σημαίνει ότι βάσει του βιβλίου είναι σωστό. Το βιβλίο είναι ξεκάθαρο.
Η συνάρτηση επιστρέφει μόνο μια τιμή με το όνομά της.

δηλαδή δεν μπορώ να καλέσω μια συνάρτηση η οποία θα επιστρέφει το άθροισμα από έναν πίνακα στον οποίο θα διαβάζονται τιμές του πίνακα μέσω της διαδικασίας την οποία καλεί μια συνάρτηση;
VR in Computing

evry

Το εμφάνισε είναι επικοινωνία με τον έξω κόσμο, είναι ουσιαστικά μια έξοδος της συνάρτησης
Με βάση αυτά που λέει το βιβλίο η συνάρτηση δεν μπορεί να έχει άλλη επικοινωνία με τον έξω κόσμο
παρά μόνο τη λίστα παραμέτρων και την τιμή που επιστρέφει.
Είναι αυτό που λέγαμε παλιά στον συναρτησιακό προγραμματισμό μια Pure function χωρίς side effects

Παράθεση από: petrosp13 στις 12 Μαΐου 2015, 05:19:13 ΜΜ
Δεν νομίζω ότι η έκφραση "επιστρέφει" είναι συνώνυμη της έκφρασης "εμφανίζει"

Αν δεχτούμε ότι μπορούμε να καλέσουμε μέσα από μια συνάρτηση μια διαδικασία που έχει μέσα Διάβασε/Γράψε είναι σαν να δεχόμαστε ότι μπορούμε να χρησιμοποιούμε Διάβασε/Γράψε μέσα σε συνάρτηση

Όσον αφορά αυτό που λες με τον πίνακα, θα έπρεπε να τον περάσεις σαν παράμετρο και όχι με είσοδο από διαδικασία

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

gthal

Παράθεση από: evry στις 12 Μαΐου 2015, 05:47:57 ΜΜ
ΥΓ . Δεν συμφωνώ με το βιβλίο, πράγματι αυτή η απαγόρευση είναι μια στρέβλωση, όμως νομίζω ότι είναι ξεκάθαρο, και αφού ακολουθούμε το βιβλίο.....
Η γνώμη μου συνοψίζεται σε αυτό.
όμως θεωρώ ότι αυτή η στάση που έχει το βιβλίο, χωρίς να το έχουν καταλάβει, απαγοερεύει (έμμεσα) την κλήση διαδικασίας από συνάρτηση ενώ επιτρέπει το αντίστροφο. Αυτό περιπλέκει τα πράγματα σχετικά με τη στοίβα χρόνου εκτέλεσης (όπου μιλάει για υποπρόγραμμα που καλεί άλλο υποπρόγραμμα) και αυτοαναιρεί και την πρόταση "Κάθε διαδικασία ή συνάρτηση μπορεί να καλείται απο το κύριο πρόγραμμα ή από άλλη διαδικασία η συνάρτηση.".
Έτσι, κατά τη γνώμη μου, το βιβλίο αυτοαναιρείται σε πολλά σημεία, συνεπώς το ζήτημα καθίσταται μια γκρίζα περιοχή και σχετικά ερωτήματα θα πρέπει να αποφευχθούν στις εξετάσεις.
Φιλικά,
Γιώργος Θαλασσινός

gpapargi

Αν μας ενοχλεί το να έχουμε Διάβασε μέσα σε συνάρτηση θα πρέπει να μας ενοχλεί και το να καλούμε διαδικασία μέσα από συνάρτηση. Αυτό γιατί μπορώ μέσα στη συνάρτηση να έχω διαδικασία που διαβάζει και φέρνει την είσοδο μέσα στη συνάρτηση. Στη συνέχεια μπορεί η συνάρτηση να επιστρέφει την τιμή αυτή στο κυρίως πρόγραμμα μέσω της τιμής επιστροφής της. Έτσι τελικά κατασκευάζω έμμεσα αυτό που θέλω να αποφύγω: μια συνάρτηση που διαβάζει και επιστρέφει τιμή στο κύριο πρόγραμμα. Δηλαδή κρύβω τη Διάβασε μέσα σε μια διαδικασία. Αν με ενοχλεί για κάποιο λόγο το ένα, πρέπει να με ενοχλεί για τον ίδιο λόγο το άλλο. Αλλιώς έχω ασυνέπεια. 

Αθανάσιος Πέρδος

Επειδή μαθητές μου διαβάζουν το στέκι (τους προτρέπω να το κάνουν) σήμερα βρέθηκα εκτεθειμένος λόγω αυτού του νήματος.
Να βάλουμε λοιπόν τα πράγματα στη θέση τους.

"Κάθε διαδικασία ή συνάρτηση μπορεί να καλείται από το κύριο πρόγραμμα ή άλλη διαδικασία. Σε κάθε περίπτωση μετά το τέλος της εκτέλεσης της διαδικασίας γίνεται επιστροφή ακριβώς μετά το σημείο απ' όπου κλήθηκε." Έκδοση 2008, σελ 221

"Η τεχνική αυτή εφαρμόζεται και γενικότερα, δηλαδή οποτεδήποτε μία διαδικασία ή συνάρτηση καλεί μία διαδικασία ή συνάρτηση. Έκδοση 2008 σελ 225"

Εδώ υπάρχει όντως γκρίζα ζώνη και μπορούν να τεθούν προσωπικές ερμηνείες.


"Κάθε διαδικασία ή συνάρτηση μπορεί να καλείται από το κύριο πρόγραμμα ή από άλλη διαδικασία ή συνάρτηση Σε κάθε περίπτωση μετά το τέλος της εκτέλεσης της διαδικασίας ή της συνάρτησης γίνεται επιστροφή ακριβώς μετά το σημείο απ' όπου κλήθηκε." Έκδοση 2014, σελ 179

"Η τεχνική αυτή εφαρμόζεται και γενικότερα, δηλαδή οποτεδήποτε μία διαδικασία ή συνάρτηση καλεί μία διαδικασία ή συνάρτηση." Έκδοση 2014 σελ 182

Εδώ δεν υπάρχει γκρίζα ζώνη. Τα ελληνικά είναι σαφέστατα.

Αθανάσιος Πέρδος

#14
Παράθεση από: petrosp13 στις 12 Μαΐου 2015, 04:58:09 ΜΜ
H συνάρτηση δέχεται είσοδο από την λίστα παραμέτρων και απαγορεύεται να υπάρχει εντολή "ΔΙΑΒΑΣΕ" στις εντολές της

Πέτρο που ακριβώς το γράφει αυτό στο διδακτικό πακέτο; Μήπως έχει έρθει κάποια οδηγία από το Υπουργείο και δεν την έχω δει;
Στο διδακτικό πακέτο εγώ βλέπω το εξής: Στο τετράδιο μαθητή στο κεφάλαιο 10 στην άσκηση ΔΤ1 τίθεται η ερώτηση "Τι είδους υποπρόγραμμα, διαδικασία ή συνάρτηση, πρέπει να χρησιμοποιήσεις για τα παρακάτω" και στο Β αναφέρει "Εισαγωγή ενός δεδομένου".

Το βιβλίο του καθηγητή που κατέβασα από τη διεύθυνση http://ebooks.edu.gr/courses/DSGL-C101/document/4c65902ff3dk/4e52d5a0znmn/4e6f351bfxtw.pdf έχει ως απάντηση: Συνάρτηση.
Το συγκεκριμένο βιβλίο δίνεται με το τροποποιημένο νέο διδακτικό πακέτο.

Το βιβλίο του καθηγητή που κατέβασα από τη διεύθυνση http://www.pi-schools.gr/content/index.php?lesson_id=1&ep=67&c_id=273 έχει ως απάντηση: Διαδικασία.
Όμως λίγο παρακάτω υπάρχει αρχείο word με διορθώσεις για το βιβλίο καθηγητή (το επισυνάπτω), που λέει να διορθωθεί η λέξη Διαδικασία με τη λέξη Συνάρτηση.

Μπορούμε να απαγορέψουμε το Διάβασε με βεβαιότητα; Μάλλον για γκρίζα ζώνη το βλέπω. Γκρίζα ζώνη γιατί δεν ενημερωνόμαστε εμείς για τις αλλαγές ή γιατί δεν είναι ξεκάθαρο το διδακτικό;