PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WinXP beendet DOS einfach bei Aufrufen von Bubblesort


Poison Nuke
24.08.2002, 13:27
Hi,

das muss heute irgendwie nich mein Tag sein. Jetzt ist schon das 2. Prob, was ich nicht auf anhieb lösen kann.

Ich habe also in meinem Programm einen Array von Records, den ich wegen seiner Größe auf dem Heap schieben muss.

Die ganzen Funktionen (Bearbeiten usw.) funktionieren ohne Probleme, aber als ich eben diesen Array mit Bubblesort nach einer best. Kriterium sortieren wollte, wurde ich einfach aus DOS rausgeschmissen, ohne irgendeine Meldung oder so.

Hier der Algo:

BEGIN
WHILE x<max-1 DO BEGIN
inc(x); y:=x;
REPEAT
inc(y);
IF B[x]^.T>B[y]^.T THEN BEGIN
B[0]^.T:=B[x]^.T; B[0]^.A:=B[x]^.A;
B[0]^.V:=B[x]^.V; B[0]^.I:=B[x]^.I;
B[0]^.S:=B[x]^.S;
B[x]^.T:=B[y]^.T; B[x]^.A:=B[y]^.A;
B[x]^.V:=B[y]^.V; B[x]^.I:=B[y]^.I;
B[x]^.S:=B[y]^.S;
B[y]^.T:=B[0]^.T; B[y]^.A:=B[0]^.A;
B[y]^.V:=B[0]^.V; B[y]^.I:=B[0]^.I;
B[y]^.S:=B[0]^.S;
END;
UNTIL y=max;
END;
END;


Die ganzen Records wurden vorher mit "New(B[i])" im Heap erstelllt.

Ich hoffe einer von euch entdeckt den Fehler oder kann mit wenigstens einen Tipp geben, wie ich den Algo so mache, das WinXP damit keine probleme hat.


Felix Kaiser
24.08.2002, 15:10
WinXP hat damit keine Probleme, wenn du auf nicht allozierte Speicherbereiche zugreifen willst. Das Problem herrscht allgemein.

Bei BubbleSort kann ich dir leider nicht helfen, hab bisher nur mit QuickSort gearbeitet, was ja auch schneller ist als der Rest.

Diogenes
24.08.2002, 16:50
So wie es dargestellt ist (bitte das nächste Mal auch die Variablen- und Typen-Deklarationen mitliefern!) , sind die Element des Arrays Records. In dem Fall würde ich empfehlen:

BEGIN
x := 0;
{Initialisierung! Kann Fehlerursache sein!}
WHILE x<max-1 DO BEGIN
inc(x); y:=x;
REPEAT
inc(y);
IF B[x]^.T>B[y]^.T THEN BEGIN
B[ 0]^:= B[ y];
B[ y]^:= B[ x];
B[ x]^:= B[ 0];
{...Statt der ganzen Latte!}
{Records lassen sich nämlich als Ganze umspeichern!}
END;
UNTIL y=max;
END;
END;


Was anderes fällt mir nicht ein... :mauer:

Poison Nuke
24.08.2002, 19:48
DANKE!

es lag wirklich daran, das ich den Record Stück für Stück getausch habe, und nicht in der Kurzform von Diogenes. =)


Und an die Deklarationen werde ich auch denken....es war halt nur so das ich den Sortierteil aus einem riesigen CASE Block rauskopiert habe, da hatte ich keinen Bock nochmal so weit hochzuscrollen :D:D

Das "x:=0" hatte ich übrigens richtig gesetz, es war halt nur ein paar Zeilen weiter oben, sodass ich es nicht mehr mitkopiert habe. :rolleyes:

Diogenes
28.08.2002, 19:00
Bitteschön. Die "Kurzform" ist allerdings tatsächlich nur, daß ich das "Stück für Stück Tauschen" durch das "direkte" Recodr-Tauschen ersetzt habe...