Advertisement
Guest User

Untitled

a guest
Jan 18th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.90 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4. class OutOfBoundException
  5. {
  6. public:
  7.     void pecati()
  8.     {
  9.         cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto"<<endl;
  10.     }
  11.  
  12. };
  13. class Karticka
  14. {
  15. protected:
  16.     char smetka[16];
  17.     int pin;
  18.     bool povekjePin;
  19. public:
  20.     Karticka() {}
  21.     Karticka(char* smetka,int pin)
  22.     {
  23.         strcpy(this->smetka,smetka);
  24.         this->pin=pin;
  25.         this->povekjePin=false;
  26.     }
  27.     // дополниете ја класата
  28.     Karticka(const Karticka &k)
  29.     {
  30.         strcpy(smetka,k.smetka);
  31.         pin=k.pin;
  32.         povekjePin=k.povekjePin;
  33.     }
  34.     const char* getsmetka()
  35.     {
  36.         return smetka;
  37.     }
  38.     virtual int tezinaProbivanje()
  39.     {
  40.         int br=0;
  41.         int _pin=pin;
  42.         while (_pin)
  43.         {
  44.             _pin/=10;
  45.             br++;
  46.         }
  47.         return br;
  48.     }
  49.     int getDopolnitelenPin()
  50.     {
  51.         return povekjePin;
  52.     }
  53.     friend ostream& operator<<(ostream &o, Karticka &k)
  54.     {
  55.         o<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
  56.         return o;
  57.     }
  58. };
  59. class SpecijalnaKarticka: public Karticka
  60. {
  61. private:
  62.     int *pinovi;
  63.     int br;
  64.     static int P;
  65. public:
  66.     SpecijalnaKarticka()
  67.     {
  68.         pinovi=0;
  69.         br=0;
  70.         povekjePin=1;
  71.     }
  72.     SpecijalnaKarticka(char* smetka,int pin): Karticka(smetka,pin)
  73.     {
  74.         pinovi=0;
  75.         br=0;
  76.          povekjePin=1;
  77.     }
  78.     int tezinaProbivanje()
  79.     {
  80.         int brojac=0;
  81.         for (int i=0; i<br; i++)
  82.         {
  83.             int pince=pinovi[i];
  84.             while (pince)
  85.             {
  86.                 pince/=10;
  87.                 brojac++;
  88.             }
  89.         }
  90.         return Karticka::tezinaProbivanje()+br;
  91.     }
  92.     SpecijalnaKarticka (const SpecijalnaKarticka &s):Karticka(s)
  93.     {
  94.         br=s.br;
  95.         for (int i=0; i<br; i++)
  96.             pinovi[i]=s.pinovi[i];
  97.     }
  98.     SpecijalnaKarticka& operator= (const SpecijalnaKarticka &s)
  99.     {
  100.  
  101.         if(this==&s)
  102.             return *this;
  103.         Karticka::operator=(s);
  104.         br=s.br;
  105.         delete[]pinovi;
  106.         pinovi=new int [br];
  107.         for (int i=0; i<br; i++)
  108.             pinovi[i]=s.pinovi[i];
  109.         return *this;
  110.     }
  111.     friend ostream& operator<<(ostream &o, SpecijalnaKarticka &k)
  112.     {
  113.         o<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
  114.         return o;
  115.     }
  116.     SpecijalnaKarticka& operator+=( int pin)
  117.     {
  118.         int brojce=0;
  119.         int pinn=pin;
  120.         while (pinn)
  121.         {
  122.             pinn/=10;
  123.             brojce++;
  124.         }
  125.         if(br>=P)
  126.             return *this;
  127.         int *pom=new int [br+1];
  128.         for (int i=0; i<br; i++)
  129.             pom[i]=pinovi[i];
  130.         delete [] pinovi;
  131.         pom[br++]=pin;
  132.         pinovi=pom;
  133.         return *this;
  134.     }
  135.     int getbr()
  136.     {
  137.         return br;
  138.     }
  139.     static int getP()
  140.     {
  141.         return P;
  142.     }
  143. } ;
  144. //вметнете го кодот за SpecijalnaKarticka
  145.  
  146. int SpecijalnaKarticka::P=4;
  147.  
  148. class Banka
  149. {
  150. private:
  151.     char naziv[30];
  152.     Karticka *karticki[20];
  153.     int broj;
  154.     int static limit;
  155. public:
  156.     Banka(char *naziv, Karticka** karticki,int broj )
  157.     {
  158.         strcpy(this->naziv,naziv);
  159.         for (int i=0; i<broj; i++)
  160.         {
  161.             //ako kartickata ima dopolnitelni pin kodovi
  162.             if (karticki[i]->getDopolnitelenPin())
  163.             {
  164.                 this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
  165.             }
  166.             else this->karticki[i]=new Karticka(*karticki[i]);
  167.         }
  168.         this->broj=broj;
  169.     }
  170.     ~Banka()
  171.     {
  172.         for (int i=0; i<broj; i++) delete karticki[i];
  173.     }
  174.     static void setLIMIT(int limitt)
  175.     {
  176.         limit=limitt;
  177.     }
  178.     //да се дополни класата
  179.     void pecatiKarticki()
  180.     {
  181.         cout<<"Vo bankata "<<naziv<<" moze da se probijat kartickite:"<<endl;
  182.         for (int i=0; i<broj; i++)
  183.             if(karticki[i]->tezinaProbivanje()<=limit)
  184.             {
  185.                 SpecijalnaKarticka *s=new SpecijalnaKarticka ();
  186.                 s=dynamic_cast<SpecijalnaKarticka *> (karticki[i]);
  187.                 Karticka *k=new Karticka();
  188.                 k=dynamic_cast <Karticka *> (karticki[i]);
  189.                 if (s)
  190.                     cout<<*s;
  191.                 else
  192.                     cout<<*k;
  193.             }
  194.     }
  195.     void dodadiDopolnitelenPin(char * smetka, int novPin)
  196.     {
  197.         for (int i=0; i<broj; i++)
  198.         {
  199.             if (!strcmp(karticki[i]->getsmetka(),smetka))
  200.                 if(karticki[i]->getDopolnitelenPin())
  201.                 {
  202.                     SpecijalnaKarticka *s=new SpecijalnaKarticka();
  203.                     s=dynamic_cast<SpecijalnaKarticka *> (karticki[i]);
  204.                     if (s)
  205.                     {
  206.  
  207.                         if (s->getP()>s->getbr())
  208.                         {
  209.                             s->operator+=(novPin);
  210.                             //cout<<*s<<endl<<endl;
  211.                         }
  212.                     }
  213.                 }
  214.         }
  215.     }
  216. };
  217. int Banka::limit=7;
  218.  
  219. int main()
  220. {
  221.  
  222.     Karticka **niza;
  223.     int n,m,pin;
  224.     char smetka[16];
  225.     bool daliDopolnitelniPin;
  226.     cin>>n;
  227.     niza=new Karticka*[n];
  228.     for (int i=0; i<n; i++)
  229.     {
  230.         cin>>smetka;
  231.         cin>>pin;
  232.         cin>>daliDopolnitelniPin;
  233.         if (!daliDopolnitelniPin)
  234.             niza[i]=new Karticka(smetka,pin);
  235.         else
  236.             niza[i]=new SpecijalnaKarticka(smetka,pin);
  237.     }
  238.  
  239.     Banka komercijalna("Komercijalna",niza,n);
  240.     for (int i=0; i<n; i++) delete niza[i];
  241.     delete [] niza;
  242.     cin>>m;
  243.     for (int i=0; i<m; i++)
  244.     {
  245.         cin>>smetka>>pin;
  246.         komercijalna.dodadiDopolnitelenPin(smetka,pin);
  247.  
  248.  
  249.  
  250.     }
  251.  
  252.     Banka::setLIMIT(5);
  253.  
  254.     komercijalna.pecatiKarticki();
  255.  
  256. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement