Άρθρο #4: Λογικοί τελεστές - Ροή προγράμματος
C++ Programmer's Corner :: Προγραμματισμός :: C :: Άρθρα
Σελίδα 1 από 1
Άρθρο #4: Λογικοί τελεστές - Ροή προγράμματος
Ξεκινάω με λίγη θεωρία. Η άλγεβρα Boole είναι αυτή που μας βοηθάει στο να παίρνουμε αποφάσεις μέσω του κώδικα. Είναι μια εκτενής άλγεβρα με αξιώματα, θεωρήματα, κ.α. Δεν θα ασχοληθώ πολύ με αυτά, απλά θα αναφέρω κάποιες standard γνώσεις γι`αυτή την άλγεβρα.
Λοιπόν το βασικό είναι ότι σ`αυτή την άλγεβρα υπάρχουν μόνο δύο πιθανές καταστάσεις μιας τιμής, το 0 και το 1( ή ψευδές αληθές ). Επίσης υπάρχουν και τελεστές, οι οποίοι κάνουν συγκεκριμένες πράξεις. Οι βασικοί είναι το OR( || στην C ), το AND( && στην C ) και το NOT( ! στην C).
Έστω δύο λογικές μεταβλητές "α" και "β". Παρακάτω δίνονται οι πίνακες τιμών για κάθε πράξη:
α || β
Κάθε τέτοιος τελεστής έχει τη δικιά του προτεραιότητα. Προηγείται το NOT, ακολουθεί το AND και τελευταίο το OR.
Πώς παράγονται όμως αυτές οι τιμές? Η απάντηση είναι, με τελεστές σύγκρισης. Η C έχει τελεστές Ισότητας( == ), Ανισότητας( != ), και όλους τους γνωστούς > , >= , < , <= . Όταν λοιπόν συγκρίνετε δύο τιμές( παρεμπιπτόντως, δε μπορείτε να συγκρίνετε πάνω από δύο τιμές με μια έκφραση πχ το μαθηματικό "α < β < γ" πρέπει να σπάσει σε "α < β && β < γ" ), το αποτέλεσμα θα είναι είτε ψευδές( 0 ) είτε αληθές( 1 ).
Τώρα, πώς όλα αυτά μπορούν να αλλάξουν τη ροή ενός προγράμματος? Η C έχει εντολές που αξιολογούν μια λογική έκφραση και ανάλογα αν είναι αληθής ή ψευδής, το αντίστοιχο κομμάτι κώδικα εκτελείται. Ακολουθεί η γενική μορφή τους:
Να σημειωθεί ότι αν ο κώδικας που πρόκειται να εκτελεστεί είναι μόνο μια γραμμή( μια έκφραση ), τότε δεν χρειάζονται τα "{ }".
Θα κλείσω με το παρακάτω παράδειγμα, που εκτυπώνει κάτι διαφορετικό ανάλογα τι τιμή του έδωσε ο χρήστης.
Λοιπόν το βασικό είναι ότι σ`αυτή την άλγεβρα υπάρχουν μόνο δύο πιθανές καταστάσεις μιας τιμής, το 0 και το 1( ή ψευδές αληθές ). Επίσης υπάρχουν και τελεστές, οι οποίοι κάνουν συγκεκριμένες πράξεις. Οι βασικοί είναι το OR( || στην C ), το AND( && στην C ) και το NOT( ! στην C).
Έστω δύο λογικές μεταβλητές "α" και "β". Παρακάτω δίνονται οι πίνακες τιμών για κάθε πράξη:
α || β
- Κώδικας:
α β αποτέλεσμα
0 0 0
0 1 1
1 0 1
1 1 1
- Κώδικας:
α β αποτέλεσμα
0 0 0
0 1 0
1 0 0
1 1 1
- Κώδικας:
α αποτέλεσμα
0 1
1 0
Κάθε τέτοιος τελεστής έχει τη δικιά του προτεραιότητα. Προηγείται το NOT, ακολουθεί το AND και τελευταίο το OR.
Πώς παράγονται όμως αυτές οι τιμές? Η απάντηση είναι, με τελεστές σύγκρισης. Η C έχει τελεστές Ισότητας( == ), Ανισότητας( != ), και όλους τους γνωστούς > , >= , < , <= . Όταν λοιπόν συγκρίνετε δύο τιμές( παρεμπιπτόντως, δε μπορείτε να συγκρίνετε πάνω από δύο τιμές με μια έκφραση πχ το μαθηματικό "α < β < γ" πρέπει να σπάσει σε "α < β && β < γ" ), το αποτέλεσμα θα είναι είτε ψευδές( 0 ) είτε αληθές( 1 ).
Τώρα, πώς όλα αυτά μπορούν να αλλάξουν τη ροή ενός προγράμματος? Η C έχει εντολές που αξιολογούν μια λογική έκφραση και ανάλογα αν είναι αληθής ή ψευδής, το αντίστοιχο κομμάτι κώδικα εκτελείται. Ακολουθεί η γενική μορφή τους:
- Κώδικας:
if (this_is_true)
{
/* Τρέξε με */
}/* Μπορεί να σταματάει εδώ */
else if (that_is_true)
{
/* Τρέξε εμένα! */
}
/* Όσες "else if" θέλετε ενδιάμεσα */
/* Μπορεί να σταματάει κι εδώ */
else
{
/* Τίποτα δεν ήταν αληθές, άρα εκτέλεσε εμένα */
}
Να σημειωθεί ότι αν ο κώδικας που πρόκειται να εκτελεστεί είναι μόνο μια γραμμή( μια έκφραση ), τότε δεν χρειάζονται τα "{ }".
Θα κλείσω με το παρακάτω παράδειγμα, που εκτυπώνει κάτι διαφορετικό ανάλογα τι τιμή του έδωσε ο χρήστης.
- Κώδικας:
#include <stdio.h>
int main(void)
{
int age = 0;
printf("Please input your age: ");
scanf("%d", &age);
if (age > 0 && age < 18)
printf("So you're a minor. Oh, I miss those days...\n");
else if (age >= 18 && age < 30)
printf("Good thing to be young and full of energy.\n");
else if (age >= 30 && age < 60)
printf("It's ok, learning never stops. :)\n");
else if (age >= 60 && age < 120)
printf("Well... I guess it's never too late!...\n");
else
printf("Nah, you're just messing with me!\n");
/* Αγνοήστε την παρακάτω γραμμή, προστέθηκε ώστε να μην είναι ελλιπές το παράδειγμα, θα αποκτήσει νόημα σε επόμενα άρθρα... */
while (getchar() != '\n');
getchar();
return 0;
}
Παρόμοια θέματα
» Άρθρο #11: Λογικοί ανά-bit τελεστές / Bitwise operators - Τελεστές ολίσθησης
» Άρθρο #3: Αριθμητικοί τελεστές
» Άρθρο #9: Συμβολοσειρές
» Άρθρο #1: Γνωριμία με τη C
» Άρθρο #8: Δείκτες
» Άρθρο #3: Αριθμητικοί τελεστές
» Άρθρο #9: Συμβολοσειρές
» Άρθρο #1: Γνωριμία με τη C
» Άρθρο #8: Δείκτες
C++ Programmer's Corner :: Προγραμματισμός :: C :: Άρθρα
Σελίδα 1 από 1
Δικαιώματα σας στην κατηγορία αυτή
Δεν μπορείτε να απαντήσετε στα Θέματα αυτής της Δ.Συζήτησης
|
|