Posted By

lubanozic on 12/22/11


Tagged


Versions (?)

Main


 / Published in: C++
 

Glavni program

  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. #include "red_pokazivac.h"
  16.  
  17. int N, br=0;
  18.  
  19. tpacijent* generiranje() {
  20. cout << "Koliko pacijenata zelite generirati: ";
  21. cin >> N;
  22. cout << endl;
  23. tpacijent *pacijent = new tpacijent[N];
  24. for (int i=0;i<N;i++) {
  25. cout << "Generiranje " << i+1 << ". pacijenta..." << endl;
  26. pacijent[i].x = rand()%10000+1;
  27. pacijent[i].y = rand()%10000+1;
  28. }
  29. return pacijent;
  30. };
  31.  
  32. void prioritet(tpacijent pacijent[]) {
  33. for (int i=0;i<N;i++) {
  34. cout << "Generiram prioritet " << i+1 << ". pacijentu" << endl;
  35. pacijent[i].rizik = rand()%4+1;
  36. }
  37. cout << endl;
  38. };
  39.  
  40. void ispis(queue* Q, int izbor) {
  41. tpacijent pom;
  42. cout << endl;
  43. for (int i=0; i<br; i++) {
  44. pom = FrontQ(Q);
  45. DeQueueQ(Q);
  46. cout << "\t" << i+1 << ". u redu-------------------------" << endl
  47. << "\t" << "Dosao " << pom.x /1000.0 << " sekundi nakon prethodnoga " << endl
  48. << "\t" << "Treba " << pom.y /1000.0 << " sekundi u ordinaciji " << endl;
  49. if (izbor == 1)
  50. cout << "\t" << "Razina rizika: " << pom.rizik << endl;
  51. EnQueueQ(pom,Q);
  52. }
  53. cout << endl;
  54. }
  55.  
  56. void sekvencijalno(queue* Q, tpacijent pacijent[]) {
  57. int vrijeme_ulaz, vrijeme_izlaz;
  58. tpacijent ordinacija;
  59. int ukupno = N;
  60. br = 0;
  61.  
  62. vrijeme_ulaz = time(NULL);
  63.  
  64. EnQueueQ(pacijent[0],Q); br++;
  65.  
  66. for (int i=0;i<N;i++) {
  67. ordinacija = FrontQ(Q);
  68. DeQueueQ(Q); br--;
  69. ukupno--;
  70. cout << i+1 << ". pacijent ulazi u ordinaciju na " << ordinacija.y/1000.0 << " sekundi" << endl;
  71. Sleep(ordinacija.y);
  72. int sat=0;
  73. for (int j=i+1+br;j<N;j++) {
  74. sat = sat + pacijent[j].x;
  75. if(sat < ordinacija.y) {
  76. cout << "Novi pacijent je dosao u meduvremenu" << endl;
  77. EnQueueQ(pacijent[j],Q);
  78. br++;
  79. }
  80. else break;
  81. }
  82. cout << i+1 << ". pacijent izlazi iz ordinacije" << endl;
  83. cout << "Stanje reda: ";
  84.  
  85. if (IsEmptyQ(Q)) {
  86. cout << "Cekaonica je trenutno prazna" << endl << endl;
  87. if (ukupno == 0) {
  88. vrijeme_izlaz = time(NULL);
  89. cout << "Proteklo vrijeme = " << vrijeme_izlaz - vrijeme_ulaz << endl;
  90. return;
  91. }
  92. int razlika = pacijent[i+1].x - ordinacija.y;
  93. Sleep(razlika);
  94. EnQueueQ(pacijent[i+1],Q);
  95. br++;
  96. }
  97. else ispis(Q,0);
  98. }
  99. }
  100.  
  101. void preslozi (queue *Q, int rizik) {
  102. queue* P = InitQ(P);
  103. tpacijent pom;
  104.  
  105. for (int i=0; i<br; i++) {
  106. pom = FrontQ(Q);
  107. DeQueueQ(Q);
  108. if(pom.rizik == rizik)
  109. EnQueueQ(pom,Q);
  110. else
  111. EnQueueQ(pom,P);
  112. }
  113.  
  114. while(!IsEmptyQ(P)){
  115. pom = FrontQ(P);
  116. DeQueueQ(P);
  117. EnQueueQ(pom,Q);
  118. }
  119. };
  120.  
  121. void posluzi(queue* Q, tpacijent pacijent[]) {
  122. int vrijeme_ulaz, vrijeme_izlaz;
  123. tpacijent ordinacija, ceka;
  124. int ukupno = N;
  125. br = 0;
  126.  
  127. vrijeme_ulaz = time(NULL);
  128.  
  129. EnQueueQ(pacijent[0],Q); br++;
  130.  
  131. for (int i=0;i<N;i++) {
  132. ordinacija = FrontQ(Q);
  133. DeQueueQ(Q); br--;
  134. ukupno--;
  135. cout << i+1 << ". pacijent ulazi u ordinaciju na " << ordinacija.y/1000.0 << " sekundi" << endl;
  136. Sleep(ordinacija.y);
  137. int sat=0;
  138. for (int j=i+1+br;j<N;j++) {
  139. sat = sat + pacijent[j].x;
  140. if(sat < ordinacija.y) {
  141. cout << "Novi pacijent je dosao u meduvremenu" << endl;
  142. EnQueueQ(pacijent[j],Q);
  143. br++;
  144. preslozi(Q,1);
  145. preslozi(Q,2);
  146. preslozi(Q,3);
  147. preslozi(Q,4);
  148. }
  149. else break;
  150. }
  151. cout << i+1 << ". pacijent izlazi iz ordinacije" << endl;
  152. cout << "Stanje reda: ";
  153.  
  154. if (IsEmptyQ(Q)) {
  155. cout << "Cekaonica je trenutno prazna" << endl << endl;
  156. if (ukupno == 0) {
  157. vrijeme_izlaz = time(NULL);
  158. cout << "Proteklo vrijeme = " << vrijeme_izlaz - vrijeme_ulaz << endl;
  159. return;
  160. }
  161. int razlika = pacijent[i+1].x - ordinacija.y;
  162. Sleep(razlika);
  163. EnQueueQ(pacijent[i+1],Q);
  164. br++;
  165. preslozi(Q,1);
  166. preslozi(Q,2);
  167. preslozi(Q,3);
  168. preslozi(Q,4);
  169. }
  170. else ispis(Q,1);
  171. }
  172. }
  173.  
  174. int main () {
  175. int izbor, broj_klijenata=0, umanji;
  176. tpacijent *pacijent;
  177. queue* Q = InitQ(Q);
  178. do {
  179. cout << "Izbornik" << endl
  180. << "1. Generiranje polja" << endl
  181. << "2. Sekvencijalno posluzivanje" << endl
  182. << "3. Posluzi" << endl
  183. << "9. Izlaz" << endl
  184. << "Izbor: ";
  185. cin >> izbor;
  186. cout << endl;
  187. switch (izbor) {
  188.  
  189. case 1:
  190. pacijent = generiranje();
  191. cout << endl;
  192. break;
  193.  
  194. case 2:
  195. sekvencijalno(Q, pacijent);
  196. cout << endl;
  197. break;
  198.  
  199. case 3:
  200. prioritet(pacijent);
  201. posluzi(Q, pacijent);
  202. cout << endl;
  203. break;
  204.  
  205. case 9: break;
  206.  
  207. default: cout << "Krivi unos! " << endl << endl;
  208. }
  209. } while (izbor!=9);
  210. return 0;
  211. }

Report this snippet  

You need to login to post a comment.