Αποστολέας Θέμα: περισσότερες από μία καταχωρήσεις στη μεταβλητή με το όνομα της συνάρτησης  (Αναγνώστηκε 7724 φορές)

Παναγιώτης Τσιωτάκης

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3136
  • Dracarys
    • Panagiotis Tsiotakis

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

episkeptis

  • Επισκέπτης
καλά εμείς για ... καιρό πολύ διαφωνούμε ακόμη ποιά θα είναι η τιμή του i μετά το τέλος του ΓΙΑ... τι να συζητάμε τώρα !!!

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

Αυτό δε σημαίνει ότι οι μαθητές δε δικαιούνται να γνωρίζουν ΠΩΣ να σκέφτονται.  Ίσως εμείς να πρέπει να ξεκαθαρίσουμε ΤΙ πρέπει να διδάξουμε και ΠΩΣ.

Παναγιώτης Τσιωτάκης

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3136
  • Dracarys
    • Panagiotis Tsiotakis

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

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

filippos

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 139
Για τη διδασκαλία των συναρτήσεων, θεωρώ επαρκές παιδαγωγικά το μοντέλο που περιέγραψε και ο Παναγιώτης.

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

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

Κώδικας: Text
  1. ΣΥΝΑΡΤΗΣΗ Σ(Χ): ΧΑΡΑΚΤΗΡΑΣ
  2. ΜΕΤΑΒΛΗΤΕΣ
  3.   ΑΚΕΡΑΙΕΣ: Χ
  4. ΑΡΧΗ
  5.   ΕΠΙΛΕΞΕ Χ
  6.    ΠΕΡΙΠΤΩΣΗ 1
  7.     Σ <- "Α"
  8.    ΠΕΡΙΠΤΩΣΗ 2
  9.     Σ <- "Β"
  10.    ΠΕΡΙΠΤΩΣΗ 3
  11.     Σ <- "Γ"
  12.    ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
  13.     Σ <- "Δ"
  14.   ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
  15. ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

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

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

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

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

Κώδικας: Text
  1. ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ Ν
  2.   ΓΙΑ J ΑΠΟ Ι ΜΕΧΡΙ Ν
  3.     ΑΝ Ι = J ΤΟΤΕ
  4.       ΕΜΦΑΝΙΣΕ Π[I, J]
  5.     ΤΕΛΟΣ_ΑΝ
  6.   ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  7. ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

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

Κώδικας: Text
  1. ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
  2.   ΕΜΦΑΝΙΣΕ Π[Ι, Ι]
  3. ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

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

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

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

Αντίστοιχα βέβαια ωριμάζει και ο δικός μας τρόπος διδασκαλίας

din_os

  • Οπαδός
  • **
  • Μηνύματα: 17
@alkisg η απάντησή σου λέει κάτι πολύ σημαντικό

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

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

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

Δεν θα μαλώσω για το αν είναι σωστό η λάθος... είναι όμως αρκετά ασαφής για να μπεί ώς option στις ασάφειες του Διερμηνευτή;

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4801
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Δυστυχώς (ευτυχώς;) υπήρξε μαθητής που του είπα "να το αποφεύγεις, γιατι είναι σαν να ξανακαλείς την συνάρτηση (αναδρομή)" και μου απαντά "αν ήθελα να την ξανακαλέσω θα έβαζα παρενθέσεις".

Σύμφωνοι, ο μαθητής προτείνει μια λογική υλοποίηση. Όμως, δεν ξέρω κάποια γλώσσα προγραμματισμού που να υλοποιεί αυτό που προτείνει (πιθανώς να υπάρχει, εγώ πάντως δεν ξέρω κάποια). Η ΓΛΩΣΣΑ έχει επιρροές από 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 είναι υποχρεωτικό να μην μπουν παρενθέσεις κατά την κλήση μιας συνάρτησης που δεν έχει παραμέτρους.


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

Παναγιώτης Τσιωτάκης

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3136
  • Dracarys
    • Panagiotis Tsiotakis
κατά τη γνώμη μου, όπως πάντα με καθαρά εκπαιδευτικούς και παιδαγωγικούς όρους και όχι προγραμματιστικούς, το όνομα της συνάρτησης δεν είναι μεταβλητή και δεν πρέπει να θεωρείται τέτοια. Είναι άλλο πράγμα και χρησιμοποιείται σε άλλη δουλειά
με ή χωρίς χρήση παρενθέσεων, πρέπει να περάσουμε στα παιδιά οτι αυτο ειναι ένας άλλος μηχανισμός
« Τελευταία τροποποίηση: 10 Απρ 2013, 08:37:58 πμ από Παναγιώτης Τσιωτάκης »

pmouz

  • Θαμώνας
  • ***
  • Μηνύματα: 33
κατά τη γνώμη μου, όπως πάντα με καθαρά εκπαιδευτικούς και παιδαγωγικούς όρους και όχι προγραμματιστικούς, το όνομα της μεταβλητής δεν είναι μεταβλητή και δεν πρέπει να θεωρείται τέτοια. Είναι άλλο πράγμα και χρησιμοποιείται σε άλλη δουλειά
με ή χωρίς χρήση παρενθέσεων, πρέπει να περάσουμε στα παιδιά οτι αυτο ειναι ένας άλλος μηχανισμός

Παναγιώτη, μήπως εννοείς το όνομα της συνάρτησης;

Παναγιώτης Τσιωτάκης

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3136
  • Dracarys
    • Panagiotis Tsiotakis
ναι, ναι, thanks
θα το διορθώσω...

georgm

  • Νέος
  • *
  • Μηνύματα: 7
Συγγνώμη που επαναφέρω ένα θέμα αρκετά συζητημένο, αλλά, προσωπικά δε μου φαίνεται σωστό να αντιμετωπίζεται ως συντακτικό λάθος η χρήση του ονόματος μίας συνάρτησης ως η μεταβλητή τιμή της μέσα στην ίδια συνάρτηση (χωρίς παρενθέσεις και εφόσον βέβαια έχει πάρει τιμή).

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

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

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

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

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

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

georgm

  • Νέος
  • *
  • Μηνύματα: 7
Είχα ένα λογικό μικρολαθάκι παραπάνω :P και το διορθώνω:

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

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

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

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

Βέβαια, παρακάτω στις υλοποιήσεις με basic και pascal, ακολουθεί τη δεύτερη περίπτωση.

petrosp13

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 2163
Δεν υπάρχει κανένα πρόβλημα
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής