Thema: Delphi zu blöd für MinSort...

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#2

Re: zu blöd für MinSort...

  Alt 3. Dez 2003, 17:23
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif und herzlich willkommen in unserer DP-Gemeinde,

Der Fehler liegt an der Verwendung von anz.
anz ist nach der Ausführung der Schleife 6 (das hängt mit dem Aufbau der For-Schleife zusammen), daher wird auch eine 6. Zahl im Button2-Ereignis verarbeitet, welche natürlich beim Sortieren an den Anfang rutscht.

Rein vom Tempo her ist das nicht so optimal:
Delphi-Quellcode:
  pos := i;
  For j := i + 1 to anz do Begin
    if a[j] < a[i] Then pos := j;
Ausserdem ist IMHO die untere Variante übersichtlicher, da nicht ständig eine Zuweisung erfolgt,
Delphi-Quellcode:
hilf := a[j];
a[j] := a[i];
a[i] := hilf;
sondern nur die Zuweisung ausgeführt wird, wenn die Werte auch getauscht werden.

So ist es besser und der Fehler ist auch gleich behoben:
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
  Var i: Integer;

  Begin
    Randomize;
    ListBox1.Clear;
    anz := 5;
    For i := 1 to anz do Begin
      a[anz] := Round(Random * 1000) / 100;
      ListBox1.Items.Add(FloatToStr(a[anz]));
    End;
  End;

Procedure TForm1.Button2Click(Sender: TObject);
  Var i, j: integer;
    hilf: real;

  Begin
    For i := 1 to anz - 1 do
      For j := i + 1 to anz do
        If a[j] < a[i] Then Begin
          hilf := a[j];
          a[j] := a[i];
          a[i] := hilf;
        End;
    ListBox1.Clear;
    For i := 1 to anz do
      ListBox1.Items.Add(FloatToStr(a[i]));
  End;

http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat