Advertisement
metalni

karticka izjebana

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