Posted By


dsitum1 on 12/03/11

Tagged


Statistics


Viewed 79 times
Favorited by 0 user(s)

programsko_rjesenje.cpp


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

Programsko rješenje 3. zadatka iz struktura - red


Copy this code and paste it in your HTML
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. //#include "red_polje.h"
  5. #include "red_pokazivac.h"
  6. using namespace std;
  7.  
  8. int vrijeme(tred *Q, int n) //vremena provedena u ordinaciji + eventualna cekanja kad nikog nema
  9. {
  10. tpacijent *R = new tpacijent [10000];
  11. tpacijent pacijent; //najprije kopirat postojeci red u novi, pa manipulirat s novim
  12. for (int i=0; i<n; i++)
  13. {
  14. pacijent = frontQ(Q);
  15. dequeueQ(Q);
  16. enqueueQ(pacijent, Q);
  17. R[n-i]=pacijent;
  18. }
  19.  
  20. int trajanje=0; //ukupno trajanje
  21. int vrijeme_prvog=0; //vrijeme osobe u ordinaciji
  22. int cekanje_da_dodju=0; //cekanje da netko dodje na red ako nikog nema
  23.  
  24. while (n)
  25. {
  26. vrijeme_prvog=R[n--].y;
  27. trajanje+=vrijeme_prvog;
  28.  
  29. while (vrijeme_prvog > cekanje_da_dodju && n)
  30. {
  31. trajanje+=R[n].y;
  32. cekanje_da_dodju+=R[n--].x;
  33. }
  34. trajanje+=cekanje_da_dodju-vrijeme_prvog; //visak vremena -> cekanje da neki pacijent dodje u kliniku kad nema nikog u redu
  35. cekanje_da_dodju=0;
  36. }
  37. delete [] R;
  38. return trajanje;
  39. }
  40.  
  41. void generiraj(tred *Q, int &n)
  42. {
  43. srand(time(0));
  44. cout << "Unesite broj parova koje zelite generirati: ";
  45. cin >> n;
  46. tpacijent pacijent;
  47. for (int i=0; i<n; i++)
  48. {
  49. pacijent.x=rand()%10000+1;
  50. pacijent.y=rand()%10000+1; //generiranje pacijenta i dodavanje na kraj reda
  51. pacijent.prioritet=rand()%4+1;
  52. enqueueQ(pacijent, Q);
  53. }
  54. }
  55.  
  56. void lijeci(tred *Q, int &n) //Obradjivanje pacijenata redom kojim su dosli
  57. {
  58. int ukupno_vrijeme=vrijeme(Q,n);
  59. tpacijent pacijent;
  60. while (!isemptyQ(Q))
  61. {
  62. cout << "Stanje reda:" << endl;
  63. for (int i=1; i<=n; i++)
  64. {
  65. pacijent = frontQ(Q);
  66. dequeueQ(Q);
  67. cout << "--------------" << endl;
  68. cout << "Pacijent: " << i << endl;
  69. cout << "Vrijeme dolaska: " << pacijent.x << endl;
  70. cout << "Vrijeme u ordinaciji: " << pacijent.y << endl;
  71. enqueueQ(pacijent, Q);
  72. }
  73. cout << "============================" << endl;
  74. cout << "Pacijent s pocetka reda odlazi u ordinaciju i izadje zdrav :)" << endl;
  75.  
  76. dequeueQ(Q);
  77. n--;
  78. }
  79. cout << "Svi pacijenti su obradjeni." << endl;
  80. cout << "Vrijeme trajanja lijecenja pacijenata: " << ukupno_vrijeme << endl;
  81. }
  82.  
  83. void lijeci2(tred *Q, int &n) //Obradjivanje pacijenata prioritetnim redom
  84. {
  85. int ukupno_vrijeme=vrijeme(Q,n);
  86. tpacijent pacijent;
  87. while (!isemptyQ(Q))
  88. {
  89. cout << "Stanje reda:" << endl; //ispis stanja reda
  90. for (int i=1; i<=n; i++)
  91. {
  92. pacijent = frontQ(Q);
  93. dequeueQ(Q);
  94. cout << "--------------" << endl;
  95. cout << "Pacijent: " << i << endl;
  96. cout << "Vrijeme dolaska: " << pacijent.x << endl;
  97. cout << "Vrijeme u ordinaciji: " << pacijent.y << endl;
  98. cout << "Prioritet: " << pacijent.prioritet << endl;
  99. enqueueQ(pacijent, Q);
  100. }
  101. cout << "============================" << endl;
  102.  
  103. cout << "Pacijent s pocetka reda odlazi u ordinaciju i izadje zdrav :)" << endl;
  104. tpacijent prvi;
  105. prvi = frontQ(Q);
  106. dequeueQ(Q);
  107. n--;
  108.  
  109. int zbroj_vremena_dolazaka=0;
  110. int broj_preko_reda=0;
  111. tpacijent *R = new tpacijent [10000];
  112. while (prvi.y > zbroj_vremena_dolazaka && broj_preko_reda<n)
  113. {
  114. pacijent = frontQ(Q);
  115. zbroj_vremena_dolazaka += pacijent.x;
  116. if (prvi.y > zbroj_vremena_dolazaka)
  117. {
  118. R[broj_preko_reda++] = pacijent;
  119. dequeueQ(Q);
  120. } else break;
  121. }
  122.  
  123. int i,j;
  124. for (i=1; i<broj_preko_reda; i++) //uzlazno sortiramo polje (insertion sort)
  125. {
  126. tpacijent pom = R[i];
  127. for (j=i-1; j>=0 && R[j].prioritet>pom.prioritet; j--)
  128. R[j+1]=R[j];
  129. R[j+1]=pom;
  130. }
  131.  
  132. for (i=0; i<broj_preko_reda; i++)
  133. enqueueQ(R[i], Q);
  134.  
  135. for (i=0; i<n-broj_preko_reda; i++) //hocemo da nam parovi s prioritetom dodju na celo reda pa sve kruzno pomaknemo za n-broj_preko_reda mjesta
  136. {
  137. pacijent = frontQ(Q);
  138. dequeueQ(Q);
  139. enqueueQ(pacijent, Q);
  140. }
  141.  
  142. if (broj_preko_reda>1)
  143. cout << "Dogodila se prioritetna promjena. Broj pacijenata koji su zamijenili pozicije: " << broj_preko_reda << endl;
  144. delete [] R;
  145. }
  146.  
  147.  
  148. cout << "Svi pacijenti su obradjeni." << endl;
  149. cout << "Vrijeme trajanja lijecenja pacijenata: " << ukupno_vrijeme << endl;
  150. }
  151.  
  152.  
  153. int main()
  154. {
  155. int izbor, n;
  156. tred *Q = initQ(Q);
  157. do
  158. {
  159. cout << "1. Generiranje brojeva" << endl;
  160. cout << "2. Pruzanje medicinske pomoci pacijentima" << endl;
  161. cout << "3. Pruzanje medicinske pomoci pacijentima (s prioritetom)" << endl;
  162. cout << "0. Izlaz iz programa" << endl;
  163. cout << "Odaberite mogucnost: ";
  164. cin >> izbor;
  165. switch (izbor)
  166. {
  167. case 1:
  168. generiraj(Q,n);
  169. break;
  170. case 2:
  171. lijeci(Q,n);
  172. break;
  173. case 3:
  174. lijeci2(Q,n);
  175. break;
  176. }
  177. } while (izbor);
  178. delete Q;
  179. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.