Zadatak 3, Strukture podataka


/ Published in: C++
Save to your folder(s)

Programsko rješenje za zadatak 3 iz kolegija Strukture podataka.


Copy this code and paste it in your HTML
  1. --Biblioteka red_polje.h--
  2.  
  3. struct osoba {
  4. int a, x, y;
  5. };
  6. struct qu {
  7. osoba el[10000];
  8. int front, rear;
  9. };
  10. qu red;
  11.  
  12. int AddOne (int n) {
  13. return ((n+1)%10000);
  14. }
  15. osoba FrontQ (qu red) {
  16. return red.el[red.front];
  17. }
  18. void EnQueueQ (osoba x, qu &red) {
  19. red.rear=AddOne(red.rear);
  20. red.el[red.rear]=x;
  21. }
  22. void DeQueueQ (qu &red) {
  23. red.front=AddOne(red.front);
  24. }
  25. bool IsEmptyQ (qu red) {
  26. if (AddOne(red.rear)==red.front) return true;
  27. return false;
  28. }
  29. void InitQ (qu &red) {
  30. red.front=0;
  31. red.rear=9999;
  32. }
  33.  
  34.  
  35.  
  36. --Biblioteka red_pokazivac.h--
  37.  
  38.  
  39. struct osoba {
  40. int a, x, y;
  41. };
  42. struct qu {
  43. osoba el;
  44. qu *next;
  45. };
  46. struct que {
  47. qu *front, *rear;
  48. };
  49. que red;
  50.  
  51. osoba FrontQ (que red) {
  52. return ((red.front)->next)->el;;
  53. }
  54. void EnQueueQ (osoba x, que &red) {
  55. qu *novi=new qu;
  56. novi->el=x;
  57. novi->next=NULL;
  58. (red.rear)->next=novi;
  59. red.rear=novi;
  60. }
  61. void DeQueueQ (que &red) {
  62. qu *brisi=red.front;
  63. red.front=(red.front)->next;
  64. delete brisi;
  65. }
  66. bool IsEmptyQ (que red) {
  67. if (red.rear==red.front) return true;
  68. return false;
  69. }
  70. void InitQ (que &red) {
  71. qu *novi=new qu;
  72. novi->next=NULL;
  73. red.rear=novi;
  74. red.front=novi;
  75. }
  76.  
  77.  
  78.  
  79. --Programsko rje������¡enje--
  80.  
  81.  
  82. #include <iostream>
  83. #include <ctime>
  84. #include "red_pokazivac.h"
  85. using namespace std;
  86. osoba polje[1000], gpolje[1000];
  87. int broj=0;
  88. clock_t vrijeme1, vrijeme2;
  89. void gen () {
  90. cout << "\nUnesite broj generirajucih parova: ";
  91. do cin >> broj; while (broj<1 || broj>10000);
  92. osoba b;
  93. for (int i=0; i<broj; i++) {
  94. b.a=rand()%4+1;
  95. b.x=rand()%10000+1;
  96. b.y=rand()%10000+1;
  97. gpolje[i]=b;
  98. }
  99. cout << "\nZapisi su uspjesno dodani u polje.\n";
  100. system ("pause");
  101. }
  102. int provjera (int a, int br) {
  103. if (!br) return -1;
  104. int broj=-1;
  105. for (int i=0; i<br; i++) {
  106. if (FrontQ(red).a>a && broj<0) broj=i;
  107. EnQueueQ(FrontQ(red), red);
  108. DeQueueQ(red);
  109. }
  110. if (broj>=0) return broj;
  111. return -1;
  112. }
  113. void sim (bool w) {
  114. for (int i=0; i<broj; i++) polje[i]=gpolje[i];
  115. vrijeme1=clock();
  116. if (!broj) {
  117. cout << "\nPolje je prazno!\n";
  118. system ("pause");
  119. return;
  120. }
  121. int a=0, br=0, mjesto;
  122. osoba ord;
  123. cout << endl;
  124. while (a<broj || !IsEmptyQ(red)) {
  125. if (!a) {
  126. ord=polje[a];
  127. a++;
  128. cout << "Prva osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena.";
  129. if (w) cout << "\nNjezin prioritet je " << ord.a << ".";
  130. }
  131. else if (a<broj) {
  132. if (ord.y>polje[a].x) {
  133. ord.y-=polje[a].x;
  134. cout << "Nova osoba je usla u cekaonicu.";
  135. if (!w) EnQueueQ(polje[a], red);
  136. else {
  137. cout << " Njezin prioritet je " << polje[a].a << ".";
  138. mjesto=provjera(polje[a].a, br);
  139. if (mjesto>=0) {
  140. provjera(5, mjesto);
  141. EnQueueQ(polje[a], red);
  142. provjera(5, br-mjesto);
  143. if (mjesto) cout << "\nOsoba je preskocila " << br-mjesto << " osoba/e u redu jer ima veci prioritet.";
  144. else cout << "\nOsoba je dosla na celo reda jer ima najveci prioritet.";
  145. }
  146. else EnQueueQ(polje[a], red);
  147. }
  148. br++;
  149. a++;
  150. cout << "\nU cekaonici je trenutno " << br << " osoba.";
  151. cout << "\nOsoba u ordinaciji ce biti tamo jos " << ord.y << " jedinica vremena.";
  152. }
  153. else if (ord.y<polje[a].x) {
  154. polje[a].x-=ord.y;
  155. if (IsEmptyQ(red)) {
  156. ord=polje[a];
  157. a++;
  158. }
  159. else {
  160. ord=FrontQ(red);
  161. DeQueueQ(red);
  162. br--;
  163. }
  164. cout << "Nova osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena.";
  165. if (w) cout << "\nNjezin prioritet je " << ord.a << ".";
  166. cout << "\nU cekaonici je trenutno " << br << " osoba.";
  167. }
  168. else {
  169. cout << "Nova osoba je usla u cekaonicu.";
  170. if (!w) EnQueueQ(polje[a], red);
  171. else {
  172. cout << " Njezin prioritet je " << polje[a].a << ".";
  173. mjesto=provjera(polje[a].a, br);
  174. if (mjesto>=0) {
  175. provjera(5, mjesto);
  176. EnQueueQ(polje[a], red);
  177. provjera(5, br-mjesto);
  178. if (mjesto) cout << "\nOsoba je preskocila " << br-mjesto << " osoba/e u redu jer ima veci prioritet.";
  179. else cout << "\nOsoba je dosla na celo reda jer ima najveci prioritet.";
  180. }
  181. else EnQueueQ(polje[a], red);
  182. }
  183. a++;
  184. ord=FrontQ(red);
  185. DeQueueQ(red);
  186. cout << "\nNova osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena.";
  187. if (w) cout << "\nNjezin prioritet je " << ord.a << ".";
  188. cout << "\nU cekaonici je trenutno " << br << " osoba.";
  189. }
  190. }
  191. else {
  192. ord=FrontQ(red);
  193. DeQueueQ(red);
  194. cout << "Nova osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena.";
  195. br--;
  196. if (w) cout << "\nNjezin prioritet je " << ord.a << ".";
  197. cout << "\nU cekaonici je trenutno " << br << " osoba.";
  198. }
  199. cout << "\n\n------------------\n";
  200. system ("pause");
  201. cout << "------------------\n\n";
  202. }
  203. vrijeme2=clock();
  204. cout << "-*-Simulacija je gotova.-*-\n";
  205. system ("pause");
  206. }
  207. void vrijeme () {
  208. cout << "\nZadnja simulacija je trajala " << (float)(vrijeme2-vrijeme1)/1000 << " sekundi.\n";
  209. system ("pause");
  210. }
  211. int main () {
  212. InitQ(red);
  213. int a;
  214. srand(time(0));
  215. rand();
  216. do {
  217. system ("cls");
  218. cout << "1. Generiranje niza parova\n";
  219. cout << "2. Simulacija cekaonice ordinacije\n";
  220. cout << "3. Simulacija cekaonice ordinacije sa prioritetom\n";
  221. cout << "4. Ispis vremena trajanja zadnje simulacije\n";
  222. cout << "0. Izlaz iz programa\n";
  223. cout << "Unesite izbor: ";
  224. do cin >> a; while (a<0 || a>4);
  225. switch (a) {
  226. case 1: gen(); break;
  227. case 2: sim(false); break;
  228. case 3: sim(true); break;
  229. case 4: vrijeme();
  230. }
  231. } while (a);
  232. return 0;
  233. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.