Με τους βρόχους εκτελείς κάποια λογική επανειλημμένα.
Οι δύο πιο συνηθισμένοι τύποι είναι ο while loop (αόριστη επανάληψη) και ο for loop (ορισμένη ή μετρημένη επανάληψη).
Υπάρχει επίσης ο βρόχος for each, που θα συναντήσεις σε επόμενη έννοια.
Ο for loop αποτελείται από μια κεφαλίδα και ένα μπλοκ κώδικα που περιέχει το σώμα του βρόχου μέσα σε άγκιστρα.
Η κεφαλίδα αποτελείται από 3 στοιχεία που χωρίζονται με άνω τελείες ;: τη δήλωση αρχικοποίησης, τη συνθήκη και μια ακόμη έκφραση.
Καθένα από αυτά μπορεί να είναι κενό.
for (init_statement; condition; expression) {
some_statement;
}
boolean και ελέγχει πότε πρέπει να σταματήσει ο βρόχος.
Ο κώδικας μέσα στον βρόχο θα εκτελείται όσο αυτή η συνθήκη αποτιμάται σε true.
Μόλις αυτή η έκφραση αποτιμηθεί σε false, δεν θα εκτελεστεί άλλη επανάληψη του βρόχου.Ο while loop εκτελεί το σώμα του όσο ο έλεγχος της συνθήκης του είναι true.
Το παρακάτω απόσπασμα κώδικα δείχνει πώς να μετατρέψεις έναν for σε while loop.
init_statement;
while(condition) {
some_statement;
expression;
}
Όταν δουλεύεις με βρόχους, συχνά χρειάζεται να προσθέσεις 1 ή να αφαιρέσεις 1 από μια μεταβλητή μετρητή που παρακολουθεί τις επαναλήψεις.
Αυτό είναι τόσο συνηθισμένο, που οι ενέργειες αύξησης/μείωσης έχουν ειδικούς τελεστές: ++ και --.
Υπάρχουν σε προθεματική και σε επιθεματική μορφή. Η προθεματική μορφή αλλάζει τη μεταβλητή πριν από τη χρήση της στην εντολή και η επιθεματική μετά. Τις περισσότερες φορές μάλλον θέλεις την προθεματική μορφή.
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
Το μέρος init συνήθως ορίζει μια μεταβλητή μετρητή, η συνθήκη ελέγχει αν ο βρόχος πρέπει να συνεχιστεί ή να σταματήσει και το μέρος post συνήθως αυξάνει τον μετρητή στο τέλος κάθε επανάληψης.
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
Αυτός ο βρόχος θα αθροίσει τους αριθμούς από το 1 έως το 9 (συμπεριλαμβανομένου του 9).
Μέσα στο σώμα ενός βρόχου, μπορείς να χρησιμοποιήσεις τη λέξη-κλειδί break για να σταματήσεις εντελώς την εκτέλεση του βρόχου:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
Αντίθετα, η λέξη-κλειδί continue σταματά μόνο την εκτέλεση της τρέχουσας επανάληψης και συνεχίζει με την επόμενη:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (i%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
Συνήθως είναι πιο εύκολο να καταλάβεις τη λογική του βρόχου, όταν η χρήση των break και continue περιορίζεται στο ελάχιστο ή αποφεύγεται εντελώς.
Και οι δύο λέξεις-κλειδιά παρακάμπτουν ορισμένα σημεία του κώδικα και συχνά κάνουν πιο δύσκολο να παρακολουθήσεις τη ροή.
Σε αυτή την άσκηση, θα δουλέψεις με λογαριασμούς ταμιευτηρίου. Κάθε χρόνο, το υπόλοιπο του λογαριασμού ταμιευτηρίου σου ενημερώνεται με βάση το επιτόκιό του. Το επιτόκιο που σου δίνει η τράπεζά σου εξαρτάται από το ποσό των χρημάτων στον λογαριασμό σου (το υπόλοιπό του):
0 δολάρια (το υπόλοιπο γίνεται πιο αρνητικό).0 δολάρια και μικρότερο από 1000 δολάρια.1000 δολάρια και μικρότερο από 5000 δολάρια.5000 δολάρια.Έχεις τέσσερις εργασίες, καθεμία από τις οποίες ασχολείται με το υπόλοιπο και το επιτόκιό του.
Υλοποίησε τη συνάρτηση interest_rate για να υπολογίσεις το επιτόκιο με βάση το δεδομένο υπόλοιπο:
interest_rate(200.75);
// => 0.5
Υλοποίησε τη συνάρτηση yearly_interest για να υπολογίσεις τον τόκο με βάση το δεδομένο υπόλοιπο:
yearly_interest(200.75):
// => 1.003750
Υλοποίησε τη συνάρτηση annual_balance_update για να υπολογίσεις την ετήσια ενημέρωση του υπολοίπου, λαμβάνοντας υπόψη το επιτόκιο:
annual_balance_update(200.75);
// => 201.75375
Υλοποίησε τη συνάρτηση years_until_desired_balance για να υπολογίσεις τον ελάχιστο αριθμό ετών που χρειάζονται για να φτάσεις στο επιθυμητό υπόλοιπο, λαμβάνοντας υπόψη ότι κάθε χρόνο ο τόκος προστίθεται στο υπόλοιπο.
Αυτό σημαίνει ότι το υπόλοιπο μετά από ένα χρόνο είναι: αρχικό υπόλοιπο + τόκος για το αρχικό υπόλοιπο.
Το υπόλοιπο μετά τον δεύτερο χρόνο είναι το υπόλοιπο μετά τον ένα χρόνο + τόκος για το υπόλοιπο μετά τον ένα χρόνο.
Και ούτω καθεξής, μέχρι το υπόλοιπο του τρέχοντος έτους να είναι μεγαλύτερο ή ίσο με το υπόλοιπο-στόχο.
double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14
Σημείωσε ότι η τιμή που επιστρέφεται είναι int.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις C++ με 19 έννοιες100 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.