Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   4 Zahlen vom Typ "Real" sortieren (https://www.delphipraxis.net/42357-4-zahlen-vom-typ-real-sortieren.html)

UkOn 17. Mär 2005 17:33


4 Zahlen vom Typ "Real" sortieren
 
Hi Leute bin ein relativer Nub in Delphi, brauche aber nun ma ein Sortierverfahren was relativ einfach 4 Zahlen (z.b., z1,z2,z3,z4) der Reihe nach sortiert. Am besten sollen die Werte übergeben werden an eine neue Variable. Z.b.

if (z1>z2) and (z1>z3) and (z1>z4) then max:=z1;

Den minimalsten Wert hab ich auch mit dem Verfahren gemacht nur ist dies sehr unproduktiv weils irgendwann zig Möglichkeiten gibt welcher nun größer ist oder nicht. Komme nicht ganz klar, weiß da jemand Rat? Kenne zwar Bubblesort etc. hab auch versucht mich damit zu beschäftigen nur zu meinen Problem bekomme ich die Verfahren (leider) nicht angewand.

MFG

RavenIV 17. Mär 2005 17:40

Re: 4 Zahlen vom Typ "Real" sortieren
 
nimm doch eine TList, pack dort deine werte rein.
dann kannst du TList.sort aufrufen und alles ist erledigt.
beim sort kannst du sogar noch angeben, wie sortziert werden soll.

Binärbaum 17. Mär 2005 17:40

Re: 4 Zahlen vom Typ "Real" sortieren
 
Hi,

du könntest die Zahlen auch einfach in einem Array speichern und dann sortieren.
Delphi-Quellcode:
procedure Swap(var a,b: real);
var h: real;
begin
  h:= a;
  a:= b;
  b:= a;
end;

procedure Sortiere(var Zahlen: array of real);
var i, j: Integer;
begin
 for i:= 0 to High(Zahlen)-1 do
  for j:= i+1 to Hihg(Zahlen) do
    if Zahlen[i]>Zahlen[j] then Swap( Zahlen[i], Zahlen[j]);
end;
Soweit erstmal das sortieren, jetzt noch die Deklaration des Arrays und ein Beispielaufruf:
Delphi-Quellcode:
var MeinArray: array of real;
...
SetLength( MeinArray, 10);//Länge auf 10 Elemente festsetzen
//hier können jetzt irgendwelche Zahlen ins Array eingelesen werden
...
Sortiere(MeinArray);//Sortierung starten
MfG
Binärbaum

UkOn 17. Mär 2005 17:44

Re: 4 Zahlen vom Typ "Real" sortieren
 
@raven: Das brauch ich aber nicht. Weil ich mit diesen Daten Zahlen/Werten noch weiter arbeiten muss. Deshalb hätte ich sie gerne in neue variablen, die ich dann weiter verwenden kann.
Trotzdem danke

RavenIV 17. Mär 2005 17:49

Re: 4 Zahlen vom Typ "Real" sortieren
 
Zitat:

Zitat von UkOn
@raven: Das brauch ich aber nicht. Weil ich mit diesen Daten Zahlen/Werten noch weiter arbeiten muss. Deshalb hätte ich sie gerne in neue variablen, die ich dann weiter verwenden kann.
Trotzdem danke

wo ist das problem?
du kannst die werte doch auch wieder aus der liste rausholen...

UkOn 17. Mär 2005 18:25

Re: 4 Zahlen vom Typ "Real" sortieren
 
Hab das nunmal mit dem Array versucht, nur das funktioniert nich wie ich denke. Dachte der Array ist dann sortiert, und ich kann mir einzelne Elemente rauspicken die mir dann geordnet erscheinen aber macht er nicht. Wo ist der fehler?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var mya: array [1..4] of real;
begin
mya[1]:=strtofloat(edit1.Text);
mya[2]:=strtofloat(edit2.Text);
mya[3]:=strtofloat(edit3.Text);
mya[4]:=strtofloat(edit4.Text);
Sortiere(mya);//Sortierung starten
edit5.Text:=floattostr(mya[4]);
edit6.Text:=floattostr(mya[3]);
edit7.Text:=floattostr(mya[2]);
edit8.Text:=floattostr(mya[1]);
end;
end.
aus 7 3 10 6

wird 6 6 3 3

aus 1 2 3 4
wird 4 3 2 1 <--- da dacht ich es klappt aber naja das beispiel darüber sagt das da was verkehrt läuft

Binärbaum 17. Mär 2005 23:19

Re: 4 Zahlen vom Typ "Real" sortieren
 
Zitat:

Zitat von UkOn
Hab das nunmal mit dem Array versucht, nur das funktioniert nich wie ich denke. Dachte der Array ist dann sortiert, und ich kann mir einzelne Elemente rauspicken die mir dann geordnet erscheinen aber macht er nicht. Wo ist der fehler?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var mya: array [1..4] of real;
begin
mya[1]:=strtofloat(edit1.Text);
mya[2]:=strtofloat(edit2.Text);
mya[3]:=strtofloat(edit3.Text);
mya[4]:=strtofloat(edit4.Text);
Sortiere(mya);//Sortierung starten
edit5.Text:=floattostr(mya[4]);
edit6.Text:=floattostr(mya[3]);
edit7.Text:=floattostr(mya[2]);
edit8.Text:=floattostr(mya[1]);
end;
end.
aus 7 3 10 6

wird 6 6 3 3

aus 1 2 3 4
wird 4 3 2 1 <--- da dacht ich es klappt aber naja das beispiel darüber sagt das da was verkehrt läuft

Das liegt wohl zum einen daran, dass du einen statischen Array verwendest, aber die Prozedur von mir nur für dynamische Arrays vorgesehen ist. Zum anderen ist mir gerade aufgefallen, dass da ein Tippfehler in meiner Funktion ist.
Erstmal die korrigierte Prozedur Swap von mir:
(die Prozedur Sortiere bleibt unverändert)
Delphi-Quellcode:
procedure Swap(var a,b: real);
var h: real;
begin
  h:= a;
  a:= b;
  b:= h;//<<-- hier war der Fehler
end;
Und dann auf dein Beispiel angewendet müsste das so aussehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var mya: array of real;
begin
  SetLength(mya, 4);
  mya[0]:=StrToFloat(edit1.Text);
  mya[1]:=StrToFloat(edit2.Text);
  mya[2]:=StrToFloat(edit3.Text);
  mya[3]:=StrToFloat(edit4.Text);
  Sortiere(mya);//Sortierung starten
  edit5.Text:=FloatToStr(mya[3]);
  edit6.Text:=FloatToStr(mya[2]);
  edit7.Text:=FloatToStr(mya[1]);
  edit8.Text:=FloatToStr(mya[0]);
end;
MfG
Binärbaum

//Edit: Tippfehler korrigiert

UkOn 18. Mär 2005 14:25

Re: 4 Zahlen vom Typ "Real" sortieren
 
danke dir, werd ich dann gleich mal ausprobieren

himitsu 18. Mär 2005 14:42

Re: 4 Zahlen vom Typ "Real" sortieren
 
Binärbaum ist es ja schon aufgefallen, seine Prozedur arbeite mit 'nem (falschen) Startindex, diese arbeitet jetzt etwas besser ... Start- und Entindex sind egal.

Delphi-Quellcode:
procedure Sortiere(var Zahlen: array of real);
var i, j: Integer;
  t: Real;
begin
  for i:= Low(Zahlen) to High(Zahlen)-1 do
    for j := i + 1 to High(Zahlen) do
      if Zahlen[i] > Zahlen[j] then begin
        t := Zahlen[i];
        Zahlen[i] := Zahlen[j];
        Zahlen[j] := t;
     end;
end;

Binärbaum 18. Mär 2005 15:15

Re: 4 Zahlen vom Typ "Real" sortieren
 
Zitat:

Zitat von himitsu
Binärbaum ist es ja schon aufgefallen, seine Prozedur arbeite mit 'nem (falschen) Startindex, diese arbeitet jetzt etwas besser ... Start- und Entindex sind egal.

Delphi-Quellcode:
procedure Sortiere(var Zahlen: array of real);
var i, j: Integer;
  t: Real;
begin
  for i:= Low(Zahlen) to High(Zahlen)-1 do
    for j := i + 1 to High(Zahlen) do
      if Zahlen[i] > Zahlen[j] then begin
        t := Zahlen[i];
        Zahlen[i] := Zahlen[j];
        Zahlen[j] := t;
     end;
end;

Ach, immer diese überkorrekten Leute. :mrgreen:
Ich bin eigentlich davon ausgegeangen, dass ein dynamischer Array verwendet wird, und dynamische Arrays beginnen immer beim Index null (deshalb der Startwert). Außerdem ist bei nur vier Werten ein Sortierverfahren wie Bubble-Sort oder ähnliche fast schon zuviel des Guten, da einige wenige Vergleiche auch reichen würden. Ich hab die Prozedur eigentlich nur vorgeschlagen, da man mit dynamischen Arrays flexibler ist, weil man damit nicht nur ein vierelementiges Array sondern auch ein beliebig langes Array verwenden kann.

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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