Registriert seit: 19. Nov 2006
29 Beiträge
|
Zeilen den Tauschversuchen anpassen. Rowcount, rows, row etc
5. Mai 2007, 22:30
Hallo Leute,
Ich sitze bereits seit mehreren Stunden an folgendem Problem. Ich möchte das soviel Zeilen wie Tauschversuche vorgenommen worden sind angezeigt werden. Aber entweder zeigt er mir gar kein Ergebnis an oder aber er macht unendlich viele Zeilen...
Vielleicht habt ihr eine Idee, hier erstmal der Quellcode:
Delphi-Quellcode:
Const Anzahl = 10;
Zeilen = 50;
Type TFeld = ARRAY [1 .. Anzahl] OF Integer;
VAR feld, neuesFeld : TFeld;
Zeile, i, Tauschzaehler : Integer;
Start, Ende : TTime;
PROCEDURE TMainForm.zeit (Var Wert: TTime);
Begin
Wert := Time
End;
procedure TMainForm.GridLeeren;
Var x,y: Integer;
Begin
For x := 1 To Anzahl Do
For y := 1 To Zeilen Do
Begin
BubbleStringGrid.Cells [x, y] := '';
QuickStringGrid.Cells [x, y] := '';
End;
End;
PROCEDURE vertausche_feld_pos (l, r: Integer) ;
Var Puffer: Integer;
BEGIN
Puffer := Feld[l];
Feld[l] := Feld[r];
Feld[r] := Puffer;
Inc (Tauschzaehler);
End;
PROCEDURE TMainForm.ZeigeQuickDaten;
Var x: Integer;
BEGIN
Inc (Zeile);
For x := 1 To Anzahl Do
QuickStringGrid.Cells [x, Zeile] := IntToStr(Feld [x]);
END ;
PROCEDURE TMainForm.ZeigeBubbleDaten;
Var x: Integer;
BEGIN
Inc (Zeile);
BubbleStringGrid.Rows[1];
For x := 1 To Anzahl Do
BubbleStringGrid.Cells [x, Zeile] := IntToStr(Feld [x]);
END ;
PROCEDURE quicksort (links ,rechts: INTEGER) ;
BEGIN
//
END;
procedure TMainForm.Quick_sort;
Begin
quicksort (1,Anzahl);
End;
procedure TMainForm.Bubble_sort (letztes : integer);
var grenze, i, merke : integer;
Begin
grenze := 1;
letztes := anzahl;
while grenze < letztes do
begin
merke := letztes;
For i := letztes downto grenze + 1 do
begin
If (Feld[i - 1] > Feld[i]) then
begin
vertausche_feld_pos(i, i - 1);
merke := i;
ZeigeBubbleDaten;
end;
end;
grenze := merke;
end;
end;
procedure TMainForm.Zahlenerzeugen;
Var x: Integer;
Begin
randomize;
For x:= 1 To Anzahl Do neuesFeld [x] := Random (100);
End;
procedure TMainForm.AblaufRadioGroupClick(Sender: TObject);
var letztes : integer;
begin
Case AblaufRadioGroup.ItemIndex Of
0: Begin
Zahlenerzeugen;
Feld := neuesFeld;
Zeile := -1;
ZeigeQuickDaten;
Zeile := -1;
ZeigeBubbleDaten;
End;
1: Begin
zeit (Start);
For i := 1 To 10000 Do
Begin
Tauschzaehler := 0;
Zeile := 0;
Feld := neuesFeld;
Bubble_sort(letztes);
End;
zeit (Ende);
ErgebnisseStringGrid.cells[1,1] := TimeToStr (Ende - Start);
ErgebnisseStringGrid.cells[1,2] := IntToStr (Tauschzaehler);
zeit (Start);
For i := 1 To 10000 Do
Begin
Tauschzaehler := 0;
Zeile := 0;
Feld := neuesFeld;
Quick_sort;
End;
zeit (Ende);
ErgebnisseStringGrid.cells[2,1] := TimeToStr (Ende - Start);
ErgebnisseStringGrid.cells[2,2] := IntToStr (Tauschzaehler);
End;
2: Application.Terminate;
End;
end;
procedure TMainForm.FormCreate(Sender: TObject);
Var y: Integer;
begin
BubbleStringGrid.ColCount := Anzahl + 1;
QuickStringGrid.ColCount := Anzahl + 1;
BubbleStringGrid.Cells [0, 0] := 'Bubble';
QuickStringGrid.Cells [0, 0] := 'Quick';
For y := 1 To Zeilen Do
Begin
QuickStringGrid.Cells [0, y] := IntToStr(y);
BubbleStringGrid.Cells [0, y] := IntToStr(y);
End;
ErgebnisseStringGrid.Cells [0,0] := 'Ergebnisse';
ErgebnisseStringGrid.cells [0,1] := 'Dauer';
ErgebnisseStringGrid.cells [0,2] := 'Tauschzahl';
ErgebnisseStringGrid.cells [1,0] := 'Bubble';
ErgebnisseStringGrid.cells [2,0] := 'Quick';
end;
end.
Ich weiss nun nicht ob es sinnvoller ist den ganzen Quellcode zu senden oder nur den Teil wo ich denke der Fehler liegt. Daher schicke ich lieber den ganzen.
Vielen Dank für Eure Hilfe!
mfg
lun87
|
|
Zitat
|