![]() |
Suche im Array
Erstmal ein schönen guten Morgen an alle.
So also ich hab jetzt eine Anfängerfrage... Manchmal sieht man den Wald vor lauter Bäumen nicht. Folgendes Problem: Ich habe im Programm ein array
Delphi-Quellcode:
Durch Berechnung von f kommen für die verschiedenen Felder von f auch verschiedene Werte bei herraus. Jetzt möchte ich gerne den kleinsten Wert des Arrays ermitteln und an welcher Position dieser zu finden ist. Dabei soll aber nicht das Array der größe nach sortiert werden weil die Postion des kleinesten Wertes im Array wichtig ist.
VAR f,h,g:array[0..8]of extended;
Hoffe es kann mir jemand helfen! :roteyes: mfg fr0g P.S.: Selbst über Google oder hier im Forum hab ich keine klare Antwort gefunden. |
Re: Suche im Array
Gut. Hat sich erledigt. Hab das array als Integer deklariert und extended in integer umgewandelt...
Das schreib ich dann in eine ListBox und such mir da den kleinsten Wert herraus. Trotzdem THX! P.S.: Könnt ja trotzdem das hier beantworten. Würde mich mal interessieren! |
Re: Suche im Array
jetz nur mal ganz schell hingeschusselt würd ich das so machen:
Delphi-Quellcode:
Jetz müsste man noch fehler ausschließen wie leeres oder halbvolles Array, evt. beim aufruf noch übergeben welches array...
function Suchen: byte //byte reicht wenn das Array von 1-8 geht...
var i: Byte; begin suchen:=1; for i:= 2 to 8 do begin if f[i]<f[i-1] then suchen:=i end; end; |
Re: Suche im Array
Imho schöner: (und sicherer falls man mal das Array erweitert/ändert/dynamisch Macht
Delphi-Quellcode:
Wenn du nur den kleinsten Wert aber nicht die Position des Wertes brauchst ist Min(a,b) auch mal nen Blick wert.
for i := low(f) to high(f) do
begin end; z.B. so in der art:
Delphi-Quellcode:
var Kleinst : int;
Kleinst := MaxInt; // sonst ist das Ding von anfang an schon 0 ... for i := low(f) to high(f) do Kleinst := min(Kleinst,f[i]); |
Re: Suche im Array
Zitat:
das mit dem dynamischen Begrenzungen hab ich so übrigens noch nie gesehen, aber uss ich mir mal merken |
Re: Suche im Array
Hallo,
wenn die Randbedingungen stimmen, dann ist eine sequentielle Suche im Array vertretbar:
Delphi-Quellcode:
Ist das Array groß und wird das Minimum öfter lokalisiert, dann sollte ein sortiertes Index-Array erstellt werden.
function IndexOfMin(const Data: array of Integer): Integer;
var i: Integer; begin Result := High(Data); for i := Low(Data) to Pred(High(Data)) do if Data[Result] > Data[i] then Result := i; end; Grüße vom marabu |
Re: Suche im Array
Eine einfache Lösung könnte so aussehen:
Delphi-Quellcode:
Wobei zu bedenken ist das doppelte Werte im Array nicht beachted werden.
type
TArray8 = Array [0..8] of integer; var f, h, g: TArray8; function FindMinValueOfArray(aArray: TArray8): Integer; var i, Value, idx: Integer; begin Value := High(Integer); for i := 0 to High(aArray) do if Value > aArray[i] then begin Value := aArray[i]; idx := i; end; Result := idx; end; procedure IrdendWas... var MinWert, ArrayIndex: Integer; begin //... ArrayIndex := FindMinValueOfArray(g); MinWert := g[ArrayIndex]; //... end; // Edit: Ei verflixt, marabu war ein Tick schneller... ;) |
Re: Suche im Array
Zitat:
|
Re: Suche im Array
mit fällt dabei auf das eigentlich alle geposteten Versionen ein falsches Ergebnis liefern wenn das Array leer ist :mrgreen:
|
Re: Suche im Array
Hallo Jens,
was ist falsch daran, im Fall eines leeren Arrays den Indexwert -1 zu liefern? Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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