Posted By

dbabic on 12/02/11


Tagged

U Zaprimanje pacijenata ordinaciji


Versions (?)

Zadatak 3


 / Published in: C++
 

Zaprimanje po redoslijedu ili prioritetu

  1. //implementacija pomocu pokazivaca
  2.  
  3. #include <cstdlib>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. struct tpacijent{
  8. int br, x, y;
  9. int p;
  10. };
  11.  
  12. struct que{
  13. tpacijent pacijenti;
  14. que *sljedeci;
  15. };
  16.  
  17. struct qu{
  18. que *front, *rear;
  19. };
  20.  
  21. tpacijent FrontQ(qu *Q){
  22. return (Q->front->sljedeci->pacijenti);
  23. };
  24.  
  25. void EnQueueQ(tpacijent x,qu *Q){
  26. que *pom;
  27. pom=new que;
  28. pom->pacijenti=x;
  29. pom->sljedeci=NULL;
  30. Q->rear->sljedeci=pom;
  31. Q->rear=pom;
  32. };
  33.  
  34. void DeQueueQ(qu *Q){
  35. que *pom;
  36. pom=Q->front;
  37. Q->front=Q->front->sljedeci;
  38. free(pom);
  39. };
  40.  
  41.  
  42. void InitQ(qu *Q){
  43. Q->front=(que*)malloc(sizeof(que));
  44. Q->front->sljedeci=NULL;
  45. Q->rear=Q->front;
  46. };
  47.  
  48. bool IsEmptyQ(qu *Q){
  49. if(Q->front==Q->rear) return true;
  50. else return false;
  51. };
  52.  
  53.  
  54. //implementacija pomocu polja
  55.  
  56. #include <cstdlib>
  57. #include <iostream>
  58. using namespace std;
  59.  
  60. struct tpacijent{
  61. int br, x, y;
  62. int p;
  63. };
  64.  
  65. struct qu{
  66. tpacijent pacijenti[10000];
  67. int front, rear;
  68. };
  69.  
  70. int AddOne(int i){
  71. return ((i+1)%10000);
  72. };
  73.  
  74. tpacijent FrontQ(qu *Q){
  75. return (Q->pacijenti[Q->front]);
  76. };
  77.  
  78.  
  79.  
  80. void EnQueueQ(tpacijent x, qu *Q){
  81. if(AddOne(AddOne(Q->rear))==(Q->front)) cout<<"Red je pun.";
  82. else {
  83. Q->rear=AddOne(Q->rear);
  84. Q->pacijenti[Q->rear]=x;
  85. }
  86. };
  87.  
  88. void DeQueueQ(qu *Q){
  89. Q->front=AddOne(Q->front);
  90. };
  91.  
  92. void InitQ(qu *Q){
  93. Q->front=0;
  94. Q->rear=9999;
  95. };
  96.  
  97. bool IsEmptyQ(qu *Q){
  98. if(AddOne(Q->rear)==Q->front) return true;
  99. else return false;
  100. };
  101.  
  102.  
  103. #include <cstdlib>
  104. #include <iostream>
  105. #include <ctime>
  106. #include "red_pok.h"
  107. //#include "red_polje.h"
  108. using namespace std;
  109.  
  110. clock_t v1,v2;
  111. double pocetak(){
  112. v1=clock();
  113. return v1;
  114. };
  115. double kraj(){
  116. v2=clock();
  117. return v2;
  118. };
  119. double proteklo(){
  120. return v2-v1;
  121. };
  122.  
  123. int n;
  124. void generiranje(qu *pacijenti){
  125. srand(time(0));
  126.  
  127. cout<<"Koliko parova zelite generirati? (1-10000)"<<endl;
  128. cin>>n;
  129. tpacijent par;
  130. for(int i=0;i<n;i++){
  131. par.br=i+1;
  132. par.x=(rand()%10000)+1;
  133. par.y=(rand()%10000)+1;
  134. par.p=(rand()%4)+1;
  135. EnQueueQ(par,pacijenti);
  136. }
  137. }
  138.  
  139. void drugi(qu *pacijenti){
  140. pocetak();
  141. tpacijent tekuci;
  142. if(IsEmptyQ(pacijenti)){
  143. cout<<"Red je prazan"<<endl;
  144. }
  145. for(int i=0;i<n;i++){
  146. tekuci=FrontQ(pacijenti);
  147. DeQueueQ(pacijenti);
  148. cout<<"---------------------------"<<endl;
  149. cout<<"Redni broj pacijenta: "<<tekuci.br<<endl;
  150. cout<<"Cekanje na red: "<<tekuci.x<<endl;
  151. cout<<"Vrijeme u ordinaciji: "<<tekuci.y<<endl;
  152. cout<<"Prioritet: "<<tekuci.p<<endl;
  153. EnQueueQ(tekuci,pacijenti);
  154. }
  155. kraj();
  156. cout<<"Vrijeme trajanja programa(u stotinkama sekunde): "<<proteklo()/100<<endl;
  157. }
  158.  
  159.  
  160. void prioritet(qu *pacijenti){
  161. pocetak();
  162. tpacijent polje[10000];
  163. int brojac=0;
  164. while(!IsEmptyQ(pacijenti)){
  165. polje[brojac]=FrontQ(pacijenti);
  166. brojac++;
  167. DeQueueQ(pacijenti);
  168. }
  169.  
  170. bool zamjena=true;
  171. for(int i=n-1;i>0&&zamjena; i--){
  172. zamjena=false;
  173. for(int j=0;j<i;j++){
  174. if(polje[j].p>polje[j+1].p){
  175. tpacijent pom=polje[j];
  176. polje[j]=polje[j+1];
  177. polje[j+1]=pom;
  178. zamjena=true;
  179. }
  180. if(polje[j].p==polje[j+1].p){
  181. if(polje[j].x<polje[j+1].x){
  182. tpacijent pom=polje[j];
  183. polje[j]=polje[j+1];
  184. polje[j+1]=pom;
  185. zamjena=true;
  186. }
  187. }
  188. }
  189. }
  190.  
  191. for(int i=0;i<n;i++) {
  192. EnQueueQ(polje[i],pacijenti);
  193. }
  194. tpacijent tekuci;
  195. if(IsEmptyQ(pacijenti)){
  196. cout<<"Red je prazan"<<endl;
  197. }
  198. for(int i=0;i<n;i++){
  199. tekuci=FrontQ(pacijenti);
  200. DeQueueQ(pacijenti);
  201. cout<<"---------------------------"<<endl;
  202. cout<<"Redni broj pacijenta: "<<tekuci.br<<endl;
  203. cout<<"Cekanje na red: "<<tekuci.x<<endl;
  204. cout<<"Vrijeme u ordinaciji: "<<tekuci.y<<endl;
  205. cout<<"Prioritet: "<<tekuci.p<<endl;
  206. }
  207.  
  208. kraj();
  209. cout<<"Vrijeme trajanja programa(u stotinkama sekunde): "<<proteklo()/100<<endl;
  210. }
  211.  
  212. int main()
  213. {
  214. int izbor;
  215. qu *pacijenti;
  216. pacijenti=new qu;
  217. InitQ(pacijenti);
  218. do{
  219. cout<<"-------------IZBORNIK-------------- "<<endl;
  220. cout<<"1. Generiranje."<<endl;
  221. cout<<"2. Zaprimanje pacijenata prema redoslijedu dolaska."<<endl;
  222. cout<<"3. Zaprimanje pacijenata prema prioritetu."<<endl;
  223. cout<<"0. Kraj programa."<<endl;
  224. cin>>izbor;
  225. switch(izbor){
  226. case 1:
  227. generiranje(pacijenti);
  228. break;
  229. case 2:
  230. drugi(pacijenti);
  231. break;
  232. case 3:
  233. prioritet(pacijenti);
  234. break;
  235. default:
  236. break;
  237. }
  238. }while(izbor!=0);
  239. system("PAUSE");
  240. return 0;
  241. }

Report this snippet  

You need to login to post a comment.