2016-12-05 2 views
1

問題ステートメントエイダ:配列範囲にわたってループのためのインデックスは、予期しない値を持つ

Iは、マトリクスと、表示中のすべての要素を反復したい

  • 要素値

要素インデックス(I、J)は、以下のコードは私に次のような出力が得られます。

(-2147483648, -2147483648) = 1.00000E+00 
(-2147483648, -2147483647) = 2.00000E+00 
(-2147483648, -2147483646) = 3.00000E+00 
(-2147483647, -2147483648) = 4.00000E+00 
(-2147483647, -2147483647) = 5.00000E+00 
(-2147483647, -2147483646) = 6.00000E+00 

-2147483648の代わりに1、-2147483647の代わりに2が表示されます。

サンプルコード

with Ada.Numerics.Real_Arrays; use Ada.Numerics.Real_Arrays; 
with Ada.Text_IO;    use Ada.Text_IO; 

procedure Index is 
    Matrix : Real_Matrix := ((1.0, 2.0, 3.0), 
          (4.0, 5.0, 6.0)); 
begin 
    for I in Matrix'Range(1) loop 
     for J in Matrix'Range(2) loop 
     Put_Line("(" & Integer'Image(I) & ", " & 
        Integer'Image(J) & ") = " & 
        Float'Image(Matrix(I, J))); 
     end loop; 
    end loop; 
end Index; 
+3

を明らかにReal_Matrixタイプは、そのインデックスのタイプとして 'Integer'を使用しています - と、特に指定がない場合、デフォルト値は' Integer型」です最初。 Adaでは、問題に適した独自の型を宣言して使用することをお勧めします。したがって、配列型(Real_Matrixの行に沿って)をNatural(0から始まる)またはPositive(それを得る)または遠隔のサブタイプと宣言し、それ。 –

答えて

5

Real_Matrixのインデックスタイプは、あなたが見ている数字を説明し、ご使用のプラットフォーム上で-2147483648から始まりInteger、です。タイプは拘束されないので、しかし、あなたは、配列の集約に独自のインデックスを指定することができます。

Matrix : Real_Matrix := (1 => (1 => 1.0, 2 => 2.0, 3 => 3.0), 
          2 => (1 => 4.0, 2 => 5.0, 3 => 6.0)); 
+0

迅速な対応のためにegilhhとBrianに感謝します! – evilspacepirate

関連する問題