Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Sortieren durch einfügen
MJ87 - Di 27.09.05 20:42
Titel: Sortieren durch einfügen
Hallo,
ich will ein Programm programmieren, wo ich durch das Verfahren "Sortieren durch Einfügen" zahle sortieren kann, habe jetzt ein Problem, wenn ich die Zahlen sortieren will, dann zeigt das Programm mir in der Ausgabe(Memo1) nur nullen an.
Mein Quelltext sieht so aus:
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: 62: 63: 64: 65: 66: 67: 68:
| const maxanzahl =5000;
var TForm1: TTForm1; Bereich:0..maxanzahl; Elementtyp:integer; Liste:array[0..maxanzahl] of integer; n:integer; implementation
{$R *.DFM}
procedure TTForm1.BeendenClick(Sender: TObject); begin close(); end;
procedure TTForm1.SortierenClick(Sender: TObject); Begin N:= memo1.lines.count; sort();
end;
procedure TTForm1.Sort(); var i,j:integer; hilf:integer; platzgef:boolean; k : Integer; begin for i:= 1 to n do begin hilf:= liste[i]; platzgef:=false; j:= i-1; While (j>0) and not platzgef do begin if hilf < liste[j] then begin liste[j+1] := liste[j]; j:=i-1 end else platzgef:=true; end; liste[j+1]:=hilf; end; memo1.clear; for k:=0 to High(liste) do memo1.lines.add(IntToStr(liste[k])); end;
procedure TTForm1.EinfuegenClick(Sender: TObject); begin memo1.lines.Add(Edit1.Text); edit1.text:=''; end;
procedure TTForm1.FormCreate(Sender: TObject); begin memo1.clear; edit1.text:=''; end;
end. |
Gruß MJ87
Moderiert von
Christian S.: Topic aus Multimedia / Spiele / Grafik verschoben am Di 27.09.2005 um 20:46
Grishnak - Di 27.09.05 21:34
Änder dein Sortier-Algorithmus mal wie folgt ab:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var i, j, hilf: integer; begin for i:=0 to n-1 do begin j:=i; hilf:=liste[i]; while (j > 0) and (liste[j-1] > hilf) do begin liste[j]:=liste[j-1]; Dec(j); end; liste[j]:=hilf; end; |
PS: Immer dran denken, ein TMemo-, TList-, TListBox-, etc. -Object hat zwar "Count" Einträge, aber die Indizes gehen von "0" bis "Count-1" (
nicht von "1" bis "Count")!
MJ87 - Di 27.09.05 21:43
damit gehts auch nicht, bekomme immer noch im memofeld nur nullen angeziegt.
Gruß MJ87
Horst_H - Di 27.09.05 22:54
Hallo,
wo liest Du denn integer-Zahlen in deine Liste ein?
Die Liste ist bei der Erstellung mit 0 belegt.
Also musst Du irgendwie String-Zahlen umwandelm.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TTForm1.EinfuegenClick(Sender: TObject); begin n := memo1.lines.count; try Liste[n] := StrToInt(Edit1.Text); memo1.lines.Add(Edit1.Text); except Showmessage('Da ist was schiefgelaufen'); memo1.lines.count:= n; end; end; |
So oder so aehnlich.
Gruss Horst
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!