#include #include 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;igetDopolnitelenPin()) this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast(karticki[i])); else this->karticki[i]=new Karticka(*karticki[i]); } } ~Banka() { for (int i=0;itezinaProbivanje() <= 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 (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 (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>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>m; for (int i=0;i>smetka>>pin; try { komercijalna.dodadiDopolnitelenPin(smetka,pin); } catch(OutOfBoundException y) { y.print(); } } Banka::setLIMIT(5); komercijalna.pecatiKarticki(); }