Posted By

marko_martinovic on 11/20/10


Tagged

polje Cirkularno


Versions (?)

Who likes this?

1 person have marked this snippet as a favorite

Desoxena


Zadatak3


 / Published in: C++
 

Implementacija uz pomoć polja, rekurzivna funkcija po mom mišljenju vrlo dobro napravljena. Također funkcija za propuštanje starijih osoba je vrlo zanimljiva.

  1. Implementacija cirkularnog polja
  2.  
  3. #include <iostream>
  4. using namespace std;
  5. typedef int element;
  6.  
  7. struct klijent{
  8. char prez_ime[50];
  9. char vrsta_transakcije[20];
  10. element godina_rodjenja;
  11. float stanje;
  12. };
  13.  
  14. struct red {
  15. klijent elements[10000];
  16. element front,rear;
  17. };
  18.  
  19. element AddOne(int i){
  20. return ((i+1)%1000);
  21. };
  22.  
  23. klijent InitQ(red *jedan){
  24. jedan->rear=999;
  25. jedan->front=0;
  26. };
  27.  
  28. klijent FrontQ(red *jedan){
  29. if(AddOne(jedan->rear)==jedan->front){
  30. cout<<"Red je prazan!"<<endl;
  31. }
  32. else{
  33. return jedan->elements[jedan->front];
  34. }
  35. };
  36. void EnQueueQ(klijent x,red *jedan){
  37. if(AddOne(AddOne(jedan->rear))==jedan->front)
  38. cout<<"Red je pun!";
  39. else{
  40. jedan->rear=AddOne(jedan->rear);
  41. jedan->elements[jedan->rear]=x;
  42. }
  43.  
  44. };
  45.  
  46. void DeQueueQ(red *jedan){
  47. if(AddOne(jedan->rear)==jedan->front){
  48. cout<<"Red je prazan!";
  49. }
  50. else{
  51. jedan->front=AddOne(jedan->front);
  52. }
  53. };
  54.  
  55. element IsEmptyQ(red *jedan){
  56. if(AddOne(jedan->rear)!=jedan->front)
  57. return 0;
  58. else
  59. return -1;
  60. }
  61.  
  62. Zadatak
  63.  
  64.  
  65. #include<iostream>
  66. #include <cstring>
  67. #include "stog_polje.h"
  68. klijent x,y;
  69. int glavni=0,brojac=0;
  70.  
  71. void ispis(red *polje,red *tmp){
  72. do{
  73. x=FrontQ(polje);
  74. cout<<"================================="<<endl;
  75. cout<<"Ime i prezime klijenta:\t"<<x.prez_ime<<endl;
  76. cout<<"Godina rodjenja:\t"<<x.godina_rodjenja<<endl;
  77. cout<<"Stanje na racunu:\t"<<x.stanje<<endl;
  78. cout<<"Vrsta transakcije:\t"<<x.vrsta_transakcije<<endl;
  79. EnQueueQ(x,tmp);
  80. DeQueueQ(polje);
  81.  
  82. }while(IsEmptyQ(polje)!=-1);
  83. cout<<"================================="<<endl;
  84. do{
  85. y=FrontQ(tmp);
  86. EnQueueQ(y,polje);
  87. DeQueueQ(tmp);
  88.  
  89. }while(IsEmptyQ(tmp)!=-1);
  90. };
  91.  
  92. void godine(red *polje,red *tmp){
  93. brojac=glavni;
  94. while(brojac>0){
  95. x=FrontQ(polje);
  96. if (x.godina_rodjenja<=1965){
  97. EnQueueQ(x,polje);
  98. brojac--;
  99. DeQueueQ(polje);
  100. }
  101. else{
  102. EnQueueQ(x,tmp);
  103. brojac--;
  104. DeQueueQ(polje);
  105. }
  106. }
  107. while(IsEmptyQ(tmp)!=-1){
  108. y=FrontQ(tmp);
  109. EnQueueQ(y,polje);
  110. DeQueueQ(tmp);
  111. }
  112. ispis(polje,tmp);
  113. };
  114. void dodavanje_zapisa(red *polje,red *tmp){
  115. int vrsta;
  116. cout<<"Unesite ime_prezime klijenta: ";cin>>x.prez_ime;
  117. cout<<"Unesite godinu rodjenja: ";cin>>x.godina_rodjenja;
  118. cout<<"Unesite stanje na racunu: ";cin>>x.stanje;
  119. cout<<"Koju vrstu transakcije zelite napravit.\n1. Uplate/isplate\n2. Placanje racuna\n3. Krediti"<<endl;
  120. cin>>vrsta;
  121. if(vrsta==1)
  122. strcpy(x.vrsta_transakcije,"Uplate/isplate");
  123. if(vrsta==2)
  124. strcpy(x.vrsta_transakcije,"Placanje racuna");
  125. if(vrsta==3)
  126. strcpy(x.vrsta_transakcije,"Krediti");
  127.  
  128. EnQueueQ(x,polje);
  129. };
  130. void izbacivanje(red *polje, red *tmp){
  131. do{
  132. x=FrontQ(polje);
  133. if(x.stanje<100){
  134. cout<<"Klijent: "<<x.prez_ime<<" ima manje od 100 kn te ga izbacujemo iz reda"<<endl;
  135. DeQueueQ(polje);
  136. }
  137. else{
  138. EnQueueQ(x,tmp);
  139. DeQueueQ(polje);
  140. }
  141. }while(IsEmptyQ(polje)!=-1);
  142. while(IsEmptyQ(tmp)!=-1){
  143. x=FrontQ(tmp);
  144. EnQueueQ(x,polje);
  145. DeQueueQ(tmp);
  146. }
  147. };
  148.  
  149. red* premjestanje(red *polje)
  150. {
  151. if (IsEmptyQ(polje)==0)
  152. {
  153. klijent x = FrontQ(polje); //zapamti klijenta s proÄŤelja
  154. DeQueueQ(polje); //makni ga
  155. EnQueueQ(x, premjestanje(polje)); //dodaj ga nakon što dodaš ostale
  156. }
  157. return polje; //vrati rezultirajući red
  158. }
  159.  
  160. int main(){
  161. red *polje = new red;
  162. InitQ(polje);
  163. red *tmp=new red;
  164. InitQ(tmp);
  165. int izbor;
  166. do{
  167. cout<<"1. Dodavanje zapisa o klijentima banke u red"<<endl;
  168. cout<<"2. Izbacivanje iz reda klijenata koji imaju manje od 100 kn na racunu"<<endl;
  169. cout<<"3. Otvaranje novog saltera"<<endl;
  170. cout<<"9. Izlaz iz programa\nVas izbor: ";
  171. cin>>izbor;
  172. switch (izbor){
  173. case 1:
  174. char jos;
  175. do{
  176. glavni++;
  177. dodavanje_zapisa(polje,tmp);
  178. cout<<"Zelite li dodat jos jednog klijenta(d/n)"<<endl;
  179. cin>>jos;
  180.  
  181. }while(jos=='d');
  182. godine(polje,tmp);
  183. break;
  184. case 2:
  185. izbacivanje(polje,tmp);
  186. ispis(polje,tmp);
  187. break;
  188. case 3:
  189. cout<<"Ovaj salter se zatvara i otvara se novi"<<endl;
  190. premjestanje (polje);
  191. ispis (polje, tmp);
  192. break;
  193. case 9:
  194. cout<<"Izlaz iz programa";break;
  195. default:
  196. cout<<"Krivi unos"<<endl;
  197. };
  198. }while(izbor!=9);
  199.  
  200. return 0;
  201. }

Report this snippet  

You need to login to post a comment.