AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi aus einem Array die kleinste Zahl herausfinden
Thema durchsuchen
Ansicht
Themen-Optionen

aus einem Array die kleinste Zahl herausfinden

Ein Thema von gangs-taas · begonnen am 4. Sep 2009 · letzter Beitrag vom 9. Jul 2013
 
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#30

AW: aus einem Array die kleinste Zahl herausfinden

  Alt 8. Jul 2013, 13: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 13:38 Uhr) Grund: Assertion und Ressourcenschutzblock eingefügt
  Mit Zitat antworten Zitat
 


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 +1. Es ist jetzt 03:01 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