Ada inicializar uma matriz com base na entrada de utilizador
-
05-07-2019 - |
Pergunta
Estou vindo de Java / C ++ para Ada e estou tendo dificuldade para descobrir as pequenas coisas. É possível declarar uma matriz e pedir ao utilizador para o min / max valores, em seguida, inicialize-o? Eu não gosto de ter que definir valores constantes para o MIN e MAX e parece que deve haver uma maneira de fazer isso.
Você pode definir um tipo de restrições, mas você ainda tem que inicializar o tamanho do bloco declare antes de seu programa começa. Será que eu preciso para ter o corpo do pacote, então a declaração de procedimento, em seguida, um bloco declare dentro do procedimento que realmente faz o trabalho, como o seguinte?
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;
Solução
O que você mostrar que não deve funcionar. No entanto, o bloco "declarar" é totalmente unnessecary, a menos que queira capturar exceções intervalo na declaração de variável de matriz ou algo assim. Eu mudá-lo para ler:
procedure Print_Graph(Min, Max, Height, Width: in Integer) is
Graph: Graph_Box(0..Height, 0..Width);
begin
Do_Stuf(Graph);
end Print_Graph;
(Eu também não gosto de ter as palavras reservadas em caps.)
Uma outra coisa que eu devo mencionar: matrizes Ada não Have ser baseado em 0 como em línguas CISH. Eles pode ser, mas você pode também torná-los começam em 1, ou -200, ou o que quiser.
A razão que eu trago este acima é que eu vejo a maneira que você definiu Graph_Box é realmente altura + 1 elementos altos e elementos Largura + 1 de largura. Você provavelmente não quer que, uma vez que é susceptível de alguém confundir mais tarde (talvez até mesmo você).
O meu idioma típico é começar meus índices de array a 1, a menos que eu tenho uma boa razão para não.