Posted By


tlapas on 12/03/11

Tagged


Statistics


Viewed 505 times
Favorited by 0 user(s)

RED - glavni program


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

Glavni program koji simulira ordinacijsku čekaonicu


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

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.