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(){}
- Karticka(char* smetka,int pin){
- strcpy(this->smetka,smetka);
- this->pin=pin;
- this->povekjePin=false;
- }
- // дополниете ја класата
- Karticka(Karticka& k){
- strcpy(smetka,k.smetka);
- pin=k.pin;
- povekjePin=k.povekjePin;
- }
- friend ostream& operator<<(ostream& out,Karticka& k){
- return out<<k.smetka<<": "<<k.tezhinaProbivanje()<<endl;
- }
- virtual int tezhinaProbivanje(){
- int temp=pin;
- int cifri=0;
- while(temp){
- cifri++;
- temp/=10;
- }
- return cifri;
- }
- virtual bool getPovekjePin(){
- return povekjePin;
- }
- char* getSmetka(){
- return smetka;
- }
- };
- //вметнете го кодот за SpecijalnaKarticka
- class SpecijalnaKarticka:public Karticka{
- protected:
- int *pinovi;
- int brPinovi;
- static const int P=4;
- public:
- SpecijalnaKarticka(char* smetka,int pin):Karticka(smetka,pin){
- brPinovi=0;
- pinovi=new int [0];
- povekjePin=true;
- }
- SpecijalnaKarticka(const SpecijalnaKarticka& s){
- strcpy(smetka,s.smetka);
- pin=s.pin;
- povekjePin=s.povekjePin;
- brPinovi=s.brPinovi;
- delete [] pinovi;
- for(int i=0;i<brPinovi;i++){
- pinovi[i]=s.pinovi[i];
- }
- }
- int tezhinaProbivanje(){
- int temp=pin;
- int cifri=0;
- while(temp){
- cifri++;
- temp/=10;
- }
- //for(int i=0;i<brPinovi;i++){
- // temp=pinovi[i];
- // while(temp){
- // cifri++;
- // temp/=10;
- // }
- //}
- return cifri+brPinovi;
- }
- SpecijalnaKarticka& operator+=(int nov){
- if(brPinovi==P) throw OutOfBoundException();
- int *temp=pinovi;
- //delete [] pinovi;
- pinovi= new int [brPinovi+1];
- for(int i=0;i<brPinovi;i++){
- pinovi[i]=temp[i];
- }
- delete [] temp;
- pinovi[brPinovi++]=nov;
- return *this;
- }
- bool getPovekjePin(){
- return povekjePin;
- }
- };
- 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]->getPovekjePin()){
- this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
- }
- else this->karticki[i]=new Karticka(*karticki[i]);
- }
- this->broj=broj;
- }
- ~Banka(){
- for (int i=0;i<broj;i++) delete karticki[i];
- }
- //да се дополни класата
- static void setLIMIT(int n){
- LIMIT=n;
- }
- void pecatiKarticki(){
- cout<<"Vo bankata "<<naziv<<" moze da se probijat kartickite:"<<endl;
- for(int i=0;i<broj;i++){
- if(karticki[i]->tezhinaProbivanje()<=LIMIT){
- cout<<*karticki[i];
- }
- }
- }
- void dodadiDopolnitelenPin(char* smetka,int novPin){
- for(int i=0;i<broj;i++){
- if(!strcmp(smetka,karticki[i]->getSmetka())){
- if(karticki[i]->getPovekjePin()){
- SpecijalnaKarticka* sk=dynamic_cast<SpecijalnaKarticka*>(karticki[i]);
- try{
- *sk+=novPin;
- } catch (OutOfBoundException e){
- cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto"<<endl;
- }
- }
- }
- }
- }
- };
- 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;
- komercijalna.dodadiDopolnitelenPin(smetka,pin);
- }
- Banka::setLIMIT(5);
- komercijalna.pecatiKarticki();
- }
Add Comment
Please, Sign In to add comment