Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.631 Beiträge
Delphi 12 Athens
|
AW: aus einem Array die kleinste Zahl herausfinden
8. Jul 2013, 14:09
In den Projektoptionen unter "Compilieren" lässt sich u.A. die Bereichsprüfung einschalten. Und hier dann noch meine angepasste Routine für Fließkommazahlen und dynamische Arrays:
Delphi-Quellcode:
type
TDoubleArray = array of double;
procedure MinimumFirst(const Src: TDoubleArray; out Dest: TDoubleArray);
var
(* Variable für die kleinste Zahl im Array *)
Minimum: double;
(* Variable für den Index der kleinsten Zahl innerhalb des Array *)
IndexOfMinimum: integer;
(* Laufvariable für die Schleife *)
i: integer;
(* aktueller Index im Zielarray *)
DestIndex: integer;
begin
Assert(Length(Src) > 0, 'Ein leeres Array hat keinen Minimalwert');
(* Ausgabe auf gleiche Länge wie Eingabe setzen *)
SetLength(Dest, Length(Src));
(* Initial setzen wir Minimum sowie dessen Index auf das erste Element im Array *)
Minimum := Src[Low(Src)];
IndexOfMinimum := Low(Src);
(* Nun den Rest des Array durchgehen, vergleichen und Variablen ggf. anpassen *)
for i := Low(Src) + 1 to High(Src) do
if Src[i] < Minimum then
begin
Minimum := Src[i];
IndexOfMinimum := i;
end;
DestIndex := Low(Dest);
(* Nun in das Ausgabe-Array schreiben *)
(* Zuerst ab der kleinsten Zahl bis zum Ende *)
for i := IndexOfMinimum to High(Src) do
begin
Dest[DestIndex] := Src[i];
inc(DestIndex);
end;
(* Nun noch die ggf. verbliebenen *)
for i := Low(Src) to IndexOfMinimum - 1 do
begin
Dest[DestIndex] := Src[i];
inc(DestIndex);
end;
end;
(* Testaufruf *)
procedure TFormTest.ButtonTestClick(Sender: TObject);
var
zahl, Dest: TDoubleArray;
d: double;
begin
SetLength(zahl, 8);
try
zahl[0] := StrToFloat(Edit1.Text);
zahl[1] := StrToFloat(Edit2.Text);
zahl[2] := StrToFloat(Edit3.Text);
zahl[3] := StrToFloat(Edit4.Text);
zahl[4] := StrToFloat(Edit5.Text);
zahl[5] := StrToFloat(Edit6.Text);
zahl[6] := StrToFloat(Edit7.Text);
zahl[7] := StrToFloat(Edit8.Text);
MinimumFirst(zahl, Dest);
Edit1.Text := FloatToStr(Dest[0]);
Edit2.Text := FloatToStr(Dest[1]);
Edit3.Text := FloatToStr(Dest[2]);
Edit4.Text := FloatToStr(Dest[3]);
Edit5.Text := FloatToStr(Dest[4]);
Edit6.Text := FloatToStr(Dest[5]);
Edit7.Text := FloatToStr(Dest[6]);
Edit8.Text := FloatToStr(Dest[7]);
finally
zahl := nil;
Dest := nil;
end;
end;
[edit] Seid Ihr sicher, dass es sinnvoll ist, min mit einem fixen Wert vorzubelegen? Wenn alle Zahlen im Array > 1000 sind, gibt es keinen Minimalwert, das ist aber nicht schön. [/edit]
Detlef "Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
Geändert von DeddyH ( 8. Jul 2013 um 14:38 Uhr)
Grund: Assertion und Ressourcenschutzblock eingefügt
|