Advertisement
jolemaster

Untitled

Mar 9th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.77 KB | None | 0 0
  1. program dz1p1;
  2. type rowyourboat=array[1..20] of pointer;
  3. matrica=record
  4. r,c:rowyourboat;
  5. m,n,v:integer;
  6. end;
  7. skup=set of 1..8;
  8. pointer=^element;
  9. element=record
  10. row,col,val:integer;
  11. down:pointer;
  12. right:pointer;
  13. end;
  14. var matrix,matrix1,matrix3:matrica;
  15. a:integer;
  16. s:skup;
  17. procedure insert(var mat:matrica; var i,j,k:integer);
  18. var p,q,mem:pointer;
  19. begin
  20. new(mem);
  21. mem^.row:=i;
  22. mem^.col:=j;
  23. mem^.val:=k;
  24. mem^.right:=nil;
  25. mem^.down:=nil;
  26. if mat.r[i]=nil then mat.r[i]:=mem
  27. else
  28. begin
  29. p:=mat.r[i];
  30. q:=nil;
  31. while (p<>nil) and (mem^.col>p^.col) do
  32. begin
  33. q:=p;
  34. p:=p^.right;
  35. end;
  36. mem^.right:=p;
  37. if q=nil then mat.r[i]:=mem else q^.right:=mem;
  38. end;
  39. if mat.c[j]=nil then mat.c[j]:=mem
  40. else
  41. begin
  42. p:=mat.c[j];
  43. q:=nil;
  44. while (p<>nil) and (mem^.row>p^.row) do
  45. begin
  46. q:=p;
  47. p:=p^.down;
  48. end;
  49. mem^.down:=p;
  50. if q=nil then mat.c[j]:=mem else q^.down:=mem;
  51. end;
  52. end;
  53. function get(var mat:matrica; var i,j:integer):integer;
  54. var p:pointer;
  55. begin
  56. if (0<i)and(i<=mat.m)and(0<j)and(j<=mat.n) then
  57. begin
  58. if mat.r[i]=nil then get:=mat.v else
  59. if mat.c[j]=nil then get:=mat.v else
  60. begin
  61. p:=mat.r[i];
  62. while p^.right<>nil do if p^.col<j then p:=p^.right else break;
  63. if p^.col=j then get:=p^.val
  64. else get:=mat.v;
  65. end;
  66. end
  67. else write('Pogresan unos koordinata!');
  68. end;
  69.  
  70. procedure unos(var mat:matrica );
  71. var i,j,k:integer;
  72. begin
  73. writeln('Unesite broj redova matrice: ');
  74. readln(mat.m);
  75. writeln('Unesite broj kolona matrice: ');
  76. readln(mat.n);
  77. for i:=1 to mat.m do
  78. mat.r[i]:=nil;
  79. for i:=1 to mat.n do
  80. mat.c[i]:=nil;
  81. writeln('Unesite koordinate i vrednosti elemenata.');
  82. writeln('Prva koordinata elementa:');
  83. readln(i);
  84. writeln('Druga koordinata elementa:');
  85. readln(j);
  86. while (i>0)and(j>0)and(i<=mat.m)and(j<=mat.n) do
  87. begin
  88. writeln('Vrednost elementa:');
  89. readln(k);
  90. insert(mat,i,j,k);
  91. writeln('Ponovo unesite prvu koordinatu:');
  92. readln(i);
  93. writeln('Ponovo unesite drugu koordinatu:');
  94. readln(j);
  95. end;
  96. end;
  97. procedure def(var mat:matrica);
  98. begin
  99. writeln('Unesite novu podrazumevanu vrednost elemenata:');
  100. readln(mat.v);
  101. end;
  102. procedure ispis(var mat:matrica);
  103. var p:pointer;
  104. i,j:integer;
  105. begin
  106. for i:=1 to mat.m do
  107. begin
  108. p:=mat.r[i];
  109. j:=0;
  110. while (j<mat.n) do
  111. begin
  112. if p=nil then
  113. begin
  114. write(mat.v,' ');
  115. j:=j+1;
  116. if j=mat.n then writeln();
  117. end
  118. else
  119. if p^.col=j+1 then
  120. begin
  121. write(p^.val,' ');
  122. j:=j+1;
  123. if j=mat.n then writeln();
  124. if p<>nil then p:=p^.right;
  125. end
  126. else
  127. begin
  128. write(mat.v,' ');
  129. j:=j+1;
  130. if j=mat.n then writeln();
  131. end;
  132. end;
  133. end;
  134. end;
  135. procedure dohvati(var mat:matrica);
  136. var i,j:integer;
  137. begin
  138. writeln('Unesite prvu koordinatu trazenog elementa:');
  139. readln(i);
  140. writeln('Unesite drugu koordinatu trazenog elementa:');
  141. readln(j);
  142. writeln('Na trazenom mestu nalazi se element ',get(mat,i,j),'.');
  143. end;
  144. procedure howmany(var mat:matrica);
  145. var a,i:integer;
  146. p:pointer;
  147. begin
  148. a:=0;
  149. for i:=1 to mat.m do
  150. begin
  151. p:=mat.r[i];
  152. if p<>nil then
  153. while p<>nil do
  154. begin
  155. if p^.val<>mat.v then a:=a+1;
  156. p:=p^.right;
  157. end;
  158. end;
  159. writeln('Broj nepodrazumevanih elemenata je ',a,'.');
  160. end;
  161.  
  162. procedure promeni(var mat:matrica);
  163. var i,j,k:integer;
  164. p:pointer;
  165. begin
  166. writeln('Unesite prvu koordinatu elementa koji menjate:');
  167. readln(i);
  168. writeln('Unesite drugu koordinatu elementa koji menjate:');
  169. readln(j);
  170. if (0<i)and(i<=mat.m)and(0<j)and(j<=mat.n) then
  171. begin
  172. if mat.r[i]=nil then insert(mat,i,j,k)
  173. else
  174. if mat.c[j]=nil then insert(mat,i,j,k)
  175. else
  176. begin
  177. p:=mat.r[i];
  178. if p^.col>j then insert(mat,i,j,k)
  179. else begin
  180. while p^.right<>nil do if p^.col<j then p:=p^.right else break;
  181. if p^.col<>j then insert(mat,i,j,k)
  182. else
  183. begin
  184. writeln('Unesite novu vrednost za ovaj element:');
  185. readln(p^.val);
  186. end;
  187. end;
  188. end;
  189. end else write('Loลก odabir koordinata!');
  190. end;
  191. procedure form(var mat,mat1,mat2:matrica);
  192. var i,j,k:integer;
  193. begin
  194. unos(mat);
  195. unos(mat1);
  196. if (mat.m<>mat1.m) or (mat.n<> mat1.n) then write('Nije moguce sabrati matrice razlicitog formata!')
  197. else
  198. mat2.m:=mat.m;
  199. mat2.n:=mat.n;
  200. for i:=1 to mat2.m do
  201. mat2.r[i]:=nil;
  202. for j:=1 to mat2.n do
  203. mat2.c[j]:=nil;
  204. begin
  205. i:=1;
  206. while i<=mat.m do
  207. begin
  208. j:=1;
  209. while j<=mat.n do
  210. begin
  211. k:= get(mat,i,j)+get(mat1,i,j);
  212. insert(mat2,i,j,k);
  213. j:=j+1;
  214. end;
  215. i:=i+1;
  216. end;
  217. ispis(mat2);
  218. end;
  219. end;
  220. procedure brisanje(var mat:matrica);
  221. var p,q:pointer;
  222. i:integer;
  223. begin
  224. for i:=1 to mat.m do
  225. begin
  226. p:=mat.r[i];
  227. while p<>nil do
  228. begin
  229. q:=p^.right;
  230. dispose(p);
  231. p:=q;
  232. end;
  233. end;
  234.  
  235. for i:=1 to mat.n do
  236. mat.c[i]:=nil;
  237. end;
  238. begin
  239. s:=[1,2,3,4,5,6,7,8];
  240. writeln('Odaberite neku od sledecih funkcija:');
  241. writeln(' 1. stvaranje matrice ;');
  242. writeln(' 2. postavljanje podrazumevane vrednosti ;');
  243. writeln(' 3. dohvatanje elementa ;');
  244. writeln(' 4. menjanje elementa ;');
  245. writeln(' 5. dohvatanje broja nepodrazumevanih elemenata ;');
  246. writeln(' 6. ispis matrice ;');
  247. writeln(' 7. brisanje matrice ;');
  248. writeln(' 8. saberi dve matrice ;');
  249. writeln();
  250. read(a);
  251. while a in s do
  252. begin
  253. case a of
  254. 1: unos(matrix);
  255. 2: def(matrix);
  256. 3: dohvati(matrix);
  257. 4: promeni(matrix);
  258. 5: howmany(matrix);
  259. 6: ispis(matrix);
  260. 7: brisanje(matrix);
  261. 8: form(matrix,matrix1,matrix3);
  262. end;
  263. writeln('Ponovo odaberite:');
  264. read(a);
  265. end;
  266. writeln('Greska!');
  267. readln;
  268. readln
  269. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement