--- /dev/null
+PROGRAM PERMUTATIONEN(INPUT,OUTPUT);
+
+ VAR I,N,NFAKTORIELLE: INTEGER;
+ C: ARRAY[1..10] OF INTEGER;
+
+
+ FUNCTION FAK(N: INTEGER): INTEGER;
+ BEGIN
+ IF N=1 THEN FAK := 1
+ ELSE FAK := N*FAK(N-1)
+ END (* FAK *);
+
+
+
+ PROCEDURE WRITEPERMUTATION;
+ VAR I: INTEGER;
+ BEGIN
+ WRITE(" ":10);
+ FOR I := 1 TO N DO WRITE( C[I] :3);
+ WRITELN
+ END (* WRITEPERMUTATION *);
+
+
+
+ PROCEDURE NEXTPERMUTATION;
+ VAR I,PRODUKT: INTEGER;
+ BEGIN
+ REPEAT
+ C[N] := C[N] + N-1;
+ PRODUKT := 1;
+ FOR I := N DOWNTO 1 DO
+ BEGIN
+ IF C[I]>N THEN BEGIN
+ C[ I ] := C[ I ] - N;
+ C[I-1] := C[I-1] + 1
+ END;
+ PRODUKT := PRODUKT*C[I]
+ END
+ UNTIL PRODUKT=NFAKTORIELLE
+ END (* NEXTPERMUTATION *);
+
+
+
+BEGIN
+ WRITE("P E R M U T A T I O N E N DER ORDNUNG");
+ READ(N);
+ WRITELN;
+ NFAKTORIELLE := FAK(N);
+ FOR I := 1 TO N DO C[I] := I;
+ WRITEPERMUTATION;
+ FOR I := 2 TO NFAKTORIELLE DO
+ BEGIN
+ NEXTPERMUTATION;
+ WRITEPERMUTATION
+ END
+END.