Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Δομή ακολουθίας => Μήνυμα ξεκίνησε από: evry στις 27 Σεπ 2006, 12:29:16 ΠΜ

Τίτλος: Ποια είναι η προτεραιότητα του τελεστή ^ ;
Αποστολή από: evry στις 27 Σεπ 2006, 12:29:16 ΠΜ
 Σύμφωνα με το βιβλίο όταν έχουμε πράξεις με τον ίδιο τελεστή τότε οι πράξεις εκτελούνται από αριστερά προς τα δεξιά. Με τον τελεστή ^ (δύναμη) όμως δεν είναι ακριβώς το ίδιο. Στην περίπτωση αυτή η προτεραιότητα δεν είναι από δεξιά προς τα αριστερά;
π.χ. 2^2^3 = 256 και όχι 64

και πιο συγκεκριμένα δεν ισχύει αβγ = αγ) ;
Τίτλος: Απ: Ποια είναι η προτεραιότητα του τελεστή ^ ;
Αποστολή από: gpapargi στις 27 Σεπ 2006, 08:19:06 ΠΜ
Καλημέρα

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

Πράγματι οι μαθηματικοί υπολογίζουν το 234 από δεξιά προς τα αριστερά, ενώ κάνοντας την πράξη 2^3^4 υπολογίζεται από αριστερά προς τα δεξιά. Η αιτία γι αυτή τη διαφορετική αντιμετώπιση πιστεύω πως είναι η εξης:

Για την ψευδογλώσσα το 2^3 είναι μια πράξη που αντιστοιχεί σε 2 αριθμούς (εδώ τους 2 και 3) το αποτέλεσμα της ύψωσης σε δύναμη με βάση τον πρώτο και εκθέτη το δεύτερο.

Για τους μαθηματικούς το 23 είναι η τιμή της εκθετικής συνάρτησης με βάση 2 (δηλαδή της f(x) =2x) στο x=3.

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

Έχουμε την f(x)=2x και την g(x)=3x. Από αυτές προκύπτει η σύνθεση των 2 συναρτήσεων
f(g(x))=23x

To 234 είναι η τιμή αυτής της σύνθετης συνάρτησης στο x=4. Είναι δηλαδή το f(g(4)).

Έτσι εξηγείται το γιατί οι μαθηματικοί υπολογίζουν το 234 από δεξιά προς τα αριστερά.

Για την ψευδογλώσσα όμως η αντίληψη για το 2^3^4 είναι διαφορετική. Δηλαδή το θεωρούμε σαν 2 διαδοχικές πράξεις 2 αριθμών η καθεμιά και το υπολογίζουμε από αριστερά προς τα δεξιά.

Αν υλοποιούσαμε το 234  σαν σύνθεση των συναρτήσεων f(x)=2x g(x)=3x (με χρήση  συναρτήσεων από το κεφάλαιο 10) τότε θα είχαμε υπολογισμό από δεξιά προς τα αριστερά αφού ουσιαστικά θα χρησιμοποιούσαμε την προσέγγιση των μαθηματικών.

Σε αυτά έχω καταλήξει και το κουβεντιάζω από φέτος με τους μαθητές που έχουν την υποδομή να το καταλάβουν.
Τίτλος: Απ: Ποια είναι η προτεραιότητα του τελεστή ^ ;
Αποστολή από: koraki στις 27 Σεπ 2006, 10:17:03 ΠΜ
Σύμφωνα με τον ορισμό της δύναμης (βε = β * β *... * β, ε φορές) έχουμε :
223 = 22 * 22 * 22 = 26 = 64
Τίτλος: Απ: Ποια είναι η προτεραιότητα του τελεστή ^ ;
Αποστολή από: thanos_xg στις 27 Σεπ 2006, 06:41:21 ΜΜ
Σύμφωνα με την πολύ ωραία ανάλυση που έκανε ο gpapargi ισχύει το παρακάτω:

234 αντιστοιχεί στο 2^(3^4).

Είναι ένα πολύ ωραίο παράδειγμα να τονίσουμε στα παιδιά ότι οι μαθηματικές ιδιότητες δεν είναι αυτονοήτες στον προγραμματισμό, αλλά ότι χρειάζεται βαθιά γνώση του αντικειμένου για το οποίο αναζητούμε αλγόριθμο.
Τίτλος: Απ: Ποια είναι η προτεραιότητα του τελεστή ^ ;
Αποστολή από: alkisg στις 27 Σεπ 2006, 07:49:21 ΜΜ
Γιώργο το ότι είναι πράξη δε σημαίνει και τίποτα, π.χ. στη Fortran υπολογίζεται όπως και στα μαθηματικά, από δεξιά προς τα αριστερά.

Αιτιολογήσεις υπάρχουν πολλές, π.χ.
* ό,τι δεν ορίζεται εννοείται ότι υπολογίζεται από αριστερά προς τα δεξιά (αυτό βέβαια δημιουργεί πρόβλημα με το λογικό τελεστή ΟΧΙ, ο οποίος δεν είναι δυνατό να οριστεί με προτεραιότητα από αριστερά προς τα δεξιά)
* να ισχύει αυτό που ισχύει και στην pascal ή στη basic => από αριστερά προς τα δεξιά
* να εκμεταλλευτούμε την πρότερη γνώση των μαθητών από τα μαθηματικά => από δεξιά προς τα αριστερά
αλλά έχω την εντύπωση ότι καμία από αυτές δεν είναι αποδεκτή από όλους.

Νομίζω είναι καθαρά θέμα ορισμού (ο οποίος δεν υπάρχει)...

edit: αυτή είναι η προηγούμενη συζήτηση σχετικά με το θέμα (//index.php?topic=183.msg1148#msg1148).
Τίτλος: Απ: Ποια είναι η προτεραιότητα του τελεστή ^ ;
Αποστολή από: filippos στις 28 Σεπ 2006, 08:32:10 ΠΜ
Στο πλαίσιο του μαθήματος και συγκεκριμένα της προγραμματιστικής σκοπιάς που δίνεται στα κεφάλαια από το 7 και μετά, νομίζω ότι το ερώτημα έχει συγκεκριμένη και σαφή απάντηση, στη σελίδα 154. 

Εκεί αναφέρεται ότι η Ύψωση σε δύναμη έχει υψηλότερη προτεραιότητα από τις υπόλοιπες πράξεις διευκρυνίζοντας στη συνέχεια ότι "...Όταν η ιεραρχία είναι ίδια, τότε οι πράξεις εκτελούνται από τα αριστερά προς τα δεξιά..."

Τα παραπάνω μονοσήμαντα ορίζουν ότι:

το 2^3^4 είναι ισοδύναμο με (2^3)^4 και όχι με το 2^(3^4) διότι κάτι τέτοιο θα σήμαινε ότι οι πράξεις θα εκτελούντουσαν από τα δεξιά προς τα αριστερά.

Στα μαθηματικά, από την άλλη, η προτεραιότητα ορίζεται όχι μόνο με κανόνες όπως οι παραπάνω αλλά και με ... οπτικούς (ή τυπογραφικούς) διαχωρισμούς οι οποίοι στα περισσότερα προγραμματιστικά περιβάλλοντα είναι ακόμα αδύνατον να γίνουν.  Κλασσικά παραδείγματα τέτοιας "οπτικής δήλωσης της προτεραιότητας" είναι η ύψωση σε δύναμη όπου η "πράξη" δηλώνεται με την υπερύψωση του εκθέτη και όχι με τη χρήση τελεστή.  Οπότε η "υπερύψωση" του 4 πάνω από το 3 (το οποίο με τη σειρά του "υπερίπταται" του 2) καθορίζει με σαφήνεια τη σειρά της εκτέλεσης των πράξεων.

Άλλο παρόμοιο παράδειγμα είναι η "οπτική" δημιουργία κλασμάτων η οποία προσδιορίζει με τη σειρά της προτεραιότητα η οποία σε προγραμματιστικό περιβάλλον απαιτεί τη χρήση παρενθέσεων:π.χ. (2+3)/(5+7) για να "διατυπωθεί"

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

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

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

Υπ' αυτή την έννοια σίγουρα είναι απαιτούμενη η διευκρύνιση τέτοιων σημείων (που όμως νομίζω γίνεται στη σελίδα 154) όταν η υλοποίηση του αλγόριθμου γίνεται σε προγραμματιστικό περιβάλλον.  Όταν όμως δε συντρέχει αυτός ο "περιορισμός" (προγραμματιστικό περιβάλλον) και το ζητούμενο εστιάζει αποκλειστικά στη (σαφή ασφαλώς) διατύπωση του αλγόριθμου έστω και σε κάποια "χαλαρότερη" μορφή (π.χ. ψευδογλώσσα) νομίζω ότι μπορούμε να θέσουμε τέτοιους προβληματισμούς σε "δεύτερη" (??) μοίρα βασιζόμενοι ίσως και στις αντίστοιχες "οδηγίες" του διδακτικού πακέτου:

ΒΚ.σελ.72: Μερικές ακόμη παρατηρήσεις:
...μπορούμε επίσης να δεχθούμε και τις συνήθεις μαθηματικές τυπογραφικές συμβάσειςγια την αποτύπωση τύπων.  Για παράδειγμα είναι αποδεκτό να γραφεί α^2 ή α2... καθώς και το σύμβολο της τετραγωνικής ρίζας...

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

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

Τελικά μάλλον ΜΕΓΑΛΟ μου βγήκε το Post  ::) ... sorry guys... κουβέντα να γίνεται  ;)
Τίτλος: Απ: Ποια είναι η προτεραιότητα του τελεστή ^ ;
Αποστολή από: gpapargi στις 29 Σεπ 2006, 10:29:14 ΠΜ
Πιστεύω πως στο συγκεκριμένο μάθημα για την "αριστερά προς τα δεξιά" εκτέλεση πράξεων όταν έχουμε τελεστές ίσης προτεραιότητας μας καλύπτει το βιβλίο σελ 154 στην παράγραφο για την ιεραρχία.

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

Υποθέτω πως η Fortran θέλησε να είναι συμβατή με τα μαθηματικά. Για μένα καλά έκανε. Οι γλώσσες που υποστηρίζουν μαθηματικές πράξεις θα πρέπει να το κάνουν όπως στα μαθηματικά. Τότε λες ότι υποστηρίζεις την πράξη.

Πιστεύω πως ο υπολογισμός του 2^3^4 είναι διδακτική άσκηση αφού δείχνει μια πιθανή παγίδα. Δεν παίρνει χρόνο να τη δείξεις. Φυσικά οι πλήρεις εξηγήσεις είναι για λίγους μαθητές.

koraki

Όταν θεωρείς το 223  σαν 22 3 φορές σημαίνει ότι έχεις ήδη αποφασίσει ότι υπολογίζεις από αριστερά προς τα δεξιά. Θα μπορούσες να το δεις σαν πολλαπλασιασμό του 2, 23 (=8) φορές πάλι από τον ορισμό της δύναμης. Δηλαδή βάση το 2 και εκθέτης το 23. Σε αυτή την περίπτωση θα είχες ήδη αποφασίσει ότι υπολογίζεις από δεξιά προς τα αριστερά. Το πραγματικό ζήτημα δηλαδή είναι ένα βήμα πριν
Τίτλος: Απ: Ποια είναι η προτεραιότητα του τελεστή ^ ;
Αποστολή από: evry στις 29 Σεπ 2006, 01:34:57 ΜΜ
 Γιώργο έχεις δίκιο, απλά αυτό που με τσαντίζει είναι ότι κάποιες φορές ένω κάτι ισχύει στον έξω κόσμο στο βιβλίο είναι διαφορετικό. Βλέπε για παράδειγμα πέρασμα παραμέτρων στα υποπρογράμματα.
Το ίδιο ισχύει και με τη δύναμη, όλος ο κόσμος ξέρει ότι η δύναμη υπολογίζεται από τα δεξιά στα αριστερά στα μαθηματικά αλλά στη ΓΛΩΣΣΑ είναι διαφορετικά. Και το χειροτέρο απ'όλα είναι είναι πως όταν σε ρωτήσει ο μαθητής γιατί? εσύ απαντάς : "Επειδή το λέει το βιβλίο"
Τίτλος: Απ: Ποια είναι η προτεραιότητα του τελεστή ^ ;
Αποστολή από: nplatis στις 30 Σεπ 2006, 11:32:33 ΠΜ
Πάντως, για να το κάνουμε λίγο πιο πρακτικό το θέμα, θα ήθελα να πιστεύω ότι κάτι τέτοιο στις εξετάσεις δεν πρόκειται να τεθεί (δηλ. να δώσουν σε αλγόριθμο 2^3^4 και να ζητούν να τον τρέξουν οι μαθητές). Από την άλλη, πάντα θα συμβουλεύω τους μαθητές μου ότι αν έχουν αμφιβολία για κάτι, να βάλουν παρενθέσεις εκεί που θέλουν (αν χρειαστεί οι ίδιοι να γράψουν αντίστοιχο αλγόριθμο), και να έχουν το κεφάλι τους ήσυχο!