![]() |
AW: Dyn. Array of Double an funktion übergeben
Nur mal als Anregung:
Delphi-Quellcode:
function MaxFloatValue(const Values: array of double): double;
var i: integer; begin if Length(Values) < 1 then raise Exception.Create('Keine Vergleichswerte übergeben'); Result := Values[Low(Values)]; for i := Low(Values) + 1 to High(Values) do if Values[i] > Result then Result := Values[i]; end; |
AW: Dyn. Array of Double an funktion übergeben
Zitat:
Delphi-Quellcode:
Denn: Innerhalb der Funktion ist Low() immer 0 und High() immer Length()-1.
function MaxFloatValue(const Values: array of double): double;
var i: integer; Len: integer; begin Len := Length(Values) if Len < 1 then raise Exception.Create('Keine Vergleichswerte übergeben'); Result := Values[0]; for i := 1 to Len - 1 do if Values[i] > Result then Result := Values[i]; end; Um nochmal Rudy zu Wort kommen zu lassen: ![]() |
AW: Dyn. Array of Double an funktion übergeben
Wurde nicht vorhin noch der Index geliefert?
Jetzt das Max. Der Compiler sollte aus Low(Values) eine konstante 0 machen, also im Compilat gibt es keinen Unterschied zwischen Low(Values) und 0. Eine Lösung für 10.4.2
Delphi-Quellcode:
und noch was für alle Delphis/FreePascal/...
function MaxFloatValue(const Values: array of Double): Double;
begin if Length(Values) = 0 then Exit(0); // oder eine Exception Result := Values[0]; // oder eben Result := Values[Low(Values)]; for var Value in Values do if Value > Result then Result := Value; end;
Delphi-Quellcode:
function MaxFloatValue(const Values: array of Double): Double;
begin if Length(Values) = 0 then Exit(0); // oder eine Exception Result := MaxValue(Values); end; Zitat:
|
AW: Dyn. Array of Double an funktion übergeben
Auch wenn ich weiß, dass der Compiler es automatisch macht, so schreibe ich persönlich doch lieber
Code:
Und ob max absolut sein soll oder nicht, wäre noch zu klären.
function MaxValue(const Data: array of Single): Single;
var I: Integer; startL: Integer; endL: Integer; begin Result := Data[Low(Data)]; startL:= Succ(Low(Data)); endL:= High(Data); for I := startL to endL do if Result < Data[I] then Result := Data[I]; end; Tomy |
AW: Dyn. Array of Double an funktion übergeben
Hallo,
vielen Dank für Eure Antworten. Die Fehlermedung 'Incompatible Types' Array und dyn. Array kam von einer falschen Array-Var. Jetzt läuft es! Ich habe noch eine Frage: Warum muß im Funktionskopf das Array of Double als Konstante deklariert werden ? Ich habe noch die Funktion IndexOfMinValue geschrieben:
Delphi-Quellcode:
Wendelin
function IndexOfMinValue_1(Const x : Array of Double): Integer;
Var Index : Integer; MinValue : Double; begin Result := high(x); MinValue := MaxDouble; for Index := 0 to high(x) do begin if x[Index] < MinValue then begin Result := Index; MinValue := x[Index]; end; end; end; |
AW: Dyn. Array of Double an funktion übergeben
CONST im Funktionskopf sorgt dafür, daß
- ein Pointer auf das Array übergeben wird und nicht der Inhalt des Arrays kopiert wird, - das Original-Array nicht verändert werden kann - das Ablegen des Arrays im Speicher vom Compiler optimiert werden kann, um effizientere Zugriffe zu ermöglichen. Möglicherweise gibt es noch mehr Gründe, die unsere Top-Spezialisten Dir besser erklären können. Gruß, Andreas |
AW: Dyn. Array of Double an funktion übergeben
Danke Andreas,
Gruß Wendelin |
AW: Dyn. Array of Double an funktion übergeben
Viel Efolg, Wendelin !:-D
Gruß, Andreas |
AW: Dyn. Array of Double an funktion übergeben
Hallo Wendelin,
noch ein kleiner Tipp: Wenn Delphi 7 Enterprise noch kein CONST im Funktionskopf kennt, Du solltest stattdessen überall VAR benutzen. Gruß, Andreas |
AW: Dyn. Array of Double an funktion übergeben
Zitat:
![]() Zitat:
Delphi-Quellcode:
ist somit immer korrekt.
for i := 0 to High(values)
Kannste auch im disassembly angucken, aus
Delphi-Quellcode:
wird immer stumpf hardcoded 0.
Low(values)
Und deshalb geht damit auch ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 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-2025 by Thomas Breitkreuz