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

Γενικό Λύκειο => Γ΄ Λυκείου => Μήνυμα ξεκίνησε από: sstergou στις 11 Φεβ 2010, 07:37:53 ΜΜ

Ψηφοφορία
Ερώτηση: Σε μία συνάρτηση
Επιλογή 1: Δεν επιτρέπεται η χρησιμοποίηση των εντολών, ΓΡΑΨΕ, ΔΙΑΒΑΣΕ ούτε και η κλήση διαδικασίας.
Επιλογή 2: Επιτρέπονται όλα τα παραπάνω. Η χρήση εντολών εισόδου-εξόδου όμως δεν είναι ενδεδειγμένη.
Τίτλος: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακέτο
Αποστολή από: sstergou στις 11 Φεβ 2010, 07:37:53 ΜΜ
Στο διδακτικό πακέτο δεν υπάρχει σαφής αναφορά για το αν οι εντολές ΓΡΑΨΕ, ΔΙΑΒΑΣΕ μπορούν να μπουν στο εσωτερικό μιας συνάρτησης. Αν αυτές απλά απαγορευτούν όμως τότε κάποιος μπορεί εύκολα να παραβιάσει τον περιορισμό και να τις χρησιμοποιήσει μέσα σε μια διαδικασία η οποία καλείται από την συνάρτηση. Μια πλήρης απαγόρευση θα πρέπει να περιλαμβάνει και την απαγόρευση κλήσης διαδικασίας από συνάρτηση.

Υπάρχουν δύο επιλογές κατά την γνώμη μου
1) Οι εντολές Γράψε, Διάβασε και η κλήση διαδικασίας από συνάρτηση απαγορεύονται.
2) Οι εντολές Γράψε, Διάβασε επιτρέπονται και μια συνάρτηση μπορεί να καλέσει μια διαδικασία.

Ψηφίζω το δεύτερο γιατί δεν νομίζω ότι η απαγόρευση της κλήσης μιας διαδικασίας από συνάρτηση συμβαδίζει με τον σκοπό του τμηματικού προγραμματισμού που είναι η επαναχρησιμοποίηση κώδικα και το εύκολο σπάσιμο ενός μεγάλου προβλήματος σε μικρότερα.

Σαν παράδειγμα φέρνω μια συνάρτηση η οποία υπολογίζει κάτι από τα στοιχεία ενός πίνακα και μέσα στο σώμα της καλεί μια διαδικασία που ταξινομεί τον πίνακα.
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: pgrontas στις 11 Φεβ 2010, 08:00:19 ΜΜ
Η μητέρα όλων των ασαφειών. Προς το παρόν δεν έχω καταλήξει σε συγκεκριμένη άποψη.

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

Από την άλλη νομίζω ότι έχει διδακτικά ωφέλη το να έχουμε συναρτήσεις, ή κάτι τέλος πάντων, που η έξοδος τους έξαρτάται αποκλειστικά από την είσοδο όπως στα μαθηματικά (referential transparency νομίζω λέγεται αυτό).

Ας ακούσουμε και άλλες απόψεις...
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: tom στις 11 Φεβ 2010, 08:40:06 ΜΜ
Παράθεση από: sstergou στις 11 Φεβ 2010, 07:37:53 ΜΜ
Στο διδακτικό πακέτο δεν υπάρχει σαφής αναφορά για το αν οι εντολές ΓΡΑΨΕ, ΔΙΑΒΑΣΕ μπορούν να μπουν στο εσωτερικό μιας συνάρτησης. Αν αυτές απλά απαγορευτούν όμως τότε κάποιος μπορεί εύκολα να παραβιάσει τον περιορισμό και να τις χρησιμοποιήσει μέσα σε μια διαδικασία η οποία καλείται από την συνάρτηση. Μια πλήρης απαγόρευση θα πρέπει να περιλαμβάνει και την απαγόρευση κλήσης διαδικασίας από συνάρτηση.

Υπάρχουν δύο επιλογές κατά την γνώμη μου
1) Οι εντολές Γράψε, Διάβασε επιτρέπονται και μια συνάρτηση μπορεί να καλέσει μια διαδικασία.
2) Οι εντολές Γράψε, Διάβασε και η κλήση διαδικασίας από συνάρτηση απαγορεύονται.

Ψηφίζω το πρώτο γιατί δεν νομίζω ότι η απαγόρευση της κλήσης μιας διαδικασίας από συνάρτηση συμβαδίζει με τον σκοπό του τμηματικού προγραμματισμού που είναι η επαναχρησιμοποίηση κώδικα και το εύκολο σπάσιμο ενός μεγάλου προβλήματος σε μικρότερα.

Σαν παράδειγμα φέρνω μια συνάρτηση η οποία υπολογίζει κάτι από τα στοιχεία ενός πίνακα και μέσα στο σώμα της καλεί μια διαδικασία που ταξινομεί τον πίνακα.
Σύμφωνα πάντα με τη φιλοσοφία του διδακτικού πακέτου έτσι...;

Συμφωνώ με το 2)! "Οι εντολές Γράψε, Διάβασε και η κλήση διαδικασίας από συνάρτηση απαγορεύονται."

Στο παράδειγμα σου Στάθη, μπορεί η ταξινόμηση να γίνει από συνάρτηση.

Το σκεπτικό μου είναι το εξής:

Στο σχολικό βιβλίο από ότι έχω καταλάβει, όσον αφορά τις συναρτήσεις, το πέρασμα παραμέτρων είναι με τιμή (by-value), μπορούν να υπάρχουν μία ή περισσότερες είσοδοι, οι μεταβλητές έχουν τοπική εμβέλεια και υπάρχει μόνο μία επιστρεφόμενη τιμή. Αν θέλει όμως να εισάγεις με μία "Εμφάνισε" πολλά δεδομένα; Πως θα τα περάσεις στο κύριο πρόγραμμα, με πίνακα ΧΑΡΑΚΤΗΡΕΣ  ;) :D Και αν θες να εμφανίζεις μηνύματα μαζί με τιμές; Π.Χ. "Ο μέσος όρος είναι:",  a

όσον αφορά τις διαδικασίες, το πέρασμα παραμέτρων δεν είναι ούτε με τιμή (by-value) ούτε με αναφορά (by-reference) αλλά με κάτι άλλο. Οι τιμές αντιγράφονται μέσα, όσο διαρκεί η διαδικασία είναι ορατές μόνο μέσα στο σώμα της και όταν τελειώσει αντιγράφονται πίσω στο κύριο πρόγραμμα.
Άρα η διαδικασία είναι πιο κατάλληλη για είσοδο και για έξοδο.

Παράθεση από: pgrontas στις 11 Φεβ 2010, 08:00:19 ΜΜ
Από την άλλη νομίζω ότι έχει διδακτικά ωφέλη το να έχουμε συναρτήσεις, ή κάτι τέλος πάντων, που η έξοδος τους έξαρτάται αποκλειστικά από την είσοδο.
Συμφωνώ
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: sstergou στις 11 Φεβ 2010, 08:47:40 ΜΜ
Παράθεση από: tom στις 11 Φεβ 2010, 08:40:06 ΜΜ
Στο παράδειγμα σου Στάθη, μπορεί η ταξινόμηση να γίνει από συνάρτηση.

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

Σίγουρα η διαδικασία είναι προτιμότερη για είσοδο έξοδο αλλά δεν είναι αυτό το θέμα.
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: tom στις 11 Φεβ 2010, 09:27:28 ΜΜ
Παράθεση από: sstergou στις 11 Φεβ 2010, 08:47:40 ΜΜ
Εννοείς ότι μια συνάρτηση μπορεί να επιστρέψει πίνακα; Αυτό σηκώνει κουβέντα.
Όχι, εξ'αλλου αν ξαναδείς το μήνυμα μου αναφέρω ότι επιστρέφει μόνο μια τιμή. Απλά δίνω έμφαση στο ότι δεν απάντησες σε αυτό:

"Αν θες να εμφανίζεις μηνύματα μαζί με τιμές; Π.Χ. Εμφάνισε "Ο μέσος όρος είναι:",  a, μέσα από συνάρτηση πως θα γίνει αυτό";  >:D ή αν θες να διαβάζεις τρεις τιμές π.χ. Διάβασε α,β,γ πως θα τις περνάς στο κύριο πρόγραμμα. Γιατί αν είναι να μπορείς να περάσεις τρεις τιμές γιατί να μη μπορείς και πίνακα; Μετά θα πρέπει να έχουμε χρήση by-reference.

Προτείνω να μείνουμε πιστοί σε αυτό που λέει ο ορισμός στη σελ. 211: "Η συνάρτηση είναι ένας τύπος υποπρογράμματος που υπολογίζει και επιστρέφει μόνο μία τιμή με το όνομα της (όπως οι μαθηματικές συναρτήσεις)".



Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: evry στις 11 Φεβ 2010, 10:18:37 ΜΜ
  Ο τρόπος περάσματος παραμέτρων που επέλεξαν οι συγγραφείς είναι γνωστός στη βιβλιογραφία ως Call-by-copy-restore ή call-by-value-result ή call-by-value-return.
   Υπάρχει σε μια έκδοση της Algol, την AlgolW και χρησιμοποιείται και στην Ada, εκεί είναι οι γνωστές In out παράμετροι, παραθέτω κάποια links
http://c2.com/cgi/wiki?CallByValueResult (http://c2.com/cgi/wiki?CallByValueResult)
http://www.csc.liv.ac.uk/~grant/Teaching/COMP205/paramPassing.html#callByCopyRestore (http://www.csc.liv.ac.uk/~grant/Teaching/COMP205/paramPassing.html#callByCopyRestore)
Λοιπόν το πρόβλημα κατά τη γνώμη μου είναι ότι θα πρέπει να φαίνονται ποιες παράμετροι είναι εισόδου και ποιες εξόδου, ώστε να φαίνονται τα Δεδομένα και τα Αποτελέσματα.
Επειδή δεν θέλω να επαναλαμβάνομαι είχε γίνει κάποια συζήτηση για το θέμα του περάσματος παραμέτρων στο παρακάτω λινκ
https://alkisg.mysch.gr/steki/index.php?topic=289.msg1877#msg1877 (https://alkisg.mysch.gr/steki/index.php?topic=289.msg1877#msg1877)

Και τώρα στο θέμα μας
Τώρα σχετικά με τις συναρτήσεις, αν μας επέτρεπαν να χρησιμοποιούμε Διάβασε/Γράψε δεν ξέρω αν θα χρειαζόμασταν διαδικασίες. Προσωπικά θεωρώ ότι με τις παρούσες ώρες που διδάσκεται το μάθημα δεν υπάρχει χώρος για διαδικασίες, ούτε για μεγάλα προγράμματα τα οποία θα αναλύσει ο μαθητής με διαδικασίες.
   Αντιθέτως μάλιστα εμείς τον εξετάζουμε αν μπορεί να ορίσει μια διαδικασία ή αν ξέρει να περνάει σωστά τις παραμέτρους, δηλαδή καθαρά σε τεχνικά θέματα και φυσικά οι στόχοι του μαθήματος πάνε περίπατο.
   Νομίζω ότι οι παρακάτω συνάρτηση θα ήταν μια χαρά (πάντα με κεφαλαία φυσικά  ;D):
Κώδικας [Επιλογή]

ΣΥΝΑΡΤΗΣΗ ΘετικήΤιμή():ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
   ΑΚΕΡΑΙΕΣ: Τιμή
ΑΡΧΗ
   ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
       ΔΙΑΒΑΣΕ Τιμή
   ΜΕΧΡΙΣ_ΟΤΟΥ (Τιμή > 0)
   ΘετικήΤιμή <- Τιμή
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


    Αυτή απαγόρευση του Διάβασε/Γράψε στις συναρτήσεις ποτέ μου δεν κατάλαβα ποιον διδακτικό σκοπό εξυπηρετεί.
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: tom στις 11 Φεβ 2010, 10:36:10 ΜΜ
Παράθεση από: evry στις 11 Φεβ 2010, 10:18:37 ΜΜ
   Νομίζω ότι οι παρακάτω συνάρτηση θα ήταν μια χαρά (πάντα με κεφαλαία φυσικά  ;D):
Κώδικας [Επιλογή]

ΣΥΝΑΡΤΗΣΗ ΘετικήΤιμή():ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
   ΑΚΕΡΑΙΕΣ: Τιμή
ΑΡΧΗ
   ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
       ΔΙΑΒΑΣΕ Τιμή
   ΜΕΧΡΙΣ_ΟΤΟΥ (Τιμή > 0)
   ΘετικήΤιμή <- Τιμή
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


    Αυτή απαγόρευση του Διάβασε/Γράψε στις συναρτήσεις ποτέ μου δεν κατάλαβα ποιον διδακτικό σκοπό εξυπηρετεί.
Και αν θες να διαβάσεις 2+ τιμές;;;
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: evry στις 11 Φεβ 2010, 10:43:41 ΜΜ

Τότε καλείς τη συνάρτηση 2 φορές ;)
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: tom στις 11 Φεβ 2010, 10:51:02 ΜΜ
 :D
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: gthal στις 12 Φεβ 2010, 01:54:44 ΠΜ
Ψήφισα το 1)   (που νομίζω στην ψηφοφορία ήταν δεύτερο)
Όταν ξεκίνησα να μαθαίνω προγραμματισμό που δεν υπήρχαν τα σημερινά IDE's ούτε debuggers, ήμουν ευγνώμων που μπορούσα να βάλω εντολές εξόδου οπουδήποτε - και μέσα στις συναρτήσεις. Έτσι γινόταν το debugging τότε (επιπλέον,  δεν πείραζα κανέναν).
Νομίζω ότι ένα υποπρόγραμμα πρέπει να μπορεί να κάνει ακριβώς ότι ένα πρόγραμμα. Άλλο τώρα αν εξυπηρετεί ή αν ενδείκνυται. Αν εξυπηρετεί στην περίσταση, ας έχει και είσοδο η συνάρτηση. Δεν βλέπω το πρόβλημα.

Πέρα από αυτά, η πρόταση 2) έχει ως απαράδεκτη παρενέργεια την απαγόρευση κλήσης υποπρογράμματος από υποπρόγραμμα: Καταστροφή !!!!
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: tom στις 12 Φεβ 2010, 02:34:32 ΠΜ
Παράθεση από: gthal στις 12 Φεβ 2010, 01:54:44 ΠΜ
Ψήφισα το 1)   (που νομίζω στην ψηφοφορία ήταν δεύτερο)
Όταν ξεκίνησα να μαθαίνω προγραμματισμό που δεν υπήρχαν τα σημερινά IDE's ούτε debuggers, ήμουν ευγνώμων που μπορούσα να βάλω εντολές εξόδου οπουδήποτε - και μέσα στις συναρτήσεις. Έτσι γινόταν το debugging τότε (επιπλέον,  δεν πείραζα κανέναν).
Νομίζω ότι ένα υποπρόγραμμα πρέπει να μπορεί να κάνει ακριβώς ότι ένα πρόγραμμα. Άλλο τώρα αν εξυπηρετεί ή αν ενδείκνυται. Αν εξυπηρετεί στην περίσταση, ας έχει και είσοδο η συνάρτηση. Δεν βλέπω το πρόβλημα.

Πέρα από αυτά, η πρόταση 2) έχει ως απαράδεκτη παρενέργεια την απαγόρευση κλήσης υποπρογράμματος από υποπρόγραμμα: Καταστροφή !!!!
Παράθεση από: evry στις 11 Φεβ 2010, 10:18:37 ΜΜ
Και τώρα στο θέμα μας
Τώρα σχετικά με τις συναρτήσεις, αν μας επέτρεπαν να χρησιμοποιούμε Διάβασε/Γράψε δεν ξέρω αν θα χρειαζόμασταν διαδικασίες. Προσωπικά θεωρώ ότι με τις παρούσες ώρες που διδάσκεται το μάθημα δεν υπάρχει χώρος για διαδικασίες, ούτε για μεγάλα προγράμματα τα οποία θα αναλύσει ο μαθητής με διαδικασίες.
   Αντιθέτως μάλιστα εμείς τον εξετάζουμε αν μπορεί να ορίσει μια διαδικασία ή αν ξέρει να περνάει σωστά τις παραμέτρους, δηλαδή καθαρά σε τεχνικά θέματα και φυσικά οι στόχοι του μαθήματος πάνε περίπατο.
   Νομίζω ότι οι παρακάτω συνάρτηση θα ήταν μια χαρά (πάντα με κεφαλαία φυσικά  ;D):
Κώδικας [Επιλογή]

ΣΥΝΑΡΤΗΣΗ ΘετικήΤιμή():ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
   ΑΚΕΡΑΙΕΣ: Τιμή
ΑΡΧΗ
   ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
       ΔΙΑΒΑΣΕ Τιμή
   ΜΕΧΡΙΣ_ΟΤΟΥ (Τιμή > 0)
   ΘετικήΤιμή <- Τιμή
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Αυτή απαγόρευση του Διάβασε/Γράψε στις συναρτήσεις ποτέ μου δεν κατάλαβα ποιον διδακτικό σκοπό εξυπηρετεί.

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

πχ

Κώδικας [Επιλογή]
ΥΠΟΠΡΟΓΡΑΜΜΑ  παρ1(ΕΙΣΟΔΟΣ: α, β , ΕΞΟΔΟΣ: γ)
ΜΕΤΑΒΛΗΤΕΣ
      ΑΚΕΡΑΙΕΣ: α, β
      ΛΟΓΙΚΕΣ: γ
ΑΡΧΗ
   ΑΝ α>β ΤΟΤΕ
     γ<-αληθής
   ΑΛΛΙΩΣ
     γ<-ψευδής
ΤΕΛΟΣ_ΥΠΟΠΡΟΓΡΑΜΜΑΤΟΣ


Αλλά αν μιλάμε για το υπάρχον διδακτικό πακέτο, γιατί να υποστηρίζει η συνάρτηση ΔΙΑΒΑΣΕ και ΓΡΑΨΕ, αφού υπάρχει η διαδικασία γι'αυτό. Αν συμβεί κάτι τέτοιο, η διαδικασία δεν χάνει αυτόματα το νόημα της ύπαρξής της;  :)

Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: ntzios kostas στις 12 Φεβ 2010, 09:04:12 ΠΜ
Νομίζω και εγώ ότι το σχολικό έχει στο "μυαλό" του τη συνάρτηση όπως αυτή ορίζεται στα μαθηματικά. Και δεν είμαι αντίθετος σε αυτο. Διαφορετικά θα προτιμούσα να είχαμε ένα άλλο όνομα για αυτήν, ας πούμε υποπρόγραμμα και να χρησιμοποιείται όπως γίνεται στη C.

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

Πάντως όπως είναι και διατυπώνονται οι στόχοι του μαθήματος η εξέταση των υποπρογραμμάτων είναι τελείως άσχετη. Τελικά ζητάμε με τα υποπρογράμματα ο μαθητής να μάθει κανόνες σύνταξης και μόνο αυτές. Θα προτιμούσα να του διδάσκαμε να πάρει ένα πρόβλημα να το χωρίζει ο ίδιος σε υποπροβλήματα και στην συνέχεια το καθένα να το υλοποιούσε έστω σε ψευδογλώσσα. Η μεταφορά τώρα των τιμών τους να γινόταν με μία απλή συντακτικά διαδικασία μέσω παραμέτρων.
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: evry στις 12 Φεβ 2010, 10:44:43 ΠΜ
Ναι ε? πάντως εγώ ακόμα κάνω debugging με διαγνωστικά μηνύματα, μια χαρά είναι
απλά δεν πηγαίνουν πια στην οθόνη  :)

Παράθεση από: gthal στις 12 Φεβ 2010, 01:54:44 ΠΜ
Όταν ξεκίνησα να μαθαίνω προγραμματισμό που δεν υπήρχαν τα σημερινά IDE's ούτε debuggers, ήμουν ευγνώμων που μπορούσα να βάλω εντολές εξόδου οπουδήποτε - και μέσα στις συναρτήσεις. Έτσι γινόταν το debugging τότε (επιπλέον,  δεν πείραζα κανέναν).
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: gthal στις 12 Φεβ 2010, 01:39:11 ΜΜ
Παράθεση από: tom στις 12 Φεβ 2010, 02:34:32 ΠΜ
Αλλά αν μιλάμε για το υπάρχον διδακτικό πακέτο, γιατί να υποστηρίζει η συνάρτηση ΔΙΑΒΑΣΕ και ΓΡΑΨΕ, αφού υπάρχει η διαδικασία γι'αυτό. Αν συμβεί κάτι τέτοιο, η διαδικασία δεν χάνει αυτόματα το νόημα της ύπαρξής της;  :)
Παράθεση από: evry στις 11 Φεβ 2010, 10:18:37 ΜΜ
Τώρα σχετικά με τις συναρτήσεις, αν μας επέτρεπαν να χρησιμοποιούμε Διάβασε/Γράψε δεν ξέρω αν θα χρειαζόμασταν διαδικασίες.
χμμ... με αφορμή τα παραπάνω, κι επειδή για μένα δεν είναι οι ΓΡΑΨΕ/ΔΙΑΒΑΣΕ που κάνουν τη διαφορά μεταξύ συναρτήσεων/διαδικασιών, νομίζω ότι αξίζει να αποσαφηνίσω τη διαφορά μεταξύ τους όπως τη βλέπω εγώ. Ελπίζω να μην σας κουράσω και να μην περιγράφω τα προφανή...

Παράθεση από: ntzios kostas στις 12 Φεβ 2010, 09:04:12 ΠΜ
Νομίζω και εγώ ότι το σχολικό έχει στο μυαλό του τη συνάρτηση όπως αυτή ορίζεται στα μαθηματικά.
Αυτό νομίζω κι εγώ. Είναι σαν να μπορώ να συμπληρώσω συναρτήσεις στις ήδη υπάρχουσες "ενσωματωμένες" συναρτήσεις της ΓΛΩΣΣΑΣ (Τ_Ρ, Α_Τ κλπ). Είναι "μαθηματική" συνάρτηση. Δέχεται ένα ή περισσότερα ορίσματα και επιστρέφει μια τιμή. Μάλιστα ας μου επιτραπεί η έκφραση: η συνάρτηση είναι τιμή (το γράφω έτσι για να τονίσω ότι έχει φτιαχτεί γι αυτό το σκοπό- να επιστρέφει τιμές), γι αυτό και μπορεί να μπει με το όνομά της μέσα σε εκφράσεις.

Ας πούμε ότι θέλω να υπολογίζω συχνά το παραγοντικό. Για να μην παρεμβάλλω συνεχώς τον κώδικα που το υπολογίζει, γράφω τη συνάρτηση, έστω παρ(χ). Έτσι μπορώ να γράψω
ΓΡΑΨΕ παρ(5)    όμορφα και καθαρά

Αν η παρ ήταν διαδικασία θα έπρεπε να γράψω
χ<-5  ! αφού λόγω by-reference δεν μπορώ να περάσω τη σταθερή 5
ΚΑΛΕΣΕ παρ(χ, αποτέλεσμα)
ΓΡΑΨΕ αποτέλεσμα
σίγουρα, όχι τόσο βολικό και φανταστείτε να είχα να υπολογίσω το 10!/(7!*3!)
(ίσως λοιπόν να λέγαμε ότι συνάρτηση είναι μια διαδικασία, διαμορφωμένη έτσι ώστε να χρησιμοποείται πιο εύκολα στις εκφράσεις - με την προυποθεση ότι επιστρέφει τιμή)
Φυσικά είναι μάλλον απίθανο, υπολογίζοντας μια μαθηματική συνάρτηση να διαβάσουμε ή να εμφανίζουμε κάτι, αλλά πάλι αν το κάνουμε ποιο το κακό ώστε να απαγορεύεται; Φυσικά αν κάποιος θέλει μέσα από συνάρτηση να διαβάσει πολλές τιμές και να τις επιστρέψει στο πρόγραμμα, έχασε (και θα έπρεπε να το καταλάβει από μόνος του) γιατί μόνο μία τιμή μπορεί να επιστρέψει.

Τώρα, η διαδικασία δεν έχει φτιαχτεί για να επιστρέφει τιμές. Είναι απλά μια ρουτίνα (δουλειά/διαδικασία) που εκτελείται και τέλος. Όπως πχ να εμφανίσω όλα τα στοιχεία ενός πίνακα. Μπορεί να τη γράψω (αυτή τη δουλειά) ως υποπρόγραμμα είτε γιατί θα εκτελεστεί πολλές φορές είτε για να αφαιρέσω την πολυπλοκότητά της από το κυρίως πρόγραμμα. Η διαδικασία (κατ'αρχήν) δεν είναι για να επιστρέφει τιμές.
Συμβαίνει βέβαια, οι παράμετροι στη διαδικασία να μεταβιβάζονται by-reference, το οποίο δίνει τη δυνατότητα στη διαδικασία (αν χρειάζεται) να μπορεί να αλλάξει τις τιμές των πραγματικών παραμέτρων (δηλ. των μεταβλητών του προγράμματος) και έτσι, έμμεσα (και όχι άμεσα, όπως η συνάρτηση) να μπορεί να επιστρέψει πολλές (και όχι μόνο μία) τιμές.

Αν αντι για συναρτήσεις είχαμε μόνο διαδικάσιες, φαίνεται από το παράδειγμα με το παραγοντικό ότι θα ήταν δυσλειτουργικό.
Αντίστροφα, αν αντι για διαδικασίες είχαμε μόνο συναρτήσεις, τότε κάθε φορά που θα θέλαμε να κάνουμε μια "κουραστική" δουλειά η οποία δεν παράγει αποτέλεσμα, θα έπρεπε να επιστρέφουμε και ένα εικονικό αποτέλεσμα και, ακόμα χειρότερα, να έχουμε και μια ψευτομεταβλητή στο κυρίως πρόγραμμα για να το δεχθεί. Εντάξει, το αποτέλεσμα θα μπορούσε να είναι true/false (πήγαν όλα καλά ή όχι) αλλά τι θα μπορούσε να πάει στραβά όταν εκτυπώνω τα στοιχεία ενός πίνακα? Λίγο αδέξιο κι αυτό.

Ουφ! Μάλλον κουραστικά τα παραπάνω αλλά δεν μπορώ να τα συμπυκνώσω περισσότερο ώστε να αποσαφηνίσω τα σημεία που διαφωνούμε.

Συνοψίζω την άποψή μου:
1. Η χρήση των ΔΙΑΒΑΣΕ/ΓΡΑΨΕ στη συνάρτηση είναι συνήθως άχρηστη αλλά δε χρειάζεται να απαγορεύεται.
2. Η χρήση ή μη χρήση των ΔΙΑΒΑΣΕ/ΓΡΑΨΕ στα υποπρογράμματα δεν καθιστά κανένα είδος υποπρογράμματος αντικαταστάσιμο από το άλλο.
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: pgrontas στις 12 Φεβ 2010, 04:26:04 ΜΜ
Παράθεση από: gthal στις 12 Φεβ 2010, 01:39:11 ΜΜ
Είναι "μαθηματική" συνάρτηση. Δέχεται ένα ή περισσότερα ορίσματα και επιστρέφει μια τιμή. Μάλιστα ας μου επιτραπεί η έκφραση: η συνάρτηση είναι τιμή (το γράφω έτσι για να τονίσω ότι έχει φτιαχτεί γι αυτό το σκοπό- να επιστρέφει τιμές), γι αυτό και μπορεί να μπει με το όνομά της μέσα σε εκφράσεις.
....
Φυσικά είναι μάλλον απίθανο, υπολογίζοντας μια μαθηματική συνάρτηση να διαβάσουμε ή να εμφανίζουμε κάτι, αλλά πάλι αν το κάνουμε ποιο το κακό ώστε να απαγορεύεται;
Το "κακό" είναι ότι αν επιτρέπεται ΔΙΑΒΑΣΕ στην συνάρτηση το αποτέλεσμα της μπορεί να επηρεαστεί από τα δεδομένα που διαβάζονται και όχι μόνο από την είσοδο, όπως συμβαίνει στα μαθηματικά.
Δεν ξέρω βέβαια κατά πόσο πρέπει να επιμείνουμε στον τόσο αυστηρό ορισμό. Σε κάθε περίπτωση δεν μπορούμε να το απαγορέψουμε, αλλά αυτό μας δημιουργεί κενό.
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: gthal στις 12 Φεβ 2010, 10:29:40 ΜΜ
Γι αυτό τη βάζω σε εισαγωγικά.
Μπορεί να είναι συνάρτηση με την αυστηρή μαθηματική έννοια, μπορεί όμως και όχι. Αυτό είναι απόφαση του προγραμματιστή, αν θα επιτρέπει εξωτερικούς παράγοντες (πέραν των ορισμάτων) να επηρεάζουν το αποτέλεσμά της.
Γιατί αλλιώς ίσως φτάσουμε να απαγορεύσουμε και κλήση συνάρτησης από συνάρτηση, αφού μπορεί να καλέσει μια random().
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: evry στις 12 Φεβ 2010, 11:13:54 ΜΜ

   Δεν έχουμε κανένα σοβαρό παιδαγωγικό/διδακτικό και φυσικά επιστημονικό επιχείρημα να απαγορεύσουμε τα Διάβασε/Γράψε από τις Συναρτήσεις. Ναι είναι κακή πρακτική αλλά όχι λάθος. Μην φτάσουμε στο άλλο άκρο. Απλά αποτρέπουμε τους μαθητές να τα χρησιμοποιούν.  Είναι κακή πρακτική αλλά μέχρι εκεί.
Δεν μπορεί να βάζουμε κανόνες του στυλ αυτό γίνεται με συναρτήσεις και αυτό με διαδικασίες. Γιατί να γίνεται έτσι? Επειδή το λέει το βιβλίο ή επειδή το λέμε εμείς? Και στο κάτω κάτω ποιον διδακτικό σκοπό του μαθήματος εξυπηρετούν αυτοί οι κανόνες? Να μάθει ο μαθητής να χρησιμοποιεί κατασκευάσματα τα οποία δεν του προσφέρουν τίποτα σε γνωστικό επίπεδο, μόνο και μόνο για να μπορούμε να βάζουμε σαφή θέματα?
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: gthal στις 13 Φεβ 2010, 04:09:20 ΠΜ
Κώδικας [Επιλογή]

ΠΡΟΓΡΑΜΜΑ καλό_κακό_ή_απαγορεύεται
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: χ, ψ
ΑΡΧΗ
  χ <- ΔιάβασεΤιμήΣτοΔιάστημα (3, 5)
  ψ <- ΔιάβασεΤιμήΣτοΔιάστημα (-5, 5)
  ΓΡΑΨΕ (χ + ψ)/2
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ ΔιάβασεΤιμήΣτοΔιάστημα (α, β): ΠΡΑΓΜΑΤΙΚΗ
! Διαβάζει μια τιμή που είναι στο διάστημα [α,β]
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: α, β, χ
ΑΡΧΗ
  ΓΡΑΨΕ 'Δώσε έναν αριθμό στο διάστημα [', α, β, ']'
  ΔΙΑΒΑΣΕ χ
  ΟΣΟ χ < α Η χ > β ΕΠΑΝΑΛΑΒΕ
    ΓΡΑΨΕ 'Αυτό δεν είναι στο διάστημα [', α, β, ']. Ξαναδώσε.'
    ΔΙΑΒΑΣΕ χ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΔιάβασεΤιμήΣτοΔιάστημα <- χ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


Θα μπορούσε κάποιος να μου εξηγήσει:
1. γιατί το παραπάνω να απαγορεύεται ;
2. ακόμα κι αν δεν απαγορεύεται, γιατί είναι ΚΑΚΗ πρακτική; (γιατί ούτε αυτό το καταλαβαίνω)
3. γιατί δεν είναι ίσως και ΚΑΛΗ πρακτική, αφού :
      α) απαλλάσσει το κυρίως πρόγραμμα από τη "σκοτούρα" του ελέγχου εγκυρότητας και εμφάνισης μηνυμάτων
          λάθους
      β) ελαττώνει τις γραμμές του κώδικα (ας μην αναφέρουμε ότι το κυρίως πρόγραμμα θα μπορούσε να είναι
          μόνο μία γραμμή και χωρίς μεταβλητές χ και ψ, γιατί τότε θα μπορούσε να αμφισβητηθεί η αναγνωσιμότητά
          του)
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: andreas_p στις 13 Φεβ 2010, 08:06:22 ΠΜ
Δεν είναι λάθος, αλλά αυτό ΔΕΝ είναι συνάρτηση. Η συνάρτηση εξ' ορισμού δέχεται τιμές , τις επεξεργάζεται, κάνει υπολογισμούς και επιστρέφει ΜΙΑ τιμή στο κυρίως πρόγραμμα.

Το παραπάνω είναι απλά μία διαδικασία.

! κύριο πρόγραμμα
    α <- 3
    β <- 5
   ΚΑΛΕΣΕ  ΔιάβασεΤιμήΣτοΔιάστημα(α,β,χ)
! υποπρόγραμμα
  ΔΙΑΔΙΚΑΣΙΑ  ΔιάβασεΤιμήΣτοΔιάστημα(κ,λ,τιμή)
  ΜΕΤΑΒΛΗΤΕΣ
       ΠΡΑΓΜΑΤΙΚΕΣ  : κ,λ, τιμή
  ΑΡΧΗ
         ΓΡΑΨΕ 'Δώσε έναν αριθμό στο διάστημα [', κ, λ, ']' 
         ΔΙΑΒΑΣΕ τιμή 
          ΟΣΟ τιμή < κ Η  τιμή > λ ΕΠΑΝΑΛΑΒΕ   
                ΓΡΑΨΕ 'Αυτό δεν είναι στο διάστημα [', κ, λ, ']. Ξαναδώσε.'   
                ΔΙΑΒΑΣΕ τιμή
           ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: pgrontas στις 13 Φεβ 2010, 08:39:19 ΠΜ
Την rand() δεν θα την έλεγα συνάρτηση, με την μαθηματική έννοια. Η τιμή της εξαρτάται από την προηγούμενη τιμή που έδωσε (http://en.wikipedia.org/wiki/Linear_congruential_generator) ή/ και από μια κατάσταση που μπορεί να είναι εκτός αλγορίθμου. Γι'αυτό και στις αντικειμενοστρεφείς γλώσσες συνήθως αναπαρίσταται από αντικείμενο. Το μόνο χαρακτηριστικό της που θυμίζει συνάρτηση είναι ότι επιστρέφει τιμή με το όνομα της.
Γενικότερα τώρα, μόνο σε περίπτωση που οι συναρτήσεις διαφέρουν σημαντικά από τις διαδικασίες μπορεί να δικαιολογηθούν και παιδαγωγικά αλλά και στις ερωτήσεις των παιδιών τα δύο είδη υποπρογραμμάτων. Αλλιώς η καλύτερη λύση είναι ένας τύπος υποπρογράμματος, όπως ειπώθηκε και στην ημερίδα. Αλλά αυτό ξεφεύγει.
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: evry στις 13 Φεβ 2010, 09:35:47 ΠΜ
Κατ'αρχήν συμφωνώ απόλυτα με τον gthal.

Αντρέα αναφέρεσαι στον ορισμό της συνάρτησης όπως ορίζεται στα μαθηματικά. Για παράδειγμα τα υποπρογράμματα στη C τα λέμε συναρτήσεις, και όμως μπορείς να κάνεις τα πάντα. Υπάρχουν συναρτήσεις που διαβάζουν χαρακτήρες όπως η getch() ή άλλες που επιστρέφουν ακόμα και πίνακα.
    Επίσης αυτό το "επιστρέφει μια τιμή" που είναι βαθιά χαραγμένο στο DNA μας από το σχολείο δεν σημαίνει ότι επιστρέφει μόνο έναν αριθμό. Σημαίνει ότι με τις συγκεκριμένες παραμέτρους μπορούμε να έχουμε μόνο ένα αποτέλεσμα, το οποίο στην πληροφορική μεταφράζεται σαν καθοριστικότητα ή αν θέλετε διαφορετικά ντετερμινισμός.
   Το αποτέλεσμα αυτό μπορεί να είναι ότι θέλουμε. Για παράδειγμα μπορεί να είναι ένας μιγαδικός, που έχει δύο τιμές x,y. Αν έχουμε συναρτήσεις μεταξύ αντικειμένων στον n-διάστατο χώρο τότε το αποτέλεσμα θα είναι ένας πίνακας n στοιχείων, όπως για παράδειγμα ένα διάνυσμα από βάρη σε λέξεις-κλειδιά που αντιπροσωπεύει μια ιστοσελίδα στο διαδίκτυο. Και αυτό συνάρτηση είναι γιατί βγάζει ένα αποτέλεσμα, μια τιμή απλά αυτή η τιμή δεν είναι ένας αριθμός, είναι ο τρόπος αναπαράστασης μιας οντότητας.

Παράθεση από: andreas_p στις 13 Φεβ 2010, 08:06:22 ΠΜ
Δεν είναι λάθος, αλλά αυτό ΔΕΝ είναι συνάρτηση. Η συνάρτηση εξ' ορισμού δέχεται τιμές , τις επεξεργάζεται, κάνει υπολογισμούς και επιστρέφει ΜΙΑ τιμή στο κυρίως πρόγραμμα.
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: gthal στις 13 Φεβ 2010, 01:39:28 ΜΜ
Παράθεση από: andreas_p στις 13 Φεβ 2010, 08:06:22 ΠΜ
Δεν είναι λάθος, αλλά αυτό ΔΕΝ είναι συνάρτηση. Η συνάρτηση εξ' ορισμού δέχεται τιμές , τις επεξεργάζεται, κάνει υπολογισμούς και επιστρέφει ΜΙΑ τιμή στο κυρίως πρόγραμμα.
Ανδρέα, δεν είναι μαθηματική συνάρτηση αλλά είναι συνάρτηση, αφού τη γράφω σαν συνάρτηση, την καλώ σαν συνάρτηση και λειτουργεί.
Τροποποιώ τον ορισμό σου : Η συνάρτηση εξ' ορισμού δέχεται τιμές , τις επεξεργάζεται, κάνει υπολογισμούς και επιστρέφει μια τιμή στο κυρίως πρόγραμμα.
Γιατί πρέπει να καθορίσουμε το τι θα κάνει μια συνάρτηση στο εσωτερικό της;

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

Εσύ βλέπεις αυστηρά τους δύο κανόνες/ορισμούς ενώ εγώ παίζω πιο ευέλικτα μεταξύ τους και το θέμα είναι ότι στην προκειμένη περίπτωση έχω όφελος. Δες τα κύρια προγράμματά μας:
γράφω 1 γραμμή εκεί που εσύ γράφεις 3 !
για να κάνω όλη τη δουλειά μπορώ να γράψω μία γραμμή:
εμφάνισε (ΔιάβασεΤιμήΣτοΔιάστημα(3,5)+ ΔιάβασεΤιμήΣτοΔιάστημα(-5,5))/2
κι εσύ πρέπει να γράψεις 7  !!   (εμ, μέχρι να παρκάρεις και να ξεπαρκάρεις, εγώ έχω φτάσει κι έχω γυρίσει   :))
Δεν το παρουσιάζω ως ιδανικό, έτσι; Όμως με πειράζει να απαγορευθεί η ελευθερία της επιλογής μου επειδή... πώς να το πώ ... "δεν είναι πρέπον"

Και να γιατί είχα όφελος:
θα προσπαθήσω πάλι να το περιγράψω με μια εικόνα (πω πω, τι έχω πάθει σήμερα ;  βλέπω οπτασίες   :D  θά 'ναι από τα χθεσινά ποτά    :laugh: )
Φαντάζομαι τη συνάρτηση και τη διαδικασία σαν δύο βαρέλια-αντιδραστήρες (κάτι τέτοιο τέλος πάντων) με ένα άνοιγμα από πάνω, ως είσοδο.  Τα βαρέλια είναι ολόιδια και μέσα τους (κατά τη δική μου γνώμη πάντα) κάνουν τις ίδιες ακριβώς επεξεργασίες/λειτουργίες (οι οποίες δεν με ενδιαφέρουν - black box).
Όμως έχουν μια μικρή διαφορά : το βαρέλι της συνάρτησης είναι προσαρμοσμένο ώστε να μπορώ εύκολα να πάρω το προϊόν. Έχει ένα βρυσάκι κάπου χαμηλά. (γιατί αυτό το βαρέλι είναι προσανατολισμένο να παράγει ένα προϊόν)
Το άλλο βαρέλι δεν είναι προσανατολισμένο να παράγει προϊόν γιαυτό δεν έχει βρυσάκι. Αλλά αν θέλω μπορώ να πάρω παραπροϊόντα από την επεξεργασία σκύβοντας πάνω από το άνοιγμα και τσιμπώντας τα ένα-ένα.
Την όποια δουλειά μπορεί να μου την κάνουν εξίσου καλά και τα δύο βαρέλια. Θα διαλέξω βαρέλι ανάλογα με το τι προϊόντα θέλω να πάρω:
ένα προϊόν? Είμαι τυχερός, θα το πάρω εύκολα με το βαρέλι-συνάρτηση
κανένα προϊόν? Σούπερ! βαρέλι-διαδικασία
πολλά προϊόντα? χμμ ελαφρά πιο κουραστικό αλλά θα τα πάρω. Βαρέλι-διαδικασία.

Ε, λοιπόν, στο προηγούμενο προγραμματάκι αφού είχα να πάρω ένα προϊόν, διάλεξα το βολικότερο βαρέλι, αυτό με το βρυσάκι. Εσύ, μένοντας πιστός σε δεν-ξέρω-ποιον-όρκο διάλεξες αυτό που δεν βολεύει.

Τεσπα, έγραψα πάρα πολλά, συγγνώμη (αν ήμουν αναγνώστης θα προσπερνούσα πάραυτα όλο αυτό το κατεβατό  :()
Αν είναι να δεχτούμε για διδακτικούς λόγους ότι οι συναρτήσεις είναι αυστηρά και μόνο μαθηματικές συναρτήσεις, είμαι έτοιμος να ασπαστώ και την απαγόρευση ΔΙΑΒΑΣΕ/ΓΡΑΨΕ και την απαγόρευση κλήσης οποιουδήποτε υποπρογράμματος από συνάρτηση. (θα θρηνώ όμως μυστικά αυτή την ήττα του τμηματικού προγραμματισμού  :'(  :D)

Α, ήθελα ακόμα να πω ότι στο προηγούμενο πρόγραμμα που έδωσα, τις απαντήσεις "ΔΕΝ" τις περίμενα. (ΔΕΝ είναι σωστό, ΔΕΝ γίνεται, ΔΕΝ επιτρέπεται). Αυτό που θέλω είναι τα ΓΙΑΤΙ - και στα τρία ερωτήματα, παρακαλώ:
Παράθεση από: gthal στις 13 Φεβ 2010, 04:09:20 ΠΜ
1. γιατί το παραπάνω να απαγορεύεται ;
2. ακόμα κι αν δεν απαγορεύεται, γιατί είναι ΚΑΚΗ πρακτική; (γιατί ούτε αυτό το καταλαβαίνω)
3. γιατί δεν είναι ίσως και ΚΑΛΗ πρακτική
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: sstergou στις 13 Φεβ 2010, 02:23:30 ΜΜ
Έστω ότι έχουμε μια διαδικασία όπου εκτελεί την φυσαλίδα σε έναν πίνακα και έχει σαν παραμέτρους τον πίνακα, το πλήθος των εξωτερικών επαναλήψεων και τον τύπο της ταξινόμησης.
Με δεδομένη την υπάρχουσα διαδικασία γενικής χρήσης μπορώ να φτιάξω μια πάρα πολύ χρήσιμη συνάρτηση που να μου επιστρέφει τον νιοστό μεγαλύτερο αριθμό του πίνακα (1ο , 2ο κοκ).

Δεν βρίσκω λόγο γιατί θα έπρεπε να απαγορεύσουμε το παρακάτω το οποίο είναι πλήρως συμβατό με όλες τις περιγραφές που έχουμε.

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

Διαδικασία Φυσαλίδα(Πιν, ΕξΕπαναλήψεις, Τύπος)
...
Τέλος_Διαδικασίας

Συνάρτηση ΝΜεγαλύτερο(Πιν, Ν):Πραγματική
Μεταβλητές
  Πραγματικές : Πιν[100]
  Ακέραιες : Ν
Αρχή
  Κάλεσε Φυσαλίδα(Πιν, Ν, 'Φθίνουσα')
  ΝΜεγαλύτερο <- Πιν[Ν]
Τέλος_Συνάρτησης
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: ntzios kostas στις 13 Φεβ 2010, 05:52:11 ΜΜ
Γιατί να το απαγορεύουμε; Απλά ο πίνακας μετά την ολοκληρωση της συνάρτησης δεν θα είναι ταξινομημένος.  :) :)

Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: pgrontas στις 13 Φεβ 2010, 06:59:43 ΜΜ
Στο συγκεκριμένο θέμα νομίζω ότι όλα είναι θέμα ορισμού και στόχων.

Θέλουμε να έχουμε μηχανισμούς στα προγράμματα που να προσομοιάζουν μαθηματικές συναρτήσεις; Υπάρχουν παιδαγωγικά ωφέλη σε αυτό; Αν θέλουμε αυστηρά κάτι τέτοιο πρέπει να απαγορέψουμε  ΔΙΑΒΑΣΕ, ΓΡΑΨΕ, Κλήση διαδικασίας.
Αν θέλουμε χαλαρά κάτι τέτοιο, και θέλουμε να εκμεταλλευτούμε και την δυνατότητα για επιστροφή με το όνομα μπορούμε απλά να αποθαρρύνουμε την χρήση τους.
Εγώ ακόμα δεν έχω αποφασίσει τελεσίδικα, γι' αυτό και την χαρακτήρισα αρχικά την μητέρα των ασαφειών.
Πάντως  το κριτήριο δεν πρέπει να είναι επειδή έτσι δουλεύει η C πχ. ή επειδή θέλουμε να εμφανίζουμε μηνύματα για debugging :)


Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: gthal στις 13 Φεβ 2010, 08:01:25 ΜΜ
Παράθεση από: pgrontas στις 13 Φεβ 2010, 06:59:43 ΜΜ
Πάντως  το κριτήριο δεν πρέπει να είναι επειδή έτσι δουλεύει η C πχ. ή επειδή θέλουμε να εμφανίζουμε μηνύματα για debugging :)
Εντάξει, εδώ θα συμφωνήσω μαζί σου.
Πάντως, να θυμόμαστε ότι θέλουμε να αναδείξουμε τον τμηματικό προγραμματισμό και όχι να τον ευνουχίσουμε.
Τίτλος: Απ: ΓΡΑΨΕ, ΔΙΑΒΑΣΕ σε συνάρτηση (ασάφεια διδακτικού πακ
Αποστολή από: tom στις 15 Φεβ 2010, 10:16:45 ΜΜ
Παράθεση από: ntzios kostas στις 12 Φεβ 2010, 09:04:12 ΠΜ
Νομίζω και εγώ ότι το σχολικό έχει στο "μυαλό" του τη συνάρτηση όπως αυτή ορίζεται στα μαθηματικά. Και δεν είμαι αντίθετος σε αυτο. Διαφορετικά θα προτιμούσα να είχαμε ένα άλλο όνομα για αυτήν, ας πούμε υποπρόγραμμα και να χρησιμοποιείται όπως γίνεται στη C.

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

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

Συμφωνώ! Τα είπα και πριν κάποιες μέρες... Και για μένα είναι ξεκάθαρο σε αυτό το θέμα τι επιτρέπεται και τι όχι, σύμφωνα με το σχολικό βιβλίο.  Ενδιαφέρουσες οι απόψεις των συναδέλφων αλλά θα έπρεπε να κατατεθούν σε ένα θέμα με τίτλο "Προτάσεις βελτίωσης των υποπρογραμμάτων στο νέο διδακτικό πακέτο"  :)