Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Probleme mit Bubble-Sort und KO (https://www.delphipraxis.net/41593-probleme-mit-bubble-sort-und-ko.html)

whiteshark 5. Mär 2005 16:52


Probleme mit Bubble-Sort und KO
 
Moin Leute,
ich stehe mal wieder vor einem Problem *heul*

Delphi-Quellcode:
function bubble (var a:array of integer):integer;
var j,w,laenge:integer;
begin
 laenge:=form1.Memo1.Lines.Count;
 //setlength(a, laenge);
 for j:=laenge downto 1 do
        begin
        for w:=2 to j do
                begin
                if (a[w-1]>a[w]) then vertausch(a[w-1],a[w]);
                end;// end of w-for-schleife
        end; // end of j-for-schleife
end; // end of function bubble


function aus (var a:array of integer) :integer;
var j:integer;
begin
laenge:=form1.Memo1.Lines.Count;
for j:=1 to laenge do
        begin
        form1.memo2.Lines.Add(inttostr(a[j]));
        end;
end; // end of function aus

Delphi-Quellcode:
procedure TForm1.BubbleButtonClick(Sender: TObject);
var data: array of integer;
var i:integer;
begin
laenge:=memo1.lines.count;
setlength(data,laenge);
//ein(data);
laenge:=form1.Memo1.Lines.Count;
 for i:=1 to laenge do
  data[i]:=strtoint(form1.Memo1.Lines.Strings[i-1]);
von:=gettickcount;
bubble(data);
bis:=gettickcount;
aus(data);
summe:=bis-von;
BubbleLabel.Caption:='';
Das sind meine Proceduren. Wenn ich die nun kompiliere bringt er mir immer einen Fehler. Zufallszahlen gehen, aber wenn ich sortiere ist die letzte Zahl immer eine "18", egal ob die im zu sortieren Teil drin ist oder nicht. Wie kann das passieren? Und wie kann ich Stack-Überläufe verhindern, wenn ich 2-mal 65.000 Zahlen sortiere bringt er mir immer den Fehler "Stack-Überlauf".

Wer kann mir helfen?

sniper_w 5. Mär 2005 16:55

Re: Probleme mit Bubble-Sort und KO
 
Wieso nimmst du nicht QuickSort ? :gruebel:

whiteshark 5. Mär 2005 16:57

Re: Probleme mit Bubble-Sort und KO
 
ja, habe ich ja auch!
Da kommt aber der gleiche Fehler, wie bei Bubble-Sort.

[OT]Es soll ein Programm werden, das 8 Sortierverfahren vergleicht[/OT]

sniper_w 5. Mär 2005 19:44

Re: Probleme mit Bubble-Sort und KO
 
Zitat:

Stack-Überlauf
Das kann nur (99%) deswegen sein, weil die Sortierverfahren Recursion benutzt. Suche dir was im Net, ich weiss, dass es Sortierverfahren (QuickSort auch) auch ohne Recursion gibt, die noch schneller sind, und da gibt es natürlich keine "Stack-Überlauf" Meldung...hoffentlich :).

kiar 5. Mär 2005 21:13

Re: Probleme mit Bubble-Sort und KO
 
hallo,

warum guckst du dir nicht die thread demo an, wie es borland gelösst hat. da sind schon mal drei verfahren die funktionieren.


raik

Binärbaum 5. Mär 2005 22:12

Re: Probleme mit Bubble-Sort und KO
 
Der Stack-Überlauf ist einfach zu erklären, wenn man sich solche Code Zeilen wie diese anschaut:
Delphi-Quellcode:
for i:=1 to laenge do
  data[i]:=strtoint(form1.Memo1.Lines.Strings[i-1]);
und sich die Deklaration von data "danebenlegt":
Delphi-Quellcode:
var data: array of integer;
Data ist ein dynamischer Array und beginnt deshalb beim Index 0 (wie alle dyn. Arrays bei Delphi) und läuft bis laenge-1. Wenn man also im letzten Durchlauf der Schleife auf data[laenge] zugreifen will, kommt ein (berechtigter) Fehler, weil es dieses Element nicht mehr gibt.

MfG
Binärbaum

Khabarakh 6. Mär 2005 08:28

Re: Probleme mit Bubble-Sort und KO
 
Wozu jetzt zwei Threads :gruebel: ?
Einer reicht doch wohl, zumal in diesem schon die Lösung steht.

whiteshark 6. Mär 2005 09:27

Re: Probleme mit Bubble-Sort und KO
 
@Khabarakh : der zweite Thread war zu einem anderen Fehler und hat sich dann zum Lösungsansatz hingearbeitet!Musste mal die Überschrift lesen :warn: ;-)

@Binärbaum: Ich bin doch noch ein blutiger Anfänger in Sachen Delphi-Programmierung :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz