X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fsrc%2Fpascal%2FPERMUT.V4;fp=sw%2Fsrc%2Fpascal%2FPERMUT.V4;h=622b44257da03f18bb07b3e95b737ac3222e2fb7;hb=81e70d488b71bf995c459ca3a02c025993460ffa;hp=0000000000000000000000000000000000000000;hpb=07ec0278333ed187ac242dedcff13c56cf1b0b91;p=pdp8.git diff --git a/sw/src/pascal/PERMUT.V4 b/sw/src/pascal/PERMUT.V4 new file mode 100644 index 0000000..622b442 --- /dev/null +++ b/sw/src/pascal/PERMUT.V4 @@ -0,0 +1,56 @@ +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.