Η δομή επανάληψης for
στη γλώσσα C++ είναι ένας τρόπος για την εκτέλεση ενός κομματιού κώδικα επαναληπτικά, γνωρίζοντας τον αριθμό των επαναλήψεων εκ των προτέρων. Η σύνταξη της δομής for
είναι η εξής:
Σύνταξη:
for (initialization; condition; increment/decrement) { // block of code to be executed }
Η δομή του for loop αποτελείται από τρία μέρη:
- Η αρχικοποίηση της μεταβλητής (initialization) που θα χρησιμοποιηθεί για τον έλεγχο της συνθήκης του loop.
- Η συνθήκη (condition) που καθορίζει πότε θα σταματήσει ο loop.
- Η αύξηση ή μείωση της μεταβλητής (increment/decrement) σε κάθε επανάληψη του loop.
Ο κώδικας που βρίσκεται μέσα στο for loop εκτελείται μέχρι η συνθήκη του loop να γίνει ψευδής.
Παράδειγμα:
#include <iostream> int main() { for (int i = 1; i <= 5; i++) { std::cout << i << " "; // Εκτύπωση της τιμής της μεταβλητής i και ενός κενού διαστήματος } return 0; }
Ο παραπάνω κώδικας εκτυπώνει τους αριθμούς από 1 έως 5 στην οθόνη. Χρησιμοποιεί έναν βρόχο for
για να εκτελέσει τον κώδικα επαναληπτικά για κάθε τιμή της μεταβλητής i
από 1 έως 5.
Σε κάθε επανάληψη, η τιμή της μεταβλητής i
εκτυπώνεται χρησιμοποιώντας τη συνάρτηση std::cout
, η οποία ανήκει στη βιβλιοθήκη <iostream>
. Έπειτα, εκτυπώνεται ένα κενό διάστημα μετά τον αριθμό.
Τελικά, ο κώδικας επιστρέφει την τιμή 0, υποδηλώνοντας ότι η εκτέλεση του προγράμματος ολοκληρώθηκε με επιτυχία.
Το αποτέλεσμα που θα εμφανιστεί στην οθόνη είναι η σειρά των αριθμών από 1 έως 5, χωρισμένων από ένα κενό διάστημα μεταξύ τους. Συγκεκριμένα, η έξοδος θα είναι:
1 2 3 4 5
Ένα ακόμη παράδειγμα, που θα εκτυπώσει μόνο τις άρτιες τιμές από το 0 έως το 10:
#include <iostream> int main() { for (int i = 0; i <= 10; i++) { // Επανάληψη από το 0 έως το 10 if (i % 2 == 0) { // Έλεγχος αν το i είναι άρτιο std::cout << i << std::endl; // Εκτύπωση του άρτιου αριθμού } } return 0; }
Ο παραπάνω κώδικας εκτελεί την ακόλουθη λειτουργία:
- Αρχικοποιείται η μεταβλητή
i
με την τιμή 0. - Ξεκινά μια
for
επανάληψη που εκτελείται μέχρι τοi
να γίνει μεγαλύτερο από 10. - Εντός της επανάληψης, γίνεται έλεγχος αν το
i
είναι διαιρέσιμο με το 2 (δηλαδή αν είναι άρτιος αριθμός). - Αν το
i
είναι άρτιος, εκτυπώνεται η τιμή του στην οθόνη μέσω της εντολήςstd::cout << i << std::endl;
. - Η μεταβλητή
i
αυξάνεται κατά 1 μετά από κάθε επανάληψη. - Όταν το
i
γίνει μεγαλύτερο από 10, η επανάληψη τερματίζει. - Το πρόγραμμα επιστρέφει την τιμή 0, υποδηλώνοντας ότι ολοκληρώθηκε χωρίς σφάλματα.
Συνολικά, ο κώδικας εκτυπώνει τους άρτιους αριθμούς από το 0 έως το 10 στην οθόνη. Στην περίπτωση αυτή, θα εκτυπωθούν οι αριθμοί 0, 2, 4, 6, 8 και 10.
[adinserter block=”2″]
Μπορούμε να χρησιμοποιήσουμε τον όρο “εμφωλευμένο loop” ή “nested loop” για να αναφερθούμε στην τοποθέτηση ενός βρόχου μέσα σε έναν άλλο βρόχο. Αυτό σημαίνει ότι ο εσωτερικός βρόχος θα εκτελείται μια φορά για κάθε επανάληψη του εξωτερικού βρόχου.
Με άλλα λόγια, κάθε φορά που ο εξωτερικός βρόχος εκτελείται, ο εσωτερικός βρόχος θα ξεκινά από την αρχή και θα ολοκληρώνει τις επαναλήψεις του πριν προχωρήσει ο εξωτερικός βρόχος στην επόμενη επανάληψη του.
Ο εμφωλευμένος βρόχος μπορεί να χρησιμοποιηθεί για να επαναλάβει μια συγκεκριμένη διαδικασία πολλές φορές μέσα σε μια επανάληψη του εξωτερικού βρόχου. Αυτή η τεχνική είναι χρήσιμη όταν χρειάζεται να επαναλάβουμε μια συγκεκριμένη ενέργεια για κάθε στοιχείο ή συνδυασμό στοιχείων που επεξεργαζόμαστε στον εξωτερικό βρόχο.
Αυτός ο τρόπος δομής των βρόχων μας επιτρέπει να εκτελέσουμε πολύπλοκες και συνεκτικές επαναλήψεις στον
κώδικα, επιτρέποντάς μας να επεξεργαστούμε δεδομένα και να εκτελέσουμε ενέργειες με πολλαπλά επίπεδα εμβέλειας.
Παράδειγμα:
#include <iostream> int main() { // Εξωτερική επανάληψη για τη μεταβλητή i for (int i = 0; i < 3; i++) { // Εσωτερική επανάληψη για τη μεταβλητή j for (int j = 0; j < 2; j++) { std::cout << "i: " << i << ", j: " << j << std::endl; } } return 0; }
Ο παραπάνω κώδικας εκτελεί μια διπλή επανάληψη για τις μεταβλητές i
και j
. Αρχικά, η μεταβλητή i
αρχικοποιείται στο 0 και ελέγχεται αν είναι μικρότερη από 3. Αν η συνθήκη είναι αληθής, η εσωτερική επανάληψη εκτελείται. Η μεταβλητή j
αρχικοποιείται στο 0 και ελέγχεται αν είναι μικρότερη από 2. Αν η συνθήκη είναι αληθής, εκτελείται ο κώδικας μέσα στην εσωτερική επανάληψη, ο οποίος εκτυπώνει τις τιμές των μεταβλητών i
και j
στην οθόνη.
Ο κώδικας επαναλαμβάνει αυτήν την διαδικασία για όλες τις πιθανές τιμές των i
και j
. Έτσι, θα εμφανιστεί το μήνυμα “i: [τιμή του i], j: [τιμή του j]” έξι φορές, με όλους τους συνδυασμούς των τιμών i
και j
από το 0 έως το 2 και από το 0 έως το 1 αντίστοιχα.
Η έξοδος του προγράμματος θα είναι:
i: 0, j: 0 i: 0, j: 1 i: 1, j: 0 i: 1, j: 1 i: 2, j: 0 i: 2, j: 1
Αυτός είναι ο τρόπος με τον οποίο ο κώδικας εμφανίζει τις τιμές των μεταβλητών i
και j
μέσω της χρήσης της συνάρτησης std::cout
της βιβλιοθήκης <iostream>
.
Υπάρχει επίσης ένα “for-each loop” (εισήχθη στην έκδοση C++ 11 (2011), το οποίο χρησιμοποιείται αποκλειστικά για τη διάσχιση των στοιχείων σε έναν πίνακα (ή άλλα σύνολα δεδομένων):
Σύνταξη
for (type var : array) { // code to be executed for each element }
Η μεταβλητή “var” παίρνει τιμές από τον πίνακα “array”, και το block κώδικα εκτελείται μία φορά για κάθε στοιχείο του πίνακα. Ο τύπος των στοιχείων του πίνακα πρέπει να συμφωνεί με τον τύπο της μεταβλητής “var”.
Το παρακάτω παράδειγμα εκτυπώνει όλα τα στοιχεία ενός πίνακα, χρησιμοποιώντας ένα “for-each loop”:
Παράδειγμα:
#include <iostream> int main() { int arr[] = {1, 2, 3, 4, 5}; for (int i : arr) { std::cout << i << std::endl; // Εκτύπωση του τρέχοντος στοιχείου του πίνακα } return 0; }
Ο παραπάνω κώδικας εκτυπώνει τα στοιχεία ενός πίνακα στην οθόνη. Αρχικά, δημιουργείται ο πίνακας arr
με τιμές 1, 2, 3, 4, 5. Έπειτα, χρησιμοποιώντας μια for
βρόγχο με τη συντακτική δομή for (int i : arr)
, κάθε στοιχείο του πίνακα arr
αντιστοιχίζεται στη μεταβλητή i
. Εν συνεχεία, με την εντολή std::cout << i << std::endl;
γίνεται η εκτύπωση της τιμής του i
στην οθόνη, ακολουθούμενη από έναν χαρακτήρα νέας γραμμής για να μεταβεί στην επόμενη γραμμή εξόδου. Η διαδικασία επαναλαμβάνεται για κάθε στοιχείο του πίνακα, έτσι ώστε να εκτυπωθούν όλα τα στοιχεία του πίνακα στη σειρά τους. Τέλος, η main
συνάρτηση επιστρέφει την τιμή 0, υποδηλώνοντας ότι το πρόγραμμα ολοκληρώθηκε με επιτυχία.
Το αποτέλεσμα στην οθόνη θα είναι η εκτύπωση των στοιχείων του πίνακα arr
σε διαδοχικές γραμμές. Αν υποθέσουμε ότι ο πίνακας arr
έχει τις τιμές {1, 2, 3, 4, 5}, τότε το αποτέλεσμα στην οθόνη θα είναι:
1 2 3 4 5
Κάθε τιμή του πίνακα θα εμφανίζεται σε μια ξεχωριστή γραμμή, λόγω της εντολής std::cout << i << std::endl;
που προκαλεί μια αλλαγή γραμμής μετά την εκτύπωση κάθε τιμής.