[ADA]Définir un sous-type avec des bornes spéciales

Définir un sous-type avec des bornes spéciales [ADA] - Ada - Programmation

Marsh Posté le 18-01-2004 à 11:09:27    

Salut les gens,
 
j'ai cette procédure en ada (jusque la tout va bien...).
Ma question est la suivante: Peut-on définir les bornes d'un sous-type (ici "Tirage" ) avec les paramètres d'appels de la fonction. Si oui, avec quelle ruse de guerre ? ( ou un indice...)
 
      procedure Test_Random (
            Borne_Inf : Integer := 0;  
            Borne_Sup : Integer := 1  ) is  
         type Tirage is range Borne_Inf .. Borne_Sup;  
         package Aleatoire is new Ada.Numerics.Discrete_Random (Tirage);
         use Aleatoire;    -- Rend Generator, Reset et Random visibles
         T : Tirage;  
         G : Generator;  
      begin
         Reset (G);
-- Initialise le générateur (à faire une seule fois)
         for I in 1..30 loop
            T:= Random (G);
-- Tire un nombre au hasard entre borne_inf et borne_sup
            Put(Integer(T));
         end loop;
      end Test_Random;
 
Merci d'avance

Reply

Marsh Posté le 18-01-2004 à 11:09:27   

Reply

Marsh Posté le 18-01-2004 à 22:15:48    

non, on ne peut pas, les bornes des types doivent être entièrement connus à la compilation.
 
Dans ton cas c'est mort.
 
par contre, tu peux faire un truc générique, mais il faudra l'instancier avant de l'utiliser.

Code :
  1. generic
  2.   Borne_Inf is Integer ;
  3.   Borne_sup is Integer;
  4. procedure Test_Random () is 
  5.          type Tirage is range Borne_Inf .. Borne_Sup; 
  6.          package Aleatoire is new Ada.Numerics.Discrete_Random (Tirage);
  7.          use Aleatoire;    -- Rend Generator, Reset et Random visibles
  8.          T : Tirage; 
  9.          G : Generator; 
  10.       begin
  11.          Reset (G);
  12. -- Initialise le générateur (à faire une seule fois)
  13.          for I in 1..30 loop
  14.             T:= Random (G);
  15. -- Tire un nombre au hasard entre borne_inf et borne_sup
  16.             Put(Integer(T));
  17.          end loop;
  18.       end Test_Random;


utilisation :  
 

Code :
  1. procedure Random_10_20 is new Test_Random(Borne_Inf=>10, Borne_Sup=>20);


Mais ce n'est pas exactement ce que tu voudrais faire.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 21-01-2004 à 15:17:30    

Si je comprends bien, Katkiller voudrait pouvoir définir un invariant, c'est ça ?

Reply

Marsh Posté le 21-01-2004 à 19:22:10    

BifaceMcLeOD a écrit :

Si je comprends bien, Katkiller voudrait pouvoir définir un invariant, c'est ça ?

J'ai l'impression qu'il voulait un type parceque son package générique Ada.Numerics.Discrete_Random lui en demandait un. Sans se poser beaucoup plus de questions, il débute.


---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed