2017-04-11 52 views

答えて

1

デルファイではこのような機能は提供していません。デルファイ6ではなく、私が間違っていない限り、現代のDelphiバージョンでさえそうではありません。

配列の内容に関する情報がない場合、最大値と対応するインデックスを見つけるために各要素をチェックする必要があります。

uses 
    Math; // MaxDouble is defined by this unit 

function IndexOfMaxValue(const x: array of Double): Integer; 
var 
    Index: Integer; 
    MaxValue: Double; 
begin 
    Result := -1; 
    MaxValue := -MaxDouble; 
    for Index := 0 to high(x) do begin 
    if x[Index]>MaxValue then begin 
     Result := Index; 
     MaxValue := x[Index]; 
    end; 
    end; 
end; 

同点の場合、その最大値を持つ複数の要素であり、この関数は、最初のそのような要素のインデックスを返すことに注意してください。

@LURDが指摘しているように、配列内のすべての要素が-MaxDoubleの場合、関数は-1を返します。これは次のように扱うことができます:

function IndexOfMaxValue(const x: array of Double): Integer; 
var 
    Index: Integer; 
    MaxValue: Double; 
begin 
    if high(x) = -1 then begin 
    Result := -1; 
    end else begin 
    Result := 0; 
    MaxValue := x[0]; 
    for Index := 1 to high(x) do begin 
     if x[Index]>MaxValue then begin 
     Result := Index; 
     MaxValue := x[Index]; 
     end; 
    end; 
    end; 
end; 
+0

okこれが私のやり方です。 thks – bbd

+0

私はいつもCompareValue(Delphi 6で利用可能な場合)を比較演算子よりもdoubleを比較する際に使用する方が好きです。 –

+0

@SebastianProske私はしません。 'MaxValue'は比較演算子を使うので、この文脈で使うのは間違ったことです。私はあなたのコメントが浮動小数点演算のやや曖昧な感謝に基づいていると思う。たとえば、これらの関数のどちらかを 'CompareValue'を使って書くとしたら、関数の出力は要素の順序に依存します。つまり、配列をシャッフルして、異なる値を返すことができます。あなたはそれを望んでいないでしょう。 –

関連する問題