AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Dyn. Array of Double an funktion übergeben

Ein Thema von wendelin · begonnen am 22. Mär 2021 · letzter Beitrag vom 25. Mär 2021
Antwort Antwort
Seite 1 von 3  1 23   
wendelin

Registriert seit: 29. Dez 2010
Ort: Nürnberg
99 Beiträge
 
Delphi 7 Enterprise
 
#1

Dyn. Array of Double an funktion übergeben

  Alt 22. Mär 2021, 18:31
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
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Dyn. Array of Double an funktion übergeben

  Alt 22. Mär 2021, 18:44
Was für Fehler erscheinen denn?
Aufrufen indem man ein array of double übergibt, als ergebnis kommt der index vom höchstwert raus.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Dyn. Array of Double an funktion übergeben

  Alt 22. Mär 2021, 19:03
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.
Gruß vom KodeZwerg

Geändert von KodeZwerg (22. Mär 2021 um 20:10 Uhr) Grund: nun ist es dynamisch :-P
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
431 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Dyn. Array of Double an funktion übergeben

  Alt 22. Mär 2021, 19:46
Wendelin wollte dynamische Arrays übergeben. KodeZwerg's 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.
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
John C. Cornelius

Geändert von Andreas13 (22. Mär 2021 um 19:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Dyn. Array of Double an funktion übergeben

  Alt 22. Mär 2021, 20:06
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!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
431 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Dyn. Array of Double an funktion übergeben

  Alt 22. Mär 2021, 20:57
Deine Funktion function GetMaxDoubleArrayIndex(const DoubleArray: array of Double): Integer; hat einen sogenannten offenen Array-Parameter, der sowohl statische, wie auch dynamische Arrays "schluckt".
Gruß, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
John C. Cornelius
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
431 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Dyn. Array of Double an funktion übergeben

  Alt 22. Mär 2021, 21:01
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
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
John C. Cornelius
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Dyn. Array of Double an funktion übergeben

  Alt 22. Mär 2021, 22:06
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
108 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Dyn. Array of Double an funktion übergeben

  Alt 23. Mär 2021, 08:21
Du kannst auch einen entsprechenden Typ definieren

Code:
Type
TAD: array of double;

...

function Mach_Was_Draus(daten_array: TAD): Integer;
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Dyn. Array of Double an funktion übergeben

  Alt 23. Mär 2021, 08:30
Sowas ginge inzwischen (seit 12 Jahren) auch generisch.
function Mach_Was_Draus(daten_array: TArray<Double>): Integer;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 23:13 Uhr.
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