------------------------------------------------------------------------------------------------
-- Nom fichier      : Exemple.ads                                                             --
-- Auteur           : <a>Mister X</a>                                                         --
-- Date             : <d>26 fevrier 2001</d>                                                  --
--                                                                                            --
-- <p>But           : Pactage mettant a disposition un type matrice ainsi que les operation   --
--                    de base de ce type Addition, soustraction, multiplication et élévation  --
--                    une puissance</p>                                                       --
--                                                                                            --
--                                                                                            --
-- Date de modif.   :                                                                         --
-- Raison           :                                                                         --
-- Modules appeles  :                                                                         --
-- Mat. particulier :                                                                         --
--                                                                                            --
-- Compilation      :                                                                         --
-- Edition de liens :                                                                         --
-- Mode d'execution :                                                                         --
------------------------------------------------------------------------------------------------
with Ada.Numerics;
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Float_Text_IO;
with Ada.Calendar;

generic

   type T_Indice is (<>);

   type T_Element is private;

   Element_Null : in T_Element;


   with procedure Get ( Element : out T_Element) is <>;

   with procedure Put ( Element : in T_Element) is <>;


   with function "+" ( X, Y : T_Element ) return T_Element is <>;

   with function "*" ( X, Y : T_Element ) return T_Element is <>;

   with function "=" ( X, Y : T_Element ) return Boolean is <>;



package Example is

   use type Ada.Calendar.Time;

   ------------------------------------------------------------------------------------------------
   --<?>Type tableau matrice</?>
   type T_Matrice is array ( T_Indice range T_Indice'Range, T_Indice range T_Indice'Range ) of T_Element ;

   Largueur : constant := 50;
   Profondeur_Max : constant Natural := 1000;

   subtype T_Profondeur is Natural range 0 .. Profondeur_Max;


   Hauteur : constant := 25;

   --<?>Divers Variables</?>
   Matrice_Tmp : T_Matrice;
   Matrice_Inv : T_Matrice;

   type Matrice_Cubique (Profondeur : T_Profondeur := 0) is
      record
         M_A : T_Matrice ;
         Volume : T_Profondeur;
      end record;



   ------------------------------------------------------------------------------------------------
   --<?>Lecture d'une matrice</?>
   procedure Get ( Matrice : out T_Matrice );

   ------------------------------------------------------------------------------------------------
   --<?>Affichage d'une matrice</?>
   procedure Put ( Matrice : in  T_Matrice );


   ------------------------------------------------------------------------------------------------
   --<?>Elevation a la puissance d'une matrice</?>
   function "**" ( Matrice : in T_Matrice ; Exposant : in Positive) return T_Matrice ;

   ------------------------------------------------------------------------------------------------
   --<?>Addition de deux matrices
   --
   --   Entree : Operande A et Operande B
   --   Exeption : Erreur_Dimension</?>
   ------------------------------------------------------------------------------------------------
   function "+"  ( Matrice_A, Matrice_B : in T_Matrice ) return T_Matrice ;

end Example;