X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-teorijske-vezbe.git;a=blobdiff_plain;f=Cas05%2FNBROJEVA.MOD;fp=Cas05%2FNBROJEVA.MOD;h=0000000000000000000000000000000000000000;hp=9f1548843d89a49a8188171666ddc6c6f50989c1;hb=57507961332b6f32f0e4b14e5049730c15649b2a;hpb=9ad1d404ff03e0b20719bd69603f78c08691e681 diff --git a/Cas05/NBROJEVA.MOD b/Cas05/NBROJEVA.MOD deleted file mode 100644 index 9f15488..0000000 --- a/Cas05/NBROJEVA.MOD +++ /dev/null @@ -1,112 +0,0 @@ -MODULE NBrojeva; - - FROM IO IMPORT - WrLn, WrCard, RdCard, WrStr; - - CONST - MaxNiz = 50; - MaxSuma = 500; - - VAR - n, Suma, SumaPola: CARDINAL; - Broj: ARRAY [1 .. MaxNiz] OF CARDINAL; - Iskor: ARRAY[1 .. MaxNiz] OF BOOLEAN; - Mat: ARRAY[0 .. MaxSuma], [0 .. MaxNiz] OF CARDINAL; - (* Mat[i, j] je suma brojeva u resenju ako je maksimalna *) - (* dozvoljena suma brojeva u resenju jednaka 'i' i ako se *) - (* koristi samo prvih 'j' brojeva. *) - - PROCEDURE Unos; - VAR - i: CARDINAL; - BEGIN - WrStr('Unesite n: '); - n:= RdCard(); - Suma:= 0; - FOR i:= 1 TO n DO - WrStr('Unesite '); - WrCard(i, 1); - WrStr('. broj: '); - Broj[i]:= RdCard(); - Suma:= Suma + Broj[i]; - Iskor[i]:= FALSE; - END; - SumaPola:= Suma DIV 2; - END Unos; - - PROCEDURE Resi; - VAR - i, j, Pom: CARDINAL; - BEGIN - FOR i:= 0 TO SumaPola DO - Mat[i, 0]:= 0; (* Koristi se prvih 0 brojeva *) - END; - FOR j:= 1 TO n DO - Mat[0, j]:= 0; (* Maksimalna dozvoljena suma brojeva u resenju je 0 *) - END; - FOR i:= 1 TO SumaPola DO - (* Maks. dozvoljena suma brojeva u resenju je i *) - FOR j := 1 TO n DO - (* U resenju mogu ucestvovati prvih j brojeva *) - Mat[i, j]:= Mat[i, j - 1]; - IF Broj[j] <= i THEN - Pom:= Mat[i - Broj[j], j - 1] + Broj[j]; - IF Pom > Mat[i, j] THEN - Mat[i, j]:= Pom; - END; - END; - END; - END; - END Resi; - - PROCEDURE IspisiPrvu; - VAR - i, j: CARDINAL; - BEGIN - WrStr('Zbir prve grupe brojeva je '); - WrCard(Mat[SumaPola, n], 1); - WrLn; - WrStr('Prvu grupu brojeva cine brojevi:'); - WrLn; - i:= SumaPola; - j:= n; - REPEAT - WHILE (j > 0) AND (Mat[i, j] = Mat[i, j - 1]) DO - DEC(j); - END; - IF j > 0 THEN - WrCard(Broj[j], 8); - Iskor[j]:= TRUE; - i:= i - Broj[j]; - DEC(j); - END; - UNTIL j = 0; - END IspisiPrvu; - - PROCEDURE IspisiDrugu; - VAR - i, j: CARDINAL; - BEGIN - WrLn; - WrStr('Zbir druge grupe brojeva je '); - WrCard(Suma - Mat[SumaPola, n], 1); - WrLn; - WrStr('Drugu grupu brojeva cine brojevi:'); - WrLn; - FOR i := 1 TO n DO - IF NOT Iskor[i] THEN - WrCard(Broj[i], 8); - END; - END; - END IspisiDrugu; - -BEGIN - Unos; - IF SumaPola > MaxSuma THEN - WrStr('Ulazni podaci su suvise veliki.'); - ELSE - Resi; - IspisiPrvu; - IspisiDrugu; - END; -END NBrojeva.