Simulacija reda liječničke ordinacije


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

3. zadatak: simulacija reda liječničke ordinacije, strukture podataka.


Copy this code and paste it in your HTML
  1. #include <iostream>
  2. #include <ctime>
  3. //#include "red_pokazivac.h"
  4. #include "red_polje.h"
  5. using namespace std;
  6.  
  7. int broj_pacijenata = 0;
  8. tpacijent *p_pacijent, *r_pacijent;
  9. bool sim = false;
  10.  
  11. void generiranje () {
  12. int n;
  13. do {
  14. cout << "\nKoliko parova slucajnih brojeva zelite generirati? ";
  15. cin >> n;
  16. if (n<1) cout << "Greska! Unesli ste krivi broj!\n";
  17. } while(n<1);
  18. broj_pacijenata += n;
  19. p_pacijent = new tpacijent [n];
  20. r_pacijent = new tpacijent [n];
  21. for (int i=0; i<broj_pacijenata; i++) {
  22. r_pacijent[i].Xi = rand()%10000+1;
  23. r_pacijent[i].Yi = rand()%10000+1;
  24. r_pacijent[i].P = rand()%4+1;
  25. }
  26. cout << "\nZapisi su uspjesno izgenerirani i dodani u polje.\n";
  27. }
  28.  
  29. int provjera_zapisa (int P, int broj) {
  30. if (broj == 0)
  31. return -1;
  32. int br = -1;
  33. for (int i=0; i<broj; i++) {
  34. if (FrontQ(red).P > P && br<0) br = i;
  35. EnQueueQ(FrontQ(red),red);
  36. DeQueueQ(red);
  37. }
  38. if (br >= 0) return br;
  39. else return -1;
  40. }
  41.  
  42. void cekanje (int sec) {
  43. clock_t kraj;
  44. kraj = clock() + sec*CLOCKS_PER_SEC;
  45. while (clock() < kraj) {}
  46. }
  47.  
  48. clock_t vrijeme_pocetak, vrijeme_kraj;
  49.  
  50. void simulacija (bool prioritet) {
  51. for (int i=0; i<broj_pacijenata; i++)
  52. p_pacijent[i] = r_pacijent[i];
  53. vrijeme_pocetak = clock();
  54. if (broj_pacijenata == 0) {
  55. cout << "\nPolje je prazno, koristite mogucnost 1.\n";
  56. sim = false;
  57. return;
  58. }
  59. char p_prioritet[4][50] = {"kriticni slucaj", "rizicni slucaj", "slucaj niskog rizika", "nije hitan slucaj"};
  60. tpacijent pacijent;
  61. int i=0, broj=0, br_zap;
  62. cout << endl;
  63. cout << "Simulacija:\n";
  64. while (i<broj_pacijenata || !IsEmptyQ(red)) {
  65. cout << "-------------------------------------------------------------------------------\n";
  66. if (i == 0) {
  67. pacijent = p_pacijent[i];
  68. i++;
  69. cout << "Prvi pacijent je usao u ordinaciju. Tamo ce provesti " << pacijent.Yi << " vremenskih jedinica.\n";
  70. if (prioritet) cout << "Njegov prioritet je " << p_prioritet[pacijent.P-1] << ".\n";
  71. cekanje(1);
  72. }
  73. else if (i < broj_pacijenata) {
  74. if (pacijent.Yi > p_pacijent[i].Xi) {
  75. pacijent.Yi -= p_pacijent[i].Xi;
  76. cout << "U cekaonicu je usao novi pacijent.";
  77. if (!prioritet) EnQueueQ(p_pacijent[i], red);
  78. else {
  79. cout << " Njegov prioritet je: " << p_prioritet[p_pacijent[i].P-1] << ".\n";
  80. br_zap = provjera_zapisa(p_pacijent[i].P, broj);
  81. if (br_zap >= 0) {
  82. provjera_zapisa (5, br_zap);
  83. EnQueueQ(p_pacijent[i], red);
  84. provjera_zapisa(5, broj-br_zap);
  85. if (br_zap)
  86. cout << "Pacijent je preskocio " << broj - br_zap << " pacijenta/pacijenata u redu jer ima veci prioritet.\n";
  87. else
  88. cout << "Pacijent je dosao na celo reda jer ima najveci prioritet.\n";
  89. cekanje(1);
  90. }
  91. else EnQueueQ(p_pacijent[i], red);
  92. }
  93. i++;
  94. broj++;
  95. cout << "U cekaonici je trenutno " << broj << " pacijenata.\n";
  96. cout << "Pacijent u ordinaciji ce se tamo zadrzati: " << pacijent.Yi << " vremenskih jedinica.\n";
  97. cekanje(1);
  98. }
  99. else if (pacijent.Yi < p_pacijent[i].Xi) {
  100. p_pacijent[i].Xi -= pacijent.Yi;
  101. if (IsEmptyQ(red)) {
  102. pacijent = p_pacijent[i];
  103. i++;
  104. }
  105. else {
  106. pacijent = FrontQ(red);
  107. DeQueueQ(red);
  108. broj--;
  109. }
  110. cout << "U ordinaciju je usao novi pacijent. Tamo ce provesti: " << pacijent.Yi << " vremenskih jedinica.\n";
  111. if (prioritet) cout << "Njegov prioritet je: " << p_prioritet[pacijent.P-1] << ".\n";
  112. cout << "U cekaonici je trenutno " << broj << " pacijent/pacijenata.\n";
  113. cekanje(1);
  114. }
  115. else {
  116. cout << "U cekaonicu je usao novi pacijent.\n";
  117. if (!prioritet) EnQueueQ(p_pacijent[i], red);
  118. else {
  119. cout << " Njegov prioritet je: " << p_prioritet[p_pacijent[i].P-1] << ".\n";
  120. br_zap = provjera_zapisa(p_pacijent[i].P, broj);
  121. if (br_zap >= 0) {
  122. provjera_zapisa(5, br_zap);
  123. EnQueueQ(p_pacijent[i], red);
  124. provjera_zapisa(5, broj - br_zap);
  125. if (br_zap)
  126. cout << "Pacijent je preskocio " << broj - br_zap << " pacijenta/pacijenata u redu jer ima veci prioritet.\n";
  127. else
  128. cout << "Pacijent je dosao na celo reda jer ima najveci prioritet.\n";
  129. }
  130. else EnQueueQ(p_pacijent[i], red);
  131. }
  132. i++;
  133. pacijent = FrontQ(red);
  134. DeQueueQ(red);
  135. cout << "U ordinaciju je usao novi pacijent. Tamo ce provesti: " << pacijent.Yi << " vremenskih jedinica.\n";
  136. if (prioritet) cout << "Njegov prioritet je: " << p_prioritet[pacijent.P-1] << ".\n";
  137. cout << "U cekaonici je trenutno " << broj << " pacijent/pacijenata.\n";
  138. cekanje(1);
  139. }
  140. }
  141. else {
  142. pacijent = FrontQ(red);
  143. DeQueueQ(red);
  144. cout << "U ordinaciju je usao novi pacijent. Tamo ce provesti: " << pacijent.Yi << " vremenskih jedinica.\n";
  145. broj--;
  146. if (prioritet) cout << "Njegov prioritet je: " << p_prioritet[pacijent.P-1] << ".\n";
  147. cout << "U cekaonici je trenutno " << broj << " pacijent/pacijenata.\n";
  148. }
  149. }
  150. vrijeme_kraj = clock();
  151. broj_pacijenata = 0;
  152. sim = true;
  153. InitQ(red);
  154. }
  155. void vrijeme () {
  156. if (broj_pacijenata == 0 && !sim) {
  157. cout << "\nGreska! Niste pokrenuli simulaciju.\n";
  158. return;
  159. }
  160. cout << "\nZadnja simulacija je trajala " << ((float)vrijeme_kraj-vrijeme_pocetak)/1000 << " sec.\n";
  161. }
  162. int main () {
  163. int izbor;
  164. InitQ(red);
  165. srand(time(0));
  166. rand();
  167. do {
  168. cout << "Izbornik:\n";
  169. cout << "1. Generiranje niza od N parova slucajnih brojeva [1-10000]\n";
  170. cout << "2. Simulacija reda lijecnicke ordinacije [bez prioriteta]\n";
  171. cout << "3. Simulacija reda lijecnicke ordinacije [s prioritetom]\n";
  172. cout << "4. Izracun vremena trajanja simulacije\n";
  173. cout << "0. Izlaz iz programa\n";
  174. cout << "Vas izbor: ";
  175. cin >> izbor;
  176. switch (izbor) {
  177. case 1:
  178. generiranje();
  179. break;
  180. case 2:
  181. simulacija(0);
  182. break;
  183. case 3:
  184. simulacija(1);
  185. break;
  186. case 4:
  187. vrijeme();
  188. break;
  189. case 0:
  190. cout << endl;
  191. system("pause");
  192. return 0;
  193. }
  194. cout << endl;
  195. } while (1);
  196. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.