Β7.1.4 Δομές Επανάληψης Β Λυκείου Κατεύθυνσης
Εισαγωγή Δομές επανάληψης ή βρόχοι (loops) ονομάζονται μέρη του κώδικα που εκτελούνται περισσότερες από μία φορές, ανάλογα με τη συνθήκη που έχουμε δηλώσει. Οι βρόχοι αναγκάζουν ένα τμήμα κώδικα να επαναλαμβάνεται. Η επανάληψη συνεχίζεται για όσο μία λογική συνθήκη είναι αληθής. Όταν η συνθήκη είναι ψευδής, ο βρόχος τελειώνει και ο έλεγχος του προγράμματος συνεχίζεται παρακάτω. Στη C++ υπάρχουν τρία είδη βρόχων: ο βρόχος for, ο βρόχος while και ο βρόχος do.
Τελεστές αύξησης/μείωσης (++, --) Με τους τελεστές αύξησης (++) και μείωσης (--), μπορούμε να αυξήσουμε ή να μειώσουμε αντίστοιχα κατά μία μονάδα την τιμή που είναι αποθηκευμένη στη μεταβλητή. Έτσι, όλα τα παρακάτω είναι ισοδύναμα: a++; a += 1; a = a + 1;
Τελεστές αύξησης/μείωσης (++, --) Θα πρέπει να δοθεί προσοχή στο εάν ο τελεστής αύξησης ή μείωσης χρησιμοποιείται ως πρόθεμα (++a) ή ως επίθεμα (a++). b = 4; a = ++b; // a = 5 c = 4; d = c++; // d = 4
Ο βρόχος for Η γενική μορφή της εντολής έχει ως εξής: for (αρχική τιμή μετρητή; συνθήκη ελέγχου; μεταβολή τιμής μετρητή) { εντολές εντός του βρόχου }
Ο βρόχος for Θέλουμε να εμφανίσουμε τους αριθμούς από το 1 μέχρι το 10 στην οθόνη: for (int i = 1; i <= 10; i++) { cout << i << endl; } Θέλουμε να εμφανίσουμε τους χαρακτήρες από το a μέχρι το z στην οθόνη: for (char letter = 'a'; letter <= 'z'; letter++) { cout << letter << endl; }
Παράδειγμα 1 Να δημιουργήσετε πρόγραμμα, το οποίο να εμφανίζει στην οθόνη τα πολλαπλάσια του 7, ξεκινώντας από τον αριθμό 21 μέχρι τον αριθμό 777. for (int i = 21; i <= 777; i+=7){ cout << i << endl; }
Παράδειγμα 2 Να δημιουργήσετε πρόγραμμα, το οποίο να διαβάζει τη βάση (b>=0) και τον εκθέτη (e>=0) μιας δύναμης και να επιστρέφει ως αποτέλεσμα τη βάση υψωμένη στον εκθέτη. Π.χ. 2 3 = 8. int b,e,ans = 1; cin >> b >> e; for (int i = 1; i <= e; i++){ ans = ans * b; } cout << ans << endl;
Άσκηση 1 Να δημιουργήσετε πρόγραμμα, το οποίο να ζητά δύο ακέραιους αριθμούς a, b (a<b) και να εμφανίζει στην οθόνη το άθροισμα όλων των αριθμών από το a μέχρι το b, συμπεριλαμβανομένων. Παράδειγμα εισόδου 5 10 Παράδειγμα εξόδου 45
Φωλιασμένες εντολές for Nested for loops Σε πολλές περιπτώσεις μπορούμε να χρησιμοποιήσουμε επαναληπτικές εντολές μέσα σε άλλες επαναληπτικές εντολές: 1 for (int i = 1; i <= 9; i++){ 12 for (int j = 1; j <= i; j++){ 123 cout << j; 1234 } 12345 cout << endl; 123456 } 1234567 12345678 123456789
Ο βρόχος while Τι γίνεται, όμως, όταν θέλουμε να επαναλαμβάνονται κάποιες εντολές, χωρίς να ξέρουμε από πριν τον αριθμό των επαναλήψεων; Για παράδειγμα, να διαβάζουμε αριθμούς μέχρι να δοθεί ο αριθμός μηδέν. int n = 1; while (n!= 0){ cout << "Press a number: "; cin >> n ; cout << "You pressed: "<< n << " press 0 to quit" << endl; } cout << "You pressed 0";
Ο βρόχος while Η γενική μορφή της εντολής while συγκριτικά με τη δομή for έχει ως εξής:
Παράδειγμα 3 Από μία μόνο αμοιβάδα, δημιουργούνται δύο νέες όμοιες αμοιβάδες. Αυτό συμβαίνει κάθε 30 λεπτά. Να δημιουργήσετε πρόγραμμα, το οποίο να υπολογίζει πόσα λεπτά χρειάζονται, ώστε από μια μόνο αμοιβάδα να δημιουργηθούν περισσότερες από 1000 αμοιβάδες. int n = 1, mins = 0; while (n <= 1000){ mins += 30; n *= 2; } cout << mins << endl;
Παράδειγμα 3 Λογικό διάγραμμα
int n; do { cout << "Press a number: "; cin >> n; cout << "You pressed: "<< n << " press 0 to quit" << endl; } while (n!= 0); Ο βρόχος do Αν θέλουμε να εξασφαλίσουμε ότι οι εντολές του βρόχου θα εκτελεστούν έστω και μία φορά, ανεξάρτητα από την τιμή της λογικής συνθήκης θα χρησιμοποιήσουμε τον βρόχο do, ο οποίος κάνει τον έλεγχο της λογικής συνθήκης στο τέλος.
Ο βρόχος do
int plithos = 0, sum = 0, num; do { cin >> num; plithos += 1; sum += num; } while (sum <999); cout << plithos << endl; Παράδειγμα 4 Να δημιουργήσετε πρόγραμμα, το οποίο να διαβάζει αριθμούς, μέχρι που το άθροισμα τους να ξεπεράσει το 999. Όταν γίνει αυτό, να εμφανίζει το πλήθος των αριθμών που έχουν δοθεί.
Άσκηση 2 Ο πληθυσμός μια αποικίας μυρμηγκιών αυξάνεται κατά 12% κάθε μήνα. Ταυτόχρονα, λόγω δυσμενών συνθηκών περίπου 10,000 μυρμήγκια πεθαίνουν στο ίδιο διάστημα. Αν ο αρχικός πληθυσμός της αποικίας ήταν 85,000, να βρείτε σε πόσους μήνες η αποικία θα ξεπεράσει τις 200,000.
Άσκηση 3 Να δημιουργήσετε πρόγραμμα, το οποίο να δέχεται έναν ακέραιο αριθμό και να τον αντιστρέφει. Για παράδειγμα, ο αριθμός 31 θα γίνει 13, ο αριθμός 2378 θα γίνει 8732 και ο 78789 θα γίνει 98787.
Q&A