【问题标题】:Ada initializing an array based on user inputAda 根据用户输入初始化数组
【发布时间】:2009-10-22 16:56:59
【问题描述】:

我是从 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;

【问题讨论】:

    标签: ada array-initialize


    【解决方案1】:

    您在此处显示的内容应该有效。但是,“声明”块是完全不必要的,除非您想在数组变量声明或其他东西上捕获范围异常。我会将其更改为:

    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 开始我的数组索引,除非我有充分的理由不这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2015-01-24
      相关资源
      最近更新 更多