| 1 | PROGRAM PERMUTATIONEN(INPUT,OUTPUT); |
| 2 | |
| 3 | VAR I,N: INTEGER; |
| 4 | C: ARRAY[1..10] OF INTEGER; |
| 5 | |
| 6 | |
| 7 | FUNCTION FAK(N: INTEGER): INTEGER; |
| 8 | BEGIN |
| 9 | IF N=1 THEN FAK := 1 |
| 10 | ELSE FAK := N*FAK(N-1) |
| 11 | END (* FAK *); |
| 12 | |
| 13 | |
| 14 | |
| 15 | PROCEDURE WRITEPERMUTATION; |
| 16 | VAR I: INTEGER; |
| 17 | BEGIN |
| 18 | WRITE(" ":10); |
| 19 | FOR I := 1 TO N DO WRITE( C[I] :3); |
| 20 | WRITELN |
| 21 | END (* WRITEPERMUTATION *); |
| 22 | |
| 23 | |
| 24 | |
| 25 | PROCEDURE NEXTPERMUTATION; |
| 26 | VAR I,J,H: INTEGER; |
| 27 | BEGIN |
| 28 | I := N+1; |
| 29 | REPEAT I := I-1; |
| 30 | H := C[1]; |
| 31 | FOR J := 1 TO I-1 DO C[J] := C[J+1]; |
| 32 | C[I] := H |
| 33 | UNTIL C[I]<>I |
| 34 | END (* NEXTPERMUTATION *); |
| 35 | |
| 36 | |
| 37 | |
| 38 | BEGIN |
| 39 | WRITE("P E R M U T A T I O N E N DER ORDNUNG"); |
| 40 | READ(N); |
| 41 | WRITELN; |
| 42 | FOR I := 1 TO N DO C[I] := I; |
| 43 | WRITEPERMUTATION; |
| 44 | FOR I := 2 TO FAK(N) DO |
| 45 | BEGIN |
| 46 | NEXTPERMUTATION; |
| 47 | WRITEPERMUTATION |
| 48 | END |
| 49 | END. |