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;

(予約語を大文字にするのも嫌いです。)


もう 1 つ言及しておく必要があります。Ada 配列は、cish 言語のように 0 ベースである必要はありません。それらは可能ですが、1、-200、または必要に応じて開始することもできます。

私がこれを持ち出す理由は、あなたが Graph_Box を定義した方法が実際には Height+1 要素の高さと Width+1 要素の幅であることがわかるからです。後で誰か(おそらくあなたも)を混乱させる可能性があるため、おそらくそれは望ましくありません。

私の典型的なイディオムは、そうしない正当な理由がない限り、配列インデックスを 1 から開始することです。

于 2009-10-22T17:51:00.867 に答える