Άρθρο #4: Λογικοί τελεστές - Ροή προγράμματος

Επισκόπηση προηγούμενης Θ.Ενότητας Επισκόπηση επόμενης Θ.Ενότητας Πήγαινε κάτω

Άρθρο #4: Λογικοί τελεστές - Ροή προγράμματος

Δημοσίευση από GReaper Την / Το Τρι Μαϊος 08, 2012 6:32 pm

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

avatar
GReaper
Admin

Αριθμός μηνυμάτων : 16
Ημερομηνία εγγραφής : 01/10/2011
Ηλικία : 26
Τόπος : Σπάρτη

http://procorn.forumgreek.com

Επιστροφή στην κορυφή Πήγαινε κάτω

Επισκόπηση προηγούμενης Θ.Ενότητας Επισκόπηση επόμενης Θ.Ενότητας Επιστροφή στην κορυφή


 
Δικαιώματα σας στην κατηγορία αυτή
Δεν μπορείτε να απαντήσετε στα Θέματα αυτής της Δ.Συζήτησης