Η C είναι απλή/Λογικοί τελεστές - Ροή προγράμματος

Από Βικιβιβλία

Ξεκινάω με λίγη θεωρία. Η άλγεβρα Boole είναι αυτή που μας βοηθάει στο να παίρνουμε αποφάσεις μέσω του κώδικα. Είναι μια εκτενής άλγεβρα με αξιώματα, θεωρήματα, κ.α. Δεν θα ασχοληθώ πολύ με αυτά, απλά θα αναφέρω κάποιες standard γνώσεις γι`αυτή την άλγεβρα.

Λοιπόν το βασικό είναι ότι σ`αυτή την άλγεβρα υπάρχουν μόνο δύο πιθανές καταστάσεις μιας τιμής, το 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 έχει τελεστές Ισότητας( == ), Ανισότητας( != ), και όλους τους γνωστούς > , >= , < , <= . Όταν λοιπόν συγκρίνετε δύο τιμές[1], το αποτέλεσμα θα είναι είτε ψευδές( 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;
}
  1. Δεν μπορείτε να συγκρίνετε πάνω από δύο τιμές με μια έκφραση πχ το μαθηματικό "α < β < γ" πρέπει να σπάσει σε "α < β && β < γ"