Advertisement
Guest User

Untitled

a guest
May 21st, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.66 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4. class OutOfBoundException
  5. {
  6. public:
  7. void print()
  8. {
  9. cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto"<<endl;
  10. }
  11. };
  12. class Karticka{
  13. protected:
  14. char smetka[16];
  15. int pin;
  16. bool povekjePin;
  17. public:
  18. Karticka(){}
  19. Karticka(char* smetka,int pin){
  20. strcpy(this->smetka,smetka);
  21. this->pin=pin;
  22. this->povekjePin=false;
  23. }
  24. char *getSmetka()
  25. {
  26. return smetka;
  27. }
  28. friend ostream &operator<<(ostream &out,Karticka &k)
  29. {
  30. out<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
  31. return out;
  32. }
  33. virtual int tezinaProbivanje()
  34. {
  35. int p=pin, t=0;
  36. while(p)
  37. {
  38. t++;
  39. p/=10;
  40. }
  41. return t;
  42. }
  43. bool getDopolnitelenPin()
  44. {
  45. return povekjePin;
  46. }
  47. };
  48.  
  49. class SpecijalnaKarticka:public Karticka{
  50. int *dopolnitelni;
  51. int broj;
  52. const static int P;
  53. public:
  54. SpecijalnaKarticka(char *smetka,int pin):Karticka(smetka,pin)
  55. {
  56. dopolnitelni=new int[0];
  57. broj=0;
  58. }
  59. SpecijalnaKarticka(const SpecijalnaKarticka &sk)
  60. {
  61. strcpy(smetka,sk.smetka);
  62. povekjePin=sk.povekjePin;
  63. pin=sk.pin;
  64. broj=sk.broj;
  65. dopolnitelni=new int[broj];
  66. for(int i=0;i<broj;i++)
  67. {
  68. dopolnitelni[i]=sk.dopolnitelni[i];
  69. }
  70. }
  71. SpecijalnaKarticka &operator=(const SpecijalnaKarticka &sk)
  72. {
  73. if(this!=&sk)
  74. {
  75. delete [] dopolnitelni;
  76. povekjePin=sk.povekjePin;
  77. strcpy(smetka,sk.smetka);
  78. pin=sk.pin;
  79. broj=sk.broj;
  80. dopolnitelni=new int[broj];
  81. for(int i=0;i<broj;i++)
  82. {
  83. dopolnitelni[i]=sk.dopolnitelni[i];
  84. }
  85. }
  86. return *this;
  87. }
  88. ~SpecijalnaKarticka()
  89. {
  90. delete[]dopolnitelni;
  91. }
  92. friend ostream &operator<<(ostream &out, SpecijalnaKarticka &k)
  93. {
  94. out<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
  95. return out;
  96. }
  97. int tezinaProbivanje()
  98. {
  99. int vk=0;
  100. vk+=Karticka::tezinaProbivanje()+broj;
  101. return vk;
  102. }
  103. SpecijalnaKarticka &operator+=(int i)
  104. {
  105. if(broj+1>P) throw OutOfBoundException();
  106. povekjePin=true;
  107. int *temp=new int[broj+1];
  108. for(int j=0;j<broj;j++)
  109. {
  110. temp[j]=dopolnitelni[j];
  111. }
  112. temp[broj++]=i;
  113. delete [] dopolnitelni;
  114. dopolnitelni=temp;
  115. return *this;
  116. }
  117. };
  118. const int SpecijalnaKarticka::P=4;
  119.  
  120.  
  121. class Banka {
  122. private:
  123. char naziv[30];
  124. Karticka *karticki[20];
  125. int broj;
  126. static int LIMIT;
  127. public:
  128. Banka(char *naziv, Karticka** karticki,int broj ){
  129. strcpy(this->naziv,naziv);
  130. for (int i=0;i<broj;i++){
  131. //ako kartickata ima dopolnitelni pin kodovi
  132. if (karticki[i]->getDopolnitelenPin()){
  133. this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
  134. }
  135. else this->karticki[i]=new Karticka(*karticki[i]);
  136. }
  137. this->broj=broj;
  138. }
  139. ~Banka(){
  140. for (int i=0;i<broj;i++) delete karticki[i];
  141. }
  142. static void setLimit(int n)
  143. {
  144. LIMIT=n;
  145. }
  146. void pecatiKarticki()
  147. {
  148. cout<<"Vo bankata "<<naziv<<" moze da se probijat kartickite:"<<endl;
  149. for(int i=0;i<broj;i++)
  150. {
  151. if(karticki[i]->tezinaProbivanje()<=LIMIT)
  152. cout<<karticki[i];
  153. }
  154. }
  155. void dodadiDopolnitelenPin(char * s, int novPin)
  156. {
  157. for(int i=0;i<broj;i++)
  158. {
  159. if(!strcmp(s,karticki[i]->getSmetka()))
  160. {
  161. SpecijalnaKarticka *sk=dynamic_cast<SpecijalnaKarticka*>(karticki[i]);
  162. if(sk) *sk+=novPin;
  163. }
  164. }
  165. }
  166. };
  167. int Banka::LIMIT=7;
  168.  
  169.  
  170. int main(){
  171.  
  172. Karticka **niza;
  173. int n,m,pin;
  174. char smetka[16];
  175. bool daliDopolnitelniPin;
  176. cin>>n;
  177. niza=new Karticka*[n];
  178. for (int i=0;i<n;i++){
  179. cin>>smetka;
  180. cin>>pin;
  181. cin>>daliDopolnitelniPin;
  182. if (!daliDopolnitelniPin)
  183. niza[i]=new Karticka(smetka,pin);
  184. else
  185. niza[i]=new SpecijalnaKarticka(smetka,pin);
  186. }
  187.  
  188. Banka komercijalna("Komercijalna",niza,n);
  189. for (int i=0;i<n;i++) delete niza[i];
  190. delete [] niza;
  191. cin>>m;
  192. for (int i=0;i<m;i++){
  193. cin>>smetka>>pin;
  194.  
  195. komercijalna.dodadiDopolnitelenPin(smetka,pin);
  196.  
  197. }
  198.  
  199. Banka::setLimit(5);
  200.  
  201. komercijalna.pecatiKarticki();
  202.  
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement