ΣΥΝΑΡΤΗΣΗ ΧΩΡΙΣ ΠΑΡΑΜΕΤΡΟΥΣ

Ξεκίνησε από summer, 11 Μαρ 2009, 02:46:53 ΠΜ

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

evry


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

ntzios kostas

Παιδία το νόημα της απαγόρευσης του διάβασε στη συνάρτηση πηγάζει από τα μαθηματικά.
f(x,y)=... Άρα η τιμή της  f είναι συναρτήσει των παραμέτρων χ και y και καμίας άλλης. Δηλαδή αν μου δίνεις το χ και y  πρέπει να μπορώ να βρω την f. Έτσι και σε εμάς η τιμή της συνάρτησης είναι συναρτήσει μόνο των παραμέτρων που γράφουμε στη παρένθεση, και όχι και μιας τιμής που μας δίνει ο χρήστης η οποία δεν αποτελεί παράμετρο επηρεασμού της συνάρτησης.
Το μάθημα Ανάπτυξη Εφαρμογών δεν έχει σαν στόχο την εκμάθηση κάποιου συγκεκριμένου προγραμματιστικού περιβάλλοντος ούτε την καλλιέργεια προγραμματιστικών δεξιοτήτων από τη μεριά των μαθητών. Δεν αποσκοπεί στη λεπτομερειακή εξέταση της δομής, του ρεπερτορίου και των συντακτικων κανόνων κάποιας γλώσσας...

evry

 
  Ένα λεπτό γιατί δεν κατάλαβα πως πηγάζει από τα μαθηματικά. Στα μαθηματικά δεν υπάρχουν τέτοιες εντολές ούτως ή άλλως. Το Διάβασε μέσα σε συνάρτηση στον προγραμματισμό θα μπορούσε να θεωρηθεί παράμετρος στα μαθηματικά. Επίσης σχεδόν σε όλες τις γλώσσες προγραμματισμού που έχω υπόψη μου (δεν είναι και πολλές αλλά είναι αυτές που μαθαίνουν οι περισσότεροι, δηλαδή C, C++, Java, Pascal ) δεν απαγορεύεται πουθενά κάτι τέτοιο. Μάλιστα σε πολλές περιπτώσεις είναι ιδιαίτερα χρηστικό
(βλέπε (ch = getch())!=EOF )
   Για να μπορέσουμε να αντιπαραβάλλουμε τον προγραμματισμό με τα μαθηματικά πρέπει να πάμε σε λ-λογισμό και ακόμα και εκεί δε νομίζω ότι ισχύει κάτι τέτοιο.
   Στη δική μας περίπτωση η τιμή που εισάγεται από Διάβασε μέσα στη συνάρτηση δεν μπορεί να θεωρηθεί και αυτή σαν μια άλλη κατηγορία παραμέτρου?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

ntzios kostas

Στις περισσότερες γλώσσες προγραμματισμού και νομίζω σε όλες επιτρέπεται (Η C νομίζω ότι όλα τα υποπρογράμματα τα ονομάζει συναρτήσεις; ), όπως και επιτρέπεται η συνάρτηση να αλλάζει το περιεχόμενο μίας ή και περισσοτέρων παραμετρων κατά την κλήση της. Απλά δεν  θεωρώ σωστό να τα κάνουμε αυτά με την βοήθεια συνάρτησης. Το βιβλίο σε αυτό το σημείο θέλει να διδάξει όσο γίνεται το σωστό προγραμματισμό και γι΄αυτό απαγορεύει το διάβασε-γράψε και την αλλαγή των παραμέτρων μέσω της συνάρτησης.
ΠαράθεσηΣτη δική μας περίπτωση η τιμή που εισάγεται από Διάβασε μέσα στη συνάρτηση δεν μπορεί να θεωρηθεί και αυτή σαν μια άλλη κατηγορία παραμέτρου?
Οι παράμετροι σε όλες τις θετικές επιστήμες πρέπει να έχουν τιμή πριν την κλήση της συνάρτησης  και πρέπει να φαίνονται στην παρένθεση.
Το μάθημα Ανάπτυξη Εφαρμογών δεν έχει σαν στόχο την εκμάθηση κάποιου συγκεκριμένου προγραμματιστικού περιβάλλοντος ούτε την καλλιέργεια προγραμματιστικών δεξιοτήτων από τη μεριά των μαθητών. Δεν αποσκοπεί στη λεπτομερειακή εξέταση της δομής, του ρεπερτορίου και των συντακτικων κανόνων κάποιας γλώσσας...

evry

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

Παράθεση από: ntzios kostas στις 24 Μαΐου 2009, 10:58:32 ΜΜ
Το βιβλίο σε αυτό το σημείο θέλει να διδάξει όσο γίνεται το σωστό προγραμματισμό και γι΄αυτό απαγορεύει το διάβασε-γράψε και την αλλαγή των παραμέτρων μέσω της συνάρτησης.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

ntzios kostas

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

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

evry


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

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

mathiopoulosk


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

ΣΥΝΑΡΤΗΣΗ ΑΘΡΟΙΣΜΑ():ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ι
ΑΡΧΗ
   ΑΘΡΟΙΣΜΑ<--0
   ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 100
       ΑΘΡΟΙΣΜΑ<--ΑΘΡΟΙΣΜΑ + Ι
   ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Σε σχέση με το αν μπορούμε να βάζουμε σταθερές για παραμέτρους, αυτό παραβαίνει τον ορισμό ότι οι παράμετροι είναι μεταβλητές.
Θα έπρεπε να αλλάξει και ο ορισμός.

Μαθιόπουλος Κωνσταντίνος
http://mathiopoulosk.dyndns.org




ΜΑΘΙΟΠΟΥΛΟΣ Κ.
http://www.ictlab.edu.gr

antonproto

Παράθεση από: ntzios kostas στις 24 Μαΐου 2009, 10:01:33 ΜΜ
Παιδία το νόημα της απαγόρευσης του διάβασε στη συνάρτηση πηγάζει από τα μαθηματικά.
f(x,y)=... Άρα η τιμή της  f είναι συναρτήσει των παραμέτρων χ και y και καμίας άλλης. Δηλαδή αν μου δίνεις το χ και y  πρέπει να μπορώ να βρω την f. Έτσι και σε εμάς η τιμή της συνάρτησης είναι συναρτήσει μόνο των παραμέτρων που γράφουμε στη παρένθεση, και όχι και μιας τιμής που μας δίνει ο χρήστης η οποία δεν αποτελεί παράμετρο επηρεασμού της συνάρτησης.

Καλησπέρα κύριοι, είναι το πρώτο μου μηνυμα στο στέκι αν και σας παρακολουθώ αρκετά χρόνια. 
Επαναφέρω το θέμα διότι έχω βρεί την απάντηση στον φίλο evry.  O ntzios kostas κατα κάποιο τρόπο λέει τον λόγο.  Εψαξα ένα βιβλίο που είχα στο πανεπιστήμιο και βρήκα το εξής κομμάτι:

A general rule of thumb is to always use a procedure when more than one result is returned.  If a single result is returned, use a function when a pure computation is performed that requires no data beyond what is provided through the parameter list.  If input or output operations are also performed, use a procedure instead of a function , even if only a single result is returned.  The reason is that a function call can be inserted in an expression, and it is generally not useful to read or display information as part of an expression evaluation.

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

Καλό βράδυ σε όλους

alexandra64

ΚΑΛΗΣΠΕΡΑ!!!
ΘΑ ΜΠΟΡΟΥΣΕ ΝΑ ΜΟΥ ΑΠΑΝΤΗΣΕΙ ΚΑΠΟΙΟΣ ΤΙ ΕΝΝΟΕΙ ΤΟ ΒΙΒΛΙΟ ΟΤΙ <<ΤΑ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΠΡΕΠΕΙ ΝΑ ΕΧΟΥΝ ΜΙΑ ΕΙΣΟΔΟ ΚΑΙ ΜΙΑ ΕΞΟΔΟ;;;>>
ΣΕ ΤΙ ΑΝΑΦΕΡΕΤΑΙ ΩΣ "ΜΙΑ" ΓΙΑ ΤΗΝ ΕΙΣΟΔΟ;;;ΔΕΝ ΕΝΝΟΕΙ ΤΗ ΛΙΣΤΑ ΠΑΡΑΜΕΤΡΩΝ ΝΑ ΦΑΝΤΑΣΤΩ ΑΦΟΥ ΧΡΗΣΙΜΟΠΟΙΟΥΜΕ ΩΣ ΕΙΣΟΔΟ ΟΣΕΣ ΜΕΤΑΒΛΗΤΕΣ ΧΡΕΙΑΖΟΜΑΣΤΕ....

Laertis

Εννοεί ότι κάθε υποπρόγραμμα έχει ένα σημείο-πόρτα όπου εισάγονται ή/και εξάγονται δεδομένα και όχι ένα δεδομένο ώς είσοδο ή/και έξοδο.
Στη διαδικασία αυτή η "πόρτα" είναι η λίστα παραμέτρων και στη συνάρτηση για είσοδο η λίστα παραμέτρων και έξοδο το όνομα της συνάρτησης.
Ένα παράδειγμα που χρησιμοποιώ για να το κατανοήσουν τα παιδιά είναι η πόρτα (μία είσοδος-έξοδος) ενός δωματίου,  όπου μπορούν να μπαίνουν και βγαίνουν πολλά άτομα (δεδομένα).
Δε λαμβάνουμε υπόψη όσους θέλουν να χρησιμοποιούν τα παράθυρα  ;)
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

gthal

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

(είναι πράγματι πολύ ατυχές το ότι χρησιμοποιεί τις λέξεις είσοδος και έξοδος τις οποίες ήδη έχει συνδέσει τόσο πολύ με τη ροή δεδομένων προς ή από τον αλγόριθμο)
Φιλικά,
Γιώργος Θαλασσινός