ED n·5 Algorithmique-Programmation-----corrigé


Exercice 1

Enoncé

Ecrire une procédure getSomme qui lit une suite d'entiers (chacun d'eux compris entre 0 et 20), et en calcule la somme. En cas d'erreur (le caractère lu est un entier non compris entre 0 et 20), une nouvelle saisie doit être effectuée. Le calcul s'arrête dès que le caractère lu n'est pas un chiffre.
NB : on utilisera les exceptions prédéfinies DATA_ERROR et CONSTRAINT_ERROR.
 

Question 1


début
  initialiser la somme à 0;
-- cas général
  tant que vrai faire
    afficher : "Veuillez saisir un entier entre 0 et 20 ";
    afficher : "ou un entier non compris dans cet intervalle pour terminer la saisie : ";
    lire l'élément;
    cumuler l'élément lu à la somme;
   fin tant que;
-- cas particuliers
   si l'élément <0 ou >20 alors afficher : "Recommencer la saisie";
   si l'élément n'est pas un chiffre alors afficher : "Saisie terminée!";
fin.

Question 2


procedure getSomme(X:out integer) ;

Question 3


procedure getSomme(X:out integer) is
  subtype Note is integer range 0..20;
  elt:Note;
  S:integer:=0;
 begin
  loop
    begin
     put_line("Veuillez saisir un entier entre 0 et 20 ");
     put("ou un entier non compris dans cet intervalle pour terminer la saisie : ");
     get(elt);
     S:=S+elt;
    exception
      when CONSTRAINT_ERROR=> put_line("recommencez !");skip_line;
      when DATA_ERROR=>put_line("La saisie est terminée");X:=S;exit;
    end;
  end loop;
 end getSomme;

Question 4


with Ada.Text_io;use Ada.Text_io;
with Ada.Integer_Text_io;use Ada.Integer_Text_io;

procedure lecture is
 somme:Integer;
 procedure getSomme(X:out integer) is
  subtype Note is integer range 0..20;
  elt:Note;
  S:integer:=0;
 begin
  loop
    begin
     put_line("Veuillez saisir un entier entre 0 et 20 ");
     put("ou un entier non compris dans cet intervalle pour terminer la saisie : ");
     get(elt);
     S:=S+elt;
    exception
      when CONSTRAINT_ERROR=> put_line("recommencez !");skip_line;
      when DATA_ERROR=>put_line("La saisie est terminée");X:=S;exit;
    end;
  end loop;
 end getSomme;

begin
  getSomme(somme);
  put("La somme des entiers lus est : ");
  put(somme,width=>3);
  new_line;
end lecture;