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