1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| with text_io; use text_io;
with ada.integer_text_io; use ada.integer_text_io;
procedure Principale is
-- Action : Si le nombre est composé de n chiffres significatifs alors
-- les 10-n premiers caractères sont des caractères '*' et les
-- caractères suivants sont les chiffres du nombre lu.
-- On va utiliser la fonction ChiffresSignificatifs et la procé-
-- dure PremiersCaracteres.
N:integer:=0; -- Contient le résultat de 10-n. Ce résultat sert à la procédure
-- PremiersCaracteres pour définir la longueur de la boucle
cpt:integer; -- Contient le nombre de chiffres significatifs du nombre lu
montant:integer; -- Montant du cheque rentre au clavier par l'utiulisateur
function ChiffresSignificatifs (montant: in integer) return integer is
-- Pre-requis : Le nombre rentre par l'utilisateur doit comporter au maximum 10 caracteres
-- Resultat : Calcule le nombre de chiffres significatifs qui composent
-- le nombre entier lu au clavier
-- Strategie : Une division par dix au sein d'une boucle permet de décomposer le nombre entre au clavier,
-- jusqu'a ce que celui ci soit inférieur a 1, au quel cas la boucle s'arrete.
-- Un compteur placé a l'interieur de la boucle est incremente de 1 pour chaque nouvelle boucle,
-- ce qui nous donne au final le nombre de chiffre du nombre.
cpt: integer:=0; -- Initialise à 0. Permet de stocker le nombre de chiffres significatifs du nombre lu
nbe: integer:=montant; -- Initialisé à montant
begin
while nbe>0 loop
cpt:=cpt+1;
nbe:=nbe/10;
end loop;
return cpt;
end ChiffresSignificatifs;
procedure PremiersCaracteres (N: in integer) is
-- pré-requis: aucun
-- action : Affiche le caractère '*' sur les 15-n premiers caracteres, avec
-- N représentant le nombre de caracteres que prend le nombre lu.
-- stratégie : Lancer une boucle qui tourne N-15 fois pour afficher le nombre d'etoiles
-- necessaires. (N-15 etoiles)
begin
for I in 1..N loop
put('*');
end loop;
end PremiersCaracteres;
begin
put("Veuillez entrer le montant de votre cheque : ");
get(montant);
N:=15-ChiffresSignificatifs(montant);
new_line;
PremiersCaracteres(N);
put(montant,ChiffresSignificatifs(montant)); -- Le fait de rajouter ",ChiffresSignificatifs(montant)" a l'interieur
-- du put permet d'eviter qu'il y est un blanc entre les etoiles et le
-- montant du cheque.
end Principale; |
Partager