Posted By

mavukusic9 on 12/03/11


Tagged

c++ ordinacija


Versions (?)

Strukture podataka (program koji simulira rad liječničke ordinacije)


 / Published in: C++
 

Rad liječničke ordinacije

  1. //red_polje.h
  2. struct pacijent {
  3. int prior, x, y;
  4. };
  5. struct qu {
  6. pacijent el[10000];
  7. int front, rear;
  8. };
  9. qu red;
  10. int AddOne (int mjesto) {
  11. return ((mjesto+1)%10000);
  12. }
  13. pacijent FrontQ (qu red_atp) {
  14. return red_atp.el[red_atp.front];
  15. }
  16. void EnQueueQ (pacijent pac, qu &red_atp) {
  17. red_atp.rear=AddOne(red_atp.rear);
  18. red_atp.el[red_atp.rear]=pac;
  19. }
  20. void DeQueueQ (qu &red_atp) {
  21. red_atp.front=AddOne(red_atp.front);
  22. }
  23. bool IsEmptyQ (qu red_atp) {
  24. if (AddOne(red_atp.rear)==red_atp.front) return true;
  25. return false;
  26. }
  27. void InitQ (qu &red_atp) {
  28. red_atp.front=0;
  29. red_atp.rear=9999;
  30. }
  31.  
  32.  
  33. //red_pokazivac.h
  34. struct pacijent {
  35. int prior, x, y;
  36. };
  37. struct qu {
  38. pacijent el;
  39. qu *next;
  40. };
  41. struct que {
  42. qu *front, *rear;
  43. };
  44. que red;
  45. pacijent FrontQ (que red_atp) {
  46. return ((red_atp.front)->next)->el;;
  47. }
  48. void EnQueueQ (pacijent pac, que &red_atp) {
  49. qu *novi=new qu;
  50. novi->el=pac;
  51. novi->next=NULL;
  52. (red_atp.rear)->next=novi;
  53. red_atp.rear=novi;
  54. }
  55. void DeQueueQ (que &red_atp) {
  56. qu *brisi=red_atp.front;
  57. red_atp.front=(red_atp.front)->next;
  58. delete brisi;
  59. }
  60. bool IsEmptyQ (que red_atp) {
  61. if (red_atp.rear==red_atp.front) return true;
  62. return false;
  63. }
  64. void InitQ (que &red_atp) {
  65. qu *novi=new qu;
  66. novi->next=NULL;
  67. red.rear=novi;
  68. red.front=novi;
  69. }
  70.  
  71.  
  72. //main program
  73. #include <iostream>
  74. #include <ctime>
  75. #include "red_pokazivac.h"
  76. //#include "red_polje.h"
  77. using namespace std;
  78. pacijent pacijenti[10000];
  79. int broj=0;
  80. clock_t vrij_poc, vrij_kraj;
  81. void generiraj () {
  82. cout << "\nUnesite broj generiranja: ";
  83. do cin >> broj; while (broj<1 || broj>10000);
  84. pacijent pac;
  85. for (int i=0; i<broj; i++) {
  86. pac.prior=rand()%4+1;
  87. pac.x=rand()%10000+1;
  88. pac.y=rand()%10000+1;
  89. pacijenti[i]=pac;
  90. }
  91. cout<<"-----------------------------"<<endl;
  92.  
  93. cout << "\nZapisi su uspjesno zapisani.\n";
  94. cout<<"-----------------------------"<<endl;
  95. system ("pause");
  96. }
  97. int provjera (int a, int br) {
  98. if (!br) return -1;
  99. int broj=-1;
  100. for (int i=0; i<br; i++) {
  101. if (FrontQ(red).prior>a && broj<0) broj=i;
  102. EnQueueQ(FrontQ(red), red);
  103. DeQueueQ(red);
  104. }
  105. if (broj>=0) return broj;
  106. return -1;
  107. }
  108. void simulacija1 (bool w) {
  109. vrij_poc=clock();
  110. if (!broj) {
  111. cout<<"-----------------------------"<<endl;
  112. cout << "\nPolje je prazno!"<<endl;
  113. cout<<"-----------------------------"<<endl;
  114. system ("pause");
  115. return;
  116. }
  117. int a=0, brojac=0, mjesto;
  118. pacijent pct;
  119. cout << endl;
  120. while (a<broj || !IsEmptyQ(red)) {
  121. if (!a) {
  122. pct=pacijenti[a];
  123. a++;
  124. cout<<"-----------------------------"<<endl;
  125. cout << "Prvi pacijent je u ordinaciji. Tamo ce biti " << pct.y << " vremena.\n";
  126. if (w) cout << "\nOn ima prioritet broj " << pct.prior << ".";
  127. cout<<"-----------------------------"<<endl;}
  128.  
  129. else if (a<broj) {
  130. if (pct.y>pacijenti[a].x) {
  131. pct.y-=pacijenti[a].x;
  132. cout << "Novi pacijent je u cekaonici.\n";
  133. if (!w) EnQueueQ(pacijenti[a], red);
  134. else {
  135. cout << " On ima prioritet broj " << pacijenti[a].prior << ".\n";
  136. mjesto=provjera(pacijenti[a].prior, brojac);
  137. if (mjesto>=0) {
  138. provjera(5, mjesto);
  139. EnQueueQ(pacijenti[a], red);
  140. provjera(5, brojac-mjesto);
  141. if (mjesto) cout << "\nPacijent je preskocio " << brojac-mjesto << " pacijenta u redu zbog veceg prioriteta.\n";
  142. else cout << "\npacijent je dosao na celo reda zbog najveceg prioriteta.\n";}
  143. else EnQueueQ(pacijenti[a], red);
  144. }
  145. brojac++;
  146. a++;
  147. cout<<"-----------------------------"<<endl;
  148. cout << "\nU cekaonici su/je " << brojac << " pacijenta.";
  149. cout << "\nPacijent ce biti u ordinaciji jos " << pct.y << " jedinica vremena.\n";
  150. cout<<"-----------------------------"<<endl;
  151. }
  152. else if (pct.y<pacijenti[a].x) {
  153. pacijenti[a].x-=pct.y;
  154. if (IsEmptyQ(red)) {
  155. pct=pacijenti[a];
  156. a++;}
  157. else {
  158. pct=FrontQ(red);
  159. DeQueueQ(red);
  160. brojac--;}
  161. cout << "Novi pacijent je usao u ordinaciju. Tamo ce biti " << pct.y << " vremena.\n";
  162. if (w) cout << "\nOn ima prioritet broj " << pct.prior << ".";
  163. cout << "\nU cekaonici su/je: " << brojac << " pacijenta.\n";}
  164. else {
  165. cout << "Novi pacijent je usao u cekaonicu.\n";
  166. if (!w) EnQueueQ(pacijenti[a], red);
  167. else {
  168. cout << " On ima prioritet: " << pacijenti[a].prior << ".\n";
  169. mjesto=provjera(pacijenti[a].prior, brojac);
  170. if (mjesto>=0) {
  171. provjera(5, mjesto);
  172. EnQueueQ(pacijenti[a], red);
  173. provjera(5, brojac-mjesto);
  174. if (mjesto) cout << "\nPacijent je preskocio " << brojac-mjesto << " pacijenta u redu zbog veceg prioriteta.\n";
  175. else cout << "\nPacijent je dosao na celo reda zbog najveceg prioriteta.\n";}
  176. else EnQueueQ(pacijenti[a], red);}
  177. a++;
  178. pct=FrontQ(red);
  179. DeQueueQ(red);
  180. cout << "\nNovi pacijent je usao u ordinaciju. Tamo ce biti " << pct.y << " vremena.\n";
  181. if (w) cout << "\nOn ima prioritet broj: " << pct.prior << ".\n";
  182. cout << "\nU cekaonici je:" << brojac << " osoba.\n";
  183. }
  184. }
  185. else {
  186. pct=FrontQ(red);
  187. DeQueueQ(red);
  188. cout << "Novi pacijent je usao u ordinaciju. Tamo ce biti: " << pct.y << " vremena.\n";
  189. brojac--;
  190. if (w) cout << "\nOn ima prioritet broj: " << pct.prior << ".\n";
  191. cout << "\nU cekaonici su/je: " << brojac << " pacijenta.\n";
  192. }
  193. cout << "\n\n-----------------------------\n";
  194. system ("pause");
  195. cout << "-----------------------------\n\n";
  196. }
  197. vrij_kraj=clock();
  198. cout<<"-----------------------------"<<endl;
  199. cout << "Zavrsena simulacija.\n";
  200. cout<<"-----------------------------"<<endl;
  201. system ("pause");}
  202. void potr_vrij () {
  203. cout<<"-----------------------------"<<endl;
  204. cout << "\nPosljednja simulacija je trajala " << (float)(vrij_kraj-vrij_poc)/1000 << " sekundi."<<endl;
  205. cout<<"-----------------------------"<<endl;
  206. system ("pause");
  207. }
  208. int main () {
  209. InitQ(red);
  210. int izbor;
  211. srand(time(0));
  212. rand();
  213. do {
  214.  
  215. system ("cls");
  216.  
  217. cout << "1. Generiranje parova"<<endl<<endl;
  218. cout << "2. Simuliranje cekaonice "<<endl<<endl;
  219. cout << "3. Simuliranje cekaonice sa prioritetom"<<endl<<endl;
  220. cout << "4. Vrijeme trajanja zadnje simulacije"<<endl<<endl;
  221. cout << "0. Izlaz"<<endl<<endl;
  222. cout << "Vas izbor: ";
  223. do cin >> izbor; while (izbor<0 || izbor>4);
  224. switch (izbor) {
  225. case 1: {
  226. generiraj(); break;
  227. }
  228. case 2: {
  229. simulacija1(false); break;
  230. }
  231. case 3: {
  232. simulacija1(true); break;
  233. }
  234. case 4: {
  235. potr_vrij();
  236. }
  237. }
  238. } while (izbor);
  239. return 0;
  240. }

Report this snippet  

You need to login to post a comment.