-- 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;