Les boucles servent à exécuter plusieurs fois une même logique.
Les deux types les plus courants sont la while loop (boucle indéfinie) et la for loop (boucle définie, ou comptée).
Il existe aussi la boucle for each, que l'on rencontrera dans un concept ultérieur.
La for loop se compose d'un en-tête et d'un bloc de code qui contient le corps de la boucle, entouré d'accolades.
L'en-tête se compose de 3 composants séparés par des points-virgules ; : l'instruction d'initialisation, la condition et une autre expression.
Chacun d'eux peut être vide.
for (init_statement; condition; expression) {
some_statement;
}
boolean et qui détermine quand la boucle doit s'arrêter.
Le code à l'intérieur de la boucle s'exécutera tant que cette condition s'évalue à true.
Dès que cette expression s'évalue à false, plus aucune itération de la boucle ne s'exécutera.La while loop exécute son corps tant que le contrôle de sa condition vaut true.
L'extrait de code ci-dessous montre comment transformer une boucle for en une while loop.
init_statement;
while(condition) {
some_statement;
expression;
}
Lorsqu'on travaille avec des boucles, il est souvent nécessaire d'ajouter 1 ou de soustraire 1 à une variable compteur qui garde la trace des itérations.
C'est tellement courant que les actions d'incrémentation et de décrémentation ont des opérateurs spéciaux : ++ et --.
Ils existent sous une forme préfixe et une forme postfixe. La forme préfixe modifie la variable avant son utilisation dans l'instruction, et la forme postfixe le fait après. On veut probablement la version préfixe la plupart du temps.
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
Le composant d'initialisation initialise généralement une variable compteur, la condition vérifie si la boucle doit continuer ou s'arrêter, et le composant post incrémente généralement le compteur à la fin de chaque répétition.
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
Cette boucle additionne les nombres de 1 à 9 (9 inclus).
Dans le corps d'une boucle, tu peux utiliser le mot-clé break pour arrêter complètement l'exécution de la boucle :
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
En revanche, le mot-clé continue arrête seulement l'exécution de l'itération en cours et passe à la suivante :
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (i%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
Il est généralement plus facile de comprendre la logique d'une boucle lorsque l'utilisation de break et continue est minimisée, voire complètement évitée.
Ces deux mots-clés sautent certaines parties du code et rendent souvent le suivi plus difficile.
Dans cet exercice, on va travailler avec des comptes d'épargne. Chaque année, le solde de ton compte d'épargne est mis à jour en fonction de son taux d'intérêt. Le taux d'intérêt que ta banque t'accorde dépend du montant d'argent présent sur ton compte (son solde) :
0 dollar (le solde devient plus négatif).0 dollar et inférieur à 1000 dollars.1000 dollars et inférieur à 5000 dollars.5000 dollars.Tu as quatre tâches, chacune d'elles portera sur le solde et son taux d'intérêt.
Implémente la fonction interest_rate pour calculer le taux d'intérêt en fonction du solde indiqué :
interest_rate(200.75);
// => 0.5
Implémente la fonction yearly_interest pour calculer les intérêts en fonction du solde indiqué :
yearly_interest(200.75):
// => 1.003750
Implémente la fonction annual_balance_update pour calculer la mise à jour annuelle du solde, en tenant compte du taux d'intérêt :
annual_balance_update(200.75);
// => 201.75375
Implémente la fonction years_until_desired_balance pour calculer le nombre minimum d'années nécessaires pour atteindre le solde souhaité, en tenant compte du fait que chaque année, les intérêts sont ajoutés au solde.
Cela signifie que le solde après un an est : solde initial + intérêts sur le solde initial.
Le solde après la deuxième année est le solde après un an + les intérêts sur le solde après un an.
Et ainsi de suite, jusqu'à ce que le solde de l'année en cours soit supérieur ou égal au solde cible.
double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14
Note que la valeur renvoyée est un int.
Inscris-toi sur Exercism pour apprendre et maîtriser C++ avec 19 concepts100 exercices, et un vrai mentorat humain, le tout gratuitement.