# Posted By

mpiknjac on 11/22/10

# Statistics

Viewed 177 times
Favorited by 0 user(s)

# 3. zadatak iz kolegija "Strukture podataka\$"

/ Published in: C++

Copy this code and paste it in your HTML
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.
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){
35. Q->polje[Q->zacelje] = x;
36. }
37.
38. void DequeueQ(red *Q){
40. }
41.
42. bool IsEmptyQ(red *Q){
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. }