Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string.h>
- using namespace std;
- class OutOfBoundException
- {
- public:
- void print() { std::cout << "Brojot na pin kodovi ne moze da go nadmine dozvolenoto" << std::endl; }
- };
- class Karticka
- {
- protected:
- char smetka[16];
- int pin;
- bool povekjePin;
- public:
- Karticka(const char* smetka,int pin)
- : pin(pin), povekjePin(false) { strcpy(this->smetka,smetka); }
- virtual ~Karticka(){}
- // дополниете ја класата
- // Functions
- virtual int tezinaProbivanje() const
- {
- int count = 0;
- int temp = pin;
- while(temp !=0)
- {
- temp/=10;
- count++;
- }
- return count;
- }
- const char *getSmetka() const { return smetka; }
- bool getDopolnitelenPin() const { return povekjePin; }
- };
- //вметнете го кодот за SpecijalnaKarticka
- class SpecijalnaKarticka : public Karticka
- {
- private:
- int *dopolnitelni_pinovi; // dynamically allocated
- int br_pin;
- static const int P;
- public:
- // Constructors
- SpecijalnaKarticka(const char *smetka, int pin)
- : Karticka(smetka, pin), br_pin(0)
- {
- povekjePin = true;
- dopolnitelni_pinovi = new int[0];
- }
- ~SpecijalnaKarticka() { delete [] dopolnitelni_pinovi; }
- // Functions
- int tezinaProbivanje() const override { return br_pin + Karticka::tezinaProbivanje(); }
- // Overloaded operators
- SpecijalnaKarticka &operator +=(int pin)
- {
- if(br_pin + 1 > P) throw OutOfBoundException();
- int *temp = new int[br_pin + 1];
- for(int i = 0; i < br_pin; i++) temp[i] = dopolnitelni_pinovi[i];
- temp[br_pin++] = pin;
- delete [] dopolnitelni_pinovi;
- dopolnitelni_pinovi = temp;
- return *this;
- }
- };
- const int SpecijalnaKarticka::P = 4;
- std::ostream &operator <<(std::ostream &output, const Karticka &ob)
- {
- output << ob.getSmetka() << ": " << ob.tezinaProbivanje() << std::endl;
- return output;
- }
- class Banka
- {
- private:
- char naziv[30];
- Karticka *karticki[20];
- int broj;
- static int LIMIT;
- public:
- Banka(const char *naziv, Karticka** karticki,int broj )
- : broj(broj)
- {
- strcpy(this->naziv,naziv);
- for (int i=0;i<broj;i++)
- {
- //ako kartickata ima dopolnitelni pin kodovi
- if (karticki[i]->getDopolnitelenPin()) this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
- else this->karticki[i]=new Karticka(*karticki[i]);
- }
- }
- ~Banka() { for (int i=0;i<broj;i++) delete karticki[i]; }
- //да се дополни класата
- // Functions
- static void setLIMIT(int x) { LIMIT = x; }
- void pecatiKarticki() const
- {
- std::cout << "Vo bankata " << naziv << " moze da se probijat kartickite:" << endl;
- for(int i = 0; i < broj; i++)
- {
- if(karticki[i]->tezinaProbivanje() <= LIMIT) std::cout << *(karticki[i]);
- }
- }
- void dodadiDopolnitelenPin(const char *smetka, int novPin)
- {
- // for(int i = 0; i < broj; i++)
- // {
- // if(strcmp(karticki[i]->getSmetka(), smetka) == 0)
- // {
- // SpecijalnaKarticka *a = dynamic_cast <SpecijalnaKarticka *>(karticki[i]);
- // if(a) *a += novPin;
- // }
- // }
- // ati
- int index = -1;
- for(int i = 0; i < broj; i++)
- {
- if(strcmp(smetka, karticki[i]->getSmetka()) == 0&&karticki[i]->getDopolnitelenPin())
- {
- index = i;
- break;
- }
- }
- if(index != -1)
- {
- SpecijalnaKarticka *a = dynamic_cast <SpecijalnaKarticka *>(karticki[index]);
- *a += novPin;
- }
- }
- };
- int Banka::LIMIT = 7;
- int main(){
- Karticka **niza;
- int n,m,pin;
- char smetka[16];
- bool daliDopolnitelniPin;
- cin>>n;
- niza=new Karticka*[n];
- for (int i=0;i<n;i++){
- cin>>smetka;
- cin>>pin;
- cin>>daliDopolnitelniPin;
- if (!daliDopolnitelniPin)
- niza[i]=new Karticka(smetka,pin);
- else
- niza[i]=new SpecijalnaKarticka(smetka,pin);
- }
- Banka komercijalna("Komercijalna",niza,n);
- for (int i=0;i<n;i++) delete niza[i];
- delete [] niza;
- cin>>m;
- for (int i=0;i<m;i++)
- {
- cin>>smetka>>pin;
- try { komercijalna.dodadiDopolnitelenPin(smetka,pin); }
- catch(OutOfBoundException y) { y.print(); }
- }
- Banka::setLIMIT(5);
- komercijalna.pecatiKarticki();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement