Posted By

maretic_kristian on 12/03/11


Tagged

main izbornik funkcije simuliranja cekaonice


Versions (?)

Glavni_program.cpp


 / Published in: C++
 

URL: /

Glavni program koji koristi implementacije za rad nad redovima

  1. // Zadaca 3 - SP - Kristian Maretić
  2. // Program za rad nad redom - prikaz čekaonice u ordinaciji
  3.  
  4.  
  5. #include<iostream>
  6. #include<ctime>
  7. //#include "red_polje.h"
  8. #include "red_pokazivac.h"
  9. #define raspon 10000 // definiranje raspona slučajnih brojeva
  10.  
  11. using namespace std;
  12.  
  13.  
  14. red *r = new red; // inicijalizacija
  15. red *cekaonica = new red; // inicijalizacija reda čekaonica
  16.  
  17. pacijent red_el; // dekalracija elemenata koji se zapisuju u red (podaci o pacijentu - struktura implementacije)
  18. int suma = 0;
  19.  
  20. int Generiraje_slucajnih_br() // funkcija za generiranje slučajnih brojeva
  21. {
  22. int broj_parova = 0; // inicijalizacija i definiranje broja parova
  23. cout<<endl;
  24. cout<<"*****************************************"<<endl; // unos broja parova
  25. cout<<" Unesite broj parova slucajnih brojeva : ";
  26. cin>>broj_parova;
  27. cout<<"*****************************************"<<endl;
  28. suma+=broj_parova;
  29. srand(time(NULL)); // inicijalizacija generatora slučajnih brojeva
  30.  
  31. for (int i = 0 ; i < broj_parova;i++)
  32. {
  33. red_el.x = rand()% raspon; // generiranje prvog broja x- predstavlja vrijeme koje je proteklo od dolaska prethodnog pacijenta do dolaska pacijenta koji je trenutno u ordinaciji kod liječnika
  34. red_el.y=rand()% raspon; // generiranje drugog broja y - predstavlja vrijeme koje pacijent provede kod liječnika u ordinaciji
  35. EnQueueQ(red_el,r); // dodavanje novog elementa na začelje reda
  36. }
  37.  
  38. cout<<endl;
  39. cout<<"****************************************************"<<endl;
  40. cout<<" Uspjesno ste generirali parove slucjanih brojeva !!"<<endl;
  41. cout<<"****************************************************"<<endl;
  42. return 0;
  43. }
  44.  
  45.  
  46. int Vrijeme_izvrsavanja(int time) // funkcija za prikaz vremena izvršavanja
  47. {
  48. cout<<endl;
  49. cout<<"*****************************************"<<endl;
  50. cout<<" Vrijeme izvrsavanja programa: "<< time <<"sec"<<endl;
  51. cout<<"*****************************************"<<endl;
  52. cout<<" Prosjecno vrijeme cekanja pacijenta: "<< time/suma <<" sec"<<endl;
  53. cout<<"*****************************************"<<endl;
  54. return 0;
  55. }
  56.  
  57.  
  58. void Cekaonica_vrijeme()
  59. {
  60. int stanje_cekaonica=0, cekanje=0, br_pacijenta=0, vrijeme=0; // definiranje varijabli
  61.  
  62. bool zauzeto = false; // varijabla za provjeru zauzetosti ordinacije
  63. int pom_red[9999]; // definiranje pomočnog reda
  64.  
  65. if (IsEmptyQ(r))
  66. {
  67. cout<<endl;
  68. cout<<"******************************************"<<endl;
  69. cout<<" Red je prazan, niste izgenerirali brojeve"<<endl;
  70. cout<<"******************************************"<<endl;
  71. return;
  72. }
  73. InitQ(cekaonica); // inicijalizacija reda čekaonice
  74.  
  75. for (int j=1 ; j<=suma; j++)
  76. {
  77. red_el=FrontQ(r); // vrijednost elementa na čelu reda
  78. stanje_cekaonica++; // povećava se red čekaonice za svaki prolaz kroz petlju
  79. DeQueueQ(r); // brisanje elementa sa čela reda
  80. red_el.rb_pacijenta=j; // postavljanje rednog broja pacijenta unutar reda
  81. vrijeme+=red_el.x; // računanje vremena svakog elementa provedenog u čekaoni
  82. pom_red[j-1] = cekanje;
  83.  
  84. cout<<endl; // ispis elementa čela reda koji se izbacuje iz reda tj. sprema se u pomoćni red
  85. cout<<"*******************************************"<<endl;
  86. cout<<" Pacijent "<<red_el.rb_pacijenta<<" sa cela reda"<<endl;
  87. cout<<" ulazi u ordinaciju i napusta red"<<endl;
  88. cout<<"*******************************************"<<endl;
  89.  
  90. if (red_el.rb_pacijenta < 1 || red_el.rb_pacijenta > suma) continue;
  91. if (!zauzeto) //pacijent ulazi u ordinaciju ako je ordinacija slobodna
  92. {
  93. if (red_el.rb_pacijenta!=1)
  94. {
  95. cout<<endl;
  96. cout<<"*******************************************"<<endl;
  97. cout<<" Pacijent iz ordinacije"<<red_el.rb_pacijenta<<endl;
  98. cout<<" izlazi iz ordinacije i napusta red"<<endl;
  99. cout<<"*******************************************"<<endl;
  100. }
  101. if (stanje_cekaonica > 1)
  102. {
  103. cout<<endl;
  104. cout<<"*******************************************"<<endl;
  105. cout<<" Pacijent "<<red_el.rb_pacijenta<<endl;
  106. cout<<" je na celu reda za ordinaciju. "<<endl;
  107. cout<<"*******************************************"<<endl;
  108.  
  109. }
  110. int Vr_cekanja = cekanje-pom_red[red_el.rb_pacijenta-1];
  111. if (Vr_cekanja < 0)
  112. {
  113. Vr_cekanja=0;
  114. }
  115. cout<<endl;
  116. cout<<"*******************************************"<<endl;
  117. cout<<" Vrijeme cekanja pacijenta "<<red_el.rb_pacijenta<<endl;
  118. cout<<" je :"<<Vr_cekanja<<"sek"<<endl;
  119. cout<<"*******************************************"<<endl;
  120. br_pacijenta=red_el.rb_pacijenta;
  121. if (stanje_cekaonica <= 1)
  122. {
  123. InitQ(cekaonica);
  124. }
  125. cout<<endl;
  126. cout<<"*******************************************"<<endl;
  127. cout<<" Stanje u cekaonici je: "<<--stanje_cekaonica<<endl;
  128. cout<<"*******************************************"<<endl;
  129. cekanje-=red_el.y;
  130. }
  131. else //ako ordinacija nije slobodna pacijent ostaje u cekaonici
  132. {
  133. EnQueueQ(red_el,cekaonica);
  134. }
  135. cekanje+=red_el.x;
  136. if (cekanje<0)
  137. {
  138. cekanje=0;
  139. }
  140. if (cekanje>red_el.y)
  141. {
  142. zauzeto=false; //ako je vrijeme cekanje iduceg pacijenta vece od vremena u ordinaciji trenutnog pacijenta
  143. }
  144. else
  145. {
  146. zauzeto=true;
  147. vrijeme+=(red_el.x-red_el.y);
  148. }
  149. }
  150. // stanje u čekaonici nakon ulaska svih pacijenata
  151.  
  152. InitQ(r);
  153. for (int j=0; j < stanje_cekaonica; j++)
  154. {
  155. red_el=FrontQ(r);
  156. DeQueueQ(r);
  157.  
  158. if (stanje_cekaonica > 1)
  159. {
  160. cout<<endl;
  161. cout<<"*******************************************"<<endl;
  162. cout<<" Pacijent iz ordinacije"<<red_el.rb_pacijenta<<endl;
  163. cout<<" izlazi iz ordinacije i napusta red"<<endl;
  164. cout<<"*******************************************"<<endl;
  165. }
  166.  
  167. cout<<endl;
  168. cout<<"*******************************************"<<endl;
  169. cout<<" Vrijeme cekanja pacijenta "<<red_el.rb_pacijenta<<endl;
  170. cout<<" je :"<<vrijeme<<"sek"<<endl;
  171. cout<<"*******************************************"<<endl;
  172.  
  173. br_pacijenta=red_el.rb_pacijenta;
  174. if (stanje_cekaonica<=1) InitQ(cekaonica);
  175. cout<<endl;
  176. cout<<"*******************************************"<<endl;
  177. cout<<" Stanje u cekaonici je: "<<--stanje_cekaonica<<endl;
  178. cout<<"*******************************************"<<endl;
  179.  
  180. cekanje+=red_el.x;
  181. vrijeme+=red_el.y;
  182. cout<<endl;
  183. cout<<"*******************************************"<<endl;
  184. cout<<" Pacijent sa cela reda"<<red_el.rb_pacijenta<<endl;
  185. cout<<" ulazi u ordinaciju i napusta red"<<endl;
  186. cout<<"*******************************************"<<endl;
  187. Vrijeme_izvrsavanja(vrijeme);
  188. suma=0;
  189. }
  190. }
  191.  
  192. void Cekaonica_prioritet()
  193. {
  194. int stanje_cekaonica=0, cekanje=0, br_pacijenta=0, vrijeme=0; // definiranje varijabli
  195.  
  196. bool zauzeto = false; // varijabla za provjeru zauzetosti ordinacije
  197. int pom_red[9999]; // definiranje pomočnog reda
  198.  
  199. if (IsEmptyQ(r))
  200. {
  201. cout<<endl;
  202. cout<<"******************************************"<<endl;
  203. cout<<" Red je prazan, niste izgenerirali brojeve"<<endl;
  204. cout<<"******************************************"<<endl;
  205. return;
  206. }
  207. InitQ(cekaonica); // inicijalizacija reda čekaonice
  208.  
  209. for (int j=1 ; j<=suma; j++)
  210. {
  211. red_el=FrontQ(r); // vrijednost elementa na čelu reda
  212. stanje_cekaonica++; // povećava se red čekaonice za svaki prolaz kroz petlju
  213. DeQueueQ(r); // brisanje elementa sa čela reda
  214. red_el.prioritet=short(rand()%4+1);
  215. red_el.rb_pacijenta=j; // postavljanje rednog broja pacijenta unutar reda
  216. vrijeme+=red_el.x; // računanje vremena svakog elementa provedenog u čekaoni
  217. pom_red[j-1] = cekanje;
  218.  
  219. cout<<endl; // ispis elementa čela reda koji se izbacuje iz reda tj. sprema se u pomoćni red
  220. cout<<"*******************************************"<<endl;
  221. cout<<" Pacijent sa cela reda"<<red_el.rb_pacijenta<<endl;
  222. cout<<" ulazi u ordinaciju i napusta red"<<endl;
  223. cout<<"*******************************************"<<endl;
  224. cout<<endl;
  225. cout<<"*******************************************"<<endl;
  226. cout<<" Prioritet pacijenta u cekaonici: "<<endl;
  227. cout<<"*******************************************"<<endl;
  228. if (red_el.prioritet==1) cout<<"1 - Kriticni slucaj"<<endl;
  229. else if (red_el.prioritet==2) cout<<"2 - Rizicni slucaj"<<endl;
  230. else if (red_el.prioritet==3) cout<<"3 - Slucaj niskog rizika"<<endl;
  231. else if (red_el.prioritet==4) cout<<"4 - Nije hitan slucaj"<<endl;
  232. if (stanje_cekaonica > 1)
  233. {
  234. for (int z = 1; z < stanje_cekaonica;z++)
  235. {
  236. pacijent red_el_prioritet=FrontQ(cekaonica), pom;
  237. DeQueueQ(cekaonica);
  238. if (red_el.rb_pacijenta==red_el_prioritet.rb_pacijenta) continue;
  239. if (red_el_prioritet.prioritet<red_el.prioritet||(red_el_prioritet.prioritet==red_el.prioritet&&red_el_prioritet.rb_pacijenta<red_el.rb_pacijenta))
  240. {
  241. pom=red_el_prioritet;
  242. red_el_prioritet=red_el;
  243. red_el=pom;
  244. }
  245. EnQueueQ(red_el_prioritet,cekaonica);
  246. }
  247. }
  248. if (red_el.rb_pacijenta < 1 || red_el.rb_pacijenta > suma) continue;
  249. if (!zauzeto) //pacijent ulazi u ordinaciju ako je ordinacija slobodna
  250. {
  251. if (red_el.rb_pacijenta!=1)
  252. {
  253. cout<<endl;
  254. cout<<"*******************************************"<<endl;
  255. cout<<" Pacijent iz ordinacije"<<red_el.rb_pacijenta<<endl;
  256. cout<<" izlazi iz ordinacije i napusta red"<<endl;
  257. cout<<"*******************************************"<<endl;
  258. }
  259. if (stanje_cekaonica > 1)
  260. {
  261. cout<<endl;
  262. cout<<"*******************************************"<<endl;
  263. cout<<" Pacijent "<<red_el.rb_pacijenta<<endl;
  264. cout<<" je na celu reda za ordinaciju. "<<endl;
  265. cout<<"*******************************************"<<endl;
  266.  
  267. }
  268. int Vr_cekanja = cekanje-pom_red[red_el.rb_pacijenta-1];
  269. if (Vr_cekanja < 0)
  270. {
  271. Vr_cekanja=0;
  272. }
  273. cout<<endl;
  274. cout<<"*******************************************"<<endl;
  275. cout<<" Vrijeme cekanja pacijenta "<<red_el.rb_pacijenta<<endl;
  276. cout<<" je :"<<Vr_cekanja<<"sek"<<endl;
  277. cout<<"*******************************************"<<endl;
  278. br_pacijenta=red_el.rb_pacijenta;
  279.  
  280. if (stanje_cekaonica <= 1)
  281. {
  282. InitQ(cekaonica);
  283. }
  284. cout<<endl;
  285. cout<<"*******************************************"<<endl;
  286. cout<<" Stanje u cekaonici je: "<<--stanje_cekaonica<<endl;
  287. cout<<"*******************************************"<<endl;
  288. cekanje-=red_el.y;
  289. }
  290. else //ako ordinacija nije slobodna pacijent ostaje u cekaonici
  291. {
  292. EnQueueQ(red_el,cekaonica);
  293. }
  294. cekanje+=red_el.x;
  295. if (cekanje<0)
  296. {
  297. cekanje=0;
  298. }
  299. if (cekanje>red_el.y)
  300. {
  301. zauzeto=false; //ako je vrijeme cekanje iduceg pacijenta vece od vremena u ordinaciji trenutnog pacijenta
  302. }
  303. else
  304. {
  305. zauzeto=true;
  306. vrijeme+=(red_el.x-red_el.y);
  307. }
  308. }
  309. // stanje u čekaonici nakon ulaska svih pacijenata
  310.  
  311. InitQ(r);
  312. for (int j=0; j < stanje_cekaonica; j++)
  313. {
  314. red_el=FrontQ(r);
  315. DeQueueQ(r);
  316.  
  317. if (stanje_cekaonica > 1)
  318. {
  319. for (int z=1;z<stanje_cekaonica;z++)
  320. {
  321. pacijent el2=FrontQ(cekaonica), pom;
  322. DeQueueQ(cekaonica);
  323. if (red_el.rb_pacijenta==el2.rb_pacijenta) continue;
  324. if (el2.prioritet<red_el.prioritet||(el2.prioritet==red_el.prioritet&&el2.rb_pacijenta<red_el.rb_pacijenta))
  325. {
  326. pom=el2;
  327. el2=red_el;
  328. red_el=pom;
  329. }
  330. EnQueueQ(el2,cekaonica);
  331. }
  332. }
  333. if (red_el.rb_pacijenta<1||red_el.rb_pacijenta>suma)continue;
  334. if (stanje_cekaonica>1)
  335. {
  336. cout<<endl;
  337. cout<<"*******************************************"<<endl;
  338. cout<<" Pacijent iz ordinacije"<<red_el.rb_pacijenta<<endl;
  339. cout<<" izlazi iz ordinacije i napusta red"<<endl;
  340. cout<<"*******************************************"<<endl;
  341. }
  342. int Vr_cekanja = cekanje-pom_red[red_el.rb_pacijenta-1];
  343. if (Vr_cekanja<0)
  344. {
  345. Vr_cekanja=0;
  346. }
  347. cout<<endl;
  348. cout<<"*******************************************"<<endl;
  349. cout<<" Vrijeme cekanja pacijenta "<<red_el.rb_pacijenta<<endl;
  350. cout<<" je :"<<Vr_cekanja<<"sek"<<endl;
  351. cout<<"*******************************************"<<endl;
  352.  
  353. br_pacijenta=red_el.rb_pacijenta;
  354. if (stanje_cekaonica<=1) InitQ(cekaonica);
  355. cout<<endl;
  356. cout<<"*******************************************"<<endl;
  357. cout<<" Stanje u cekaonici je: "<<--stanje_cekaonica<<endl;
  358. cout<<"*******************************************"<<endl;
  359.  
  360. cekanje+=red_el.x;
  361. vrijeme+=red_el.y;
  362. cout<<endl;
  363. cout<<"*******************************************"<<endl;
  364. cout<<" Pacijent sa čela reda"<<red_el.rb_pacijenta<<endl;
  365. cout<<" ulazi u ordinaciju i napusta red"<<endl;
  366. cout<<"*******************************************"<<endl;
  367. Vrijeme_izvrsavanja(vrijeme);
  368. suma=0;
  369. }
  370. }
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380. int main() // Glavni program
  381. {
  382. InitQ(r); // inicijalizacija reda
  383. int izbor; // definicija varijable izbornika
  384.  
  385. cout<<endl;
  386. cout<<"\t\t\t************************************"<<endl;
  387. cout<<"\t\t\t* ZADACA_3 *"<<endl;
  388. cout<<"\t\t\t* Operacije nad redom *"<<endl;
  389. cout<<"\t\t\t* Strukture podataka *"<<endl;
  390. cout<<"\t\t\t************************************"<<endl;
  391. cout<<endl;
  392. do {
  393. cout<<"\t\t\t************************************"<<endl;
  394. cout<<"\t\t\t* glavni izbornik *"<<endl;
  395. cout<<"\t\t\t************************************"<<endl;
  396. cout<<"\t\t\t************************************"<<endl;
  397. cout<<"\t\t\t* Generiranje brojeva * 1 *"<<endl;
  398. cout<<"\t\t\t************************************"<<endl;
  399. cout<<"\t\t\t* Cekaonica (vrijeme) * 2 *"<<endl;
  400. cout<<"\t\t\t************************************"<<endl;
  401. cout<<"\t\t\t* Cekaonica (prioriteti) * 3 *"<<endl;
  402. cout<<"\t\t\t************************************"<<endl;
  403. cout<<"\t\t\t* IZLAZ * 0 *"<<endl;
  404. cout<<"\t\t\t************************************"<<endl;
  405. cout<<endl;
  406. cout<<"\t\t\t************************************"<<endl;
  407. cout<<"\t\t\t* Odaberite broj zeljene operacije *"<<endl;
  408. cout<<"\t\t\t************************************"<<endl;
  409. cout<<"\t\t\tVas odabir je:";
  410. cin >> izbor;
  411. cout << endl;
  412.  
  413. switch(izbor) // pozivanje funkcija ovisno o unosu
  414. {
  415. case 1: Generiraje_slucajnih_br();
  416. break;
  417. case 2: Cekaonica_vrijeme();
  418. break;
  419. case 3: Cekaonica_prioritet();
  420. break;
  421. case 0: break;
  422. default: cout<<"Odabrali ste nepostojecu operaciju, ponovite unos"<<endl<<endl;
  423. }
  424. }
  425. while(izbor!=0);
  426.  
  427. system("pause");
  428. return 0;
  429. }

Report this snippet  

You need to login to post a comment.