ΣΥΝΑΡΤΗΣΗ - ΔΙΑΔΙΚΑΣΙΑ

Ξεκίνησε από klitos, 13 Φεβ 2006, 09:44:45 ΠΜ

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

klitos

Συναδελφοι ... στην ΔΙΑΔΙΚΑΣΙΑ, συμφωνα με το σχολικό βιβλίο, μπορούμε να χρησιμοποιούμε ΟΛΕΣ τις εντολές που χρησιμοποιούμε στο κυρίως πρόγραμμα. Στις συναρτήσεις, απο οτι γνωρίζω, ΔΕΝ μπορούμε να χρησιμοποιούμε τις εντολες ΔΙΑΒΑΣΕ και ΓΡΑΨΕ. Οταν ειναι απαραίτητο να χρησιμοποιήσουμε αυτές τις δυο εντολές τότε ειμαστε υποχρεωμένοι να "κατασκευάζουμε" σαν υποπρόγραμμα ΔΙΑΔΙΚΑΣΙΑ και οχι ΣΥΝΑΡΤΗΣΗ. Προσφατα σε βιβλία σχετικά με το μάθημα βρήκα ασκήσεις και παραδείγματα που αναγράφουν στο κυρίως σώμα της ΣΥΝΑΡΤΗΣΗΣ  την εντολή ΔΙΑΒΑΣΕ ...Μήπως γνωρίζετε κατι τις ....????
κλητος χατζηγεωργιου

P.Tsiotakis


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

2. Τα βοηθήματα του μαθήματος δεν αποτελούν σημείο αναφοράς για το μάθημα. Μόνο το ΔΙΔΑΚΤΙΚΟ ΠΑΚΕΤΟ - όσες ατέλειες κι αν έχει

(ελπίζω να μην έχω κάνει και γω τέτοια πατατούλα)

andreas_p

Πιστεύω ότι μπορείς αλλά προφανώς δεν έχει νόημα.
Χρησιμοποιούμε ΣΥΝΑΡΤΗΣΗ μόνο για τον υπολογισμό και επιστροφή ΜΙΑΣ τιμής με το όνομά της και όχι για εισαγωγή (ΔΙΑΒΑΣΕ) ή εμφάνιση στοιχείων (ΓΡΑΨΕ). Γιατί αν θέλαμε κάτι τέτοιο απλά θα κάναμε χρήση ΔΙΑΔΙΚΑΣΙΑΣ.

Ανδρέας

EleniK

Σχετικά με το θέμα συμφωνώ ότι το διάβασε και το γράψε δεν πρέπει να χρησιμοποιούνται σε συνάρτηση.

Ήθελα να ρωτήσω μέσα στην ίδια ενότητα, στο βιβλίο αναφέρεται (διορθώστε με αν κάνω λάθος) ότι ένα υποπρόγραμμα μπορεί να καλέσει ένα άλλο. Μια διαδικασία μπορεί να καλέσει συνάρτηση, μια συνάρτηση μπορεί να καλέσει μια διαδικασία; Μέχρι τώρα το απέτρεπα για κάποιο λόγο, αλλά δεν είμαι και σίγουρη. Εσεις τι γνώμη έχετε;
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

P.Tsiotakis


Σελίδα 215, βιβλίο μαθητή: "Κάθε διαδικασία ή συνάρτηση μπορεί να καλείται από το κύριο πρόγραμμα ή από άλλη διαδικασία ή συνάρτηση..."

Νομίζω οτι είσαι σαφές...

alkisg

...και γεννάται το ερώτημα: εφόσον μια συνάρτηση μπορεί να καλέσει μια διαδικασία, και η διαδικασία μπορεί να περιλαμβάνει ΓΡΑΨΕ, γιατί άραγε η ίδια η συνάρτηση να μην περιλαμβάνει ΓΡΑΨΕ;

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

bagelis1

Να γραφεί υποπρόγραμμα που διαβάζει την ακτίνα ενός κύκλου.

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

klitos_1

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

andreas_p


dozb

#9
Καλησπέρα σε όλους
Όσον αφορά στην ερώτηση του συναδέλφου, μπορείς πιστεύω, να χρησιμοποιήσεις τη ΔΙΑΒΑΣΕ για να δώσεις τιμή σε μια μεταβλητή που χρειάζεσαι στη ΣΥΝΑΡΤΗΣΗ,  αλλά όχι για να δώσεις τιμή σε κάποια από τις τυπικές πραμέτρους, μια που δεν μπορείς να επιστρέψεις την τιμή της στο κυρίως πρόγραμμα... (!!!!)

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



P.Tsiotakis

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

Άρα, στην ουσία δεν μπορεί να χρησιμοποιηθεί. Επομένως, δεν χρειάζεται να είναι στις παραμέτρους...

Το αν επιτρέπεται ή όχι είναι ένα άλλο θέμα. Ίσως η παραπάνω σκέψη αρκεί...


klitos

Συνάδελφε dozb
1ο Αν θεωρήσουμε οτι ο ρόλος της ΣΥΝΑΡΤΗΣΗΣ ειναι να υπολογίζει και να επιστρέφει μια τιμή τότε δεν μπορείς να χρησιμοποιήσεις την ΔΙΑΒΑΣΕ μεσα στην ΣΥΝΑΡΤΗΣΗ. Αν πρέπει να δώσεις μια τιμη σε μια μεταβλητή τότε πρέπει να φροντίσει το ΠΡΟΓΡΑΜΜΑ να την μεταβιβάσει. Διαφορετικά αν μπορούσαμε να χρησιμοποιήσουμε την ΔΙΑΒΑΣΕ τοτε θα μπορούσαμε να χρησιμοποιήσουμε και την ΓΡΑΨΕ ( αφού θα την χρειαζόμασταν για να περιγράψουμε το τι πρόκειται να πληκτρολογηθεί ) ...αρα θα μπορούμε να χρησιμοποιούμε ολες τις εντολές ( πράγμα που επιτρέπεται στις ΔΙΑΔΙΚΑΣΙΕΣ )
2ο Οσον αφορα την ερωτηση σου για τις μεταβλητές που περνάνε σε μια συνάρτηση αυτές πρέπει να ειναι ορισμένες ( να εχουν πάρει τιμή ) διαφορετικά θα ειναι απροσδιόριστες ... συμφωνώ δηλαδή με τον ptsiotaki

κλητος
κλητος χατζηγεωργιου

dozb

"τότε θα είναι απροσδιόριστη και η τιμή της εντός της συνάρτησης."
Στις Διαδικασίες όμως επιτρέπεται, έτσι?

alkisg

Στις διαδικασίες υπάρχουν παράμετροι εισόδου, παράμετροι εξόδου, και πιθανώς (αν και προτιμούμε να το αποφεύγουμε στη ΓΛΩΣΣΑ) παράμετροι ταυτόχρονα εισόδου και εξόδου.

Προφανώς οι παράμετροι εξόδου δε χρειάζεται να αρχικοποιηθούν.

Π.χ. στη Διαδικασία Μέγιστος(α, β, μέγιστος)
που επιστρέφει το μεγαλύτερο από τα α και β, το μέγιστος δε χρειάζεται να έχει αρχικοποιηθεί.

klitos

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

νεος-89

Ειναι σαφές ...
Στο σχολικό βιβλίο (σελ 211 ) ... αφου το υποπρόγραμμα πρε΄πει να διαβάζει δεδομένα , υλοποιείται με διαδικασία.
Επίσης ( σελ 212 ) ... Εφόσον ααπιτείται απο αυτό η εκτέλεση της λειτουργίας τηε εκτύπωσης, πρεπει να υλοποιηθεί με διαδικασια...

evry

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

Πιο συγκεκριμένα

Α) Εισαγωγή τριών δεδομένων
Β) Εισαγωγή ενός δεδομένου

Στο βιβλίο του καθηγητή οι απαντήσεις είναι

Α) Διαδικασία
Β) Συνάρτηση

σα να σου λέε:ι ότι και να κάνεις αν έχεις μια έξοδο ορίζεις συνάρτηση.

Αυτά ως δικηγόρος του διαβόλου
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Πέτρος

τωρα αν πω παλι κατι για το  βιβλιο/διδακτικο πακέτο, θα θεωρηθώ κακοπροαίρετος...

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

Με προβληματίζει το πρεπει να υπολογίζει μια τιμή. Αυτό σημαίνει ότι η εντολή εκχώρησης όταν χρησιμοποιείται πρεπει να έχει παντα στο αριστερό μέλος της το όνομα της συνάρτησης?

EleniK

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

Πετρος

1 Συναρτηση Μπλα(α,β):πραγματική
2  Μεταβλητές
3    Πραγματικές: α,β,γ
4 Αρχή
5  γ<--α+β
6  Μπλα<--γ/2
7 Τέλος_Συνάρτησης

Η παραπάνω είναι η δεν είναι εγκυρη συνάρτηση? Και πιο συγκεκριμένα η έκφραση της 5ης γραμμής είναι σύμφωνη με το "υπολογίζει και επιστρέφει  μόνο μια τιμή" ?


alkisg

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

EleniK

Έχει δίκιο ο Άλκης. Το 'μόνο' αναφέρεται στη μία τιμή που επιστρέφει και όχι στους ενδιάμεσους υπολογισμούς π.χ. μέγιστο τριών αριθμών, θα επιστρέφει το max. H συνάρτησή σου είναι σωστή.
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

klitos

Φυσικά και ειναι έγκυρη η συνάρτηση που έγραψες Πέτρο ... δεν κατάλαβα που ειναι η απορία σου ... ισως στο ότι δεν εγραψες απευθειας την πράξη στο όνομα της συνάρτησης ?

Γενικότερα αυτό που ''ερμηνεύω'' απο το σχολικό βιβλίο ειναι οτι η συνάρτηση επιστρέφει ΜΟΝΟ ΜΙΑ ΤΙΜΗ ( όπως οι συναρτήσεις που χρησιμοποιεί η ΓΛΩΣΣΑ - αναφέρει το βιβλιο σχετικά ) , σαφώς μπορούν να γίνουν πολλές πράξεις και ενδιάμεσοι υπολογισμοί.
κλητος χατζηγεωργιου

Πέτρος

klito το  "υπολογίζει και επιστρέφει μόνο μια τιμή" με προβληματίζει. Και εγώ γενικά ασπάζομαι την άποψη του Άλκη, ωστόσο αν θέλουμε να είμαστε ακριβείς και να ακολουθήσουμε κατά γράμμα τον ορισμό της συνάρτησης, θα οφείλαμε να μη χρησιμοποιούμε εντολή εκχώρησης σε μεταβλητή διαφορετική από το όνομα της. (για να είναι η πρόταση αληθής πρεπει ΚΑΙ να υπολογίζει ΚΑΙ να επιστρεφει μονο 1 τιμή, έτσι για να θυμηθούμε και τις λογικές προτάσεις ...  ;) )

Επισκέπτης

Να υλοποιηθεί συνάρτηση που θα δέχεται ένα πίνακα 10 ακέραιων αριθμών και θα επιστρέφει το πλήθος των μη μηδενικών στοιχείων του πίνακα.

Μπορεί κανένας να υλοποιήσει αυτή τη συνάρτηση χωρίς να χρησιμοποιήσει εντολή εκχώρησης σε μεταβλητή διαφορετική από το όνομα της συνάρτησης;

Ας μη γινόμαστε παράλογα τυπικοί στην "ερμηνεία" των ελληνικών.  Η ουσία είναι νομίζω σαφής. 

Η συνάρτηση δε μπορεί να επιστρέψει περισσότερες από μία τιμές.  Επιστρέφει μόνο μία, και αυτό όχι με κάποια παράμετρο (όπως κάνουν οι διαδικασίες) αλλά με το όνομά της.

Πέτρος

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

alkisg

#26
Άσχετο #1)
Και γιατί να συνδέουμε το «υπολογίζει» με την εκχώρηση τιμής;
Δηλαδή στο
ΔΙΑΒΑΣΕ ακτίνα
ΓΡΑΨΕ "Περίμετρος = ", 2*π*R
δε γίνεται υπολογισμός;
Επίσης, πόσοι υπολογισμοί έγιναν; Απάντηση: δύο, πρώτα υπολογίστηκε το 2*π και μετά το αποτέλεσμά τους πολλαπλασιάστηκε επί R.

Επομένως, αν ήταν να ακριβολογήσουμε και να είμαστε πιστοί στον ορισμό της συνάρτησης, θα έπρεπε να συμπεράνουμε ότι στις συναρτήσεις επιστρέπεται ΜΟΝΟ ΜΙΑ ΠΡΑΞΗ (είτε πολλαπλασιασμός είτε διαίρεση κτλ).
Με άλλα λόγια, και το
ΌνομαΣυνάρτησης <- 2*π*R
είναι λάθος, αφού κάνει και άλλους ενδιάμεσους υπολογισμούς εκτός από τον ΜΟΝΟ έναν που επιτρέπεται...

(εννοείται ότι διαφωνώ με όλα όσα έγραψα παραπάνω) :) :) :)

ʼσχετο #2)
Το "υπολογίζει" κάποιος μπορεί να το θεωρήσει σαν "κάνει μία πράξη", οπότε θα πρέπει υποχρεωτικά να καταλήξει στο παραπάνω συμπέρασμα. ʼλλος, το "υπολογίζει", μπορεί να θεωρήσει ότι αναφέρεται μόνο στο τελικό αποτέλεσμα, και όχι στα (άχρηστα) ενδιάμεσα. Αν πούμε σε έναν λογιστή "υπολόγισέ μου ΜΟΝΟ το ποσό που θα πληρώσω στην εφορία", αυτός θα καταλάβει ότι απαγορεύεται να προσθέσει τα επιμέρους ποσά; Δε νομίζω... Θα καταλάβει ότι δε χρειαζόμαστε τα υπόλοιπα της φορολογικής, μας ενδιαφέρει μόνο ο υπολογισμός του τελικού αποτελέσματος...
Αν λοιπόν κάποιος διαλέξει αυτή την ερμηνεία του "υπολογίζω", τότε δεν προσμετρά τις ενδιάμεσες πράξεις σαν υπολογισμούς, και επομένως ο ορισμός της συνάρτησης επιτρέπει και ενδιάμεσες πράξεις...

ʼσχετο #3)
Το ΚΑΙ, στον προφορικό ή γραπτό λόγο, δεν έχει πάντα την έννοια του λογικού ΚΑΙ. Επομένως δε χρειάζεται να ερμηνεύουμε πάντα τις προτάσεις του βιβλίου σαν να ήταν λογικές προτάσεις. Μερικές φορές το ΚΑΙ έχει απλά την έννοια του συνδετικού κρίκου μεταξύ παρατακτικών προτάσεων...

gpapargi

Θυμήθηκα κάτι που είχα διαβάσει και το γράφω στο περίπου.

Κάποτε ο μεγάλος φυσικός Richard Feynman  έδινε μια διάλεξη. Κάποιος τον διέκοψε για να διορθώσει κάποιο λάθος που είχε κάνει καθώς μιλούσε. Ο Feynman του απάντησε: «Μη στέκεσαι σε αυτό που είπα. Στάσου σε αυτό που σκέφτομαι».

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

nekis

Αλκη θέλω βοήθεια με το .... παρατακτικές!!! Τα έχω ξεχάσει τελείως :) :) :)

alkisg

Καλά Νεκτάριε μη νομίζεις ότι εγώ τα θυμάμαι, απλά έμπλεξα με φιλολόγους γυναίκα και πεθερά ;) και επίσης λόγω του Διερμηνευτή αναγκάστηκα να έχω πρόχειρα τη Γραμματική και το Συντακτικό της Νέας Ελληνικής του Γυμνασίου...

Ο ορισμός του συντακτικού λέει «Οι κύριες προτάσεις συνδέονται μεταξύ τους με συνδέσμους συμπλεκτικούς, αντιθετικούς, διαχωριστικούς κτλ., και η σύνδεση αυτή λέγεται παρατακτική».

Αν το έχω καταλάβει καλά, όταν γράφουμε «έκανα το τάδε πράγμα ΚΑΙ μετά πήγα εκεί ΚΑΙ μετά έκανα το άλλο», τότε οι προτάσεις αυτές λέγονται παρατακτικές και φυσικά το ΚΑΙ δεν έχει την έννοια του λογικού ΚΑΙ, είναι απλά συνδετικός κρίκος (παρατακτικός σύνδεσμος που τον λέει και το συντακτικό).
Αν λοιπόν στο «υπολογίζει ΚΑΙ επιστρέφει μια μόνο τιμή» το ΚΑΙ το θεωρήσουμε παρατακτικό σύνδεσμο, τότε ερμηνεύεται διαφορετικά απ' ότι αν το θεωρήσουμε σαν λογικό ΚΑΙ... Δηλαδή το ΜΟΝΟ σ' αυτήν την περίπτωση αναφέρεται μόνο στο δεύτερο ρήμα, το "επιστρέφει".

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

nekis

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

Guest

Ερώτηση:

1 Συναρτηση Μπλα(α,β):πραγματική
2  Μεταβλητές
3    Πραγματικές: α,β
4 Αρχή
5  Μπλα<--α+β
Μπλα<--Μπλα/2
7 Τέλος_Συνάρτησης

Aυτό (6 γραμμή) μπορούμε να το κάνουμε σε συνάρτηση?
(Πέτρο, συγνώμη για το Clopyright της Μπλα ;)

Petros

Ναι ειναι λάθος με την εξής έννοια:
Με την 6η εντολή (όχι του Θεού, της Μπλα ) ξανακαλείς τη συνάρτηση Μπλα και μάλιστα χωρίς παραμέτρους (κάνεις ουσιαστικά αναδρομή).

Όσο για τα δικαιώματα της Μπλα, ειμαι εναντίων των πατεντών λογισμικού ;)

filippos

...Η κλήση της συνάρτησης γίνεται μεαπλή αναφορά του ονόματός της...

ΟΠΟΥΔΗΠΟΤΕ εμφανίζεται το όνομα μίας συνάρτησης, συνιστά κλήση.

Εξαίρεση αποτελεί μόνο η εμφάνιση του ονόματος της συνάρτησης στη ... μύτη του βέλους (εκχώρηση τιμής στο όνομα της συνάρτησης που γίνεται μέσα στο σώμα της συνάρτησης.

Οτιδήποτε άλλο, (αναφορά σε έκφραση δεξιά του βέλους, αναφορά σε συνθήκη, κ.ο.κ.) συνιστά κλήση της συνάρτησης.  Και εάν αυτό γίνεται μέσα από την ίδια, τότε συνιστά αναδρομική κλήση της.

klitos

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


klitos

σωστός ... δεν πρέπει να επαναλαμβανόμαστε
κλητος χατζηγεωργιου