Parcours
/
Crystal
Crystal
/
Exercices
/
L'intérêt est intéressant
L'intérêt est intéressant

L'intérêt est intéressant

Exercice d'apprentissage

Introduction

Une boucle est une structure de contrôle qui permet d'exécuter du code de façon répétée en fonction d'une condition donnée.

Les boucles While

Une boucle while est une structure de contrôle qui permet d'exécuter du code de façon répétée en fonction d'une condition donnée. Le code à l'intérieur d'une boucle while continue de s'exécuter tant que la condition est évaluée comme vraie (truthy). On utilise souvent les boucles while quand le nombre d'itérations n'est pas connu à l'avance, mais elles peuvent servir dans toute situation où une boucle est nécessaire.

La condition est évaluée avant l'exécution du code de la boucle, ce qui signifie que si la condition est fausse, le code de la boucle ne sera jamais exécuté.

i = 0
while i < 3
  puts i
  i += 1
end

# Output:
# 0
# 1
# 2

Pour parcourir une chaîne de caractères, tu peux boucler sur la longueur de la chaîne.

str = "Hello"
i = 0
while i < str.size
  puts str[i]
  i += 1
end

# Output:
# H
# e
# l
# l
# o

Les boucles Until

Les boucles until fonctionnent comme les boucles while, sauf que le code de la boucle continue de s'exécuter jusqu'à ce que la condition soit évaluée comme vraie (truthy). C'est la même différence qu'entre if et unless.

i = 0
until i == 3
  puts i
  i += 1
end

Les boucles infinies

Une erreur fréquente avec les boucles while est de tomber dans une « boucle infinie », qui ne se termine jamais. Une boucle infinie peut être causée par une condition qui n'est jamais évaluée comme vraie (truthy) ou fausse (falsey). C'est souvent dû à une erreur du programmeur, par exemple l'oubli d'incrémenter la variable de la boucle. Mais parfois, une boucle infinie est la façon la plus claire d'implémenter la logique du programme. Il arrive aussi qu'il soit indispensable de boucler indéfiniment : par exemple, un serveur HTTP attend une connexion entrante, la traite, puis attend la connexion suivante.

Break

Le mot-clé break permet de quitter une boucle plus tôt que prévu. C'est pratique quand on veut sortir d'une boucle avant la fin sous certaines conditions.

i = 0
while i <= 3
  puts i
  i += 1
  if i == 2
    break
  end
end

# Output:
# 0
# 1

Next

Le mot-clé next permet de passer directement à l'itération suivante d'une boucle. C'est pratique quand on veut sauter certaines itérations d'une boucle.

i = 0
while i <= 3
  i += 1
  if i == 2
    next
  end
  puts i
end

# Output:
# 1
# 3

Les types au sein d'une boucle

Le type d'une variable peut changer au fil d'une boucle. Dans l'exemple suivant, le type de a est Int32 | String, car elle peut être un Int32 ou une String dans la première partie de la boucle. La variable a ne porte le type Int32 | String que dans la première partie de la boucle : quand la boucle démarre, elle contient un Int32, et à la deuxième itération, elle contient une String. Ce système à types multiples sera expliqué en détail plus tard. Mais comme on est certain que la seconde partie de la boucle ne contiendra que String, le type de a est String dans la seconde partie de la boucle. À l'exécution, elle ne contiendra jamais simultanément Int32 et String.

i = 0
a = 4
while i < 3
  p typeof(a)
  # => Int32 | String
  a = "4"
  p typeof(a)
  # => String
  i += 1
end

En Crystal, la dernière expression d'une méthode renvoie sa valeur. Cependant, il arrive qu'on doive renvoyer une valeur avant la dernière expression. Pour cela, tu peux utiliser le mot-clé return, qui renvoie la valeur de l'expression qui le suit. Le code écrit après un mot-clé return ne sera pas exécuté.

def speed_limit(road_number)
    if road_number == 1
        return 50
        puts "This will not be executed"
    elsif road_number == 2
        return 80
        puts "This will not be executed"
    end
    100
end

p speed_limit(1) # => 50
p speed_limit(2) # => 80
p speed_limit(3) # => 100
Note

Le mot-clé return doit être omis quand la dernière expression d'une méthode est la valeur à renvoyer.

Instructions

Dans cet exercice, tu vas 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 de la somme d'argent présente sur ton compte (son solde) :

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

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

1. Calcule le taux d'intérêt

Implémente la méthode SavingsAccount.interest_rate() qui prend un solde en argument. La méthode doit renvoyer le taux d'intérêt pour le solde donné.

SavingsAccount.interest_rate(200.75)
# => 0.5

2. Calcule les intérêts

Implémente la méthode SavingsAccount.interest() qui prend un solde en argument. La méthode doit renvoyer les intérêts pour le solde donné.

SavingsAccount.interest(200.75)
# => 1.00375

3. Calcule la mise à jour annuelle du solde

Implémente la méthode SavingsAccount.annual_balance_update() qui prend un solde en argument. La méthode doit renvoyer le solde après un an.

SavingsAccount.annual_balance_update(200.75)
# => 201.75375

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

Implémente la méthode SavingsAccount.years_before_desired_balance() qui prend un solde et un solde cible en arguments. La méthode doit renvoyer le nombre d'années qu'il faudrait pour atteindre le solde cible.

balance = 200.75
target_balance = 214.88
SavingsAccount.years_before_desired_balance(balance, target_balance)
# => 14
Note

Quand on applique un intérêt simple à un capital de départ, le solde est multiplié par le taux d'intérêt et le produit des deux donne le montant des intérêts.

Les intérêts composés, quant à eux, s'obtiennent en appliquant les intérêts de façon récurrente. À chaque application, le montant des intérêts est calculé puis ajouté au capital, de sorte que les calculs d'intérêts suivants portent sur un capital plus élevé.

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

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

Inscris-toi sur Exercism pour apprendre et maîtriser Crystal avec 26 concepts142 exercices, et un vrai mentorat humain, le tout gratuitement.