Μετάβαση στο περιεχόμενο

Η C είναι απλή/Δομές επανάληψης - Δομή επιλογής

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

Όπως φάνηκε στο προηγούμενο άρθρο, ο έλεγχος της ροής ενός προγράμματος είναι ίσως απ`τα πιο σημαντικά στοιχεία του προγραμματισμού. Αλλά όπως μπορούμε να επιλέξουμε ποιο κομμάτι κώδικα θα εκτελεστεί, μπορούμε να επιλέξουμε και πόσες φορές θα εκτελεστεί. Αυτό γίνεται εφικτό με τις λεγόμενες δομές επανάληψης, και η C εμπεριέχει τις 3 βασικότερες, οι οποίες είναι:

Επανάληψη όσο η συνθήκη είναι αληθής.

while (this_is_true)
{
    /* Keep executing me */
}

Ίδιο με το παραπάνω, αλλά ο κώδικας εκτελείται τουλάχιστον μια φορά.

do
{
    /* Keep executing me */
}while (this_is_true);

Διαφορετικό από τα παραπάνω, αυτή η δομή συνήθως χρησιμοποιείται σαν "ΓΙΑ χ ΑΠΟ κάπου ΜΕΧΡΙ κάπου ΜΕ_ΒΗΜΑ κάτι", αλλά είναι πολύ ευέλικτη. To initialization είναι η ανάθεση αρχικής τιμής, το condition είναι η συνθήκη επανάληψης και το operation είναι κάποια πράξη, συνήθως το "βήμα".

for (initialization ; condition ; operation)
{
    /* Keep executing me */
}

Παρακάτω δίνονται 3 παραδείγματα, τα οποία είναι το ίδιο πρόβλημα( το άθροισμα 1+2+3+...+n ) λυμένο με τους 3 διαφορετικούς τρόπους:

#include <stdio.h>

int main(void)
{
    int N, i;
    int sum;
   
    printf("Give a positive integer: ");
    scanf("%d", &N);
   
    /* Εδώ μπορεί να πάει οποιοδήποτε από τα παρακάτω 3 παραδείγματα */
   
    printf("Adding all integers from 1 to %d gives %d.\n", N, sum);
   
    /* Μήπως αρχίζει να βγάζει νόημα αυτή η γραμμή? Μην απελπίζεστε, θα εξηγηθεί σε επόμενα άρθρα */
    while (getchar() != '\n');
    getchar();
   
    return 0;
}
    /* Παράδειγμα με while */
    i = 1;
    sum = 0;
    while (i <= N)
    {
        sum += i;
        ++i;
    }
    /* Παράδειγμα με do-while */
    i = 1;
    sum = 0;
    do
    {
        sum += i;
        ++i;
    }while (i <= N);
    /* Παράδειγμα με for */
    sum = 0;
    for (i = 1; i <= N; i++)
    {
        sum += i;
    }
}

Τέλος, υπάρχει μια μορφή επιλογής η οποία μας επιτρέπει να συγκρίνουμε μια μεταβλητή με πολλές σταθερές, και να εκτελούμε τον ανάλογο κώδικα, χωρίς μακροσκελείς "if". Αυτό γίνεται με τα "switch cases". Παρακάτω δίνεται η γενίκευση της "switch" και εξηγείται η ισοδυναμία της με την "if".

switch (variable)
{
    case value1: /* if (variable == value1) */
        /* Τρέχε εμένα */
    break;
    case value2: /* else if (variable == value2) */
        /* Τρέχε εμένα! */
    break;
    /* Όσα cases θέλετε βάζετε */
    default: /* else */
        /* Εκτέλεσε εμένα. */
}

Τα "break" υπάρχουν για να "πετάξουν" τη ροή εκτέλεσης έξω από τη switch. Αν κάποιο δεν υπήρχε, ο αμέσως επόμενος κώδικας θα εκτελούταν!! Μπορούν να κάνουν κάτι αντίστοιχο στις δομές επανάληψης, αλλά θα επανέλθω σ`αυτό σε άλλο άρθρο.

Κλείνοντας, μη ξεχνάτε να πειραματίζεστε με το κώδικα και να προσπαθείτε να φτιάξετε να δικά σας προγράμματα. Μερικά παραδείγματα σαν τα δικά μου δεν είναι αρκετά για να μάθετε τη γλώσσα, πρέπει να προσπαθήσετε! :-)