περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης

Ξεκίνησε από annastasios, 05 Απρ 2006, 09:03:51 ΜΜ

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

annastasios

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


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

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

ΑΡΧΗ


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

ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ 

alkisg

Εκχωρήσεις τιμής μπορούν να γίνουν οσεσδήποτε.
Όμως όταν το min χρησιμοποιείται κάπου αλλού (π.χ. ΑΝ β < min ΤΟΤΕ) τότε γίνεται αναδρομή, δηλαδή ξανακαλείς τη min με νέες παραμέτρους. Δες το παράδειγμα του βιβλίου που υπολογίζει αναδρομικά το Ν παραγοντικό με συνάρτηση.

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

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


lsourtzo

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

Σωστός !!!!!!

vassilis

Νομίζω ότι θα πρέπει να μην είμαστε ιδιαίτερα σχολαστικοί με τέτοια θέματα. Επισημαίνω ότι στη Visual Basic, η παρακάτω συνάρτηση είναι σωστή:

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

  min = x
 
  If y < min Then min = y
 

End Function


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

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

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

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

filippos


alkisg

Ο τρόπος χρήσης που αναφέρει ο Βασίλης εξομοιώνει ουσιαστικά το όνομα της συνάρτησης με τοπική μεταβλητή... Και η Object Pascal (Delphi) το υποστηρίζει αυτό, αλλά όχι με το όνομα της συνάρτησης, αλλά με τη αδήλωτη/τοπική μεταβλητή Result.

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

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

filippos

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

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

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

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

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

Το παράδειγμα που αναφέρει από τη VB ο vassilis (if y < min) αλλά και ο Anastassios σε ΓΛΩΣΣΑ (ΑΝ β < min ΤΟΤΕ κ.λπ) συνιστούν χρήση του ονόματος της συνάρτησης σε έκφραση , κάτι που με βάση το βιβλίο, αποτελεί κλήση της συναρτησης και ΟΧΙ προσπέλαση στην "τιμή" της

vassilis

Αυτό που ήθελα να πω - και μάλλον τελικά συμφωνούμε - είναι απλώς ότι το αν η χρήση του ονόματος της συνάρτησης (χωρίς παρενθέσεις και παραμέτρους) σε κάποια έκφραση εντός της συνάρτησης θα θεωρηθεί σαν προσπάθεια αναδρομής ή θα αντιμετωπιστεί σαν αναφορά σε τοπική μεταβλητή, είναι συντακτική λεπτομέρεια της κάθε γλώσσας (η Pascal και η VB το αντιμετωπίζουν διαφορετικά), και δεν υπάρχει κάποιος γενικός κανόνας, κάποιο “θέσφατο”. Δεν αντιμετωπίζεται υποχρεωτικά σαν αναδρομή επειδή έτσι το αντιμετωπίζει η PASCAL.

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

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

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

filippos

@Vassilis

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

Θα ήταν χρήσιμο για τη συζήτηση.

vassilis

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

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

filippos

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

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

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

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

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

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

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

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

P.Tsiotakis


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

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

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


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

Απλά δηλώνω μια μεταβλητή παραπάνω... Χρειάζεται κάτι πιο απλό ο μαθητής;

EleniK

Φαντάζομαι ότι είναι λάθος βιασύνης, αλλά δηλώνεται και ο τύπος της συνάρτησης.
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

filippos

Η μεθοδολογία που προτείνει ο Παναγιώτης (ptsiotakis) είναι σωστή, ασφαλής και σίγουρη.

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

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

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

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

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

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