with Ada.Text_Io; use Ada.Text_Io;
with Ada.Float_Text_Io; use Ada.Float_Text_Io;
-- with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;

package ecole is

-- Les notes sont des réels qui vont de 0 à 6. On suppose que l'on ne
-- conserve que deux chiffres significatifs.
   type T_Note is digits 2 range 0.0..6.0;
   package Note_IO is new Float_IO(T_Note);
   use Note_IO;

   subtype T_Matiere is String(1..20);

-- Il n'y a pas plus de quarante étudiants à gérer. On déclare donc un
-- tableau indexé de 1 à 40.
   type T_Tableau_De_Note is array (Positive range 1..40) of T_Note;

   subtype T_Nom is String(1..20);

   type T_Eleve is
      record
         Nom : T_Nom := (others =>' ');
         Prenom : T_Nom := (others =>' ');
         Id : Positive;
      end record;

-- T_Filiere est une liste chaînée qui contient comme information une matière
-- et le tableau de note correspondant à cette matière.
   type Element;
   type T_Filiere is access Element;
   type Element is record
      Matiere : T_Matiere;
      Note : T_Tableau_De_Note;
      Suiv : T_Filiere;
   end record;

   function Fait_Partie (Matiere : T_Matiere; Filiere : T_Filiere) return Boolean;

   function Ne_Fait_Pas_Partie (Matiere : T_Matiere; Filiere1 : T_Filiere; Filiere2 : T_Filiere) return Boolean;

end Ecole;
