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;
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top