All pastes #42368 Raw Edit

geniium

public text v1 · immutable
#42368 ·published 2006-02-20 22:18 UTC
rendered paste body
-- Fichier       : Test_Ensembles.adb
-- Auteur        : Romain de Wolff
-- Date          : 07.02.2006
--
-- But           : Tester le paquetage Ensembles et son paquetage enfant 
--                 Ensembles.Ensemble_Io
--                 
-- Remarque(s)   : -
-- 
-- Modifications : Date  /  Auteur/  Raison
--
--
-- Compilateur   : GNAT 3.15p
--

with Ada.Text_Io;            use Ada.Text_Io;
with Ada.Integer_Text_Io;    use Ada.Integer_Text_Io;
with Ensembles.Ensemble_Io;  use Ensembles.Ensemble_Io; 
with Ensembles;              use Ensembles;

procedure Test_Ensembles is
   
   -- déclare les variables utils au tests
   Ensemble_A   : T_Ensemble := Vide;
   Ensemble_B   : T_Ensemble := Vide;
  
   -----------------------------------------------------------------------------
   -- But          : Présente le programme à l'utilisateur.
   --
   -- Paramètre(s) : -
   --
   -- Exception(s) : -
   -----------------------------------------------------------------------------
   procedure Presentation_Du_Programme is
   begin -- Presentation_Du_Programme
   
      Put("Bienvenue!!");
      New_Line(2);
      Put("Ce programme va tester les paquetages Ensembles et Ensemble.Ensemble_Io");
      New_Line;
      
   end Presentation_Du_Programme;
   
   -----------------------------------------------------------------------------
   -- But          : Fait un Get de Caractere en gérant les exceptions.
   --
   -- Paramètre(s) : 
   --      Message : Le message que verra l'utilisateur avant qu'il lui soit
   --                demandé d'introduire un caractere.
   --         Char : La variable qui contiendra le caractère entré par 
   --                l'utilisateur.
   --
   -- Exception(s) : -
   -----------------------------------------------------------------------------
   procedure Get_Caracter ( Message : in  String;
                            Char    : out Character ) is
   begin -- Get_Caracter
   
      loop
         begin
            Put( Message );
            Get(Char);
            Skip_Line;
            exit;
         exception
            when Constraint_Error | Data_Error => 
               Put_Line("Ce n'est pas un caractere. Veuiller saisir un caracter correcte");
               Skip_Line;
         end;
      end loop;
   
   end Get_Caracter;
   
   -----------------------------------------------------------------------------
   -- But          : Initialise l'ensemble donné comme paramètre avec une chaine
   --                de caractère entrée par l'utilisateur.
   --
   -- Paramètre(s) : 
   --     Ensemble : L'ensemble qu'il faut modifier.
   --
   -- Exception(s) : -
   -----------------------------------------------------------------------------
   procedure Initialise_Ensemble_Avec_Chaine ( Ensemble : out T_Ensemble ) is
      Chaines : String(1..20);
   begin -- Initialise_Ensemble_Avec_Chaine
   
      Put("Entrer une chaine de 20 caracteres ");
      Get(Chaines);
      Skip_Line;
      Ensemble := Initialise(Chaines);
   
   end Initialise_Ensemble_Avec_Chaine;
   
   -----------------------------------------------------------------------------
   -- But          : Fait un get sur l'ensemble voulu à l'aide de la fonction
   --                crée dans notre paquetage.
   --
   -- Paramètre(s) : 
   --     Ensemble : L'ensemble qu'il faut modifier.
   --
   -- Exception(s) : -
   -----------------------------------------------------------------------------
   procedure Cree_Modifier_Ensemble ( Ensemble : out T_Ensemble ) is
   begin -- Cree_Modifier_Ensemble
      
      Put("Entrer un caractere par ligne que vous desirer avoir dans l'ensemble : ");
      Skip_Line;
      Get(Ensemble);
      Skip_Line;
      
   end Cree_Modifier_Ensemble;
   
   -----------------------------------------------------------------------------
   -- But          : Ajoute un caractere dans l'ensemble voulu.
   --
   -- Paramètre(s) : 
   --     Ensemble : L'ensemble qu'il faut modifier.
   --
   -- Exception(s) : -
   -----------------------------------------------------------------------------
   procedure Ajouter_Caracter_Dans_Ensemble (Ensemble : out T_Ensemble ) is
      Char : Character;
      
   begin -- Ajouter_Caracter_Dans_Ensemble
      
      Get_Caracter ("Entrer le caractere a inserer dans l'ensemble : ", Char);
      Skip_Line;
      Ensemble := Ensemble + Char;
   
   end Ajouter_Caracter_Dans_Ensemble;
   
   -----------------------------------------------------------------------------
   -- But          : Renvoie si oui ou non le caractère fait partie de 
   --                l'ensemble passé en paramètre.
   --
   -- Paramètre(s) : 
   --     Ensemble : Ensemble dont on veut vérifier la présence d'un caractère.
   --
   -- Exception(s) : -
   -----------------------------------------------------------------------------
   procedure Caracter_Est_Dans_Ensemble ( Ensemble : in T_Ensemble ) is
      Char : Character;
   begin -- Caracter_Est_Dans_Ensemble
      
      Get_Caracter ("Quel caractere : ", Char);
      Skip_Line;
      
      -- affiche le résultat par image
      Put ( Boolean'Image( Char < Ensemble ) );
      
      New_Line; 
      
   end Caracter_Est_Dans_Ensemble;
   
   -----------------------------------------------------------------------------
   -- But          : Menu utilisateur affiché en boucle tant qu'on ne quitte
   --                pas le programme.
   --
   -- Paramètre(s) : -
   --
   -- Exception(s) : -
   -----------------------------------------------------------------------------
   procedure Menu_Utilisateur is
   
      Nombre_Element_Menu : constant := 13;
   
      -- sous-type utilisé pour le menu
      subtype Nombre_Du_Menu is Natural range 0..Nombre_Element_Menu;
      
      -- la variable du menu
      Action : Nombre_Du_Menu := 1;
      
      -- variable temporaire (pour inversion des valeurs des ensemble A et B)
      Ensemble_T  : T_Ensemble;
      
   begin -- Menu_Utilisateur
   
      while Action /= 0 loop
      
         -- affiche l'etat des ensembles a chaque affichage du menu
         Put("Ensemble_A : "); Put(Ensemble_A); New_Line;
         Put("Ensemble_B : "); Put(Ensemble_B); New_Line(2);
         
         -- affiche le menu utilisateur
         Put_Line("Utiliser le menu suivant pour tester les fonctionnalites : ");
         New_Line;
         Put_Line(" 0.  Quitter le prorgramme");
         Put_Line(" 1.  Ajouter des éléments dans l'ensemble A");
         Put_Line(" 2.  Ajouter des éléments dans l'ensemble B");
         Put_Line(" 3.  Union entre ensemble A et B (A+B)");
         Put_Line(" 4.  Intersection entre ensemble A et B (A*B)");
         Put_Line(" 5.  Inclusion (sens large) de A dans B (A<=B?)");
         Put_Line(" 6.  Inclusion (sens stricte) de A dans B (A<B?)");
         Put_Line(" 7.  Ajouter un element dans A (A+Caracter)");
         Put_Line(" 8.  Est-ce qu'un caractere est dans l'ensemble A? (Char<A?)");
         Put_Line(" 9.  Cardinalite de l'ensemble A (Cardinal(A))");
         Put_Line(" 10. Initialise A avec une chaine de caractere (A = Initialise(String))");
         Put_Line(" 11. Effacer le contenu de Ensemble_A (A=Vide)");
         Put_Line(" 12. Effacer le contenu de Ensemble_B (B=Vide)");
         Put_Line(" 13. Inverser le contenu de Ensemble_A et Ensemble_B");
         New_Line;
      
         -- prends la valeur de l'action désirée par l'utilisateur
         loop
            begin
               Put("Quelle action desirer vous executer : ");
               Get(Action);
               exit;
            exception
               when Constraint_Error | Data_Error => 
                  Skip_Line;
                  Put_Line("Redonner une valeur correct svp!");
               when others => raise;
            end;
         end loop;
         
         -- effecture l'action désirée
         case Action is
            -- quitte le programme
            when 0  => Put_Line("Au revoir!");
            -- cree modifie l'ensemble A
            when 1  => Cree_Modifier_Ensemble(Ensemble_A);  
            -- cree modifie l'ensemble B
            when 2  => Cree_Modifier_Ensemble(Ensemble_B);  
            -- union entre A et B (A+B)
            when 3  => Put("Union : "); Put( Ensemble_A + Ensemble_B ); 
                       New_Line;
            -- Intersection entre ensemble A et B
            when 4  => Put("Intersection : "); Put( Ensemble_A * Ensemble_B ); 
                       New_Line;
            -- Inclusion entre A et B (avec égalité possible)
            when 5  => Put( Boolean'Image( Ensemble_A <= Ensemble_B )); New_Line;
            -- Inclusion stricte (PAS d'égalité possible)
            when 6  => Put( Boolean'Image( Ensemble_A < Ensemble_B )); New_Line;
            -- ajouter un caracter dans un Ensemble_A 
            when 7  => Ajouter_Caracter_Dans_Ensemble( Ensemble_A );
            -- est ce qu'un caractère se trouve dans l'ensemble A
            when 8  => Caracter_Est_Dans_Ensemble( Ensemble_A );
            -- cardinalité d'un ensemble
            when 9  => Put("Cardinalite de Ensemble_A : "); 
                       Put( Cardinal(Ensemble_A), 1); 
                       New_Line;
            -- utilisation de la fonction initialise
            when 10 => Initialise_Ensemble_Avec_Chaine( Ensemble_A );
            -- remise a 0 de Ensemble_A
            when 11 => Ensemble_A := Vide;
            -- remise a 0 de Ensemble_B
            when 12 => Ensemble_B := Vide;
            -- inversion des valeurs de Ensemble_A et de Ensemble_B
            when 13 => Ensemble_T := Ensemble_A; 
                       Ensemble_A := Ensemble_B; 
                       Ensemble_B := Ensemble_T;
            -- erreur
            when others => raise Constraint_Error;
            
         end case;
      end loop;
      
   end Menu_Utilisateur;

begin -- Test_Ensembles

   Presentation_Du_Programme;
   
   Menu_Utilisateur;

end Test_Ensembles;