Ποια είναι η προτεραιότητα του τελεστή ^ ;

Ξεκίνησε από evry, 27 Σεπ 2006, 12:29:16 ΠΜ

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

evry

 Σύμφωνα με το βιβλίο όταν έχουμε πράξεις με τον ίδιο τελεστή τότε οι πράξεις εκτελούνται από αριστερά προς τα δεξιά. Με τον τελεστή ^ (δύναμη) όμως δεν είναι ακριβώς το ίδιο. Στην περίπτωση αυτή η προτεραιότητα δεν είναι από δεξιά προς τα αριστερά;
π.χ. 2^2^3 = 256 και όχι 64

και πιο συγκεκριμένα δεν ισχύει αβγ = αγ) ;
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

gpapargi

Καλημέρα

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

Πράγματι οι μαθηματικοί υπολογίζουν το 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

Σύμφωνα με τον ορισμό της δύναμης (βε = β * β *... * β, ε φορές) έχουμε :
223 = 22 * 22 * 22 = 26 = 64

thanos_xg

Σύμφωνα με την πολύ ωραία ανάλυση που έκανε ο gpapargi ισχύει το παρακάτω:

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

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

alkisg

#4
Γιώργο το ότι είναι πράξη δε σημαίνει και τίποτα, π.χ. στη Fortran υπολογίζεται όπως και στα μαθηματικά, από δεξιά προς τα αριστερά.

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

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

edit: αυτή είναι η προηγούμενη συζήτηση σχετικά με το θέμα.

filippos

Στο πλαίσιο του μαθήματος και συγκεκριμένα της προγραμματιστικής σκοπιάς που δίνεται στα κεφάλαια από το 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

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

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

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

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

koraki

Όταν θεωρείς το 223  σαν 22 3 φορές σημαίνει ότι έχεις ήδη αποφασίσει ότι υπολογίζεις από αριστερά προς τα δεξιά. Θα μπορούσες να το δεις σαν πολλαπλασιασμό του 2, 23 (=8) φορές πάλι από τον ορισμό της δύναμης. Δηλαδή βάση το 2 και εκθέτης το 23. Σε αυτή την περίπτωση θα είχες ήδη αποφασίσει ότι υπολογίζεις από δεξιά προς τα αριστερά. Το πραγματικό ζήτημα δηλαδή είναι ένα βήμα πριν

evry

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

nplatis

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