![]() |
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:
Diese funktioniert aber nicht.Es gibt diverse Fehlermeldungen
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; Wie muß ich o.g. function aufrufen ? Wendelin |
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. |
AW: Dyn. Array of Double an funktion übergeben
Delphi-Quellcode:
kurz mal geschrieben, scheint zu funktionieren.
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. |
AW: Dyn. Array of Double an funktion übergeben
Wendelin wollte dynamische Arrays übergeben. KodeZwerg's
Delphi-Quellcode:
ist aber ein statisches Array.
TestArray: Array[0..8] of Double;
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:
Gruß, Andreas
...
SetLength(X_Array, Len); Zeig doch mal Deinen Code, wo Du das dynamische Array übergibst, dann können wir Dir besser helfen. |
AW: Dyn. Array of Double an funktion übergeben
Zitat:
Dann hatte ich da was falsch Verstanden und das Snippet ist nun entsprechend angepasst. Danke das Du mich darauf Aufmerksam gemacht hast! |
AW: Dyn. Array of Double an funktion übergeben
Deine Funktion
Delphi-Quellcode:
hat einen sogenannten offenen Array-Parameter, der sowohl statische, wie auch dynamische Arrays "schluckt".
function GetMaxDoubleArrayIndex(const DoubleArray: array of Double): Integer;
Gruß, Andreas |
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 |
AW: Dyn. Array of Double an funktion übergeben
Zitat:
|
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; |
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:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz