Mathユニットの統計ルーチンの関数を動的配列に適用するには?

解決


おも  2007-03-16 22:18:00  No: 25369  IP: 192.*.*.*

Mathユニットの統計ルーチンの関数、例えば、

function StdDev(const Data: array of Double): Extended;

function Sum(const Data: array of Double): Extended; register;

などを動的配列に対して簡単な処理(キャスト?みたいな感じ)だけで使用することはできるでしょうか?

やはり、動的配列の場合は、自分で関数を作ることになるのでしょうか?

Delphi6 Personal,Windows2000の環境です。

編集 削除
みすきゃすと?  2007-03-16 23:24:13  No: 25370  IP: 192.*.*.*

オープン配列パラメータの引数は、
動的配列でも静的配列でもOK。
でも性的配列はダメ。

type
  TArrayOfDouble = array of Double;
var
  Tmp: TArrayOfDouble;
  i: Integer;
begin
  SetLength(Tmp, 10);
  for i:=0 to 9 do Tmp[i] := i+1;
  Memo1.Lines.Add(FloatToStr(Sum(Tmp)));
  Memo1.Lines.Add(FloatToStr(StdDev(Tmp)));
  Memo1.Lines.Add(FloatToStr(MaxValue(Tmp)));
  Memo1.Lines.Add(FloatToStr(Mean(Tmp)));
end;

編集 削除
おも  2007-03-17 00:25:20  No: 25371  IP: 192.*.*.*

みすきゃすと?さん、早速の回答どうも有難うございました。

まだ、typeでの宣言の意味など仕組み的な理解は出来ていませんが、実現方法は理解できました。

ありがとうございました。

編集 削除
おも  2007-03-17 01:21:28  No: 25372  IP: 192.*.*.*

解決にしましたが、質問の元が勘違いに近いものだったようなので、経緯を追加しておきます。

今回の質問は、array of Singleと既に宣言していた動的配列に統計ルーチン関数を適用しようとした場合に、

「'Array'と'dynamic array'には互換性がありません」

とのエラーメッセージが出てきたことが発端でした。指定されているのが、Doubleで、Singleではないことは認識していましたが、エラーメッセージから動的配列がいけないと考えましたが、そうではなく、単純にDoubleにすればよかっただけだったのですね。

編集 削除