Posted By

mpiknjac on 11/22/10


Tagged

red Strukture podataka


Versions (?)

3. zadatak iz kolegija "Strukture podataka$"


 / Published in: C++
 

  1. //implementacija reda pomocu polja
  2.  
  3. #define m 50
  4.  
  5. struct klijent{
  6. char preime[50];
  7. int god;
  8. float st_r;
  9. char vr_t;
  10. };
  11.  
  12. struct red{
  13. klijent polje[m];
  14. int celo, zacelje;
  15. };
  16.  
  17.  
  18. red *InitQ(red *Q){
  19. Q = new red;
  20. Q->celo = 0;
  21. Q->zacelje = m-1;
  22. return Q;
  23. }
  24.  
  25. int AddOne(int n) {
  26. return (( n + 1 ) % m);
  27. }
  28.  
  29. klijent FrontQ(red*Q){
  30. return Q->polje[Q->celo];
  31. }
  32.  
  33. void EnqueueQ(klijent x, red *Q){
  34. Q->zacelje = AddOne(Q->zacelje);
  35. Q->polje[Q->zacelje] = x;
  36. }
  37.  
  38. void DequeueQ(red *Q){
  39. Q->celo = AddOne(Q->celo);
  40. }
  41.  
  42. bool IsEmptyQ(red *Q){
  43. if(AddOne(Q->zacelje)==Q->celo)
  44. return true;
  45. else return false;
  46. }
  47.  
  48.  
  49. //------------------------------------------------------------
  50.  
  51.  
  52. //implementacija reda pomocu pokazivaca
  53.  
  54.  
  55. struct klijent{
  56. char preime[50];
  57. int god;
  58. float st_r;
  59. char vr_t;
  60. };
  61.  
  62. struct el{
  63. klijent elem;
  64. el *sljedeci;
  65. };
  66.  
  67. struct red{
  68. el *celo, *zacelje;
  69. };
  70.  
  71. typedef struct klijent element;
  72. typedef struct red Queue;
  73.  
  74. red* InitQ(red *Q){
  75. el *novi=new el;
  76. Q = new red;
  77. novi->sljedeci=NULL;
  78. Q->zacelje=novi;
  79. Q->celo=novi;
  80. return Q;
  81. }
  82.  
  83. klijent FrontQ(red *Q){
  84. return Q->celo->sljedeci->elem;
  85. }
  86.  
  87. void EnqueueQ(element x, red *Q){
  88. el *novi=new el;
  89. novi->elem = x;
  90. novi->sljedeci=NULL;
  91. Q->zacelje->sljedeci=novi;
  92. Q->zacelje=novi;
  93. }
  94.  
  95. void DequeueQ(red *Q){
  96. el *brisi = Q->celo;
  97. Q->celo = brisi->sljedeci;
  98. delete brisi;
  99. }
  100.  
  101. bool IsEmptyQ(red *Q){
  102. if(Q->zacelje==Q->celo)
  103. return true;
  104. return false;
  105. }
  106.  
  107.  
  108. //---------------------------------------------------------------
  109.  
  110. //glavna datoteka programa
  111.  
  112. #include <iostream>
  113. #include "red_polje.h"
  114. //#include "red_pokazivac.h"
  115.  
  116. using namespace std;
  117.  
  118. klijent dodaj(klijent podaci){
  119. cout<<"Prezime i ime: ";
  120. cin.ignore();
  121. cin.getline(podaci.preime, 50);
  122. cout<<"Godina rodenja: ";
  123. cin>> podaci.god;
  124. cout<<"Stanje racuna: ";
  125. cin>>podaci.st_r;
  126. cout<<"Vrsta transakcije uplata(u) / isplata(i) / placanje racuna(p) / kredit(k): ";
  127. cin>>podaci.vr_t;
  128. return podaci;
  129. }
  130.  
  131. void unos(red *Q){
  132. klijent podaci=dodaj(podaci);
  133. EnqueueQ(podaci,Q);
  134. }
  135.  
  136. bool prednost(klijent podaci){
  137. if(podaci.god<1945)
  138. return true;
  139. else
  140. return false;
  141. }
  142.  
  143.  
  144. void stari(red *Q){
  145. red *tempQ=InitQ(tempQ);
  146. red *tempOldQ=InitQ(tempOldQ);
  147. klijent temp;
  148. while(!IsEmptyQ(Q)){
  149. temp=FrontQ(Q);
  150. if(prednost(temp))
  151. EnqueueQ(temp,tempOldQ);
  152. else
  153. EnqueueQ(temp,tempQ);
  154. DequeueQ(Q);
  155. }
  156. while(!IsEmptyQ(tempOldQ)){
  157. temp=FrontQ(tempOldQ);
  158. EnqueueQ(temp,Q);
  159. DequeueQ(tempOldQ);
  160. }
  161. while(!IsEmptyQ(tempQ)){
  162. temp=FrontQ(tempQ);
  163. EnqueueQ(temp, Q);
  164. DequeueQ(tempQ);
  165. }
  166. }
  167.  
  168. void ispis(red *Q){
  169. if(IsEmptyQ(Q)){
  170. cout<<"\n\nNema klijenata u redu!!!\n";
  171. return;
  172. }
  173. cout<<"\nStanje u redu!\n";
  174. red *tempQ=InitQ(tempQ);
  175. klijent temp;
  176. while(!IsEmptyQ(Q)){
  177. temp=FrontQ(Q);
  178. cout<<"\nPrezime i ime: "<<temp.preime<<endl;
  179. cout<<"Godina rodjenja: "<<temp.god<<endl;
  180. cout<<"Stanje na racunu: "<<temp.st_r<<endl;
  181. cout<<"Vrsta transakcije: ";
  182. if(temp.vr_t=='u') cout<<"uplata\n";
  183. else if(temp.vr_t=='i') cout<<"isplata\n";
  184. else if(temp.vr_t=='p') cout<<"placanje racuna\n";
  185. else if(temp.vr_t=='k') cout<<"kredit\n";
  186. cout<<endl;
  187. EnqueueQ(temp,tempQ);
  188. DequeueQ(Q);
  189. }
  190. while(!IsEmptyQ(tempQ)){
  191. temp=FrontQ(tempQ);
  192. EnqueueQ(temp,Q);
  193. DequeueQ(tempQ);
  194. }
  195. }
  196.  
  197. bool kr_sp(klijent element){
  198. if(element.st_r<100 && element.vr_t=='k')
  199. return false;
  200. else
  201. return true;
  202. }
  203.  
  204. void izbaci(red *Q){
  205. if(IsEmptyQ(Q)){
  206. cout<<"\n\nNema klijenata u redu!!!\n";
  207. return;
  208. }
  209. int br=0;
  210. red *tempQ=InitQ(tempQ);
  211. klijent temp;
  212. while(!IsEmptyQ(Q)){
  213. temp=FrontQ(Q);
  214. if(kr_sp(temp)) EnqueueQ(temp,tempQ);
  215.  
  216. DequeueQ(Q);
  217. }
  218. memcpy(Q,tempQ,sizeof(red));
  219. cout<<"\nKreditno nesposobni su izbaceni iz reda!\n";
  220. }
  221.  
  222.  
  223. void novi_red(red *Q){
  224. klijent temp=FrontQ(Q);
  225. DequeueQ(Q);
  226. if(!IsEmptyQ(Q))
  227. novi_red(Q);
  228. EnqueueQ(temp,Q);
  229. }
  230.  
  231. int main(){
  232. red *red_banka=InitQ(red_banka);
  233. int izbor;;
  234. do{
  235. cout<<endl<<"\nIZBORNIK\n\n"<<endl;
  236. cout<<"1. Novi zapis"<< endl;
  237. cout<<"2. Ispis reda"<<endl;
  238. cout<<"3. Brisanje kreditno nesposobnih"<<endl;
  239. cout<<"4. Otvaranje novog saltera"<<endl;
  240. cout<<"0. Izlaz"<<endl;
  241. cout<<"--------------------------------"<<endl;
  242. cout<<"Vas izbor: ";
  243. cin>>izbor;
  244. switch(izbor){
  245. case 0:break;
  246. case 1:
  247. unos(red_banka);
  248. stari(red_banka);
  249. break;
  250. case 2:
  251. ispis(red_banka);
  252. break;
  253. case 3:
  254. izbaci(red_banka);
  255. break;
  256. case 4:
  257. novi_red(red_banka);
  258. cout<<"\nZatvoren je jedan salter i otvoren novi.\nKlijenti se u njemu nalaze obrnutim radosljedom s obzirom na stari poredak!\n";
  259. break;
  260. default: cout<<"\nKrivi unos!!!\n";
  261. }
  262. }while(izbor!=0);
  263. return 0;
  264. }

Report this snippet  

You need to login to post a comment.