Guest User

Untitled

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