Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Dyn. Array of Double an funktion übergeben (https://www.delphipraxis.net/207421-dyn-array-double-funktion-uebergeben.html)

wendelin 22. Mär 2021 18:31

Dyn. Array of Double an funktion übergeben
 
Hallo,
ich suchte vor einiger Zeit nach einer Funktion ähnlich der function MaxIntValue.
Nur für Real-Zahlen! Übergeben wollte ich ein Dyn. Array.

Also so etwas wie MaxFloatValue(Array of Double). Gibt es aber nicht.
Nun habe ich bei 'StackOverflow' eine Ersatzfunktion gefunden :
Delphi-Quellcode:
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;
Diese funktioniert aber nicht.Es gibt diverse Fehlermeldungen
Wie muß ich o.g. function aufrufen ?

Wendelin

KodeZwerg 22. Mär 2021 18:44

AW: Dyn. Array of Double an funktion übergeben
 
Was für Fehler erscheinen denn?
Aufrufen indem man ein array of double übergibt, als ergebnis kommt der index vom höchstwert raus.

KodeZwerg 22. Mär 2021 19:03

AW: Dyn. Array of Double an funktion übergeben
 
Delphi-Quellcode:
program Project7;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

function GetMaxDoubleArrayIndex(const DoubleArray: array of Double): Integer;
var
  i: Integer;
  highest: Double;
begin
  Result := -1;
  highest := Low(Integer);
  for i := Low(DoubleArray) to High(DoubleArray) do
    if DoubleArray[i] > highest then
      begin
        Result := i;
        highest := DoubleArray[i];
      end;
end;

var
  TestArray: array of Double;
  i: Integer;
begin
  try
    Randomize;
    SetLength(TestArray, 8);
    for i := Low(TestArray) to High(TestArray) do
      TestArray[i] := Random(100000);
    for i := Low(TestArray) to High(TestArray) do
      WriteLn('#' + IntToStr(i) + ' = ' + FloatToStr(TestArray[i]));
    WriteLn;
    WriteLn('Höchstwert hat Index #' + IntToStr(GetMaxDoubleArrayIndex(TestArray)));
    ReadLn;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
kurz mal geschrieben, scheint zu funktionieren.

Andreas13 22. Mär 2021 19:46

AW: Dyn. Array of Double an funktion übergeben
 
Wendelin wollte dynamische Arrays übergeben. KodeZwerg's
Delphi-Quellcode:
TestArray: Array[0..8] of Double;
ist aber ein statisches Array.
Ohne Deine Fehlermeldungen ist es schwer zu sagen, woran der ursprüngliche Fehler liegt, ich vermute jedoch, daß das dynamische Array nicht initialisiert worden ist.
Wahrscheinlich fehlt
Delphi-Quellcode:
  ...
  SetLength(X_Array, Len);
Gruß, Andreas

Zeig doch mal Deinen Code, wo Du das dynamische Array übergibst, dann können wir Dir besser helfen.

KodeZwerg 22. Mär 2021 20:06

AW: Dyn. Array of Double an funktion übergeben
 
Zitat:

Zitat von Andreas13 (Beitrag 1485787)
Wendelin wollte dynamische Arrays übergeben.

(Ich sehe da keinen Unterschied aber dem sei so.)

Dann hatte ich da was falsch Verstanden und das Snippet ist nun entsprechend angepasst.

Danke das Du mich darauf Aufmerksam gemacht hast!

Andreas13 22. Mär 2021 20:57

AW: Dyn. Array of Double an funktion übergeben
 
Deine Funktion
Delphi-Quellcode:
function GetMaxDoubleArrayIndex(const DoubleArray: array of Double): Integer;
hat einen sogenannten offenen Array-Parameter, der sowohl statische, wie auch dynamische Arrays "schluckt".
Gruß, Andreas

Andreas13 22. Mär 2021 21:01

AW: Dyn. Array of Double an funktion übergeben
 
Die "Gefahr" bei offenen Parametern besteht nur darin, daß der Index sowohl bei 0 (dynamisch), als auch bei 1 (statisch) beginnen kann. Daher sollte der Zugriff immer über Low(..) und High(..) erfolgen, wenn man nicht total durcheinanderkommen will.
Andreas

KodeZwerg 22. Mär 2021 22:06

AW: Dyn. Array of Double an funktion übergeben
 
Zitat:

Zitat von Andreas13 (Beitrag 1485791)
Die "Gefahr" bei offenen Parametern besteht nur darin, daß der Index sowohl bei 0 (dynamisch), als auch bei 1 (statisch) beginnen kann. Daher sollte der Zugriff immer über Low(..) und High(..) erfolgen, wenn man nicht total durcheinanderkommen will.
Andreas

Jo, ist mir vorhin beim updaten auch eingefallen. :thumb:

TomyN 23. Mär 2021 08:21

AW: Dyn. Array of Double an funktion übergeben
 
Du kannst auch einen entsprechenden Typ definieren

Code:
Type
TAD: array of double;

...

function Mach_Was_Draus(daten_array: TAD): Integer;

himitsu 23. Mär 2021 08:30

AW: Dyn. Array of Double an funktion übergeben
 
Sowas ginge inzwischen (seit 12 Jahren) auch generisch.
Delphi-Quellcode:
function Mach_Was_Draus(daten_array: TArray<Double>): Integer;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 Uhr.
Seite 1 von 3  1 23   

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf