Παράμετροι Έκφραση

Ξεκίνησε από Νίκη, 31 Ιαν 2015, 06:05:50 ΜΜ

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

Γιάννης Αναγνωστάκης

Παράθεση από: evry στις 31 Ιαν 2015, 10:39:23 ΜΜ
Το παράδειγμα που αναφέρεις δεν αποδεικνύει τίποτα, γιατί δεν ξέρουμε πως υλοποιείται ο μηχανισμός μεταβίβασης παραμέτρων στην ΓΛΩΣΣΑ.
Για παράδειγμα μπορείς να πεις τι θα εμφανίσει το παρακάτω πρόγραμμα;
Κώδικας: pascal
ΠΡΟΓΡΑΜΜΑ ΠΑΡΑΜΕΤΡΟΙ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:  Σ
ΑΡΧΗ
  Σ <- 1
  ΚΑΛΕΣΕ ΛΑΘΟΣ(Σ, Σ, Σ) 
  ΓΡΑΨΕ Σ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΛΑΘΟΣ(Α, Β, Σ) 
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Α, Β, Σ
ΑΡΧΗ
  Σ <- Α + Β
  Β <- Α
  Α <- 0
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


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

Το αντιλαμβάνομαι διαφορετικά από σένα

Θεωρώ ότι το διδακτικό πακέτο, όπως και σε άλλα θέματα, έχει αφήσει φοβερές ασάφειες

Για μένα λοιπόν, θεωρώ ότι ο μηχανισμός της διαδικασίας είναι ο αντίστοιχος της κλήσης με αναφοράς

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

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


evry

Ο μηχανισμός που αναφέρει το βιβλίο δεν είναι η κλήση με αναφορά.
Στην κλήση με αναφορά δεν έχεις αντίγραφα, εδώ έχεις.
Ο τρόπος του βιβλίου αν θες να το ψάξεις στην βιβλιογραφία είναι γνωστός σαν copy-restore ή value-result. καμία σχέση με call by reference
Συναντιέται σε κάποιες εκδόσεις της Fortran και στην Ada, μόνο που εκεί ορίζονται οι παράμετροι σαν in/out ενώ στο βιβλίο μας όχι.

Παράθεση από: janag79 στις 31 Ιαν 2015, 11:07:46 ΜΜ
Για μένα λοιπόν, θεωρώ ότι ο μηχανισμός της διαδικασίας είναι ο αντίστοιχος της κλήσης με αναφοράς

Το θέμα έχει ξανασυζητηθεί, δες εδώ
https://alkisg.mysch.gr/steki/index.php?topic=2622.msg22700#msg22700
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

Παράθεση από: evry στις 31 Ιαν 2015, 11:17:46 ΜΜ
Ο μηχανισμός που αναφέρει το βιβλίο δεν είναι η κλήση με αναφορά.
Στην κλήση με αναφορά δεν έχεις αντίγραφα, εδώ έχεις.
Ο τρόπος του βιβλίου αν θες να το ψάξεις στην βιβλιογραφία είναι γνωστός σαν copy-restore ή value-result. καμία σχέση με call by reference
Συναντιέται σε κάποιες εκδόσεις της Fortran και στην Ada, μόνο που εκεί ορίζονται οι παράμετροι σαν in/out ενώ στο βιβλίο μας όχι.

Το θέμα έχει ξανασυζητηθεί, δες εδώ
https://alkisg.mysch.gr/steki/index.php?topic=2622.msg22700#msg22700

Έγραψα ο "αντίστοιχος" , δεν είπα ότι είναι ο ίδιος, σε σχέση με την συνάρτηση

Σε κάθε περίπτωση, σέβομαι αλλά διαφωνώ με την άποψη σου...


petrosp13

#18
Εγώ πάλι δεν κατάλαβα
Οι διαδικασίες αντιγράφουν όλες τις παραμέτρους πίσω, ανεξάρτητα από το αν είναι δεδομένα ή αποτελέσματα
Έτσι νόμιζα δηλαδή

ΚΑΛΕΣΕ Χημεία(α+1)

ΔΙΑΔΙΚΑΣΙΑ Χημεία(χ)

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

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

alkisg

Παράθεση από: petrosp13 στις 31 Ιαν 2015, 11:54:35 ΜΜ
Οι διαδικασίες αντιγράφουν όλες τις παραμέτρους πίσω, ανεξάρτητα από το αν είναι δεδομένα ή αποτελέσματα

Πέτρο απλά πρόσθεσε σε αυτό που λες τη φράση "όταν μπορούν" στο τέλος.
Εάν υπάρχει μεταβλητή (διεύθυνση, reference) και μπορούν να αντιγράψουν τα αποτελέσματα, τότε τα αντιγράφουν.
Εάν δεν υπάρχει μεταβλητή τότε δεν τα αντιγράφουν.

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

petrosp13

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

Να υποθέσω ότι είναι δεκτό και το παρακάτω;

ΚΑΛΕΣΕ διαμάχη(πληροφορική(Α,Β) ,χημεία(Γ,Δ))
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

sstergou

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

Νομίζω το παράδειγμα που δίνεις είναι σωστό.

Δεν κατάλαβα όμως, σε ποια πλεονεκτήματα αναφέρεσαι και πως αυτά περιορίζονται;

petrosp13

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

ΥΓ. Το αναφέρω απλά γιατί πολλά παιδιά, όταν μαθαίνουν ότι ένα υποπρόγραμμα μπορεί να υλοποιηθεί πάντα με διαδικασία, διαγράφουν τις συναρτήσεις από το μυαλό τους. Δεν πρέπει να υπάρχει ισχυρός αντίλογος;
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

sstergou

Σϊγουρα έτσι είναι όσον αφορά τους μαθητές.

Κάποια από τα παραδείγματα που χρησιμοποιώ εγώ είναι τα εξής:
1) Αφού όλες οι επαναλήψεις μπορούν να γίνουν με όσο, γιατί χρειαζόμαστε τις υπόλοιπες επαναληπτικές δομές; Φυσικά για λόγους ευκολίας.
2) Να γραφεί υποπρόγραμμα που να βρίσκει το μέγιστο τριών αριθμών χρησιμοποιώντας ένα ήδη υπάρχον (το οποίο πρέπει να υλοποιηθεί) που βρίσκει το μέγιστο δύο αριθμών
Συνάρτηση μεγ3(α, β , γ): Πραγματική
...
    μεγ3 <- μεγ2(μεγ2(α, β), γ)
Τέλος_συνάρτησης

Όσοι επιλέγουν διαδικασία μπλέκουν στα διαδικαστικά.

evry

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

| |α - β| + |γ + δ| | / | |γ-δ| + |κ - λ| |
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

itt

Παράθεση από: petrosp13 στις 01 Φεβ 2015, 12:13:35 ΜΜ
Εννοώ ότι μόνο μια συνάρτηση θα μπορούσε να καλείται με παραμέτρους που να είναι εκφράσεις ή σταθερές (ακόμα και άλλες συναρτήσεις), λόγω του ότι δεν αντιγράφονταν οι παράμετροι πίσω
Αν αυτό γίνεται και με διαδικασίες, γιατί να γράψω συνάρτηση πέρα του ότι μπορώ να την καλέσω πχ σε μια έκφραση;

Ένα επιχείρημα μπορούσε να είναι ότι οι συναρτήσεις στην Γλώσσα δεν έχουν side-effects. Ιδανικό θα ήταν να καταλάβουν πάντως ότι ειναι πολύ καλύτερο να κάνεις compose συναρτήσεις που κάνουν ένα απλό πράγμα, από μια μονολιθική διαδικασία που κάνει τα πάντα.

programmer

(((((((((Γνωρίζω πως έχει συζητηθεί στο παρελθόν, αλλά θα ήθελα μια πρόσφατη απάντηση στο ερώτημα: "Μπορεί η παράμετρος ή οι παράμετροι στην κλήση μιας διαδικασίας να είναι μια έκφραση;" Π.χ:
.........
α<-5
β<-10
Κάλεσε Δ1(α+1, β)
.........

Ευχαριστώ.)))))))))))))
ΜΙΑ ΧΑΡΑ ΓΙΝΕΤΑΙ ΑΥΤΟ ΠΟΥ ΛΕΣ ΦΙΛΕ ΜΟΥ.ΔΕΝ ΒΛΕΠΩ ΠΟΙΟ ΕΙΝΑΙ ΤΟ ΠΡΟΒΛΗΜΑ ΤΡΕΧΕΙ ΚΑΝΟΝΙΚΟΤΑΤΑ.ΕΤΣΙ ΜΑΛΙΣΤΑ Η ΠΡΑΓΜΑΤΙΚΗ ΠΑΡΑΜΕΤΡΟΣ Α
ΔΕΝ 8Α ΑΛΛΑΞΕΙ ΠΟΤΕ ΜΕΣΑ ΣΤΗ ΔΙΑΔΙΚΑΣΙΑ ΑΝ ΠΧ ΔΙΑΔΙΚΑΣΙΑ ΠΑΡΑΔΕΙΓΜΑ(Χ,Β)

programmer

((((((
Παράθεση από: petrosp13 στις 31 Ιαν 2015, 11:54:35 ΜΜ
Εγώ πάλι δεν κατάλαβα
Οι διαδικασίες αντιγράφουν όλες τις παραμέτρους πίσω, ανεξάρτητα από το αν είναι δεδομένα ή αποτελέσματα
Έτσι νόμιζα δηλαδή

ΚΑΛΕΣΕ Χημεία(α+1)

ΔΙΑΔΙΚΑΣΙΑ Χημεία(χ)

Όταν η διαδικασία τελειώνει, πού αντιγράφεται η τιμή της παραμέτρου χ;)
ΠΟΥ8ΕΝΑ ΔΕΝ ΑΝΤΙΓΡΑΦΕΤΑΙ ΟΤΑΝ ΕΙΝΑΙ ΣΕ ΤΕΤΟΙΑ ΜΟΡΦΗ.ΤΟ α ΜΑΛΙΣΤΑ ΜΕΝΕΙ ΑΜΕΤΑΒΛΗΤΟ ΚΑΙ ΔΕΝ ΑΛΛΑΖΕΙ ΟΤΑΝ ΕΙΝΑΙ ΕΤΣΙ.ΑΝ ΗΤΑΝ
ΚΑΛΕΣΕ ΧΗΜΕΙΑ(Α) ΔΙΑΔΙΚΑΣΙΑ ΧΗΜΕΙΑ(Χ) ΤΟΤΕ 8Α ΑΛΛΑΖΕ.ΑΛΛΑ ΟΠΩΣ ΤΟ ΕΧΕΙΣ ΕΣΥ ΕΙΝΑΙ ΔΕΚΤΟ ΑΠΛΑ Η Α ΔΕΝ 8Α ΑΛΛΑΞΕΙ ΠΙΑ
Εφόσον δεν υπάρχει τρόπος δήλωσης (όπως στην pascal) για το ποιες παράμετροι θα πρέπει να αντιγραφούν πίσω, είναι νομίζω λάθος να θεωρούμε δεκτή την κλήση διαδικασιών με παραμέτρους είτε σταθερές, είτε εκφράσεις