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

解決


おも  2007-03-17 07:18:00  No: 25369

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

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

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

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

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

Delphi6 Personal,Windows2000の環境です。


みすきゃすと?  2007-03-17 08:24:13  No: 25370

オープン配列パラメータの引数は、
動的配列でも静的配列でも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 09:25:20  No: 25371

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

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

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


おも  2007-03-17 10:21:28  No: 25372

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

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加