2011-12-04 6 views
4

プロシージャによって多数の行列をテストしたいと思います。各マトリックスは何かのように、マトリックスとしてpasssedする必要があります。プロシージャコールの引数として定数値の行列を渡す方法

type TMatrix = array of array of integer; 
procedure test_kernel (mat: TMatrix); 
.... 
test_kernel ([[1, 2], [1, 3]]); // <== does not compile 

が、私はこれを正しく行うには正しい構文を見つけることができません(だけでなく丸括弧で試してみました)。プロシージャの引数として定数値の行列を渡す方法を誰かが知っていますか?まったく可能ですか?

EDIT

私が欲しいものとして私が使用することを決めたことはできません。

type TMatrix = array of integer; 
procedure test_kernel (rows, cols: integer; mat: TMatrix); 
.... 
test_kernel (2, 2, [1, 2, 
        1, 3]); 

だから私は行列の錯覚と読みやすさを取得します。皆さん、ありがとうございました!

+0

私はあなたのように配列パラメータを渡すことをお勧めします'const'と' TMatrix'を 'array of Integer'と宣言していないことを確認してください。行列ではない行列です。私はオープン配列のパラメータ、 'const mat:integer of array'を使用します。 –

+0

私はconstを使用します。あなたは命名に感謝です、ありがとう – Arnold

答えて

4

実際にそこにはTMatrixのわずかに異なる宣言を使用している場合、これを行うためにpossiblityですが、それは、コードの可読性を増加させない私見:

type 
    TVector = array of integer; 
    TMatrix = array of TVector; 
procedure test_kernel (mat: TMatrix); 
.... 
test_kernel(TMatrix.Create(TVector.Create(1, 2), TVector.Create(1, 3))); 
+1

この方法で配列を作成できるかどうかはわかりませんでした。これに私の注意を向けてくれてありがとう。私は完全に同意しますが、コードの読みやすさは向上しません。 – Arnold

+0

あなたは 'Create'を使って配列型を"インスタンス化 "できるバージョンを知っていますか? –

+0

@マージャン:D2007では動作しますが、D7では動作しません。 –

2

定数や開いている配列では、何もできません。 TMatrixは動的配列であり、動的配列である定数を持つことはできません。また、行列は2Dですが、オープンな配列は入れ子にできません。開いている配列の開いた配列を持つことはできません。これが単なるベクトル、すなわち1次元の場合、実際にはオープン配列を使用できます。しかし、あなたは2D行列を持っているので、オープン配列は役に立ちません。

実行時に初期化される変数を使用する必要があります。本当に定数がある場合は、initializationセクションでこれを簡単に行うことができます。

+0

私はいくつかの魔法を望んでいました:-)どうもありがとうございました。残念私は正しい答えのために二度旗を立てることはできません。 – Arnold

関連する問題