home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9101 / tricks / pascal / stacks / stackdem.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1991-10-01  |  2.2 KB  |  98 lines

  1. (* ------------------------------------------------------ *)
  2. (*                       STACKDEM.PAS                     *)
  3. (*              Demonstration der Unit "Stack".           *)
  4. (*            (c) 1991 Gerd Cebulla & DMV-Verlag          *)
  5. (* ------------------------------------------------------ *)
  6.  
  7. {$S+}
  8.  
  9. PROGRAM StackDemo;
  10.  
  11. USES
  12.   Stack;
  13.  
  14. CONST
  15.   Anzahl  = 20;
  16.  
  17. VAR
  18.   Numbers : ARRAY[1..Anzahl] OF WORD;
  19.  
  20.   PROCEDURE DisplayNumbers;
  21.   VAR
  22.     i : WORD;
  23.   BEGIN
  24.     FOR i := 1 TO Anzahl DO
  25.       Write(Numbers[i]:8);
  26.     WriteLn;
  27.   END;
  28.  
  29.   PROCEDURE InitNumbers;
  30.   VAR
  31.     i : WORD;
  32.   BEGIN
  33.     Randomize;
  34.     FOR i := 1 TO Anzahl DO
  35.       Numbers[i] := Random($FFFF);
  36.     WriteLn('Unsortiert:');
  37.     DisplayNumbers;
  38.   END;
  39.  
  40.   PROCEDURE ShowNumbers;
  41.   BEGIN
  42.     WriteLn('Sortiert:');
  43.     DisplayNumbers;
  44.   END;
  45.  
  46.   PROCEDURE Quicksort(Anfang, Ende : WORD);
  47.   VAR
  48.     Hilf,
  49.     Mitte,
  50.     Links,
  51.     Rechts  : WORD;
  52.   BEGIN
  53.     Links  := Anfang;
  54.     Rechts := Ende;
  55.     Mitte  := Numbers[(Links + Rechts) DIV 2];
  56.     REPEAT
  57.       WHILE Numbers[Links] < Mitte DO
  58.         INC(Links);
  59.       WHILE Mitte < Numbers[Rechts] DO
  60.         DEC(Rechts);
  61.       IF Links <= Rechts THEN BEGIN
  62.         Hilf            := Numbers[Rechts];
  63.         Numbers[Rechts] := Numbers[Links];
  64.         Numbers[Links]  := Hilf;
  65.         INC(Links);
  66.         DEC(Rechts);
  67.       END;
  68.     UNTIL Rechts <= Links;
  69.     IF Anfang < Rechts THEN
  70.       Quicksort(Anfang, Rechts);
  71.     IF Links < Ende THEN
  72.       Quicksort(Links, Ende);
  73.   END;
  74.  
  75. VAR
  76.   Hex : HexString;
  77.  
  78. BEGIN
  79.  
  80.   { Probieren Sie auch folgende Anweisungen aus: }
  81.   { WaitKey := False;                            }
  82.   { Display := False;                            }
  83.  
  84.   SetStackProc(StackTracer);
  85.   InitNumbers;
  86.   Quicksort(1, Anzahl);
  87.   ShowNumbers;
  88.   ResetStackProc;
  89.   MakeHexStr(StackSize, Hex);
  90.   WriteLn('Stackgröße               : ', Hex);
  91.   MakeHexStr(MinStack, Hex);
  92.   WriteLn('Kleinster Wert von SP    : ', Hex);
  93.   MakeHexStr(StackSize - MinStack, Hex);
  94.   WriteLn('Tatsächlicher Stackbedarf: ', Hex);
  95. END.
  96. (* ------------------------------------------------------ *)
  97. (*               Ende von STACKDEM.PAS                    *)
  98.