Προτεραιότητα πράξεων

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση

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

Για παράδειγμα, στα μαθηματικά και στις περισσότερες γλώσσες προγραμματισμού ο πολλαπλασιασμός υπολογίζεται πριν την πρόσθεση. Έτσι, η λύση της έκφρασης 2 + 3 × 4 είναι 14. Οι παρενθέσεις χρησιμοποιούνται για να επηρεάσουν την προτεραιότητα όταν χρειάζεται. Για παράδειγμα, η προηγούμενη έκφραση θα μπορούσε να γραφτεί και ως 2 + (3 × 4), αλλά σε αυτή την περίπτωση δεν είναι αναγκαίες οι παρενθέσεις, γιατί δεν επηρεάζουν την προτεραιότητα των πράξεων.

Κατά την εισαγωγή της σύγχρονης αλγεβρικής σημειογραφίας, ο πολλαπλασιασμός πήρε προτεραιότητα υπέρ της πρόσθεσης, ανεξάρτητα από την πλευρά του αριθμού στην οποία εμφανιζόταν.[1] Έτσι, 3 + 4 × 5 = 4 × 5 + 3 = 23. Όταν εισήχθηκε η σημειογραφία των δυνάμεων, αυτές πήραν προτεραιότητα υπέρ του πολλαπλασιασμού, και η γραφή τους μπορούσε μόνο να είναι ένας υπερυψωμένος εκθέτης στα δεξιά της βάσης. Έτσι 3 + 52 = 28 και 3 × 52 = 75. Για να αλλαχτεί η προτεραιότητα των πράξεων, χρησιμοποιούνταν αρχικά υπογράμμιση ή υπεργράμμιση. Σήμερα χρησιμοποιούνται παρενθέσεις. Για παράδειγμα, για να λάβει η πρόσθεση ψηλότερη προτεραιότητα από τον πολλαπλασιασμό, γράφεται ως (2 + 3) × 4 = 20, και για λάβει ψηλότερη προτεραιότητα από τη δύναμη, ως (3 + 5)2 = 64.

Πρότυπη προτεραιότητα πράξεων[Επεξεργασία | επεξεργασία κώδικα]

Η προτεραιότητα τέλεσης των πράξεων, όπως χρησιμοποιείται στα μαθηματικά και σε πολλές από τις γλώσσες προγραμματισμού είναι:

  1. εκφράσεις μέσα σε παρενθέσεις
  2. δυνάμεις και ρίζες
  3. πολλαπλασιασμοί και διαιρέσεις (με τη σειρά που εμφανίζονται στην έκφραση, αριστερά προς δεξιά)
  4. προσθέσεις και αφαιρέσεις (με τη σειρά που εμφανίζονται στην έκφραση, αριστερά προς δεξιά)

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

Παραδείγματα[Επεξεργασία | επεξεργασία κώδικα]

\sqrt{1+3}+5=\sqrt4+5=2+5=7.\,

Η οριζόντια γραμμή που διαχωρίζει το κλάσμα λειτουργεί ταυτόχρονα και ως ομαδοποίηση:

\frac{1+2}{3+4}+5=\frac37+5.

Για πιο εύκολη ανάγνωση της μαθηματικής έκφρασης, μερικές φορές χρησιμοποιούνται άγκιστρα { } ή αγκύλες [ ], για να αποφευχθεί η γραφή συνεχόμενων παρενθέσεων και να γίνει πιο σαφές το τέλος μιας ομαδοποίησης:

[(1+2)-3]-(4-5) = [3-3]-(-1) = 1. \,

Διαφορετικές ερμηνείες[Επεξεργασία | επεξεργασία κώδικα]

Υπάρχουν περιπτώσεις στις οποίες διαφορετικές εφαρμογές της προτεραιότητας χρησιμοποιούν διαφορετικές συμβάσεις για τη χρήση του τελεστή αρνητικού αριθμού − (συνήθως διαβάζεται «πλην»). Στα μαθηματικά, η έκφραση −32 ερμηνεύεται ως −(32) = −9 αλλά σε μερικές εφαρμογές (για παράδειγμα στο Microsoft Excel) και σε μερικές γλώσσες προγραμματισμού (για παράδειγμα στη γλώσσα bc), ο τελεστής έχει ψηλότερη προτεραιότητα από τη δύναμη. Επομένως σε εκείνες τις περιπτώσεις το −32 ερμηνεύεται ως (−3)2 = 9.[2]

Παρόμοια ασάφεια προκύπτει κατά τη χρήση της καθέτου («/»). Η σειρά χαρακτήρων "1/2x" κατά τις πιο πάνω συμβάσεις ερμηνεύεται ως (1/2)x, ενώ μια άλλη ερμηνεία θα μπορούσε να είναι 1/(2x). Και στις δύο αυτές περιπτώσεις, η χρήση των παρενθέσεων μπορεί να αποσαφηνίσει την προτεραιότητα τέλεσης των πράξεων.

Γλώσσες προγραμματισμού[Επεξεργασία | επεξεργασία κώδικα]

Οι περισσότερες γλώσσες προγραμματισμού χρησιμοποιούν την πρότυπη προτεραιότητα για τους μαθηματικούς τελεστές, και προσθέτουν σε αυτήν τις δικές τους συμβάσεις για τους επιπλέον τελεστές που προσφέρει η κάθε γλώσσα. Εξαίρεση αποτελούν οι γλώσσες APL[3] και Smalltalk, στις οποίες η προτεραιότητα είναι απλά η σειρά στην οποία γράφονται οι τελεστές (δεξιά προς αριστερά, και αριστερά προς δεξιά, αντίστοιχα).

Στην γλώσσα C, και σε μερικές ακόμα που έχουν κληρονομήσει την προτεραιότητα τελεστών της C (όπως οι C++, Perl και PHP), η προτεραιότητα αλλάζει από δεξιά προς αριστερά και από αριστερά προς δεξιά για διαφορετικούς τελεστές,[4] κάτι το οποίο ο ίδιος ο δημιουργός της C χαρακτήρισε μη ικανοποιητικό.[5]

Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]

  1. «History of Order of Operations». 22 Νοεμβρίου 2000. http://mathforum.org/library/drmath/view/52582.html. Ανακτήθηκε στις 9 Οκτωβρίου 2011. 
  2. «Formula Returns Unexpected Positive Value». 15 Αυγούστου 2005. http://support.microsoft.com/kb/q132686/. Ανακτήθηκε στις 9 Οκτωβρίου 2011. 
  3. Bergquist, Gary A. (1999). "The future of APL in the insurance world". ACM SIGAPL APL Quote Quad (New York, N.Y.) 30 (1): 16–21. doi:10.1145/347194.347203. ISSN 0163–6006. 
  4. «C Operator Precedence and Associativity». 2 Οκτωβρίου 2011. http://www.difranco.net/cop2220/op-prec.htm. Ανακτήθηκε στις 9 Οκτωβρίου 2011. 
  5. Ritchie, Dennis M. (1996). History of Programming Languages, 2nd ed.. ACM Press. http://cm.bell-labs.com/cm/cs/who/dmr/chist.html. Ανακτήθηκε στις 9 Οκτωβρίου 2011.