Ada基于用户输入初始化数组

Ada基于用户输入初始化数组,ada,array-initialize,Ada,Array Initialize,我是从Java/C++到Ada的,我很难理解其中的小问题。是否可以声明一个数组并要求用户输入最小/最大值,然后初始化它?我不喜欢为最小值和最大值定义常量,似乎应该有办法做到这一点 您可以定义一个无约束类型,但是在程序启动之前,您仍然必须初始化declare块中的大小。我是否需要包体,然后是过程声明,然后是过程中实际执行工作的声明块,如下所示 PACKAGE BODY Build_Graph IS TYPE Graph_Box IS ARRAY(Integer RANGE <>

我是从Java/C++到Ada的,我很难理解其中的小问题。是否可以声明一个数组并要求用户输入最小/最大值,然后初始化它?我不喜欢为最小值和最大值定义常量,似乎应该有办法做到这一点

您可以定义一个无约束类型,但是在程序启动之前,您仍然必须初始化declare块中的大小。我是否需要包体,然后是过程声明,然后是过程中实际执行工作的声明块,如下所示

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;
包体构建图为
类型图_框是字符的数组(整数范围,整数范围);
程序打印图形(最小值、最大值、高度、宽度:整数)为
开始
声明
图形:图形框(0.高,0.宽);
开始
杜斯图夫(图);
结束;
结束打印图;
结束构建图;

你在那里展示的东西应该有用。但是,“declare”块是完全没有必要的,除非您想捕捉数组变量声明或其他方面的范围异常。我把它改为:

procedure Print_Graph(Min, Max, Height, Width: in Integer) is
    Graph: Graph_Box(0..Height, 0..Width);
begin
    Do_Stuf(Graph);
end Print_Graph;
(我也不喜欢大写的保留字。)


我还应该提到一件事:Ada数组不必像cish语言那样基于0。它们可以是,但是你也可以让它们从1开始,或者-200,或者任何你想要的

我之所以提出这个问题,是因为我看到了你定义图形框的方式,它实际上是高度+1个元素高,宽度+1个元素宽。你可能不想这样,因为这可能会让以后的人(甚至是你)感到困惑

我的典型习惯用法是从1开始数组索引,除非我有充分的理由不这样做