Guest User

Untitled

a guest
Apr 24th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE FinalTest;
  2. FROM InOut IMPORT WriteString, ReadString, WriteLn, WriteInt;
  3. FROM FIO IMPORT File, Open, Close, RdInt, Exists;
  4.  
  5. CONST
  6.   MaxPredmeta = 20;
  7.   MaxKapacitet = 100;
  8.  
  9. TYPE
  10.   niz = ARRAY [0..MaxPredmeta] OF INTEGER;
  11.   matrica = ARRAY [0..MaxPredmeta],[0..MaxKapacitet] OF INTEGER;
  12.   String = ARRAY [1..100] OF CHAR;
  13.  
  14. VAR
  15.   vrednost,tezina,izabrani: niz;
  16.   kapacitet, brojpredmeta, ukupnatezina, ukupnavrednost: INTEGER;
  17.   ok: BOOLEAN;
  18.  
  19. PROCEDURE Ucitaj(VAR vrednost, tezina: niz; VAR kapacitet, brojpredmeta: INTEGER; VAR ok: BOOLEAN);
  20. VAR
  21.   i:INTEGER;
  22.   f:File;
  23.   ime:String;
  24. BEGIN
  25.   REPEAT
  26.     WriteString('Unesite ime fajla: ');
  27.     WriteLn;
  28.     ReadString(ime);
  29.   UNTIL Exists(ime);
  30.   ok:=TRUE;
  31.   f:=Open(ime);
  32.   kapacitet:=RdInt(f);
  33.   IF (kapacitet <= 0) OR (kapacitet > MaxKapacitet) THEN
  34.     ok:=FALSE;
  35.   END;
  36.   brojpredmeta:=RdInt(f);
  37.   IF (brojpredmeta <=0) OR (brojpredmeta > MaxPredmeta) THEN
  38.     ok:=FALSE;
  39.   END;
  40.   IF ok THEN
  41.     FOR i:=1 TO brojpredmeta DO
  42.       vrednost[i]:= RdInt(f);
  43.       tezina[i]:= RdInt(f);
  44.       IF (vrednost[i]<=0) OR (tezina[i]<=0) THEN
  45.         ok:=FALSE;
  46.       END;
  47.     END;
  48.   END;
  49.   Close(f);
  50. END Ucitaj;
  51.  
  52. PROCEDURE Stampaj(ukupnavrednost, ukupnatezina, brojpredmeta: INTEGER; izabrani: niz);
  53. VAR
  54.   i:INTEGER;
  55. BEGIN
  56.   WriteString('Ukupna vrednost je: ');
  57.   WriteInt(ukupnavrednost,0);
  58.   WriteLn;
  59.   WriteString('Ukupna tezina je: ');
  60.   WriteInt(ukupnatezina,0);
  61.   WriteLn;
  62.   WriteString('Redni brojevi izabranih predmeta su: ');
  63.   WriteLn;
  64.   FOR i:=1 TO brojpredmeta DO
  65.     IF izabrani[i] = 1 THEN
  66.       WriteInt(i,0);
  67.       WriteLn;
  68.     END;
  69.   END;
  70. END Stampaj;
  71.  
  72. PROCEDURE Ranac(vrednost, tezina: niz; brojpredmeta, kapacitet: INTEGER;
  73.                 VAR izabrani: niz; VAR ukupnavrednost, ukupnatezina: INTEGER);
  74. VAR
  75.   i,j,pom:INTEGER;
  76.   op:matrica;
  77. BEGIN
  78.   FOR j:=0 TO kapacitet DO
  79.     op[0,j]:=0;
  80.   END;
  81.   FOR i:=0 TO brojpredmeta DO
  82.     op[i,0]:=0;
  83.   END;
  84.   FOR i:=1 TO brojpredmeta DO
  85.     FOR j:=1 TO kapacitet DO
  86.       op[i,j]:= op[i-1,j];
  87.       IF j>=tezina[i] THEN
  88.         pom:= op[i-1,j-tezina[i]] + vrednost[i];
  89.         IF pom > op[i,j] THEN
  90.       op[i,j]:= pom;
  91.     END;
  92.       END;
  93.     END;
  94.   END;
  95.   ukupnatezina:=0;
  96.   i:=brojpredmeta;
  97.   j:=kapacitet;
  98.   WHILE i>0 DO
  99.     IF op[i,j] # op[i-1,j] THEN
  100.       izabrani[i]:= 1;
  101.       ukupnatezina:= ukupnatezina + tezina[i];
  102.       j:=j-tezina[i];
  103.     ELSE
  104.       izabrani[i]:= 0;
  105.     END;
  106.     DEC(i);
  107.   END;
  108.   ukupnavrednost:=op[brojpredmeta,kapacitet];
  109. END Ranac;
  110.  
  111. BEGIN
  112.   Ucitaj(vrednost, tezina, kapacitet, brojpredmeta, ok);
  113.   IF ok THEN
  114.     Ranac(vrednost, tezina, brojpredmeta, kapacitet, izabrani, ukupnavrednost, ukupnatezina);
  115.     Stampaj(ukupnavrednost, ukupnatezina, brojpredmeta, izabrani);
  116.   ELSE
  117.     WriteString('GRESKA: Brojevi u fajlu nisu u dozvoljenim opsezima!');
  118.   END;
  119.  
  120. END FinalTest.
Add Comment
Please, Sign In to add comment