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

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top