Entwickler-Ecke
Sonstiges (Delphi) - Zahlen sortieren in einem array
christian87 - Sa 20.01.07 14:28
Titel: Zahlen sortieren in einem array
Hallo,
Ich habe irgendwie grad nen kleinen Blackout. Ich möchte einfach 4 Zahlen, die ich zufällig in einem array gespeichert habe sortieren. Irgendwie mach ich grad nur Müll. Guckt euch mal den Quelltext an. Also ich will die erste Zahl mit der 2. Vergleich ist die erste größer tausche ich diese usw...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TForm1.Button1Click(Sender: TObject); var i,n,zahlmin,Vergleich:integer; feld: array[1..4] of integer;
begin i:=0;
for i:=1 to 4 do begin randomize; feld[i]:=random(4); listbox1.items.add(inttostr(feld[i])); end;
vergleich:=1; n:=1;
While vergleich < 4 do while n < 4 do; n:=n+1; begin If feld[vergleich] > feld[n] then begin feld[vergleich]:=feld[n]; feld[n]:=feld[vergleich]; listbox2.Items.Add(inttostr(feld[vergleich])); end; vergleich:=vergleich+1; end;
end;
end. |
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt
Delete - Sa 20.01.07 14:36
erst mal empfielt es sich, den quellcode einzurücken, dann sieht man auch, was passiert...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| PROCEDURE TForm1.Button1Click(Sender: TObject); VAR i, n, zahlmin, Vergleich: INTEGER; feld: ARRAY[1..4] OF INTEGER;
BEGIN i := 0;
FOR i := 1 TO 4 DO BEGIN randomize; feld[i] := random(4); listbox1.items.add(IntToStr(feld[i])); END;
vergleich := 1; n := 1; WHILE vergleich < 4 DO WHILE n < 4 DO ; n := n + 1; BEGIN IF feld[vergleich] > feld[n] THEN BEGIN feld[vergleich] := feld[n]; feld[n] := feld[vergleich]; listbox2.Items.Add(IntToStr(feld[vergleich])); END; vergleich := vergleich + 1; END; END; |
<HTH>
christian87 - Sa 20.01.07 14:51
Sorry für die Form.
Aber das hilft mir jetzt irgendwie nicht weiter. Ich bin noch Anfänger sorry.
jakobwenzel - Sa 20.01.07 14:55
Guck dir doch mal die Kommentare an, die Grenzgaenger in deinen Code geschrieben hat. :wink:
christian87 - Sa 20.01.07 15:10
Irgendwie komm ich jetzt völlig durcheinander. Also von der Überlegung ist das doch richtig oder?
1 2 3 4
Ich habe 4 Zahlen: 0 3 1 2 diese will ich sortieren.
Soll ich jetzt die erste mit allen Vergleichen und immer tauschen? Ich glaub ich hab einfach einen Denkfehler.
Delete - Sa 20.01.07 15:48
@christian87, also die einrückungen im code, helfen vor allem dir, um strukturprobleme sofort zu erkennen um damit nicht stundenlang vor dem debugger zu sitzen.
ausserdem noch ein tipp, mach keine monsterfunktionen, sondern teile sie auf, in kleinere funktionen. so könnte also deine funktion
TForm1.Button1Click(Sender: TObject); aus einem aufruf der funktionen
generiere_array und
sortiere_array bestehen. dein
sortiere_array könnte wiederum aus den funktionen
vergleiche_werte und
tausche_werte bestehen. damit reduzierst du die komplexität und kannst verschiedene komponenten weiterverwenden.
christian87 hat folgendes geschrieben: |
Soll ich jetzt die erste mit allen Vergleichen und immer tauschen? Ich glaub ich hab einfach einen Denkfehler. |
das kommt auf deinen algo drauf an, wenn du die werte immer tauschen möchtest, wenn die bedingung zutriffst, hast den bubblesort, wenn du erst das element finden möchtest um es zum schluss zu tauschen, dann hättest du den selectionsort. beides funktioniert. ich an deiner stelle würd jetzt erst mal versuchen, die funktion so einfach wie möglich hinzubekommen und erst ein einem späteren schritt optimierungen anzugehen. <HTH>
kurzer nachtrag, den folgenden code solltest dir nicht ansehen, sondern selbst die lösung finden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| procedure TForm1.add_to_box(lb: tListbox; a: array of integer); var i: integer; begin for i := low(a) to high(a) do lb.Items.add(inttostr(a[i])); end;
procedure TForm1.Button1Click(Sender: TObject); var a: array [1..10] of integer; begin qb.Clear; zb.clear;
generiere_array (a); add_to_box(qb, a); sortiere_array(a); add_to_box(zb, a); end;
procedure TForm1.FormCreate(Sender: TObject); begin qb.Clear; zb.clear; randomize; end;
procedure TForm1.generiere_array(var a: array of integer); var i: integer; begin for i := low(a) to high(a) do a[i] := random(100); end;
procedure TForm1.sortiere_array(var a: array of integer); procedure tausch(var a, b: integer); var t: integer; begin t := a; a := b; b := t; end; function IfToSort(a, b: integer): boolean; begin if a < b then result := true else result := false; end;
var i, j: integer; begin for i := low(a) to high(a) do for j := low(a) to high(a) do if ifToSort(a[i], a[j]) then tausch(a[i], a[j]); end; |
christian87 - So 21.01.07 12:09
Vielen Dank für die ausführliche Hilfe und für die Tipps. Du hast mir sehr geholfen.
Hab das jetzt so gemacht und es funktioniert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| procedure TForm1.Button1Click(Sender: TObject); var i,n,x,zahlmin,MAX:integer;
begin for i:=1 to 10 do begin randomize; feld[i]:=random(11); listbox1.items.add(inttostr(feld[i])); end;
end;
procedure TForm1.Button2Click(Sender: TObject); var i,n,max,x : integer; begin for i:=low(feld) to high(feld) do begin for n:=low(feld) to high(feld) do begin if feld[i] > feld[n] then begin MAX:=feld[i]; feld[i]:=feld[n]; feld[n]:=MAX;
end; end; end;
for i:=1 to 10 do begin
listbox2.items.add(inttostr(feld[i])); end;
end; end. |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!