Parcours
/
C++
C++
/
Exercices
/
L'intérêt, c'est intéressant
L'intérêt, c'est intéressant

L'intérêt, c'est intéressant

Exercice d'apprentissage

Introduction

Boucles

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.

Syntaxe générale

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;
}
  • Le composant init_statement est du code qui ne s'exécute qu'une seule fois, avant le début de la boucle.
  • Le composant condition doit être une expression qui s'évalue en un 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.
  • Le composant expression est du code qui s'exécute à la fin de chaque itération.

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;
}

Interlude : incréments et décréments

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

Les boucles for : un exemple

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).

break et continue

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
Note

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.

Instructions

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) :

  • 3,213 % pour un solde inférieur à 0 dollar (le solde devient plus négatif).
  • 0,5 % pour un solde supérieur ou égal à 0 dollar et inférieur à 1000 dollars.
  • 1,621 % pour un solde supérieur ou égal à 1000 dollars et inférieur à 5000 dollars.
  • 2,475 % pour un solde supérieur ou égal à 5000 dollars.

Tu as quatre tâches, chacune d'elles portera sur le solde et son taux d'intérêt.

1. Calcule le 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

2. Calcule les intérêts

Implémente la fonction yearly_interest pour calculer les intérêts en fonction du solde indiqué :

yearly_interest(200.75):
// => 1.003750

3. Calcule la mise à jour annuelle du solde

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

4. Calcule le nombre d'années avant d'atteindre le solde souhaité

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.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
C++ Exercism

Prêt à commencer L'intérêt, c'est intéressant ?

Inscris-toi sur Exercism pour apprendre et maîtriser C++ avec 19 concepts100 exercices, et un vrai mentorat humain, le tout gratuitement.