StefiIOE

Karticka vezbi

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