Posted By

tnovosel on 12/03/11


Tagged

red Strukture simulacija ordinacija


Versions (?)

main.cpp


 / Published in: C++
 

Glavni dio programa simulacije lijecnicke ordinacije

  1. #include<iostream>
  2. #include<ctime>
  3. #include<windows.h>
  4. #include<winbase.h>
  5.  
  6. using namespace std;
  7.  
  8. struct tpacijent {
  9. int x;
  10. int y;
  11. int rizik;
  12. };
  13.  
  14. #include "red_polje.h"
  15.  
  16.  
  17.  
  18. int N, br=0;
  19.  
  20.  
  21.  
  22.  
  23. tpacijent* generiranje() {
  24. cout << "Koliko parova brojeva zelite generirati: ";
  25. cin >> N;
  26. cout << endl;
  27. tpacijent *pacijent = new tpacijent[N];
  28. for (int i=0;i<N;i++) {
  29. cout << "Generiram " << i+1 << ". par brojeva" << endl;
  30. pacijent[i].x = rand()%10000+1;
  31. pacijent[i].y = rand()%10000+1;
  32. }
  33. return pacijent;
  34. };
  35.  
  36.  
  37.  
  38.  
  39. void ispis(red* Q, int izbor) {
  40. tpacijent pom;
  41. cout << endl;
  42. for (int i=0; i<br; i++) {
  43. pom = FrontQ(Q);
  44. DeQueueQ(Q);
  45. cout << "\t" << i+1 << ". pacijent u redu-------------------------" << endl
  46. << "\t" << "Dosao je " << pom.x /1000.0 << " sekundi nakon prethodnoga " << endl
  47. << "\t" << "Treba " << pom.y /1000.0 << " sekundi u ordinaciji " << endl;
  48. if (izbor == 1)
  49. cout << "\t" << "Razina rizika " << pom.rizik << endl;
  50. EnQueueQ(pom,Q);
  51. }
  52. cout << endl;
  53. }
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60. void posluzi(red* Q, tpacijent pacijent[]) {
  61. int vrijeme_pocetak, vrijeme_kraj;
  62. tpacijent ordinacija;
  63. int ukupno = N;
  64. br = 0;
  65.  
  66. vrijeme_pocetak = time(NULL);
  67.  
  68. EnQueueQ(pacijent[0],Q); br++;
  69.  
  70. for (int i=0;i<N;i++) {
  71. ordinacija = FrontQ(Q);
  72. DeQueueQ(Q); br--;
  73. ukupno--;
  74. cout << i+1 << ". pacijent ulazi u ordinaciju na " << ordinacija.y/1000.0 << " sekundi" << endl;
  75. Sleep(ordinacija.y);
  76. int sat=0;
  77. for (int j=i+1+br;j<N;j++) {
  78. sat = sat + pacijent[j].x;
  79. if(sat < ordinacija.y) {
  80. cout << "Novi pacijent je dosao u meduvremenu" << endl;
  81. EnQueueQ(pacijent[j],Q);
  82. br++;
  83. }
  84. else break;
  85. }
  86. cout << i+1 << ". pacijent izlazi iz ordinacije" << endl;
  87. cout << "Stanje reda: ";
  88.  
  89. if (IsEmptyQ(Q)) {
  90. cout << "Cekaonica je trenutno prazna" << endl << endl;
  91. if (ukupno == 0) {
  92. vrijeme_kraj = time(NULL);
  93. cout << "Proteklo vrijeme = " << vrijeme_kraj - vrijeme_pocetak << endl;
  94. return;
  95. }
  96. int razlika = pacijent[i+1].x - ordinacija.y;
  97. Sleep(razlika);
  98. EnQueueQ(pacijent[i+1],Q);
  99. br++;
  100. }
  101. else ispis(Q,0);
  102. }
  103. }
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110. void prioritet(tpacijent pacijent[]) {
  111. for (int i=0;i<N;i++) {
  112. cout << "Generiram prioritet " << i+1 << ". pacijentu" << endl;
  113. pacijent[i].rizik = rand()%4+1;
  114. }
  115. cout << endl;
  116. };
  117.  
  118.  
  119.  
  120.  
  121. void preslozi (red *Q, int rizik) {
  122. red* P = InitQ(P);
  123. tpacijent pom;
  124.  
  125. for (int i=0; i<br; i++) {
  126. pom = FrontQ(Q);
  127. DeQueueQ(Q);
  128. if(pom.rizik == rizik)
  129. EnQueueQ(pom,Q);
  130. else
  131. EnQueueQ(pom,P);
  132. }
  133.  
  134. while(!IsEmptyQ(P)){
  135. pom = FrontQ(P);
  136. DeQueueQ(P);
  137. EnQueueQ(pom,Q);
  138. }
  139. };
  140.  
  141.  
  142.  
  143.  
  144. void posluzi2(red* Q, tpacijent pacijent[]) {
  145. int vrijeme_pocetak, vrijeme_kraj;
  146. tpacijent ordinacija, ceka;
  147. int ukupno = N;
  148. br = 0;
  149.  
  150. vrijeme_pocetak = time(NULL);
  151.  
  152. EnQueueQ(pacijent[0],Q); br++;
  153.  
  154. for (int i=0;i<N;i++) {
  155. ordinacija = FrontQ(Q);
  156. DeQueueQ(Q); br--;
  157. ukupno--;
  158. cout << i+1 << ". pacijent ulazi u ordinaciju na " << ordinacija.y/1000.0 << " sekundi" << endl;
  159. Sleep(ordinacija.y);
  160. int sat=0;
  161. for (int j=i+1+br;j<N;j++) {
  162. sat = sat + pacijent[j].x;
  163. if(sat < ordinacija.y) {
  164. cout << "Novi pacijent je dosao u meduvremenu" << endl;
  165. EnQueueQ(pacijent[j],Q);
  166. br++;
  167. preslozi(Q,1);
  168. preslozi(Q,2);
  169. preslozi(Q,3);
  170. preslozi(Q,4);
  171. }
  172. else break;
  173. }
  174. cout << i+1 << ". pacijent izlazi iz ordinacije" << endl;
  175. cout << "Stanje reda: ";
  176.  
  177. if (IsEmptyQ(Q)) {
  178. cout << "Cekaonica je trenutno prazna" << endl << endl;
  179. if (ukupno == 0) {
  180. vrijeme_kraj = time(NULL);
  181. cout << "Proteklo vrijeme = " << vrijeme_kraj - vrijeme_pocetak << endl;
  182. return;
  183. }
  184. int razlika = pacijent[i+1].x - ordinacija.y;
  185. Sleep(razlika);
  186. EnQueueQ(pacijent[i+1],Q);
  187. br++;
  188. preslozi(Q,1);
  189. preslozi(Q,2);
  190. preslozi(Q,3);
  191. preslozi(Q,4);
  192. }
  193. else ispis(Q,1);
  194. }
  195. }
  196.  
  197.  
  198.  
  199. int main () {
  200. int izbor, broj_klijenata=0, umanji;
  201. tpacijent *pacijent;
  202. red* Q = InitQ(Q);
  203.  
  204. do {
  205. cout<<endl;
  206. cout<< "#################### IZBORNIK ####################" << endl;
  207. cout<< "1. Generiranje polja" << endl;
  208. cout<< "2. Tretiranje parova kao pacijenata" << endl;
  209. cout<< "3. Pridruzivanje prioriteta" << endl;
  210. cout<< "9. Izlaz" << endl;
  211. cout<< "Vas izbor: ";
  212.  
  213. cin >> izbor;
  214. cout << endl;
  215. switch (izbor) {
  216.  
  217. case 1:
  218. pacijent = generiranje();
  219. cout << endl;
  220. break;
  221.  
  222. case 2:
  223. posluzi(Q, pacijent);
  224. cout << endl;
  225. break;
  226.  
  227. case 3:
  228. prioritet(pacijent);
  229. posluzi2(Q, pacijent);
  230. cout << endl;
  231. break;
  232.  
  233. case 9:
  234. break;
  235. }
  236.  
  237. } while (izbor!=9);
  238. system("pause");
  239. return 0;
  240. }

Report this snippet  

You need to login to post a comment.