Posted By

mbasic03 on 12/01/11


Tagged

3 Strukture podataka foi zadatak


Versions (?)

main.cpp


 / Published in: C++
 

Main.cpp ->zadatak 3, kolegij Strukture Podataka, Fakultet Organizacije i Informatike Varazdin

  1. #include<iostream>
  2. #include<ctime>
  3. #include "red_polje.h"
  4. //#include "red_pokazivac.h"
  5. using namespace std;
  6. queue *red=new queue;
  7. queue *cekaonica=new queue;
  8.  
  9. tred el;
  10. int Nsum=0;
  11. int prvi() {
  12. int N=0;
  13. cout<<"Unesite broj N: ";
  14. cin>>N;
  15. Nsum+=N;
  16. srand(time(NULL));
  17. for (int i=0;i<N;i++) {
  18. el.x=rand()%10000+1;
  19. el.y=rand()%10000+1;
  20. EnQueueQ(el,red);
  21. }
  22. cout<<"Izgenerirano je "<<N<<" slucajnih brojeva!\n";
  23. return 0;
  24. }
  25. int VrijemeTrajanja(int v) {
  26. cout<<"Vrijeme trajanja: "<<v<<" sec\n";
  27. cout<<"Prosjecno cekanje pacijenta: "<<v/Nsum<<" sec\n";
  28. return 0;
  29. }
  30. void drugi() {
  31. int stanje_cekaonica=0, cekanje=0, BrPuo=0, vrijeme=0;
  32. bool PuOrdinaciji=false;
  33. int PomPolje[Nsum];
  34. if (IsEmptyQ(red)) {
  35. cout<<"Red je prazan!\n";
  36. return;
  37. }
  38. InitQ(cekaonica);
  39. for (int j=1;j<=Nsum;j++) {
  40. el=FrontQ(red);
  41. stanje_cekaonica++;
  42. DeQueueQ(red);
  43. el.prioritet=short(rand()%4+1);
  44. el.i=j;
  45. vrijeme+=el.x;
  46. PomPolje[j-1]=cekanje;
  47. cout<<"Pacijent br. "<<el.i<<" ulazi u kliniku...\n";
  48. cout<<"Prioritet: ";
  49. if (el.prioritet==1) cout<<"kriticni slucaj\n";
  50. else if (el.prioritet==2) cout<<"rizicni slucaj\n";
  51. else if (el.prioritet==3) cout<<"slucaj niskog rizika\n";
  52. else if (el.prioritet==4) cout<<"nije hitan slucaj\n";
  53. //pacijent je usao u kliniku i odredjen mu je prioritet
  54. if (stanje_cekaonica>1) { //usporedjujemo prioritete ako je stanje u cekaonici >1
  55. for (int z=1;z<stanje_cekaonica;z++) { //usporedba prioriteta novog pacijenta s prioritetom ostalih
  56. tred el2=FrontQ(cekaonica), pom;
  57. DeQueueQ(cekaonica);
  58. if (el.i==el2.i) continue;
  59. if (el2.prioritet<el.prioritet||(el2.prioritet==el.prioritet&&el2.i<el.i)) {
  60. pom=el2;
  61. el2=el;
  62. el=pom;
  63. }
  64. EnQueueQ(el2,cekaonica);
  65. }
  66. } //el je sada najprioritetniji pacijent
  67. if (el.i<1||el.i>Nsum) continue;
  68. if (!PuOrdinaciji) { //ako je ordinacija slobodna pacijent ulazi u nj
  69. if (el.i!=1) cout<<"Pacijent br. "<<BrPuo<<" izlazi iz ordinacije i napusta kliniku...\n";
  70. if (stanje_cekaonica>1) cout<<"Pacijent br. "<<el.i<<" je najprioritetniji slucaj u cekaonici!\n";
  71. int PacCeka=cekanje-PomPolje[el.i-1];
  72. if (PacCeka<0) PacCeka=0;
  73. cout<<"Pacijent br. "<<el.i<<" je cekao u redu: "<<PacCeka<<" sec\n";
  74. cout<<"Pacijent ulazi u ordinaciju...\n";
  75. BrPuo=el.i;
  76. if (stanje_cekaonica<=1) InitQ(cekaonica);
  77. cout<<"Stanje u cekaonici: "<<--stanje_cekaonica<<"\n\n";
  78. cekanje-=el.y;
  79. }
  80. else EnQueueQ(el,cekaonica); //ako ordinacija nije slobodna pacijent (el) se vraca u cekaonicu
  81. cekanje+=el.x;
  82. if (cekanje<0) cekanje=0;
  83. if (cekanje>el.y) PuOrdinaciji=false; //ako je vrijeme cekanje iduceg pacijenta vece od vremena u ordinaciji trenutnog pacijenta
  84. else {
  85. PuOrdinaciji=true;
  86. vrijeme+=(el.x-el.y);
  87. }
  88. }
  89. //vise ne ulaze pacijenti u cekaonicu, sada ispisujemo preostale u cekaonici
  90. //CEKAONICA:
  91. InitQ(red);
  92.  
  93. for (int j=0;j<stanje_cekaonica;) {
  94. el=FrontQ(cekaonica);
  95. DeQueueQ(cekaonica);
  96. if (stanje_cekaonica>1) { //usporedjujemo prioritete ako je stanje u cekaonici >1
  97. for (int z=1;z<stanje_cekaonica;z++) { //usporedba prioriteta novog pacijenta s prioritetom ostalih
  98. tred el2=FrontQ(cekaonica), pom;
  99. DeQueueQ(cekaonica);
  100. if (el.i==el2.i) continue;
  101. if (el2.prioritet<el.prioritet||(el2.prioritet==el.prioritet&&el2.i<el.i)) {
  102. pom=el2;
  103. el2=el;
  104. el=pom;
  105. }
  106. EnQueueQ(el2,cekaonica);
  107. }
  108. } //el je sada najprioritetniji pacijent
  109. if (el.i<1||el.i>Nsum)continue;
  110. if (stanje_cekaonica>1) {
  111. cout<<"Pacijent br. "<<BrPuo<<" izlazi iz ordinacije i napusta kliniku...\n";
  112. cout<<"Pacijent br. "<<el.i<<" je najprioritetniji slucaj u cekaonici!\n";
  113. }
  114. int PacCeka=cekanje-PomPolje[el.i-1];
  115. if (PacCeka<0) PacCeka=0;
  116. cout<<"Pacijent br. "<<el.i<<" je cekao u redu: "<<PacCeka<<" sec\n";
  117. cout<<"Pacijent ulazi u ordinaciju...\n";
  118. BrPuo=el.i;
  119. if (stanje_cekaonica<=1) InitQ(cekaonica);
  120. cout<<"Stanje u cekaonici: "<<--stanje_cekaonica<<"\n\n";
  121. cekanje+=el.x;
  122. vrijeme+=el.y;
  123. }
  124. cout<<"Pacijent br. "<<el.i<<" izlazi iz ordinacije i napusta kliniku...\n";
  125. VrijemeTrajanja(vrijeme);
  126. Nsum=0;
  127. }
  128. int main() {
  129. InitQ(red);
  130. int izbor=0;
  131. do {
  132. cout<<"\t\tIZBORNIK\n";
  133. cout<<"1. Generiranje N parova slucajnih brojeva\n";
  134. cout<<"2. Pacijenti u ordinaciji\n";
  135. cout<<"9. Izlaz iz programa\n";
  136. cin>>izbor;
  137. switch(izbor) {
  138. case 1: prvi(); break;
  139. case 2: drugi(); break;
  140. case 9: break;
  141. default: cout<<"Odabrana opcija ne postoji!\n";
  142. }
  143. }while(izbor!=9);
  144. return 0;
  145. }

Report this snippet  

You need to login to post a comment.