X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-teorijske-vezbe.git;a=blobdiff_plain;f=Cas10%2FPERMP.MOD;fp=Cas10%2FPERMP.MOD;h=b72c076c0cffa697cf80ed258a9b227f584c3e50;hp=0000000000000000000000000000000000000000;hb=cfda726ac9ecd0bd02935512ea0edaee2cd31b57;hpb=db836f4604991e1c22ea67943873944cdfae1345 diff --git a/Cas10/PERMP.MOD b/Cas10/PERMP.MOD new file mode 100644 index 0000000..b72c076 --- /dev/null +++ b/Cas10/PERMP.MOD @@ -0,0 +1,92 @@ +MODULE PermP; + +FROM IO IMPORT + WrStr, WrLn, WrCard, RdCard, WrChar, RdKey, OK; + +CONST + MaxDim = 50; + +TYPE + Niz = ARRAY [1 .. MaxDim] OF CHAR; + +VAR + A: Niz; + n: CARDINAL; + +PROCEDURE Unos(VAR n: CARDINAL; VAR A: Niz); +VAR + i: CARDINAL; +BEGIN + REPEAT + WrStr('Unesite n (1 <= n <= '); + WrCard(MaxDim, 1); + WrStr(') --- '); + n:= RdCard(); + WrLn; + UNTIL OK AND (1 <= n) AND (n <= MaxDim); + REPEAT + WrLn; + WrStr('Unesite '); + WrCard(n, 1); + WrStr(' slova koja treba permutovati (mogu se i ponavljati):'); + WrLn; + WrLn; + i:= 0; + REPEAT + INC(i); + A[i]:= RdKey(); + WrChar(A[i]) + UNTIL (i = n) OR ((CAP(A[i]) < 'A') AND (CAP(A[i]) > 'Z') + AND (A[i] < '0') AND (A[i] > '9')); + UNTIL NOT ((CAP(A[i]) < 'A') AND (CAP(A[i]) > 'Z') AND + (A[i] < '0') AND (A[i] > '9')); +END Unos; + +PROCEDURE Permutacije(n: CARDINAL; VAR A: Niz); + + PROCEDURE Nadji(k: CARDINAL); + VAR + i, j: CARDINAL; + Temp: CHAR; + BEGIN + IF k = 1 THEN + FOR i:= 1 TO n DO + WrChar(A[i]); + END; + WrLn; + ELSE + Nadji(k - 1); + FOR i:= 1 TO k - 1 DO + IF A[k] # A[i] THEN + (* Zamenimo elemente samo ako su razliciti *) + j:= 1; + WHILE (j < i) AND (A[j] # A[i]) DO + INC(j); + END; + IF j = i THEN + (* A[i] nema duplikata u skupu {a[1], ... , a[i-1] *) + Temp:= A[i]; + A[i]:= A[k]; + A[k]:= Temp; + Nadji(k - 1); + Temp:= A[i]; + A[i]:= A[k]; + A[k]:= Temp; + END; + END; + END; + END; + END Nadji; + +BEGIN + Nadji(n); +END Permutacije; + +BEGIN + Unos(n, A); + WrLn; + WrLn; + WrStr('Permutacije: '); + WrLn; + Permutacije(n, A); +END PermP.