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.