PROGRAM permuter_pas(input,output); {gibt Permutationen aus - Markus Schaber}

CONST MaxEbenen=20; {maximal 20 Permutationsebenen}

TYPE  TPermut=ARRAY[1..MaxEbenen] OF INTEGER;

VAR   AnfangsFeld: TPermut;
      Tiefe: Integer;



PROCEDURE Permut(Feld:TPermut;Ebene,Maximum:Integer);
{Gibt rekursiv die Permutationen von 1 bis Maximum aus}

VAR I:Integer; {Z„hlvariablen}

BEGIN
     IF Ebene>Maximum THEN BEGIN
        FOR i:=1 TO Maximum DO {Feld ausgeben, wenn eine Permutation komplett}
            write(feld[i]:4);
        writeln
     END ELSE {N„chste Zahl an allen Stellen einfgen}
        FOR i:=Ebene DOWNTO 1 DO BEGIN
            Feld[i]:=Ebene; {an i-te Position setzen}
            Permut(Feld,Ebene+1,Maximum);
            IF i>1 THEN
               Feld[i]:=Feld[i-1]; {i-1te Position "sichern"}
        END;
END;


BEGIN
     REPEAT
        READLN(Tiefe);  {Eingeben, welche Permutationen}
        IF Tiefe>MaxEbenen THEN
             WriteLn('Nur ',Maxebenen,' Zahlen permutierbar!')
             {bereits bei 10 Zahlen grenzt die Rechenzeit an Unendlich}
        ELSE IF Tiefe>0 THEN BEGIN
             AnfangsFeld[1]:=1;
             Permut(Anfangsfeld,2,Tiefe);
        END;
     UNTIL Tiefe=0
END
.
