Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string.h>
- using namespace std;
- class OutOfBoundException{};
- class Karticka{
- protected:
- char smetka[16];
- int pin;
- bool povekjePin;
- public:
- Karticka(char* smetka,int pin){
- strcpy(this->smetka,smetka);
- this->pin=pin;
- this->povekjePin=false;
- }
- // дополниете ја класата
- bool getDopolnitelenPin(){return povekjePin;}
- char *getSmetka(){return smetka;}
- virtual int tezinaProbivanje(){
- int temp=pin;
- int tezina=0;
- while(temp)
- {
- temp/=10;
- tezina++;
- }
- return tezina;
- }
- //operator overloading
- friend ostream &operator<<(ostream &out, Karticka &k)
- {
- out<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
- return out;
- }
- virtual ~Karticka(){}
- };
- //вметнете го кодот за SpecijalnaKarticka
- class SpecijalnaKarticka: public Karticka{
- private:
- int *dopolnitelni;
- int pinkodovi;
- const static int P;
- public:
- SpecijalnaKarticka(char *smetka, int pin): Karticka(smetka,pin){
- dopolnitelni=new int[0];
- pinkodovi=0;
- povekjePin=true;
- }
- //get metodi za exceptiono posle
- int getPINkodovi(){return pinkodovi;}
- int getP(){return P;}
- int tezinaProbivanje(){ return Karticka::tezinaProbivanje()+pinkodovi;}
- SpecijalnaKarticka &operator+=(int kod)
- {
- int *pom=dopolnitelni;
- dopolnitelni=new int[pinkodovi+1];
- for(int i=0;i<pinkodovi;i++)
- {
- dopolnitelni[i]=pom[i];
- }
- dopolnitelni[pinkodovi]=kod;
- pinkodovi++;
- return *this;
- }
- };
- const int SpecijalnaKarticka::P=4;
- class Banka {
- private:
- char naziv[30];
- Karticka *karticki[20];
- int broj;
- static int LIMIT;
- public:
- Banka(char *naziv, Karticka** karticki,int 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]);
- }
- this->broj=broj;
- }
- //да се дополни класата
- void dodadiDopolnitelenPin(char * smetka, int novPin) {
- for(int i=0;i<broj;i++){
- if(strcmp(karticki[i]->getSmetka(),smetka)==0&&karticki[i]->getDopolnitelenPin()){
- SpecijalnaKarticka *s=dynamic_cast<SpecijalnaKarticka*>(karticki[i]);
- *s+=novPin;
- }
- }
- }
- void pecatiKarticki(){
- cout<<"Vo bankata "<<naziv<<" moze da se probijat kartickite:"<<endl;
- for(int i=0;i<broj;i++)
- if(karticki[i]->tezinaProbivanje()<=LIMIT)
- cout<<*karticki[i];
- }
- static void setLIMIT(int L){LIMIT=L;}
- ~Banka(){
- for (int i=0;i<broj;i++) delete karticki[i];
- }
- };
- 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;
- //handling exception posto na tove red ke se vidi dali dozvolenio broj na pinove e povekje od dozvoleno
- try {komercijalna.dodadiDopolnitelenPin(smetka,pin);
- }
- catch(OutOfBoundException)
- {
- cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto"<<endl;
- }
- }
- Banka::setLIMIT(5);
- komercijalna.pecatiKarticki();
- }
Advertisement
Add Comment
Please, Sign In to add comment