ユーザー入力に基づいて配列を初期化する Ada
-
05-07-2019 - |
質問
私は 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;
解決
そこで示されたものは機能するはずです。ただし、配列変数宣言などで範囲例外をキャッチしたくない場合を除き、「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;
(私は予約語を大文字にするのも嫌いです。)
さらにもう 1 つ言及しておきたいことがあります。Ada 配列はそうではありません 持っている cish 言語と同様に 0 から始まります。彼らは できる ただし、1、-200、または任意の値から開始することもできます。
私がこれを取り上げる理由は、Graph_Box を定義した方法が実際に高さ + 1 要素、幅 + 1 要素であることがわかるからです。後で誰か (おそらくあなた自身も) を混乱させる可能性があるため、おそらくそれは望ましくないでしょう。
私の典型的な習慣は、そうしない正当な理由がない限り、配列のインデックスを 1 から開始することです。
所属していません StackOverflow