brsjak

Картичка (10/10)

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