Posted By

zivkoviccilija on 12/03/11


Tagged

Queue ATP


Versions (?)

Program_SP_Z3


 / Published in: C++
 

ovdje možete pogledati programski kod(glavni program i zaglavlja koja su korištena) za 3zadatak iz kolegija STRUKTURE PODATAKA@FOI

  1. //GLAVNI PROGRAM
  2.  
  3. #include <cstdlib>
  4. #include <iostream>
  5. #include <ctime>
  6. #include "red_pokazivac.h"
  7. #include "biblioteka_vrijeme.h"
  8. //#include "red_polje.h"
  9.  
  10. using namespace std;
  11.  
  12. int n;
  13.  
  14. void generiranje(r *pacijenti){
  15. srand(time(0));
  16. cout<<"Unesite zeljeni broj parova za generiranje? (1-10000)"<<endl;
  17. cin>>n;
  18. tpopis novi;
  19. for(int i=0;i<n;i++){
  20. novi.rb=i+1;
  21. novi.x=((rand()%10001)/1000)+1;
  22. novi.y=((rand()%10001)/1000)+1;
  23. novi.p=(rand()%4)+1;
  24. enqueueq(novi,pacijenti);
  25. }
  26. };
  27. void ispis(r *pacijenti){
  28. vrijeme_pocetak();
  29. cout<<"PACIJENTI"<<endl;
  30. cout<<"-----------------------------------"<<endl;
  31. tpopis tekuci;
  32. if(isemptyq(pacijenti)) cout<<"Red je prazan!"<<endl;
  33. while(!isemptyq(pacijenti)){
  34. tekuci=frontq(pacijenti);
  35. dequeueq(pacijenti);
  36. cout<<"Pacijent broj: "<<tekuci.rb<<endl;
  37. cout<<"Cekati cete "<<tekuci.x<<" minuta."<<endl;
  38. cout<<"U ordinaciji ste "<<tekuci.y<<" minuta."<<endl;
  39. cout<<"Prednost ima: "<<tekuci.p<<endl;
  40. cout<<"-----------------------------------"<<endl;
  41. }
  42. vrijeme_kraj();
  43. cout<<"Vrijeme izvodjenja: "<<vrijeme_proteklo()/1000<<endl;
  44. };
  45.  
  46. void nula(tpopis *polje){
  47. for(int i=0;i<n;i++){
  48. polje[i].rb=0;
  49. polje[i].x=0;
  50. polje[i].y=0;
  51. polje[i].p=0;
  52. }
  53. n=0;
  54. }
  55. void modifikacija(r *pacijenti){
  56. vrijeme_pocetak();
  57. tpopis ordinacija[10000];
  58. int brojac=0;
  59. while(!isemptyq(pacijenti)){
  60. ordinacija[brojac]=frontq(pacijenti);
  61. brojac++;
  62. dequeueq(pacijenti);}
  63.  
  64. //sortiranje bubble sort
  65. bool zamjena=true;
  66. for(int i=n-1;i>0&&zamjena; i--){
  67. zamjena=false;
  68. for(int j=0;j<i;j++){
  69. if(ordinacija[j].p<ordinacija[j+1].p){
  70. tpopis pom=ordinacija[j];
  71. ordinacija[j]=ordinacija[j+1];
  72. ordinacija[j+1]=pom;
  73. zamjena=true;
  74. }
  75. if(ordinacija[j].p==ordinacija[j+1].p){
  76. if(ordinacija[j].x<ordinacija[j+1].x){
  77. tpopis pom=ordinacija[j];
  78. ordinacija[j]=ordinacija[j+1];
  79. ordinacija[j+1]=pom;
  80. zamjena=true;
  81. }
  82. }
  83. }
  84. }
  85.  
  86. for(int i=0;i<n;i++) enqueueq(ordinacija[i],pacijenti);
  87.  
  88. cout<<"PACIJENTI:"<<endl;
  89. cout<<"-----------------------------------"<<endl;
  90. tpopis tekuci;
  91. if(isemptyq(pacijenti)) cout<<"Red je prazan!"<<endl;
  92. while(!isemptyq(pacijenti)){
  93. tekuci=frontq(pacijenti);
  94. dequeueq(pacijenti);
  95. cout<<"Pacijent broj: "<<tekuci.rb<<endl;
  96. cout<<"Cekati cete "<<tekuci.x<<" minuta."<<endl;
  97. cout<<"U ordinaciji ste "<<tekuci.y<<" minuta."<<endl;
  98. cout<<"Prednost ima: "<<tekuci.p<<endl;
  99. cout<<"-----------------------------------"<<endl;
  100. }
  101. vrijeme_kraj();
  102. cout<<"Vrijeme izvodjenja: "<<vrijeme_proteklo()/1000<<endl;
  103. nula(ordinacija);
  104. }
  105.  
  106. int main(int argc, char *argv[])
  107. {
  108. int izbor;
  109. r *pacijenti;
  110. pacijenti=new r;
  111. initq(pacijenti);
  112. do{
  113. cout<<"---------IZBORNIK--------"<<endl;
  114. cout<<"-------------------------"<<endl;
  115. cout<<"1. Generiranje pacijenata"<<endl;
  116. cout<<"2. Simulacija"<<endl;
  117. cout<<"3. Modifikacija"<<endl;
  118. cout<<"4. Kraj programa"<<endl;
  119. cin>>izbor;
  120. switch(izbor){
  121. case 1: generiranje(pacijenti); break;
  122. case 2: ispis(pacijenti);break;
  123. case 3: modifikacija(pacijenti);break;
  124. case 4: return 0;
  125. default: break;
  126. }}
  127. while(1);
  128. system("pause");
  129. return 0;
  130. }
  131.  
  132.  
  133.  
  134. //ZAGLAVLJE POKAZIVAČA
  135.  
  136. #include <cstdlib>
  137. #include <iostream>
  138. using namespace std;
  139. struct tpopis
  140. { int rb;
  141. int x;
  142. int y;
  143. int p;
  144. };
  145.  
  146. struct t{
  147. tpopis popis;
  148. t *sljedeci;
  149. };
  150.  
  151. struct r{
  152. t *front, *rear;
  153. };
  154.  
  155. void initq(r *red){
  156. red->front=(t*)malloc(sizeof(t));//alociranje pokazivaca front
  157. red->front->sljedeci=NULL;
  158. red->rear=red->front;
  159. cout<<"Red je inicijaliziran"<<endl;
  160. };
  161.  
  162. bool isemptyq(r *red){
  163. if(red->front==red->rear) return true;
  164. else return false;
  165. };
  166.  
  167. void enqueueq(tpopis x,r *red){
  168. t *pom;
  169. pom=new t;
  170. pom->popis=x;
  171. pom->sljedeci=NULL;
  172. red->rear->sljedeci=pom;
  173. red->rear=pom;
  174. };
  175.  
  176. void dequeueq(r *red){
  177. t *pom;
  178. if(isemptyq(red)) cout<<"Red je trenutno prazan!";
  179. else{
  180. pom=red->front;
  181. red->front=red->front->sljedeci;
  182. free(pom);
  183. }
  184. };
  185.  
  186. tpopis frontq(r *red){
  187. if(isemptyq(red)) cout<<"Red je trenutno prazan!";
  188. else return (red->front->sljedeci->popis);
  189. };
  190.  
  191.  
  192. //ZAGLAVLJE POLJA
  193.  
  194.  
  195. #include <cstdlib>
  196. #include <iostream>
  197. using namespace std;
  198. struct tpopis
  199. { int rb;
  200. int x;
  201. int y;
  202. int p;
  203. };
  204. struct r{
  205. tpopis popis[10000];
  206. int front, rear;
  207. };
  208.  
  209. int addone(int i){
  210. return ((i+1)%10000);
  211. };
  212.  
  213. void initq(r *red){
  214. red->front=0;
  215. red->rear=9999; //zadnji el polja
  216. cout<<"Inicijaliziranje reda!!"<<endl;
  217. };
  218.  
  219. bool isemptyq(r *red){
  220. if(addone(red->rear)==red->front) return true;
  221. else return false;
  222. };
  223.  
  224. void enqueueq(tpopis x, r *red){
  225. if(addone(addone(red->rear))==(red->front)) cout<<"Red je trenutno pun!";
  226. else {
  227. red->rear=addone(red->rear);
  228. red->popis[red->rear]=x;
  229. }
  230. };
  231.  
  232. void dequeueq(r *red){
  233. if(isemptyq(red)) cout<<"Red je trenutno prazan!";
  234. else red->front=addone(red->front);
  235. };
  236.  
  237. tpopis frontq(r *red){
  238. if(isemptyq(red)) cout<<"Red je trenutno prazan!";
  239. else return (red->popis[red->front]);
  240. };

Report this snippet  

You need to login to post a comment.