[Solved] - Precedence Operators -- και ++

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
Connor MacLeod
Honorary Member
Δημοσιεύσεις: 13372
Εγγραφή: 07 Φεβ 2005 13:36
Τοποθεσία: Κοζάνη
Επικοινωνία:

[Solved] - Precedence Operators -- και ++

Δημοσίευση από Connor MacLeod » 05 Δεκ 2011 06:00

Εχω μια απορια όχι πως χρησμοποιούνται, αλλα γιατι να χρησμοποιουνται με αυτη τη σειρα.

Εστω ότι x=10, x=20, και έχουμε:

Κώδικας: Επιλογή όλων

sum1=++x+z;
sum2=--x+z;
Θα μας δωσει πολυ σωστα:
sum1=31
sum2=29

Αν όμως εχουμε:

Κώδικας: Επιλογή όλων

sum1=x++ +y;
sum2=x-- +y;
Tότε στο sum1 ναι μεν το x θα πάρει την τιμη 11 και 9 το x στο sum2,
αλλα στο αθρoισμα θα υπολογιστει η αρχική του τιμη δλδ το 10 και ετσι θα εχουμε
sum=30
και στο δευτερο θα εχουμε:
sum=30, πάλι, αφουδεν υπολογίζεται στο αθριμα η μείωση τιμης κατα ενα.

Και η ερώτηση μου ειναι:
Που μπορει να χρησμοποιηθει κατι τετοιο?

Μπορει καποιος να με δωσει ενα παραδειγμα γιατι δε μπορω να καταλαβω
που μπορει να ειναι αυτο χρήσιμο?
Γιατι να μειωσω η να αυξισω την τιμη μιας μεταβλητης, αφου δεν θα την χρεισμοποιησω?
Τελευταία επεξεργασία από το μέλος Connor MacLeod την 06 Δεκ 2011 03:49, έχει επεξεργασθεί 1 φορά συνολικά.
Meizu MX5(5.5"/8Core/3GB/32GB/Sony IMX220 20.7MP)
PC 27'' (3770@3.4/16GB/560SE/500GB SATA3/650W S12G)
Mac mini (2.5GHz/8GB/6630/90GB GorsairGT)

Άβαταρ μέλους
c0d3punk
Honorary Member
Δημοσιεύσεις: 1076
Εγγραφή: 15 Σεπ 2008 22:32
Τοποθεσία: Puerto pollo
Επικοινωνία:

[Solved] - Precedence Operators -- και ++

Δημοσίευση από c0d3punk » 05 Δεκ 2011 12:01

καταρχήν άλλο ++i και άλλο i++

το κοινό τους είναι ότι έχουμε μια μεταβλητή με τον τελεστή αύξησης. Οι εντολές εκτελούνται σε ένα πρόγραμμα η μια μετά την άλλη ok? (κράτατο αυτό)

θα σου δώσω ένα παράδειγμα:

ας αφήσουμε στην άκρη το z και τον τελεστή μείωσης (--) για αρχή.

έχουμε τις sum1=1 και sum2=1, καθώς και την μεταβλητή x=1.

πες ότι έχουμε:

Κώδικας: Επιλογή όλων

sum1= x++;
sum2=++x;

Η εντολή sum1= x++; είναι ίση με

sum1=x;
x=x+1;
Οπότε τι έγινε? πρώτα κατεχωρήθη στην sum1 η τιμή της x και μετά έγινε η αύξηση της x κατά μια μονάδα. Άρα sum1=1 και x=2

Κώδικας: Επιλογή όλων

Ενώ η sum2=++x; είναι ίση με

x=x+1;
sum2=x;
Εδώ πρώτα αυξήθηκε η x κατά μια μονάδα και μετά κατεχωρήθη στην sum2. Άρα sum2=2 και x=2

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

Στο παράδειγμα που δίνεις μια λες για z και μια για y. στο αποτέλεσμα παίζουν ρόλο και οι τιμές που έχουν αυτές οι μεταβλητές.
Connor MacLeod έγραψε:Γιατι να μειωσω η να αυξισω την τιμη μιας μεταβλητης, αφου δεν θα την χρεισμοποιησω?
Αν γίνονται σε σειρά οι εντολές που μας έδωσες τότε (αυτό που σου είπα στην αρχή) το x αλλάζει αφού αυξήθηκε στην πρώτη πράξη. Οπότε αν το χρησιμοποιήσεις παρακάτω η τιμή του δεν θα είναι η αρχική που έχεις δηλώσει στην αρχή του προγράμματος αλλά αυξημένη.

Και κάτι τελευταίο επειδή το post το έκανες 6 το πρωί, αν ξαγρύπνιες κοιμήσου πρώτα και μετά κάνε τις ασκήσεις :-P
like ants in a colony we do our share
but there's so many other f****' insects out there || Ανανεωμένα Παρτάλια || biZfind.gr

Άβαταρ μέλους
Connor MacLeod
Honorary Member
Δημοσιεύσεις: 13372
Εγγραφή: 07 Φεβ 2005 13:36
Τοποθεσία: Κοζάνη
Επικοινωνία:

[Solved] - Precedence Operators -- και ++

Δημοσίευση από Connor MacLeod » 05 Δεκ 2011 20:58

Στο παράδειγμα που δίνεις μια λες για z και μια για y. στο αποτέλεσμα παίζουν ρόλο και οι τιμές που έχουν αυτές οι μεταβλητές.
Μεταβλητες ειναι, καπως τις ονομαζεις... Θα μπορουσα να τα εχω και στα δυο y.

Και αφου η

sum2=++x; <=>
x=x+1;
sum2=x;
Γιατι να μπερδευομαστε?
Επι της ουσίας με λες ότι ήτε το ενα ήτε το αλλο χρησμοποιήσω, ειναι το ίδιο, ε?
Και κάτι τελευταίο επειδή το post το έκανες 6 το πρωί, αν ξαγρύπνιες κοιμήσου πρώτα και μετά κάνε τις ασκήσεις
Κοιμαμαι κατα τις 22:00 και ξυπναω 03:00 για να διαβασω και 08:00 φευγω για ΤΕΙ.
Meizu MX5(5.5"/8Core/3GB/32GB/Sony IMX220 20.7MP)
PC 27'' (3770@3.4/16GB/560SE/500GB SATA3/650W S12G)
Mac mini (2.5GHz/8GB/6630/90GB GorsairGT)

Άβαταρ μέλους
c0d3punk
Honorary Member
Δημοσιεύσεις: 1076
Εγγραφή: 15 Σεπ 2008 22:32
Τοποθεσία: Puerto pollo
Επικοινωνία:

[Solved] - Precedence Operators -- και ++

Δημοσίευση από c0d3punk » 05 Δεκ 2011 23:27

μωρέ μεταβλητές είναι αλλά όπως σου είπα εφόσον εμπλέκονται στις πράξεις οι τιμές τους παίζουν ρόλο το αποτέλεσμα.

ναι, τι πεις

Κώδικας: Επιλογή όλων

sum2=++x;
τι πεις

Κώδικας: Επιλογή όλων

x=x+1;
sum2=x; 
είναι το ίδιο (με περισσότερες γραμμές κώδικα).

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

Μπορείς να το χαρακτηρίσεις βίτσιο, σωστή δόμηση/καλύτερη ανάγνωση κώδικα ή απλά συντομογραφία.
Connor MacLeod έγραψε:Κοιμαμαι κατα τις 22:00 και ξυπναω 03:00 για να διαβασω και 08:00 φευγω για ΤΕΙ.
Α μάλιστα, άρα θα κοιμάσαι τώρα, οπότε στις 3 φτιάξε ένα καλό καφέ και με τα μούτρα στα βιβλία. Να διαβάζεις βιβλία καλύτερα παρά διάσπαρτες σημειώσεις.
like ants in a colony we do our share
but there's so many other f****' insects out there || Ανανεωμένα Παρτάλια || biZfind.gr

Άβαταρ μέλους
Connor MacLeod
Honorary Member
Δημοσιεύσεις: 13372
Εγγραφή: 07 Φεβ 2005 13:36
Τοποθεσία: Κοζάνη
Επικοινωνία:

[Solved] - Precedence Operators -- και ++

Δημοσίευση από Connor MacLeod » 06 Δεκ 2011 03:48

Α μάλιστα, άρα θα κοιμάσαι τώρα, οπότε στις 3 φτιάξε ένα καλό καφέ και με τα μούτρα στα βιβλία. Να διαβάζεις βιβλία καλύτερα παρά διάσπαρτες σημειώσεις.
Δεν πινω καφε. Γαλα πινω τετοια ωρα.
:P

Εχω ενα βιβλιο και ειναι πολυ κακογραμενο.
Ειναι ενος Ελληνα του Θραμπουλιδη και λεγεται Διαδικ. προγραμ. C

Γενικα τα περισσοτερα πανεπιστιμιακα συγγραματα απο Ελληνες συγγραφεις ειναι κακογραμενα.

Εχω πχ. του Peter Norton την Assembly (x86) ή το Βασικες Αρχες Γλωσσων προγραμματισμου του Ellis Horowitz και δεν εχουν καμια σχεση με τα ελληνικα βλιβλια.
είναι το ίδιο (με περισσότερες γραμμές κώδικα).
Ωραια τσαμπα τελεστες...
Για αρχη θα χρησμοποιω την δικια σου μεθοδο μεχρι να συνηθισω.
:P
Meizu MX5(5.5"/8Core/3GB/32GB/Sony IMX220 20.7MP)
PC 27'' (3770@3.4/16GB/560SE/500GB SATA3/650W S12G)
Mac mini (2.5GHz/8GB/6630/90GB GorsairGT)

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

[Solved] - Precedence Operators -- και ++

Δημοσίευση από gvre » 06 Δεκ 2011 10:20

Ένα καλό βιβλίο για C στα ελληνικά είναι το http://www.papasotiriou.gr/product.gboo ... 096&deid=0

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες