προτεραιότητα τελεστών

Ξεκίνησε από petran, 23 Οκτ 2009, 12:16:13 ΜΜ

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

petran

Καλησπέρα.

Θα ήθελα να ρωτήσω.
Ποιά είναι η προτεραιότητα των τελεστών στην Γλώσσα ?
Υπάρχει κάποια σύμβαση για την ψευδογλωσσα ?

Ευχαριστώ.

ikariofil

Κατά σειρά

1) Αριθμητικοί
        ^
  *, /, mod, div
       +,-

2) Συγκριτικοί
  =, >, < , >=, <=, <>


3) Λογικοί
  όχι, και ,η

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

P.Tsiotakis

άρα σε μια έκφραση με τελεστές ίδιας ιεραρχίας οι πράξεις εκτελούνται από αριστερά προς τα δεξιά...

oneoxoritis

Γειά σας και συγχαρητήρια για την καλη δουλειά που γίνεται στο "Στέκι". Θα ήθελα να επανέλθω στο θέμα της προτεραιότητας τελεστών και να ρωτήσω πιο είναι το αποτέλεσμα της πραξης 5 mod 2 * 10?
Είναι το 10 ή το το 5? Θα εκτελεστεί πρώτα το mod και μετά ο πολ/μός (*)?
Ευχαριστω εκ των προτέρων

P.Tsiotakis

Καλώς ήρθες...

αριστερά προς τα δεξιά

5 mod 2 * 10 = 1 * 10= 10

δες και το παρακάτω συνημμένο

oneoxoritis

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

Καρκαμάνης Γεώργιος


evry

Μήπως τους το έδωσαν σαν

5         mod                              2*10

και όχι σαν  5 mod 2*10 ?

οπότε ναι μεν ισχύει η προτεραιότητα από αριστερά, αλλά τα πιο κοντινά υπολογίζονται πρώτα :D

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

P.Tsiotakis

Ευρυπίδη, υπάρχει και η παραλλαγή:

5 mod 2 * 10   :D

nikosx

Υπάρχει και η περίπτωση οι συνάδελφοι να είναι της αραβικής σχολής
Νίκος Ξένος
Καθηγητής Πληροφορικής
nxenos@sch.gr

karaberis

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

ΠαράθεσηΚατά σειρά

1) Αριθμητικοί
        ^
  *, /, mod, div
       +,-

2) Συγκριτικοί
  =, >, < , >=, <=, <>


3) Λογικοί
  όχι, και ,η

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

Το βιβλίο του μαθητή αναφέρει (σελ.166) οτι προηγούνται οι αριθμητικοί, ακολουθούν οι συγκριτικοί και τελευταίοι εκτελούνται οι λογικοί. Δυστυχώς όμως δεν αναφέρει τίποτα (με κάθε επιφύλαξη) για τη σειρά υπολογισμού όταν έχουμε μόνο λογικούς τελεστές (χωρίς παρενθέσεις) σε μία ΣΥΝΘΕΤΗ λογική έκφραση.

Όμως σε μία σύνθετη λογική έκφραση (παράσταση) όπου εμφανίζονται λογικοί τελεστές, η σειρά υπολογισμού (εκτέλεσης) ΔΕΝ είναι πάντα από αριστερά προς τα δεξιά, αλλά με την εξής σειρά:

ΟΧΙ
ΚΑΙ
Η

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

Το οτι έχει σημασία η σειρά εκτέλεσης των λογικών τελεστών προκύπτει από το τετράδιο του μαθητή, όπου στο αντίστοιχο κεφάλαιο γίνεται αναφορά στην ιεραρχία των λογικών τελεστών και δίνεται συμβουλή για τη χρήση παρεθένσεων (Κεφ.8ο, Παρ. 8.3, Σελ. 77), ενώ στη Δραστηριότητα ΔΤ1 (Σελ. 78) και στην 7η ερώτηση του τεστ αυτοαξιολόγησης ζητείται ο υπολογισμός της τιμής ΣΥΝΘΕΤΩΝ λογικών εκφράσεων με ή χωρίς τη χρήση παρενθέσεων, ακριβώς για να γίνει κατανοητή η σειρά εκτέλεσης (υπολογισμού) των λογικών πράξεων.

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

Φιλικά

P.Tsiotakis

το όχι προηγείται των άλλων 2 τελεστών ΟΚ

γιατί το ΚΑΙ προηγείται του Η δεν κατάλαβα

κατά τη γνώμη μου για τα ΚΑΙ και Η ισχύει πάλι ο κανόνας του αριστερά προς τα δεξιά
αφού όπως αναφέρεις "Δυστυχώς όμως δεν αναφέρει τίποτα (με κάθε επιφύλαξη) για τη σειρά υπολογισμού όταν έχουμε μόνο λογικούς τελεστές (χωρίς παρενθέσεις) σε μία ΣΥΝΘΕΤΗ λογική έκφραση"

Σούλας Βασίλης

Προτεραιότητα τελεστών

Αριθμητικοί :   + , - , *  (πολλ/σμός), /  (διαίρεση), ^ (ύψωση σε δύναμη), DIV (ακέραια διαίρεση), MOD (ακέραιο υπόλοιπο). (Σειρά εκτέλεσης αριθμητικών πράξεων : 1ο το ^, και με ίδια προτεραιότητα τα  *, /, div, mod και από αριστερά προς τα δεξιά και τα +, - και φυσικά πρώτα οι παρενθέσεις)

Παράδειγματα

Χ<--4/2*2=4 (εδώ πρώτα η διαίρεση γιατί πιο αριστερά)
Ενώ
Χ<--2*2/4=1 (εδώ πρώτα ο πολλαπλασιασμός γιατί πιο αριστερά)

Χ<--50 div 22*11 mod 4=2 (από αριστερά προς τα δεξιά)


Λογικοί : ΚΑΙ, Η, ΟΧΙ . (Σειρά εκτέλεσης λογικών πράξεων : 1ο το όχι και με την ίδια προτεραιότητα τα και, η από αριστερά προς τα δεξιά και φυσικά πρώτα οι παρενθέσεις)
Σούλας Βασίλης
Ηλεκτρολόγος Μηχανικός & Μηχανικός Η/Υ Δ.Π.Θ.
Καθηγητής Πληροφορικής ΠΕ19
http://users.sch.gr/vasisoulas
http://eclass.sch.gr/modules/auth/opencourses.php?fc=%D4-52

karaberis

Ευχαριστώ για τη γρήγορη απάντηση.

Όσο για τη σειρά των ΚΑΙ και Η μάλλον από κάποιο παράδειγμα θα το συμπαίρανα. Αυτή τη στιγμή δεν μπορώ όμως να το στηρίξω κάπου. Θα το ψάξω και θα δω αν μπορώ να απαντήσω...Ίσως να προκύπτει από τις απαντήσεις στις ασκήσεις του τετραδίου μαθητή που ανέφερα στο προηγούμενο μήνυμά μου. Θα το δω...

Φιλικά


Νίκος Αδαμόπουλος

Παράθεση από: karaberis στις 01 Νοε 2009, 02:05:25 ΜΜ
Όμως σε μία σύνθετη λογική έκφραση (παράσταση) όπου εμφανίζονται λογικοί τελεστές, η σειρά υπολογισμού (εκτέλεσης) ΔΕΝ είναι πάντα από αριστερά προς τα δεξιά, αλλά με την εξής σειρά:

ΟΧΙ
ΚΑΙ
Η

Αυτό μπορεί να ισχύει σε κάποιες (ή και όλες!) γλώσσες προγραμματισμού, αλλά γιατί να το υιοθετήσουμε αυθαίρετα στην ΑΕΠΠ αφού το βιβλίο δεν το αναφέρει πουθενά; Όπως λέει και ο Παναγιώτης προηγείται το ΟΧΙ (αφού είναι μοναδιαίος τελεστής - δηλαδή εφαρμόζεται σε έναν μόνο τελεσταίο - οπότε δεν θα μπορούσε να γίνεται αλλιώς), αλλά για τους άλλους δύο λέμε από αριστερά προς τα δεξιά (αν και ούτε αυτό το λέει το βιβλίο, αλλά αφού αυτό το λέει για τους αριθμητικούς τελεστές, γιατί να πάμε ανάποδα για τους λογικούς;  ;))

Και τελευταίο επιχείρημα: https://alkisg.mysch.gr/steki/index.php?topic=912.msg8645#msg8645

P.Tsiotakis

To "απο αριστερά προς τα δεξιά" είναι ο καθολικός τρόπος υλοποίησης πράξεων μεταξύ ΙΔΙΑΣ ιεραρχίας τελεστών.

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

Τώρα, αν βρούμε κάποια αναφορά στο βιβλίο που να το αναιρεί αυτό κανένα πρόβλημα...

evry


Η λογική με την οποία σε κάποιες περιπτώσεις το ΚΑΙ προηγείται του Η βασίζεται στην αντιστοιχία που υπάρχει μεταξύ των πράξεων σύζευξη-πολλαπλασιασμός και διάζευξη-πρόσθεση. Αν κάποιος θέσει αντί για true το 1 και αντί για false το 0 θα δει αυτή την αντιστοιχία. Για παράδειγμα ένα γινόμενο αριθμών είναι διάφορο του μηδενός αν και μονον αν όλοι είναι διάφοροι του μηδενός. Ομοίως μια σύζευξη πολλών λογικών όρων είναι αληθής αν και μόνον αν είναι όλοι αληθείς (διάφοροι του ψευδούς.)
   Προφανώς δεν μιλάω για κάποια αντιστοιχία με αυστηρά μαθηματικό τρόπο, αλλά δίνω διαισθητικά ένα παράδειγμα για να φανεί η σχέση μεταξύ αυτών των πράξεων.
   Φυσικά στο δικό μας το μάθημα τα ΚΑΙ, Η έχουν την ίδια προτεραιότητα, λέμε και στους μαθητές να χρησιμοποιούν παρενθέσεις και έχουμε όλοι μας το κεφάλι μας ήσυχο :)
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

karaberis

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

ΠαράθεσηΗ λογική με την οποία σε κάποιες περιπτώσεις το ΚΑΙ προηγείται του Η βασίζεται στην αντιστοιχία που υπάρχει μεταξύ των πράξεων σύζευξη-πολλαπλασιασμός και διάζευξη-πρόσθεση. Αν κάποιος θέσει αντί για true το 1 και αντί για false το 0 θα δει αυτή την αντιστοιχία. Για παράδειγμα ένα γινόμενο αριθμών είναι διάφορο του μηδενός αν και μονον αν όλοι είναι διάφοροι του μηδενός. Ομοίως μια σύζευξη πολλών λογικών όρων είναι αληθής αν και μόνον αν είναι όλοι αληθείς (διάφοροι του ψευδούς.)
   Προφανώς δεν μιλάω για κάποια αντιστοιχία με αυστηρά μαθηματικό τρόπο, αλλά δίνω διαισθητικά ένα παράδειγμα για να φανεί η σχέση μεταξύ αυτών των πράξεων.
   Φυσικά στο δικό μας το μάθημα τα ΚΑΙ, Η έχουν την ίδια προτεραιότητα, λέμε και στους μαθητές να χρησιμοποιούν παρενθέσεις και έχουμε όλοι μας το κεφάλι μας ήσυχο

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

Συνεχίζοντας τον προβληματισμό μου (από τις απαντήσεις σας ήδη σχημάτισα την εικόνα οτι δεν συμφωνείτε καθαρά μόνο για τυπικούς λόγους) έκανα μια σύντομη αναζήτηση στο διαδίκτυο για τους ορισμούς μερικών από τις πιο "διαδεδομένες" γλώσσες (pascal και Delphi, quick και Visual Basic, Jave, C++, Python, SQL), και η σειρά είναι:

ΝΟΤ, AND, OR (και πάλι διορθώστε με αν κάνω κάποιο λάθος).

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

Τέλος, στο παράρτημα της Pascal που υπάρχει στο τετράδιο του μαθητή (Σελ. 182), αναφέρονται (για την Pascal) οι λογικοί τελεστές με τη σειρά που ανέφερα παραπάνω.

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

ΠαράθεσηΚαι τελευταίο επιχείρημα: https://alkisg.mysch.gr/steki/index.php?topic=912.msg8645#msg8645

Αγνοήστε το μήνυμα αν δεν έχετε τίποτα καινούργιο να προσθέσετε.

Φιλικά

P.Tsiotakis

Ήδη ο Νίκος και ο Ευριπίδης είχαν γράψει για τις πραγματικές γλώσσες προγραμματισμού...

Μέχρι πριν 2 χρόνια συζητάγαμε τα ίδια για τα div mod! Ώσπου ήρθε διευκρίνηση από το ΠΙ πως στα πλαίσια του σχολικού μας μαθήματος δε μας αφορούν πραγματικά προγραμματιστικά περιβάλλοντα αλλά η λογική της αλγοριθμικής...

Σε αυτά τα πλαίσια θεωρώ τους τελεστές και, ή αδερφάκια...

Νίκος Αδαμόπουλος

Παράθεση από: Τσιωτάκης Παναγιώτης στις 01 Νοε 2009, 02:31:41 ΜΜ
To "απο αριστερά προς τα δεξιά" είναι ο καθολικός τρόπος υλοποίησης πράξεων μεταξύ ΙΔΙΑΣ ιεραρχίας τελεστών.

χμμ, ... εξαρτάται τι εννοούμε τελεστή! Για παράδειγμα οι μαθητές ως τελεστές είχαν υπόψη μόνο τους αριθμητικούς τελεστές (και μάλλον όχι με το όνομα τελεστές). Ξαφνικά  τους μιλάμε και για συγκριτικούς αλλά και λογικούς τελεστές! Σε κάποιες γλώσσες η έννοια του τελεστή είναι ακόμα ευρύτερη. Στη C/C++ για παράδειγμα γίνεται ολίγον χαμός. Εκεί ακόμα και η εκχώρηση είναι τελεστής: Π.χ. x=y=3, όπου εκεί πάμε από δεξιά προς τα αριστερά, δηλ. το 3 εκχωρείται στο y και μετά το y στο x. Στη C/C++ έχουμε πολλούς τελεστές που πάνε από δεξιά προς τα αριστερά. Αν δείτε στο http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B στην ενότητα "Operator precedence" εκεί αναφέρει αναλυτικά ποιοι είναι Left-to-right και ποιοι Right-to-left...

Μάλιστα βλέποντας τον τελεστή !, που είναι το λογικό όχι, και έχει Right-to-left προτεραιότητα, αναρωτιέμαι αν θα ήταν επιτρεπτό (ασχέτως αν έχει κάποια χρησιμότητα!) να έχουμε τη λογική έκφραση: "όχι όχι done". Αν θα ήταν επιτρεπτό, τότε μάλλον θα έπρεπε να το υπολογίσουμε από δεξιά προς τα αριστερά.

Οκ, όλα αυτά έχουν ακαδημαϊκό ενδιαφέρον μόνο, και επί της ουσίας για το μάθημα της ΑΕΠΠ συμφωνούμε  :)

dimitra

Αγαπητοί συνάδελφοι, κάπως αργά συνεχίζω το topic, αλλά μέχρι τώρα δεν με είχε προβληματίσει η προτεραιότητα των λογικών τελεστών καθώς θεωρούσα αυτονόητο ότι είναι:
1. όχι
2. και
3. ή
...κ τώρα είδα ότι έχει ανοίξει ολόκληρη συζήτηση γι' αυτό το θέμα.
Επιμένω ότι είναι αυτή που προανέφερα κ μάλιστα όχι μόνο γιατί είναι έτσι σε όλες τις γλώσσες προγραμματισμού, αλλά γιατί είναι από τα βασικά αξιώματα της άλγεβρας Boole!!! Δείτε για παράδειγμα, στο κλασικό βιβλίο του Morris Mano, "Ψηφιακή Σχεδίαση", σελ. 57, Προτεραιότητα τελεστών.

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

Νίκος Αδαμόπουλος

Πάρα πολλοί συνάδελφοι έχουν επιχειρηματολογήσει πάνω σε αυτό... Όμως:

α) επειδή οι μαθητές θα βαθμολογηθούν όχι βάσει του Morris Mano αλλά βάσει του βιβλίου της ΑΕΠΠ που δεν πρόκειται να αλλάξει (ακόμα)
β) επειδή πέρα από το βιβλίο υπάρχει και το: https://alkisg.mysch.gr/steki/index.php?topic=912.msg8645#msg8645 το οποίο μας δεσμεύει τελικά
γ) επειδή δεν είναι δυνατόν άλλοι να βαθμολογούν έτσι και άλλοι γιουβέτσι
δ) επειδή δεν πρόκειται να πληγεί η επιστήμη της πληροφορικής ακολουθώντας την προτεινόμενη προτεραιότητα αλλά κι ούτε εμείς δεν θα μπορούμε να κλείσουμε μάτι από τις τύψεις
ε) και επειδή ούτε και οι μαθητές θα έχουν αποκτήσει στο τέλος κάποιο κουσούρι από κάτι τέτοιο, ώστε να έχουν πρόβλημα όταν και αν σπουδάσουν πληροφορική ή/και ασχοληθούν επαγγελματικά με τον προγραμματισμό

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

gpapargi

Παράθεση από: dimitra στις 23 Νοε 2009, 09:05:25 ΜΜ
Επιμένω ότι είναι αυτή που προανέφερα κ μάλιστα όχι μόνο γιατί είναι έτσι σε όλες τις γλώσσες προγραμματισμού, αλλά γιατί είναι από τα βασικά αξιώματα της άλγεβρας Boole!!! Δείτε για παράδειγμα, στο κλασικό βιβλίο του Morris Mano, "Ψηφιακή Σχεδίαση", σελ. 57, Προτεραιότητα τελεστών.

Από όσο θυμάμαι είχα ανοίξει παλαιότερα το βιβλίο του Mano και είχα καταλήξει σε αυτό
https://alkisg.mysch.gr/steki/index.php?topic=112.msg664#msg664
(Δες και το αμέσως προηγούμενο μήνυμα)

Πάντως όπως λέει και ο Νίκος τελικά έδωσαν διευκρίνηση. (Αν και η νοοτροπία με την οποία δόθηκαν οι διευκρινήσεις ήταν "πως θα βγάλουμε σωστό το βιβλίο σε όσο γίνεται περισσότερα σημεία". Έτσι καταλήξαμε στο να ισχύουν άλλα πράγματα στη "ΓΙΑ" σε ΓΛΩΣΣΑ και άλλα σε ψευδογλώσσα. Πολύ παιδαγωγικό!