1

我是从 Java/C++ 到 Ada 的,但在弄清楚这些小东西时遇到了麻烦。是否可以声明一个数组并询问用户最小/最大值然后对其进行初始化?我不喜欢为 MIN 和 MAX 定义常量值,似乎应该有办法做到这一点。

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

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;
4

1 回答 1

2

你在那里展示的应该工作。但是,“声明”块是完全不必要的,除非您想在数组变量声明或其他东西上捕获范围异常。我将其更改为:

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 或任何你想要的开始。

我提出这个问题的原因是我看到了您定义 Graph_Box 的方式,它实际上是 Height+1 元素高和 Width+1 元素宽。您可能不希望这样,因为它可能会在以后混淆某人(甚至可能是您)。

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

于 2009-10-22T17:51:00.867 回答