Salut à tous,
voilà j'ai un problème avec un exercice que j'ai à faire pour l'école. Je dois créer un package permettant de gérer des piles de chaîne de caractères. Jusque là, rien d'exceptionnel ! Mais ou ca se complique, c'est que on a certaine contraintes.
J'explique: on a la spécification du package forcée (aucune modification autorisée sur cette spec). La spécification (ou la partie qui nous interesse) est la suivante :
1 2 3 4 5 6 7 8 9 10 11 12
| type T_Info is ...;
type T_Elément;
type T_Lien is access T_Elément;
type T_Elément is record
Info : T_Info;
Suivant : T_Lien;
end record;
type T_Pile_Dynamique is record
Sommet : T_Lien;
end record; |
voilà comme vous le voyez, c'est quelques types permettant de gérer des piles. La seule chose, encore une fois, est de faire des piles de <souligne>strings</souligne> (pas d'unbounded). Ces chaînes seront du type T_Info. Ce type, c'est à nous de le définir ! et c'est la qu'est la difficulté. En effet, impossible d'utiliser simplement des strings (pas de types non contraints dans un article en ada). Ok, on pourrait se dire : Simplement des pointeurs sur strings !
mais la spécifications de nos procédures sont de ce genre :
procedure Empiler (Pile : in out T_Pile_Dynamique; Info : in T_Info);
L'utilisateur du package devrait simplement pouvoir entrer une chaîne de caractère et elle s'empilerait ! Mais comme je l'ai dit, pas possible de faire de T_Info un type string simple! Il faudrait pouvoir transformer les chaînes que l'utilisateur entre en pointeur pointant sur cette chaîne ! C'est la seule solution que je vois, mais j'ai aucune idée comment faire ca.
Si vous voyez une autre solution, merci d'avance !
Partager