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 t=pin;
- int tezina=0;
- while(t){
- t/=10;
- tezina++;
- }
- return tezina;
- }
- friend ostream& operator<<(ostream &out,Karticka &k){
- out<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
- return out;
- }
- virtual ~Karticka(){}
- // дополниете ја класата
- };
- //вметнете го кодот за SpecijalnaKarticka
- class SpecijalnaKarticka : public Karticka{
- private:
- int *dopolnitelniKod;
- int brkod;
- const static int P;
- public:
- SpecijalnaKarticka(char* smetka,int pin) : Karticka(smetka,pin){
- dopolnitelniKod=new int[0];
- povekjePin=true;
- brkod=0;
- }
- int getBrKod(){
- return brkod;
- }
- int getP(){
- return P;
- }
- int tezinaProbivanje(){
- return Karticka::tezinaProbivanje()+brkod;
- }
- SpecijalnaKarticka& operator+=(int kod){
- int *temp;
- temp=new int[brkod+1];
- for(int i=0;i<brkod;i++){
- temp[i]=dopolnitelniKod[i];
- }
- temp[brkod]=kod;
- delete[]dopolnitelniKod;
- dopolnitelniKod=temp;
- brkod++;
- return *this;
- }
- ~SpecijalnaKarticka(){}
- };
- 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;
- }
- static void setLIMIT(int l){
- LIMIT=l;
- }
- 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];
- }
- }
- }
- void dodadiDopolnitelenPin(char * smetka, int novPin) {
- for(int i=0;i<broj;i++){
- if(strcmp(karticki[i]->getSmetka(),smetka)==0){
- SpecijalnaKarticka *s=dynamic_cast<SpecijalnaKarticka*>(karticki[i]);
- if(s){
- if(s->getBrKod()>s->getP()){
- throw OutOfBoundException();
- }
- *s+=novPin;
- }
- }
- }
- }
- ~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;
- try{
- komercijalna.dodadiDopolnitelenPin(smetka,pin);
- }
- catch(OutOfBoundException){
- cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto";
- }
- }
- Banka::setLIMIT(5);
- komercijalna.pecatiKarticki();
- }
Add Comment
Please, Sign In to add comment