gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control systemdiff --git a/04. Dve grupe brojeva/TopSpeed & XDS/NBROJEVA.MOD b/04. Dve grupe brojeva/TopSpeed & XDS/NBROJEVA.MOD
--- /dev/null
@@ -0,0 +1,112 @@
+MODULE NBrojeva;\r
+\r
+ FROM IO IMPORT\r
+ WrLn, WrCard, RdCard, WrStr;\r
+\r
+ CONST\r
+ MaxNiz = 50;\r
+ MaxSuma = 500;\r
+\r
+ VAR\r
+ n, Suma, SumaPola: CARDINAL;\r
+ Broj: ARRAY [1 .. MaxNiz] OF CARDINAL;\r
+ Iskor: ARRAY[1 .. MaxNiz] OF BOOLEAN;\r
+ Mat: ARRAY[0 .. MaxSuma], [0 .. MaxNiz] OF CARDINAL;\r
+ (* Mat[i, j] je suma brojeva u resenju ako je maksimalna *)\r
+ (* dozvoljena suma brojeva u resenju jednaka 'i' i ako se *)\r
+ (* koristi samo prvih 'j' brojeva. *)\r
+\r
+ PROCEDURE Unos;\r
+ VAR\r
+ i: CARDINAL;\r
+ BEGIN\r
+ WrStr('Unesite n: ');\r
+ n:= RdCard();\r
+ Suma:= 0;\r
+ FOR i:= 1 TO n DO\r
+ WrStr('Unesite ');\r
+ WrCard(i, 1);\r
+ WrStr('. broj: ');\r
+ Broj[i]:= RdCard();\r
+ Suma:= Suma + Broj[i];\r
+ Iskor[i]:= FALSE;\r
+ END;\r
+ SumaPola:= Suma DIV 2;\r
+ END Unos;\r
+\r
+ PROCEDURE Resi;\r
+ VAR\r
+ i, j, Pom: CARDINAL;\r
+ BEGIN\r
+ FOR i:= 0 TO SumaPola DO\r
+ Mat[i, 0]:= 0; (* Koristi se prvih 0 brojeva *)\r
+ END;\r
+ FOR j:= 1 TO n DO\r
+ Mat[0, j]:= 0; (* Maksimalna dozvoljena suma brojeva u resenju je 0 *)\r
+ END;\r
+ FOR i:= 1 TO SumaPola DO\r
+ (* Maks. dozvoljena suma brojeva u resenju je i *)\r
+ FOR j := 1 TO n DO\r
+ (* U resenju mogu ucestvovati prvih j brojeva *)\r
+ Mat[i, j]:= Mat[i, j - 1];\r
+ IF Broj[j] <= i THEN\r
+ Pom:= Mat[i - Broj[j], j - 1] + Broj[j];\r
+ IF Pom > Mat[i, j] THEN\r
+ Mat[i, j]:= Pom;\r
+ END;\r
+ END;\r
+ END;\r
+ END;\r
+ END Resi;\r
+\r
+ PROCEDURE IspisiPrvu;\r
+ VAR\r
+ i, j: CARDINAL;\r
+ BEGIN\r
+ WrStr('Zbir prve grupe brojeva je ');\r
+ WrCard(Mat[SumaPola, n], 1);\r
+ WrLn;\r
+ WrStr('Prvu grupu brojeva cine brojevi:');\r
+ WrLn;\r
+ i:= SumaPola;\r
+ j:= n;\r
+ REPEAT\r
+ WHILE (j > 0) AND (Mat[i, j] = Mat[i, j - 1]) DO\r
+ DEC(j);\r
+ END;\r
+ IF j > 0 THEN\r
+ WrCard(Broj[j], 8);\r
+ Iskor[j]:= TRUE;\r
+ i:= i - Broj[j];\r
+ DEC(j);\r
+ END;\r
+ UNTIL j = 0;\r
+ END IspisiPrvu;\r
+\r
+ PROCEDURE IspisiDrugu;\r
+ VAR\r
+ i, j: CARDINAL;\r
+ BEGIN\r
+ WrLn;\r
+ WrStr('Zbir druge grupe brojeva je ');\r
+ WrCard(Suma - Mat[SumaPola, n], 1);\r
+ WrLn;\r
+ WrStr('Drugu grupu brojeva cine brojevi:');\r
+ WrLn;\r
+ FOR i := 1 TO n DO\r
+ IF NOT Iskor[i] THEN\r
+ WrCard(Broj[i], 8);\r
+ END;\r
+ END;\r
+ END IspisiDrugu;\r
+\r
+BEGIN\r
+ Unos;\r
+ IF SumaPola > MaxSuma THEN\r
+ WrStr('Ulazni podaci su suvise veliki.');\r
+ ELSE\r
+ Resi;\r
+ IspisiPrvu;\r
+ IspisiDrugu;\r
+ END;\r
+END NBrojeva.\r