Ada inicializando una matriz basada en la entrada del usuario
-
05-07-2019 - |
Pregunta
Vengo de Java / C ++ a Ada y tengo problemas para descubrir las cosas pequeñas. ¿Es posible declarar una matriz y pedirle al usuario los valores mínimo / máximo y luego inicializarlo? No me gusta tener que definir valores constantes para MIN y MAX y parece que debería haber una manera de hacerlo.
Puede definir un tipo sin restricciones, pero aún debe inicializar el tamaño en el bloque de declaración antes de que comience su programa. ¿Necesitaría tener el cuerpo del paquete, luego la declaración del procedimiento, luego un bloque de declaración dentro del procedimiento que realmente funciona, como el siguiente?
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;
Solución
Lo que muestres allí debería funcionar. Sin embargo, el " declare " el bloque es totalmente innecesario, a menos que desee capturar excepciones de rango en la declaración de variable de matriz o algo así. Lo cambiaría para leer:
procedure Print_Graph(Min, Max, Height, Width: in Integer) is
Graph: Graph_Box(0..Height, 0..Width);
begin
Do_Stuf(Graph);
end Print_Graph;
(También me disgusta tener las palabras reservadas en mayúsculas)
Una cosa más que debo mencionar: las matrices de Ada no tienen para estar basadas en 0 como en otros idiomas. pueden ser, pero también puedes hacer que comiencen en 1, -200 o lo que quieras.
La razón por la que menciono esto es que veo la forma en que definiste Graph_Box: en realidad es alto en Altura + 1 elementos y Ancho + 1 ancho. Probablemente no quieras eso, ya que puede confundir a alguien más tarde (quizás incluso a ti).
Mi idioma típico es comenzar los índices de mi matriz en 1, a menos que tenga una buena razón para no hacerlo.