Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  1. MODULE ranac;
  2. FROM InOut IMPORT WriteString, WriteCard, WriteLn, ReadString;
  3. FROM FIO IMPORT File, Open, RdInt, Close, Exists;
  4. FROM Str IMPORT Length;
  5.  
  6. CONST
  7. MaxPredmeta=20;
  8. MaxKapacitet=100;
  9. TYPE
  10. niz=ARRAY [0..MaxPredmeta] OF CARDINAL;
  11. matrica=ARRAY[0..MaxPredmeta],[0..MaxKapacitet] OF CARDINAL;
  12. String = ARRAY [1..80] OF CHAR;
  13. VAR
  14. fn : String;
  15. Kapacitet,BrPredmeta,UkTezina,UkVrednost: CARDINAL;
  16. vrednosti,tezine,redosled: niz;
  17. ok: BOOLEAN;
  18.  
  19. PROCEDURE ruksak( vrednosti,tezine: niz;
  20. BrPredmeta,kapacitet: CARDINAL;
  21. VAR redosled: niz;
  22. VAR UkTezina,UkVrednost: CARDINAL;
  23. VAR ok: BOOLEAN );
  24.  
  25. VAR
  26. i,j,pom: CARDINAL;
  27. tabela: matrica;
  28. BEGIN
  29.  
  30. IF(0<kapacitet)&(kapacitet<=MaxKapacitet)&(0<BrPredmeta)&(BrPredmeta<=MaxPredmeta)THEN
  31. i:=1;
  32. WHILE(tezine[i]>0)&(0<vrednosti[i]) & (i<BrPredmeta) DO
  33. INC(i);
  34. END;
  35. ok := (tezine[i]>0)&(vrednosti[i]>0);
  36. ELSE
  37. ok := FALSE;
  38. END;
  39.  
  40. IF ok THEN
  41. FOR j:= 0 TO kapacitet DO
  42. tabela[0,j] := 0;
  43. END;
  44. FOR i := 0 TO BrPredmeta DO
  45. tabela[i,0] := 0;
  46. END;
  47. FOR i := 1 TO BrPredmeta DO
  48. FOR j := 1 TO kapacitet DO
  49. tabela[i,j] := tabela[i-1,j];
  50. IF j >= tezine[i] THEN
  51. pom := tabela[i-1,j-tezine[i]] + vrednosti[i];
  52. IF pom > tabela[i,j] THEN
  53. tabela[i,j] := pom;
  54. END;
  55. END;
  56. END;
  57. END;
  58.  
  59. UkTezina := 0;
  60. i := BrPredmeta;
  61. j := kapacitet;
  62. WHILE i > 0 DO
  63. IF tabela[i,j] # tabela[i-1,j] THEN
  64. redosled[i] := 1;
  65. UkTezina := UkTezina + tezine[i];
  66. j := j-tezine[i];
  67. ELSE
  68. redosled[i] := 0;
  69. END;
  70. DEC(i);
  71. END;
  72. UkVrednost := tabela[BrPredmeta, kapacitet];
  73. END;
  74. END ruksak;
  75.  
  76. PROCEDURE ucitaj(fn:String; VAR granica, objekata: CARDINAL;
  77. VAR vrednosti, tezine : niz):BOOLEAN;
  78. VAR
  79. F: File;
  80. brojac:CARDINAL;
  81. BEGIN
  82. IF Exists(fn) THEN
  83. F:=Open(fn);
  84. granica:=RdInt(F);
  85. objekata:=RdInt(F);
  86. FOR brojac:=1 TO objekata DO
  87. vrednosti[brojac]:=RdInt(F);
  88. tezine[brojac]:=RdInt(F);
  89. END;
  90. Close(F);
  91. RETURN TRUE;
  92. ELSE
  93. RETURN FALSE;
  94. END;
  95. END ucitaj;
  96.  
  97. PROCEDURE IspisiRedosled(red:niz;BrPredmeta:INTEGER);
  98. VAR
  99. brojac: INTEGER;
  100. BEGIN
  101. WriteString("Redni brojevi: ");WriteLn;
  102. FOR brojac:=1 TO BrPredmeta DO
  103. IF red[brojac]=1 THEN
  104. WriteCard(brojac,2);
  105. WriteLn;
  106. END;
  107. END;
  108. END IspisiRedosled;
  109.  
  110. BEGIN
  111. WriteString("unesite ime fajla:");
  112. WriteLn;
  113. ReadString(fn);
  114.  
  115. IF Length(fn) = 0 THEN
  116. fn := "r1.txt";
  117. END;
  118. IF ucitaj(fn,Kapacitet,BrPredmeta,vrednosti,tezine) THEN
  119. UkTezina:=0;
  120. UkVrednost:=0;
  121. ruksak(vrednosti,tezine,BrPredmeta,Kapacitet,redosled,UkTezina,UkVrednost,ok);
  122. IF ok THEN
  123. IspisiRedosled(redosled,BrPredmeta);
  124. WriteLn;
  125. WriteString("Ukupna vrednost je: ");
  126. WriteCard(UkVrednost,4);
  127. WriteLn;
  128. WriteString("Ukupna zauzece kapaciteta je ");
  129. WriteCard(UkTezina,4);
  130. WriteLn;
  131. ELSE
  132. WriteString("greska u podacima");
  133. WriteLn;
  134. END;
  135. ELSE
  136. WriteString("Neuspesno ucitavanje iz fajla");
  137. WriteLn;
  138. END;
  139. END ranac.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement