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

Γενικό Λύκειο => Τμηματικός προγραμματισμός => Γ΄ Λυκείου => Συναρτήσεις => Μήνυμα ξεκίνησε από: annastasios στις 05 Απρ 2006, 09:03:51 ΜΜ

Τίτλος: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: annastasios στις 05 Απρ 2006, 09:03:51 ΜΜ
στο εσωτερικό μιας συνάρτησης μπορούν να γίνουν περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
! για ποιο λόγο οι πιο πολοί το αποφεύγουν και κάνουν μια μόνο καταχώρηση στην τελευταία εντολή της συναρτησης
! η επόμενη συνάρτηση είναι σωστή?
! αν ναι γιατί δεν τρέχει στην ΓΛΩΣΣΑ
! ΕΥΧΑΡΙΣΤΩ


ΣΥΝΑΡΤΗΣΗ min(α,β,γ,δ):ΑΚΕΡΑΙΑ

ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: α, β, γ, δ

ΑΡΧΗ


  min <-- α
  ΑΝ β < min ΤΟΤΕ
    min <-- β
  ΤΕΛΟΣ_ΑΝ
  ΑΝ γ<min ΤΟΤΕ
    min <-- γ
  ΤΕΛΟΣ_ΑΝ
  ΑΝ δ<min ΤΟΤΕ
    min <-- δ
  ΤΕΛΟΣ_ΑΝ

ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ 
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: alkisg στις 05 Απρ 2006, 09:32:40 ΜΜ
Εκχωρήσεις τιμής μπορούν να γίνουν οσεσδήποτε.
Όμως όταν το min χρησιμοποιείται κάπου αλλού (π.χ. ΑΝ β < min ΤΟΤΕ) τότε γίνεται αναδρομή, δηλαδή ξανακαλείς τη min με νέες παραμέτρους. Δες το παράδειγμα του βιβλίου που υπολογίζει αναδρομικά το Ν παραγοντικό με συνάρτηση.

Όμως όταν χρησιμοποιείς το min έτσι, είναι συντακτικό λάθος. Εφόσον καλείς τη συνάρτηση, θα έπρεπε να της βάλεις και παραμέτρους. Π.χ. μια σωστή συντακτικά φράση θα ήταν
ΑΝ β < min(1,2,3,4) ΤΟΤΕ
...
αν και φυσικά δεν θα έκανε αυτό που ήθελες...

Δηλαδή όταν το όνομα της συνάρτησης το χρησιμοποιούμε κάπου αλλού εκτός από το αριστερό μέλος μιας εκχώρησης τιμής, τότε γίνεται αναδρομή.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: annastasios στις 05 Απρ 2006, 10:37:04 ΜΜ
ευχαριστώ Άλκη
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: lsourtzo στις 10 Απρ 2006, 11:39:25 ΠΜ
Παράθεση από: alkisg στις 05 Απρ 2006, 09:32:40 ΜΜ
Όμως όταν το min χρησιμοποιείται κάπου αλλού (π.χ. ΑΝ β < min ΤΟΤΕ) τότε γίνεται αναδρομή, δηλαδή ξανακαλείς τη min με νέες παραμέτρους.

Σωστός !!!!!!
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: vassilis στις 01 Μαΐου 2006, 12:18:27 ΜΜ
Νομίζω ότι θα πρέπει να μην είμαστε ιδιαίτερα σχολαστικοί με τέτοια θέματα. Επισημαίνω ότι στη Visual Basic, η παρακάτω συνάρτηση είναι σωστή:

Function min(x As Integer, y As Integer) As Integer

  min = x
 
  If y < min Then min = y
 

End Function


Αν ένας μαθητής λοιπόν γράψει κάτι ανάλογο στη ΓΛΩΣΣΑ, γιατί να θεωρηθεί εσφαλμένο;

Ούτως ή άλλως, όπως έχει επισημανθεί επανειλημμένα στο forum, ο τρόπος με τον οποίο παρουσιάζεται η ΓΛΩΣΣΑ στο σχολικό εγχειρίδιο αφήνει αρκετά θέματα αδιευκρίνιστα. Ούτε τα συντακτικά διαγράμματα της ΓΛΩΣΣΑΣ δίνονται ούτε κάποια πρότυπη υλοποίηση. Και τα παραδείγματα μάλλον δεν επαρκούν για να καλύψουν όλες τις δυνατές περιπτώσεις χρήσης.

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

Άλλωστε, τέτοια θέματα μάλλον είναι συντακτικές λεπτομέρειες των γλωσσών, ενώ υποτίθεται ότι οι μαθητές εξετάζονται στην ικανότητα διατύπωσης αλγορίθμων.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: filippos στις 03 Μαΐου 2006, 10:14:48 ΠΜ
@Άλκης
Ποιά είναι η γνώμη σου;
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: alkisg στις 03 Μαΐου 2006, 11:56:34 ΠΜ
Ο τρόπος χρήσης που αναφέρει ο Βασίλης εξομοιώνει ουσιαστικά το όνομα της συνάρτησης με τοπική μεταβλητή... Και η Object Pascal (Delphi) το υποστηρίζει αυτό, αλλά όχι με το όνομα της συνάρτησης, αλλά με τη αδήλωτη/τοπική μεταβλητή Result.

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

Συμφωνώ όμως απόλυτα με το ότι δεν πρέπει να είμαστε αυστηροί όσον αφορά στη βαθμολόγηση. Το να χρησιμοποιήσει ο μαθητής το min όπως αναφέρει ο Βασίλης δε δείχνει αδυναμία στην ικανότητα διατύπωσης αλγορίθμων, είναι απλά συντακτικό το λάθος... Κάτι σαν να χρησιμοποιεί ΕΜΦΑΝΙΣΕ αντί για ΓΡΑΨΕ (στη ΓΛΩΣΣΑ), το οποίο επίσης νομίζω ότι δεν πρέπει να βαθμολογηθεί αυστηρά...
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: filippos στις 03 Μαΐου 2006, 07:50:48 ΜΜ
Αν και πιστεύω ότι η σύγκριση με "πραγματικές" γλώσσες προγραμματισμού δεν είναι πάντα ο ενδεδειγμένος τρόπος για να ερμηνεύσουμε τη λειτουργία της ΓΛΩΣΣΑς του διδακτικού πακέτου, εν τούτοις πιστεύω ότι η ερμηνεία που δίνει ο Άλκης στο πρώτο του post είναι αυτή που εκφράζει καλύτερα το "νόημα" του βιβλίου και του μαθήματος γενικότερα.

Αν και η αναδρομή, προς το παρόν, είναι εκτός ύλης, εν τούτοις αποτελει στοιχείο του γνωστικού αντικειμένου οπότε εμείς τουλάχιστον θα πρέπει να λειτουργούμε ΚΑΙ με την αναδρομή κατά νου.

Η προσωπική μου ερμηνεία είναι ότι οποιαδήποτε αναφορά στο όνομα της συνάρτησης συνιστά κλήση της.  Μοναδική "εξαίρεση" αποτελεί η εντολή (ή οι εντολές) εκχώρησης τιμής στο όνομά της, μέσα στον κορμό των εντολών που περιλαμβάνει.

Εξ άλλου, και τα λεγόμενα του βιβλίου στο "εντός ύλης" κομμάτι, πιστεύω ότι επιβεβαιώνουν αυτή την άποψη.

σελ.213, προτελευταία παράγραφος: Κάθε συνάρτηση εκτελείται ακριβώς όπως εκτελούνται και οι ενσωματωμένες συναρτήσεις της ΓΛΩΣΣΑς.  Απλώς αναφέρεται το όνομά της σε μία έκφραση ή σε μία εντολή και επιστρέφεται η τιμή της

Το παράδειγμα που αναφέρει από τη VB ο vassilis (if y < min) αλλά και ο Anastassios σε ΓΛΩΣΣΑ (ΑΝ β < min ΤΟΤΕ κ.λπ) συνιστούν χρήση του ονόματος της συνάρτησης σε έκφραση , κάτι που με βάση το βιβλίο, αποτελεί κλήση της συναρτησης και ΟΧΙ προσπέλαση στην "τιμή" της
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: vassilis στις 03 Μαΐου 2006, 08:55:27 ΜΜ
Αυτό που ήθελα να πω - και μάλλον τελικά συμφωνούμε - είναι απλώς ότι το αν η χρήση του ονόματος της συνάρτησης (χωρίς παρενθέσεις και παραμέτρους) σε κάποια έκφραση εντός της συνάρτησης θα θεωρηθεί σαν προσπάθεια αναδρομής ή θα αντιμετωπιστεί σαν αναφορά σε τοπική μεταβλητή, είναι συντακτική λεπτομέρεια της κάθε γλώσσας (η Pascal και η VB το αντιμετωπίζουν διαφορετικά), και δεν υπάρχει κάποιος γενικός κανόνας, κάποιο “θέσφατο”. Δεν αντιμετωπίζεται υποχρεωτικά σαν αναδρομή επειδή έτσι το αντιμετωπίζει η PASCAL.

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

Όπως είπε και ο Άλκης, για να εξηγήσουμε στα παιδιά είτε το ένα είτε το άλλο, πρέπει να κάνουμε επιπλέον διευκρινίσεις (είτε για την αναδρομή είτε για τοπικές μεταβλητές και τη χρήση παρενθέσεων στην κλήση χωρίς παραμέτρους) που μάλλον θα δυσκολευτούν να κατανοήσουν. Και κατά τη γνώμη μου, δεν αξίζει τον κόπο και δεν έχει νόημα να γίνει κάτι τέτοιο, όπως νομίζω δεν αξίζει τον κόπο να συνεχίσουμε τη συζήτηση στο συγκεκριμένο θέμα.

Απλώς θεωρώ ότι δε θα πρέπει να θεωρούνται λάθη τέτοιες περιπτώσεις, ούτε καν συντακτικά. Δε νομίζω ότι προκύπτει από κάπου.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: filippos στις 03 Μαΐου 2006, 09:50:37 ΜΜ
@Vassilis

έχεις εντοπίσει κανένα παράδειγμα στο διδακτικό πακέτο (βιβλίο - τετράδιο μαθητή, βιβλίο καθηγητή) που να "χειρίζεται" με αυτό τον τρόπο το όνομα της συνάρτησης μέσα σε έκφραση και να μην εννοεί αναδρομή;

Θα ήταν χρήσιμο για τη συζήτηση.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: vassilis στις 03 Μαΐου 2006, 11:33:36 ΜΜ
Δεν έχω εντοπίσει κανένα παράδειγμα που να χρησιμοποιεί το όνομα της συνάρτησης (χωρίς παρενθέσεις και παραμέτρους) σε κάποια έκφραση εντός της συνάρτησης.

Δεν έχω εντοπίσει επίσης και κανένα παράδειγμα που να εξυπηρετούσε να το κάνει αλλά να το αποφεύγει χρησιμοποιώντας βοηθητική μεταβλητή.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: filippos στις 04 Μαΐου 2006, 07:49:06 ΜΜ
Όπως φαίνεται και από τη μέχρι τώρα συζήτηση, εάν προσπαθήσουμε να ερμηνεύσουμε τη ΓΛΩΣΣΑ με βάση άλλες, γνωστές (και πραγματικές), γλώσσες προγραμματισμού, θα καταλήξουμε σε διαφορετικές ερμηνείες.  Επομένως δεν πρέπει να λειτουργήσουμε έτσι.  Δε θα ήταν ασφαλές για τους μαθητές μας.

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

Το βιβλίο ορίζει τα υποπρογράμματα με ένα ιδιαίτερο τρόπο που εξυπηρετεί παιδαγωγικούς περισσότερο παρά τεχνικούς σκοπούς.  Αυτό ερμηνεύει και την επιλογή του μηχανισμού copy-in-copy-out για τη μεταβίβαση των τιμών των παραμέτρων αλλά και τον ορισμό του τρόπου κλήσης των συναρτήσεων σε σχέση με την ήδη "κεκτημένη" γνώση των μαθητών από τις μαθηματικές συναρτήσεις.

Πιστεύω ότι πρέπει να μείνουμε σε αυτή την έκφραση του βιβλίου: Κάθε συνάρτηση εκτελείται ακριβώς όπως εκτελούνται και οι ενσωματωμένες συναρτήσεις της ΓΛΩΣΣΑς.  Απλώς αναφέρεται το όνομά της σε μία έκφραση ή σε μία εντολή και επιστρέφεται η τιμή της

Το παραπάνω απόσπασμα πιστεύω είναι αρκετά σαφές για να μπορούμε να υιοθετήσουμε την άποψη ότι το μόνο μέρος στο οποίο μπορεί να χρησιμοποιηθεί το όνομα της συνάρτησης ΧΩΡΙΣ να αποτελεί κλήση είναι το αριστερό μέλος μίας εντολής εκχώρησης.  Οπουδήποτε αλλού και αν χρησιμοποιηθεί θα είναι είτε έκφραση, όπως πχ:
Όνομα < Χ
Όνομα * 2
κ.ο.κ.είτε εντολή, πχ:
ΓΡΑΨΕ Όνομα

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

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

Νομίζω ότι θα πρέπει να αποφύγουμε να δημιουργήσουμε μία επιπλέον ασάφεια.  Εκτιμώ ότι τα "ελληνικά" του βιβλίου είναι επαρκή για να ξεκαθαρίσουν τον προβληματισμό μας.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: P.Tsiotakis στις 11 Μαΐου 2006, 06:20:25 ΜΜ

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

ΣΥΝΑΡΤΗΣΗ Όνομα_συνάρτησης (παράμετροι)
ΜΕΤΑΒΛΗΤΕΣ
...
ΑΡΧΗ

... εντολές που υπολογίζουν την προς επιστροφή τιμή και αγνοούν την ύπάρξη της συνάρτησης
... ουσιαστικά ο "αλγόριθμος" (ψευδογλώσσα) που υπολογίζει την τιμή που θα επιστραφεί


Όνομα_συνάρτησης <- τιμή_που_επιστρέφεται
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Απλά δηλώνω μια μεταβλητή παραπάνω... Χρειάζεται κάτι πιο απλό ο μαθητής;
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: EleniK στις 12 Μαΐου 2006, 01:12:56 ΠΜ
Φαντάζομαι ότι είναι λάθος βιασύνης, αλλά δηλώνεται και ο τύπος της συνάρτησης.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: filippos στις 18 Μαΐου 2006, 11:09:07 ΠΜ
Η μεθοδολογία που προτείνει ο Παναγιώτης (ptsiotakis) είναι σωστή, ασφαλής και σίγουρη.

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

Ταυτόχρονα όμως οι μαθητές οφείλουν να είναι σε θέση να κατανοούν ΤΙ μπορεί να γίνει και ΤΙ όχι.  Υπ αυτό το πρίσμα η συζήτηση που γίνεται εδώ είναι δόκιμη και σωστή αφού, εκτός από μία ασφαλή μεθοδολογία πρέπει να ειμαστε σίγουροι ότι  οι μαθητές κατανοούν τη φιλοσοφία των συναρτήσεων, το πώς λειτουργούν και ποιά είναι τα όριά τους.

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

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

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

Πρέπει όμως ταυτρόχρονα να είναι σε θέση να αποφασίζουν υπο ποιές προϋποθέσεις (και μεποιο τρόπο) "δικαιούνται" να χρησιμοποιοήσουν απ ευθείας το όνομα της συνάρτησης στον κορμό των εντολών της.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: P.Tsiotakis στις 18 Μαΐου 2006, 04:21:11 ΜΜ

Αν δεν είμαστε εμείς σε θέση να καταννοούμε τι μπορεί να γίνει και τι όχι, τότε πως και γιατί θα πρέπει να το κάνουν οι μαθητές;
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: episkeptis στις 18 Μαΐου 2006, 05:58:38 ΜΜ
καλά εμείς για ... καιρό πολύ διαφωνούμε ακόμη ποιά θα είναι η τιμή του i μετά το τέλος του ΓΙΑ... τι να συζητάμε τώρα !!!

Και ακόμα αποτελεί "στοιχείο προβληματισμού" αν στίς εξετάσεις επιτρέπεται να ζητηθεί ΠΡΟΓΡΑΜΜΑ.

Αυτό δε σημαίνει ότι οι μαθητές δε δικαιούνται να γνωρίζουν ΠΩΣ να σκέφτονται.  Ίσως εμείς να πρέπει να ξεκαθαρίσουμε ΤΙ πρέπει να διδάξουμε και ΠΩΣ.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: P.Tsiotakis στις 19 Μαΐου 2006, 10:41:04 ΠΜ

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

Η ουσία στην ανάπτυξη της συνάρτησης είναι αλλού. Και όσο δεν βλέπουμε τα πράγματα με την οπτική γωνία των παιδιών, αλλά χρησιμοποιούμε τη δική μας, τόσο θα μπερδεύουμε τα πράγματα
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: filippos στις 20 Μαΐου 2006, 02:16:31 ΜΜ
Για τη διδασκαλία των συναρτήσεων, θεωρώ επαρκές παιδαγωγικά το μοντέλο που περιέγραψε και ο Παναγιώτης.

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

Εν τούτοις, κάποια στιγμή, εμφανίστηκε μία άσκηση η οποία είχε τη μορφή:

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]
ΣΥΝΑΡΤΗΣΗ Σ(Χ): ΧΑΡΑΚΤΗΡΑΣ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ
ΑΡΧΗ
  ΕΠΙΛΕΞΕ Χ
   ΠΕΡΙΠΤΩΣΗ 1
    Σ <- "Α"
   ΠΕΡΙΠΤΩΣΗ 2
    Σ <- "Β"
   ΠΕΡΙΠΤΩΣΗ 3
    Σ <- "Γ"
   ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
    Σ <- "Δ"
  ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


και κάποιοι μαθητές κρέμασαν σαγόνια...  "ΓΙΝΕΤΑΙ ???" ήταν η απορία των περισσότερων. 

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

Είτε το πιστεύετε είτε όχι, υπάρχουν μαθητές οι οποίοι πιστεύουν ότι κατά την προσπέλαση των στοιχείων δισδιάστατου πίνακα, ο δείκτης των γραμμών πρέπει υποχρεωτικά να είναι I και των στηλών υποχρεωτικά j διαφορετικά ο αλγόριθμος δε δουλεύει. !!!

Υπάρχουν μαθητές οι οποίοι, την προσπέλαση των στοιχείων της διαγωνίου τετραγωνικού πίνακα, τη δέχονται μόνο ως :

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]
ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ Ν
  ΓΙΑ J ΑΠΟ Ι ΜΕΧΡΙ Ν
    ΑΝ Ι = J ΤΟΤΕ
      ΕΜΦΑΝΙΣΕ Π[I, J]
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


Αφού «...μόνο με J προσπελαύνονται οι στήλες...»  και θεωρούν το

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
  ΕΜΦΑΝΙΣΕ Π[Ι, Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


λάθος !!! ????  Και έχουμε όλοι σίγουρα δει και πολλά άλλα παρόμοια παραδείγματα.

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

Χρόνο με το χρόνο τα θέματα των εξετάσεων (οφείλουν να) αλλάζουν.  Η έμφαση εκτιμώ ότι μετακινείται προς την αναγνώριση ικανοτήτων ανάλυσης και κατανόησης παρά απλά επίλυσης με συγκεκριμένα βήματα.

Αντίστοιχα βέβαια ωριμάζει και ο δικός μας τρόπος διδασκαλίας
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: din_os στις 09 Απρ 2013, 02:25:45 ΜΜ
@alkisg η απάντησή σου λέει κάτι πολύ σημαντικό

Παράθεση
ότι δηλαδή αν μπουν παρενθέσεις τότε πρόκειται για κλήση συνάρτησης (και γίνεται αναδρομή), ενώ αν δεν μπουν τότε είναι μεταβλητή... Δε θα ήθελα να το διδάξω στους μαθητές. :)

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

Πριν απο 5 χρόνια δεν μου τύχαιναν συχνά τέτοιες ερωτήσεις... ίσως τώρα θα πρέπει να τις απαντούμε καλύτερα, εφόσον οι μαθητές βελτιώνονται στην κατανόηση, και ο βαθμός κρίνεται στις λεπτομέρειες.

Δεν θα μαλώσω για το αν είναι σωστό η λάθος... είναι όμως αρκετά ασαφής για να μπεί ώς option στις ασάφειες του Διερμηνευτή;
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: alkisg στις 09 Απρ 2013, 03:01:59 ΜΜ
Παράθεση από: din_os στις 09 Απρ 2013, 02:25:45 ΜΜ
Δυστυχώς (ευτυχώς;) υπήρξε μαθητής που του είπα "να το αποφεύγεις, γιατι είναι σαν να ξανακαλείς την συνάρτηση (αναδρομή)" και μου απαντά "αν ήθελα να την ξανακαλέσω θα έβαζα παρενθέσεις".

Σύμφωνοι, ο μαθητής προτείνει μια λογική υλοποίηση. Όμως, δεν ξέρω κάποια γλώσσα προγραμματισμού που να υλοποιεί αυτό που προτείνει (πιθανώς να υπάρχει, εγώ πάντως δεν ξέρω κάποια). Η ΓΛΩΣΣΑ έχει επιρροές από Fortran, Visual Basic και Pascal, και δεν νομίζω ότι κάποια από αυτές υποστηρίζει τη χρήση του ονόματος μιας συνάρτησης ως μεταβλητή.

Για παράδειγμα, http://msdn.microsoft.com/en-us/library/sect4ck6.aspx => "You call a Function procedure by using the procedure name, followed by the argument list in parentheses, in an expression. You can omit the parentheses only if you aren't supplying any arguments."

Δηλαδή ακόμα κι αν παραλείψεις τις παρενθέσεις, καλείς τη συνάρτηση, δεν χρησιμοποιείς την τιμή της. Μάλιστα στην Pascal είναι υποχρεωτικό να μην μπουν παρενθέσεις κατά την κλήση μιας συνάρτησης που δεν έχει παραμέτρους.


Επομένως δε βλέπω να υπάρχει κάποια χειροπιαστή ένδειξη ότι αυτό που λέει ο μαθητής όντως ισχύει στη ΓΛΩΣΣΑ, δεν υπάρχει "προηγούμενο" στο οποίο να βασιστούμε για να θεωρήσουμε ότι οι συγγραφείς εννοούσαν αυτό που προτείνει. Υπάρχουν αμέτρητα σημεία τα οποία θα μπορούσαν να είχαν οριστεί διαφορετικά, αλλά στο Διερμηνευτή έχει νόημα να μπουν ως επιλογές μόνο όσα είναι "αποδεδειγμένα" ασαφή.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: P.Tsiotakis στις 09 Απρ 2013, 10:32:20 ΜΜ
κατά τη γνώμη μου, όπως πάντα με καθαρά εκπαιδευτικούς και παιδαγωγικούς όρους και όχι προγραμματιστικούς, το όνομα της συνάρτησης δεν είναι μεταβλητή και δεν πρέπει να θεωρείται τέτοια. Είναι άλλο πράγμα και χρησιμοποιείται σε άλλη δουλειά
με ή χωρίς χρήση παρενθέσεων, πρέπει να περάσουμε στα παιδιά οτι αυτο ειναι ένας άλλος μηχανισμός
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: pmouz στις 10 Απρ 2013, 01:14:37 ΠΜ
Παράθεση από: Παναγιώτης Τσιωτάκης στις 09 Απρ 2013, 10:32:20 ΜΜ
κατά τη γνώμη μου, όπως πάντα με καθαρά εκπαιδευτικούς και παιδαγωγικούς όρους και όχι προγραμματιστικούς, το όνομα της μεταβλητής δεν είναι μεταβλητή και δεν πρέπει να θεωρείται τέτοια. Είναι άλλο πράγμα και χρησιμοποιείται σε άλλη δουλειά
με ή χωρίς χρήση παρενθέσεων, πρέπει να περάσουμε στα παιδιά οτι αυτο ειναι ένας άλλος μηχανισμός

Παναγιώτη, μήπως εννοείς το όνομα της συνάρτησης;
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: P.Tsiotakis στις 10 Απρ 2013, 08:37:40 ΠΜ
ναι, ναι, thanks
θα το διορθώσω...
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: georgm στις 28 Απρ 2014, 05:44:42 ΜΜ
Συγγνώμη που επαναφέρω ένα θέμα αρκετά συζητημένο, αλλά, προσωπικά δε μου φαίνεται σωστό να αντιμετωπίζεται ως συντακτικό λάθος η χρήση του ονόματος μίας συνάρτησης ως η μεταβλητή τιμή της μέσα στην ίδια συνάρτηση (χωρίς παρενθέσεις και εφόσον βέβαια έχει πάρει τιμή).

Δηλαδή, θα περίμενα να μεταγλωττίζεται και να εκτελείται σωστά η συνάρτηση:

ΣΥΝΑΡΤΗΣΗ max(Μ, Ν): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Μ, Ν
ΑΡΧΗ
  max <- Ν
  ΑΝ Μ>max ΤΟΤΕ
     max<-Ν
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Εκτός από τη Visual Basic που αναφέρει παραπάνω ένας συνάδελφος, και στην pascal (FREE pascal, lazarus, PAME pascal) μια χαρά μεταγλωττίζεται και εκτελείται ο αντίστοιχος κώδικας.

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

Ειλικρινά, δε νομίζω, ότι θα έπρεπε να διδάξω ότι δεν είναι συντακτικά σωστός ο παραπάνω κώδικας.

Παρακαλώ, θα ήθελα την άποψη σας, όσο κι αν θέμα φαίνεται να είναι διευθετημένο.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: georgm στις 28 Απρ 2014, 08:44:49 ΜΜ
Είχα ένα λογικό μικρολαθάκι παραπάνω :P και το διορθώνω:

ΣΥΝΑΡΤΗΣΗ max(Μ, Ν): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Μ, Ν
ΑΡΧΗ
  max <- Ν
  ΑΝ Μ>max ΤΟΤΕ
     max<-Μ
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Αυτό που με μπέρδεψε περισσότερο είναι στη σελίδα 223 του βιβλίου που γράφει:

ΣΥΝΑΡΤΗΣΗ Παραγοντικό(Ν):ΑΚΕΡΑΙΑ
!Υπολογισμός του παραγοντικού με επαναληπτική διαδικασία
ΜΕΤΑΒΛΗΤΕΣ
          ΑΚΕΡΑΙΕΣ: i, Ν
ΑΡΧΗ
    Fact<-1
    ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν
        Fact<-Fact*i
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

όπου είτε ήθελε αντί για Παραγοντικό να ονομάσει τη συνάρτηση Fact, είτε ξέχασε να δηλώσει τη Fact και να βάλει την τελευταία εκχώρηση.

Βέβαια, παρακάτω στις υλοποιήσεις με basic και pascal, ακολουθεί τη δεύτερη περίπτωση.
Τίτλος: Απ: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης
Αποστολή από: petrosp13 στις 28 Απρ 2014, 10:25:04 ΜΜ
Δεν υπάρχει κανένα πρόβλημα