Ada initialise un tableau en fonction des entrées de l'utilisateur
-
05-07-2019 - |
Question
Je viens de Java / C ++ pour Ada et j'ai du mal à comprendre les petites choses. Est-il possible de déclarer un tableau et de demander à l'utilisateur les valeurs min / max, puis de l'initialiser? Je n'aime pas avoir à définir des valeurs constantes pour MIN et MAX et il semble qu'il devrait y avoir un moyen de le faire.
Vous pouvez définir un type sans contrainte, mais vous devez toujours initialiser la taille dans le bloc de déclaration avant le démarrage de votre programme. Aurais-je besoin du corps du package, puis de la déclaration de procédure, puis d'un bloc de déclaration à l'intérieur de la procédure qui effectue le travail, comme suit?
PACKAGE BODY Build_Graph IS
TYPE Graph_Box IS ARRAY(Integer RANGE <>, Integer RANGE <>) of Character;
PROCEDURE Print_Graph(Min, Max, Height, Width: IN Integer) IS
BEGIN
DECLARE
Graph: Graph_Box(0..Height, 0..Width);
BEGIN
Do_Stuf(Graph);
END;
END Print_Graph;
END Build_Graph;
La solution
Ce que vous montrez là-bas devrait fonctionner. Cependant, le message "déclarer" block est totalement unececary, à moins que vous ne souhaitiez intercepter des exceptions de plage sur la déclaration de variable de tableau ou quelque chose de ce genre. Je le changerais pour lire:
procedure Print_Graph(Min, Max, Height, Width: in Integer) is
Graph: Graph_Box(0..Height, 0..Width);
begin
Do_Stuf(Graph);
end Print_Graph;
(Je n'aime pas aussi avoir les mots réservés en majuscules.)
Une autre chose que je devrais mentionner: les tableaux Ada ne doivent pas être basés sur 0, comme dans les langues cish. Ils peuvent être, mais vous pouvez également les faire commencer à 1, ou -200, ou comme vous voulez.
La raison pour laquelle je soulève cette question est que je vois comment vous avez défini Graph_Box: hauteur + 1 éléments de hauteur et largeur + 1 éléments de largeur. Vous ne voulez probablement pas cela, car cela risquerait de confondre quelqu'un plus tard (peut-être même vous).
Mon idiome typique est de commencer mon index de tableau à 1, sauf si j'ai de bonnes raisons de ne pas le faire.