Advertisement
Guest User

Untitled

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