home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* STACKDEM.PAS *)
- (* Demonstration der Unit "Stack". *)
- (* (c) 1991 Gerd Cebulla & DMV-Verlag *)
- (* ------------------------------------------------------ *)
-
- {$S+}
-
- PROGRAM StackDemo;
-
- USES
- Stack;
-
- CONST
- Anzahl = 20;
-
- VAR
- Numbers : ARRAY[1..Anzahl] OF WORD;
-
- PROCEDURE DisplayNumbers;
- VAR
- i : WORD;
- BEGIN
- FOR i := 1 TO Anzahl DO
- Write(Numbers[i]:8);
- WriteLn;
- END;
-
- PROCEDURE InitNumbers;
- VAR
- i : WORD;
- BEGIN
- Randomize;
- FOR i := 1 TO Anzahl DO
- Numbers[i] := Random($FFFF);
- WriteLn('Unsortiert:');
- DisplayNumbers;
- END;
-
- PROCEDURE ShowNumbers;
- BEGIN
- WriteLn('Sortiert:');
- DisplayNumbers;
- END;
-
- PROCEDURE Quicksort(Anfang, Ende : WORD);
- VAR
- Hilf,
- Mitte,
- Links,
- Rechts : WORD;
- BEGIN
- Links := Anfang;
- Rechts := Ende;
- Mitte := Numbers[(Links + Rechts) DIV 2];
- REPEAT
- WHILE Numbers[Links] < Mitte DO
- INC(Links);
- WHILE Mitte < Numbers[Rechts] DO
- DEC(Rechts);
- IF Links <= Rechts THEN BEGIN
- Hilf := Numbers[Rechts];
- Numbers[Rechts] := Numbers[Links];
- Numbers[Links] := Hilf;
- INC(Links);
- DEC(Rechts);
- END;
- UNTIL Rechts <= Links;
- IF Anfang < Rechts THEN
- Quicksort(Anfang, Rechts);
- IF Links < Ende THEN
- Quicksort(Links, Ende);
- END;
-
- VAR
- Hex : HexString;
-
- BEGIN
-
- { Probieren Sie auch folgende Anweisungen aus: }
- { WaitKey := False; }
- { Display := False; }
-
- SetStackProc(StackTracer);
- InitNumbers;
- Quicksort(1, Anzahl);
- ShowNumbers;
- ResetStackProc;
- MakeHexStr(StackSize, Hex);
- WriteLn('Stackgröße : ', Hex);
- MakeHexStr(MinStack, Hex);
- WriteLn('Kleinster Wert von SP : ', Hex);
- MakeHexStr(StackSize - MinStack, Hex);
- WriteLn('Tatsächlicher Stackbedarf: ', Hex);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von STACKDEM.PAS *)
-