3. Αριθμητικές και λογικές παραστάσεις

Παράσταση είναι μια έκφραση που έχει καθορισμένο τύπο. Μια παράσταση εμπλέκει αριθμητικές ή λογικές πράξεις, μεταξύ μεταβλητών, σταθερών ή κλήσεων συναρτήσεων, στα μέλη που αποτελείται. Όταν μια παράσταση σχηματίζεται με αριθμητικούς τελεστές ή πραξεις και δίνει μια αριθμητική τιμή λέμε ότι έχουμε μια αριθμητική παράσταση. Οι αριθμητικοί τελεστές μπορεί να είναι ο πολλαπλασιασμός (*), η διαίρεση (/), η προσθεση (+), η αφαίρεση (-) και το υπόλοιπο (%). Όταν έχουμε λογικές πράξεις μεταξύ των μελών μιας παράστασης που δίνουν τιμή true (1) ή false (0) τότε έχουμε λογική παράσταση.

Στις αριθμητικές παραστάσεις που εμπλέκεται ο τελεστής εκχώρησης, η τιμή μιας αριθμητικής παράστασης εκχωρείται σε μια μεταβλητή. Η τιμή εκχώρησης ορίζεται σαν τιμή ολόκληρης της αριθμητικής παράστασης.

Παραδείγματα: Η έκφραση d=2 είναι μια παράσταση που ορίζεται από μόνη της, με τιμή 2, δηλαδή με τιμή ίση με την τιμή της παράστασης δεξιά του ίσον.

Η έκφραση b=c=9 είναι μια παράσταση με τιμή εκείνης της παράστασης c=9 που εκχωρείται στην μεταβλητή b με τον τελεστή ίσον (=).

Παραδείγματα παραστάσεων είναι τα ακόλουθα:

int a, b, c;
float k;
d=2;
b=c=9;
a=4+d;
k=d*2.2;

Η έκφραση 4+d είναι μια παράσταση με τιμή το άθροισμα της ακέραιας σταθεράς 4 και το περιεχόμενο της μεταβλητής d δηλαδή την τιμή 6 που στη συνέχεια ο τελεστής ίσον την καταχωρεί στη μεταβλητή a.

Η έκφραση d*2.2 είναι μια παράσταση με τιμή το περιεχόμενο της μεταβλητής d πολλαπλασιασμένο επί 2.2 δηλαδή την τιμή 4.4 που στη συνέχεια ο τελεστής ίσον (=) καταχωρίζει το αποτέλεσμα της παράστασης στη μεταβλητή k.

Παράδειγμα: Η παράσταση:

int k,m;
m=15+(k=8);

θα καταχωρίσει στη μεταβλητή k το 8 και στη μεταβλητή m το 23, για το λόγο ότι η παράσταση k=8     εκτός από το ότι καταχωρίζει την τιμή 8 στη μεταβλητή k επιστρέφει την τιμή 8 η οποία προστίθεται στο 15 και το αποτέλεσμα εκχωρείται στη μεταβλητή m.

Παραστάσεις με μέλη διαφορετικού τύπου

Ένα ερώτημα που προκύπτει συχνά, είναι ποιος ο τύπος μιας παράστασης, εάν σε αυτή μετέχουν μέλη διαφορετικού τύπου;

Για να καθορίσουμε τον τύπο μιας παράστασης, ιεραρχούμε τους τύπους δεδομένων με την ακόλουθη σειρά, από το χαμηλότερο προς το υψηλότερο επίπεδο μέλους: bool, char, int, float και double.

Ο τύπος μιας παράστασης είναι ο ίδιος με εκείνον τον τύπο δεδομένων του ιεραρχικά υψηλότερου μέλους της παράστασης.

Παράδειγμα: Θεωρήστε το ακόλουθο απόσπασμα κώδικα:

int k, m;
double a;
k=5;
m=20;
a=(k+m)/2;

Εδώ θα περίμενε κανείς ότι, η τιμή που θα έδινε το σύστημα θα ήταν ίση με 12,5 (25/2). Όμως αυτό που δίνει στην πραγματικότητα είναι η τιμή 12 . Συμβαίνει έτσι για το λόγο ότι, η παράσταση (k+m)/2 έχει σαν αποτέλεσμα ακέραιο αριθμό αφού όλα τα μέλη της είναι του τύπου int με αποτέλεσμα να μην δίνει δεκαδικά ψηφία.

Για να δώσει το σωστό αποτέλεσμα δηλαδή την τιμή 12,5 θα πρέπει η παράσταση αυτή να γραφεί ως εξής:

a=(k+m)/2.0;

Εδώ, επειδή η σταθερά 2.0 είναι του τύπου double, η παράσταση (k+m)/2.0 δίνει τιμή τύπου double. Σε αυτή την παράσταση, ο τύπος double είναι ο ιεραρχικά υψηλότερος από τους τύπους των υπόλοιπων μελών της παράστασης.

Στη γλώσσα C εκτός από τους αριθμητικούς τελεστές που ορίζουν αριθμητικές πράξεις, εισάγει και τους νέους τελεστές της μοναδιαίας αύξησης (++) και της μοναδιαίας μείωσης (- -). Αυτοί οι μοναδιαίοι τελεστές εφαρμόζονται μόνο σε ακέραιες ή πραγματικές μεταβλητές και μπορούν να προηγούνται (προθεματικοί) ή να ακολουθούν (επιθεματικοί) το όνομα της μεταβλητής. Για παράδειγμα έχουμε ++α; α++; – -α; α- -΄

Ο τελεστής ++ αυξάνει το περιεχόμενο της μεταβλητής κατά 1, ενώ ο τελεστής – – μειώνει το περιεχόμενο της μεταβλητής κατά 1, ανεξάρτητα από τη θέση του τελεστή στη μεταβλητή.

Επειδή οι παραστάσεις με τους τελεστές ++ και – – επιστρέφουν μια τιμή, αυτή η τιμή εξαρτάται από τη θέση του τελεστή πριν ή μετά τη μεταβλητή.

Όταν ο τελεστής ++(ή – -) βρίσκεται πριν από την μεταβλητή (προθεματικός) τότε πρώτα γίνεται η αύξηση (ή μείωση) της μεταβλητής κατά 1 και στην συνέχεια επιστρέφεται στη θέση της η νέα τιμή της. Για παράδειγμα αν η μεταβλητή α έχει αρχική τιμή 8, τότε η πρόταση ++α αυξάνει το α κατά 1 και στη συνέχεια επιστρέφει μέσα στη θέση της την τιμή 9.

Όταν ο τελεστής ++ (ή- -) βρίσκεται μετά από την μεταβλητή (επιθεματικός) τότε πρώτα επιστρέφεται η τιμή της μεταβλητής πριν την πράξη και στη συνέχεια γίνεται η αύξηση (ή μείωση) της μεταβλητής. Για παράδειγμα, αν η μεταβλητή α έχει αρχική τιμή 8, τότε η πρόταση α++ πρώτα επιστρέφει μέσα στην παράσταση που βρίσκεται την τιμή 8 και στη συνέχεια αυξάνει την α κατά 1.

Μπορούμε να συνδυάσουμε τον τελεστή ανάθεσης = με άλλους αριθμητικούς τελεστές (+, -, *, /, %) για να δημιουργήσουμε συνδυασμένους τελεστές σε συντετμημένη μορφή. Έτσι αν x είναι μια μεταβλητή και α μια σταθερά ή μεταβλητή ή αριθμητική παράσταση στον  &&& πίνακα ορίζονται οι βασικοί συνδυασμοί σύντμησης μαζί με τις ισοδύναμες κανονικές παραστάσεις τους.

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

Μια παράσταση υπό συνθήκη αποτελεί μια νέα μορφή παράστασης και συγκεκριμένα τη λογική παράσταση, η οποία μπορεί να πάρει δυο τιμές αληθής και ψευδής. Στη C η αληθής παράσταση παριστάνεται με την τιμή 1 ενώ η ψευδής με την τιμή 0.

Συνθήκες είναι όλες οι συγκρίσεις αριθμητικών τιμών π.χ. η λογική συνθήκη d<6 είναι αληθής όταν η τιμή της μεταβλητής d είναι μικρότερη από 6. Η έκφραση c==5 είναι λογική παράσταση και είναι αληθής όταν η αριθμητική μεταβλητή c έχει την τιμή 5 και ψευδής σε κάθε άλλη περίπτωση.

Είναι δυνατό να ορίσουμε συνθήκες σαν σύνθεση απλών λογικών παραστάσεων, χρησιμοποιώντας λογικούς τελεστές. Για παράδειγμα, θεωρούμε ότι θέλουμε να διαπιστώσουμε αν οι παραστάσεις α>5 και α<12 είναι αληθής ταυτόχρονα. Σε αυτή την περίπτωση συνδέουμε αυτές τις λογικές εκφράσεις με τον τελεστή AND που συμβολίζεται με &&. Έτσι με αυτό τον τρόπο δημιουργούμε μια νέα σύνθετη λογική παράσταση α>2&&α<12 που έχει αληθή τιμή όταν και οι δυο εκφράσεις είναι αληθής.

Μπορούμε να συνδέσουμε δυο λογικές παραστάσεις με τον λογικό τελεστή OR που συμβολίζεται με ||. Έτσι η σύνθετη παράσταση με αυτόν τον λογικό τελεστή είναι αληθής όταν μια από αυτές τις λογικές παραστάσεις που συνδέονται με τον τελεστή || είναι αληθής. Για παράδειγμα, η λογική παράσταση α>10||α<5 είναι αληθής όταν η τιμή της μεταβλητής α είναι μεγαλύτερη από 10 ή μικρότερη από 5.

Οι λογικοί τελεστές && (AND) και || (OR) συνδέουν δυο λογικές παραστάσεις δημιουργώντας μια σύνθετη λογική πρόταση, που ορίζεται ως εξής:
— Όταν οι δυο λογικές παραστάσεις συνδέονται με τον τελεστή && (AND) , η σύνθεση τους είναι αληθής, όταν ΚΑΙ οι δυο επιμέρους λογικές παραστάσεις είναι αληθής.
— Όταν οι δυο λογικές παραστάσεις συνδέονται με τον τελεστή ||(OR) η σύνθεση τους είναι αληθής όταν ΜΙΑ ΤΟΥΛΑΧΙΣΤΟΝ από τις δυο επιμέρους λογικές παραστάσεις είναι αληθής.

Ο τελεστής !(NOT) δεν συνδέει λογικές παραστάσεις μεταξύ τους, αλλά εφαρμόζεται σε μια μόνο λογική παράσταση και αντιστρέφει τη λογική της. Για παράδειγμα η παράσταση !(d<3) είναι αληθής στην περίπτωση που η τιμή της μεταβλητής d δεν είναι μικρότερη από 3. Η παρένθεση είναι υποχρεωτική διότι ο τελεστής ΝΟΤ(!) έχει μεγαλύτερη προτεραιότητα από τον τελεστή <.

Επειδή μια λογική παράσταση δίνει 1 όταν αποτιμάται σε αληθής, ενώ δίνει 0 όταν αποτιμάται σε ψευδής, μπορούμε να έχουμε παραστάσεις π.χ. τις μορφής α=b>5, όπου η μεταβλητή α παίρνει την τιμή 1 όταν έχουμε b>5, ενώ η α παίρνει την τιμή 0 όταν έχουμε b≤5. Δηλαδή το αποτέλεσμα μιας λογικής παράστασης μπορούμε να το καταχωρούμε σε μια μεταβλητή.

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