Download ex3.adb
with Ada.Text_Io, Ada.Integer_Text_Io, Ada.Float_Text_Io;
use Ada.Text_Io, Ada.Integer_Text_Io, Ada.Float_Text_Io;
-- Début exercice 3
procedure Ex3 is
-- Les valeurs suivantes stockent des montants monétaire, le type
-- de ces valeurs est Float.
Montant_Total : Float := 0.0;
Montant_Moyen : Float;
Depot : Float := 0.0; -- Montant saisi par l'utilisateur
-- Le nombre d'enveloppes est un entier (naturel qui plus est).
Nb_Enveloppes : Natural := 0;
begin
-- On peut utiliser deux types de boucles: générale (loop) et
-- tant que (while). Ces deux types de boucles permettent de
-- faire des itérations sans savoir à l'avance le nombre de tour
-- que l'on doit faire. La boucle pour (for) n'est pas dans
-- ce cas et elle est donc à proscrire.
-- Nous allons dans la suite utiliser la boucle générale (loop)
-- pour tirer avantage du fait que l'on peut sortir quand on le
-- souhaite (exit when) de la boucle.
loop
-- On rentre obligatoirement dans la boucle, il n'y a pas de
-- conditions qui nous en empêche.
Put("Saisir le montant du dépot (<=0 pour quitter) ?");
Get( Depot );
-- On quitte la boucle si l'utilisateur saisit un montant
-- négatif ou nul. Le programme peut donc bien s'arrêter.
-- Il faudra faire cependant attention au cas où l'utilisateur
-- saisit comme premier montant un nombre négatif ou nul.
-- (voir plus bas)
exit when Depot <= 0.0;
-- Calcul du montant total saisi
Montant_Total := Montant_Total + Depot;
-- Ajout d'une enveloppe saisie
Nb_Enveloppes := Nb_Enveloppes + 1;
-- On n'a plus rien à faire. Calculer la moyenne est inutile,
-- nous n'en avons besoin qu'à la fin du programme. On peut
-- donc boucler pour demander à l'utilisateur de saisir
-- l'enveloppe suivante.
end loop;
-- Test si une enveloppe au moins a été saisie pour éviter la
-- division par 0.
if ( Nb_Enveloppes = 0 ) then
Put("Aucun dépot effectué, rien à afficher.");
else
-- Calcul du montant moyen
Montant_Moyen := Montant_Total / Float( Nb_Enveloppes);
-- On convertit ici Nb_Enveloppes en Float pour faire le calul
-- de la division du montant moyen.
-- Erreur très fréquente:
-- Il faut faire attention surtout si l'on utilise un while à
-- ce que le montant total soit juste (que l'on n'est pas
-- compté la dernière valeur de dépôt négative par exemple)
-- et également que le nombre d'enveloppes soit correct (que
-- l'on ait pas compté la dernière enveloppe correspondante à
-- la fin du programme).
-- Affichage des valeurs demandées:
Put("Le montant moyen est:");
Put( Montant_Moyen ); New_Line;
Put("Le montant total est:");
Put( Montant_Total ); New_Line;
Put("Le nombre d'enveloppes est:");
Put( Nb_Enveloppes ); New_Line;
end if;
end Ex3;
-- Fin exercice 3