Άρθρο #5: Δομές επανάληψης - Δομή επιλογής

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

Άρθρο #5: Δομές επανάληψης - Δομή επιλογής

Δημοσίευση από GReaper Την / Το Τετ Μαϊος 09, 2012 3:43 pm

Όπως φάνηκε στο προηγούμενο άρθρο, ο έλεγχος της ροής ενός προγράμματος είναι ίσως απ`τα πιο σημαντικά στοιχεία του προγραμματισμού. Αλλά όπως μπορούμε να επιλέξουμε πιο κομμάτι κώδικα θα εκτελεστεί, μπορούμε να επιλέξουμε και πόσες φορές θα εκτελεστεί. Αυτό γίνεται εφικτό με τις λεγόμενες δομές επανάληψης, και η 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);
   
    i = 1;
    sum = 0;
    while (i <= N)
    {
        sum += i;
        ++i;
    }
   
    printf("Adding all integers from 1 to %d gives %d.\n", N, sum);
   
    /* Μήπως αρχίζει να βγάζει νόημα αυτή η γραμμή? Μην απελπίζεστε, θα εξηγηθεί σε επόμενα άρθρα */
    while (getchar() != '\n');
    getchar();
   
    return 0;
}
Κώδικας:
#include <stdio.h>

int main(void)
{
    int N, i;
    int sum;
   
    printf("Give a positive integer: ");
    scanf("%d", &N);
   
    i = 1;
    sum = 0;
    do
    {
        sum += i;
        ++i;
    }while (i <= N);
   
    printf("Adding all integers from 1 to %d gives %d.\n", N, sum);
   
    while (getchar() != '\n');
    getchar();
   
    return 0;
}
Κώδικας:
#include <stdio.h>

int main(void)
{
    int N, i;
    int sum;
   
    printf("Give a positive integer: ");
    scanf("%d", &N);
   
    sum = 0;
    for (i = 1; i <= N; i++)
    {
        sum += i;
    }
   
    printf("Adding all integers from 1 to %d gives %d.\n", N, sum);
   
    while (getchar() != '\n');
    getchar();
   
    return 0;
}

Τέλος, υπάρχει μια μορφή επιλογής η οποία μας επιτρέπει να συγκρίνουμε μια μεταβλητή με πολλές σταθερές, και να εκτελούμε τον ανάλογο κώδικα, χωρίς μακροσκελείς "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. Αν κάποιο δεν υπήρχε, ο αμέσως επόμενος κώδικας θα εκτελούταν!! Μπορούν να κάνουν κάτι αντίστοιχο στις δομές επανάληψης, αλλά θα επανέλθω σ`αυτό σε άλλο άρθρο.

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

GReaper
Admin

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

http://procorn.forumgreek.com

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

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


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