2009-10-22 4 views
1

Je viens de Java/C++ à Ada et j'ai du mal à trouver 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 le MIN et MAX et il semble qu'il devrait y avoir un moyen de le faire.Ada initialisant un tableau basé sur l'entrée de l'utilisateur

Vous pouvez définir un type sans contrainte, mais vous devez toujours initialiser la taille dans le bloc declare avant le démarrage de votre programme. Aurais-je besoin d'avoir le corps du paquet, puis la déclaration de la procédure, puis un bloc declare à l'intérieur de la procédure qui fait 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; 

Répondre

2

Ce que vous montrez ici devrait fonctionner. Cependant, le bloc "declare" est totalement unnessecary, à moins que vous vouliez attraper des exceptions de gamme sur la déclaration de variable de tableau ou quelque chose. Je 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 aussi avoir les mots réservés en majuscules.)


Une chose plus loin, je dois mentionner: les tableaux Ada ne pas ont à être basé sur 0 comme dans les langues cish. Ils peuvent être être, mais vous pouvez également les faire démarrer à 1, ou -200, ou ce que vous voulez.

La raison pour laquelle je soulève cette question est que je vois la façon dont vous avez défini Graph_Box c'est en fait Hauteur + 1 éléments de haut et Largeur + 1 éléments de large. Vous ne le voulez probablement pas, car il est susceptible de dérouter quelqu'un plus tard (peut-être même vous).

Mon idiome typique est de commencer mes indices de tableau à 1, sauf si j'ai une bonne raison de ne pas le faire.

Questions connexes