gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
sve iz starih verzija
[spa2-teorijske-vezbe.git] / Cas10 / PERMP.MOD
diff --git a/Cas10/PERMP.MOD b/Cas10/PERMP.MOD
new file mode 100644 (file)
index 0000000..b72c076
--- /dev/null
@@ -0,0 +1,92 @@
+MODULE PermP;\r
+\r
+FROM IO IMPORT\r
+  WrStr, WrLn, WrCard, RdCard, WrChar, RdKey, OK;\r
+\r
+CONST\r
+  MaxDim = 50;\r
+\r
+TYPE\r
+  Niz = ARRAY [1 .. MaxDim] OF CHAR;\r
+\r
+VAR\r
+  A: Niz;\r
+  n: CARDINAL;\r
+\r
+PROCEDURE Unos(VAR n: CARDINAL; VAR A: Niz);\r
+VAR\r
+  i: CARDINAL;\r
+BEGIN\r
+  REPEAT\r
+    WrStr('Unesite n (1 <= n <= ');\r
+    WrCard(MaxDim, 1);\r
+    WrStr(') --- ');\r
+    n:= RdCard();\r
+    WrLn;\r
+  UNTIL OK AND (1 <= n) AND (n <= MaxDim);\r
+  REPEAT\r
+    WrLn;\r
+    WrStr('Unesite ');\r
+    WrCard(n, 1);\r
+    WrStr(' slova koja treba permutovati (mogu se i ponavljati):');\r
+    WrLn;\r
+    WrLn;\r
+    i:= 0;\r
+    REPEAT\r
+      INC(i);\r
+      A[i]:= RdKey();\r
+      WrChar(A[i])\r
+    UNTIL (i = n) OR ((CAP(A[i]) < 'A') AND (CAP(A[i]) > 'Z')\r
+                       AND (A[i] < '0') AND (A[i] > '9'));\r
+  UNTIL NOT ((CAP(A[i]) < 'A') AND (CAP(A[i]) > 'Z') AND\r
+             (A[i] < '0') AND (A[i] > '9'));\r
+END Unos;\r
+\r
+PROCEDURE Permutacije(n: CARDINAL; VAR A: Niz);\r
+\r
+  PROCEDURE Nadji(k: CARDINAL);\r
+  VAR\r
+    i, j: CARDINAL;\r
+    Temp: CHAR;\r
+  BEGIN\r
+    IF k = 1 THEN\r
+      FOR i:= 1 TO n DO\r
+        WrChar(A[i]);\r
+      END;\r
+      WrLn;\r
+    ELSE\r
+      Nadji(k - 1);\r
+      FOR i:= 1 TO k - 1 DO\r
+        IF A[k] # A[i] THEN\r
+          (* Zamenimo elemente samo ako su razliciti *)\r
+          j:= 1;\r
+          WHILE (j < i) AND (A[j] # A[i]) DO\r
+            INC(j);\r
+          END;\r
+          IF j = i THEN\r
+            (* A[i] nema duplikata u skupu {a[1], ... , a[i-1] *)\r
+            Temp:= A[i];\r
+            A[i]:= A[k];\r
+            A[k]:= Temp;\r
+            Nadji(k - 1);\r
+            Temp:= A[i];\r
+            A[i]:= A[k];\r
+            A[k]:= Temp;\r
+          END;\r
+        END;\r
+      END;\r
+    END;\r
+  END Nadji;\r
+\r
+BEGIN\r
+  Nadji(n);\r
+END Permutacije;\r
+\r
+BEGIN  \r
+  Unos(n, A);\r
+  WrLn;\r
+  WrLn;\r
+  WrStr('Permutacije: ');\r
+  WrLn;\r
+  Permutacije(n, A);\r
+END PermP.\r
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner