Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1. Камион
- #include<iostream>
- #include<cstring>
- using namespace std;
- class ImaMasa
- {
- public:
- virtual double vratiMasa()=0;
- virtual void pecati()=0;
- virtual ~ImaMasa() {}
- };
- class PaketPijalok
- {
- protected:
- static double gustina;
- static double masaNaAmbalaza;
- double volumenEden;
- int kolicina;
- public:
- PaketPijalok(const double volumenEden=0, const int kolicina=0)
- {
- this->volumenEden=volumenEden;
- this->kolicina=kolicina;
- }
- ~PaketPijalok() {}
- double vratiMasa()
- {
- return (volumenEden*gustina+masaNaAmbalaza)*kolicina;
- }
- int getKolicina() { return kolicina; }
- double getVolumen() { return volumenEden; }
- double getGustina() { return gustina; }
- };
- double PaketPijalok::gustina=0.8;
- double PaketPijalok::masaNaAmbalaza=0.2;
- class PaketSok : public PaketPijalok, public ImaMasa
- {
- private:
- bool daliGaziran;
- public:
- PaketSok(const double volumenEden=0, const int kolicina=0, const bool daliGaziran=0) : PaketPijalok(volumenEden, kolicina)
- {
- this->daliGaziran=daliGaziran;
- }
- ~PaketSok() {}
- double vratiMasa()
- {
- if(daliGaziran)
- {
- return PaketPijalok::vratiMasa();
- }
- else
- {
- return PaketPijalok::vratiMasa()+0.1*kolicina;
- }
- }
- void pecati()
- {
- cout<<"Paket sok"<<endl;
- cout<<"kolicina "<<kolicina<<", so po "<<getVolumen()*getGustina()<<" l(dm3)"<<endl;
- }
- };
- class PaketVino : public PaketPijalok, public ImaMasa
- {
- private:
- double procentAlkohol;
- public:
- PaketVino(const double volumenEden=0, const int kolicina=0, const double procentAlkohol=0) : PaketPijalok(volumenEden, kolicina)
- {
- this->procentAlkohol=procentAlkohol;
- }
- ~PaketVino() {}
- double vratiMasa()
- {
- return PaketPijalok::vratiMasa()*(0.9+procentAlkohol);
- }
- double getProcentAlkohol()
- {
- return procentAlkohol;
- }
- void pecati()
- {
- cout<<"Paket vino"<<endl;
- cout<<"kolicina "<<kolicina<<", "<<procentAlkohol*100<<"% alkohol od po "<<getVolumen()*getGustina()<<" l(dm3)"<<endl;
- }
- };
- class Kamion
- {
- private:
- char *registracija;
- char *vozac;
- ImaMasa **p;
- int noP;
- public:
- Kamion(const char *vozac="")
- {
- this->vozac=new char[strlen(vozac)+1];
- strcpy(this->vozac, vozac);
- noP=0;
- if(!(isalpha(registracija[0]) && isalpha(registracija[1]) && isalpha(registracija[6]) && isalpha(registracija[7])))
- {
- throw 0;
- }
- }
- Kamion(const char *registracija="", const char *vozac="")
- {
- this->registracija=new char[strlen(registracija)+1];
- strcpy(this->registracija, registracija);
- this->vozac=new char[strlen(vozac)+1];
- strcpy(this->vozac, vozac);
- noP=0;
- if(!(isalpha(registracija[0]) && isalpha(registracija[1]) && isalpha(registracija[6]) && isalpha(registracija[7])))
- {
- throw 0;
- }
- }
- ~Kamion ()
- {
- delete [] registracija;
- delete [] vozac;
- for(int i=0; i<noP; i++)
- {
- delete p[i];
- }
- delete [] p;
- }
- void registriraj(char *registracija)
- {
- registracija=new char[strlen(registracija)+1];
- strcpy(this->registracija, registracija);
- }
- void dodadiElement(ImaMasa *n)
- {
- ImaMasa **temp=new ImaMasa*[noP+1];
- for(int i=0; i<noP; i++)
- {
- temp[i]=p[i];
- }
- temp[noP++]=n;
- p=new ImaMasa*[noP];
- for(int i=0; i<noP; i++)
- {
- p[i]=temp[i];
- }
- }
- double vratiVkupnaMasa()
- {
- double total=0;
- for(int i=0; i<noP; i++)
- {
- total+=p[i]->vratiMasa();
- }
- return total;
- }
- void pecati()
- {
- cout<<"Kamion so registracija "<<registracija<<" i vozac "<<vozac<<" prenesuva: "<<endl;
- for(int i=0; i<noP; i++)
- {
- p[i]->pecati();
- }
- }
- Kamion pretovar(char *registracija, char *vozac)
- {
- Kamion newTruck(registracija, vozac);
- double max=p[0]->vratiMasa();
- int index=0;
- for(int i=1; i<noP; i++)
- {
- if(p[i]->vratiMasa()>max)
- {
- max=p[i]->vratiMasa();
- index=i;
- }
- }
- for(int i=0; i<noP; i++)
- {
- if(i!=index)
- {
- newTruck.dodadiElement(p[i]);
- }
- }
- return newTruck;
- }
- };
- int main()
- {
- char ime[20], reg[9];
- double vol;
- int kol;
- bool g;
- double proc;
- try
- {
- cin>>reg;
- cin>>ime;
- Kamion A(reg, ime);
- ImaMasa **d = new ImaMasa*[5];
- cin>>vol>>kol;
- cin>>g;
- d[0] = new PaketSok(vol, kol, g);
- cin>>vol>>kol;
- cin>>proc;
- d[1] = new PaketVino(vol, kol, proc);
- cin>>vol>>kol;
- cin>>proc;
- d[2] = new PaketVino(vol, kol, proc);
- cin>>vol>>kol;
- cin>>g;
- d[3] = new PaketSok(vol, kol, g);
- cin>>vol>>kol;
- cin>>proc;
- d[4] = new PaketVino(vol, kol, proc);
- A.dodadiElement(d[0]);
- A.dodadiElement(d[1]);
- A.dodadiElement(d[2]);
- A.dodadiElement(d[3]);
- A.dodadiElement(d[4]);
- A.pecati();
- cout<<"Vkupna masa: "<<A.vratiVkupnaMasa()<<endl;
- cin>>reg;
- cin>>ime;
- Kamion B = A.pretovar(reg, ime);
- B.pecati();
- cout<<"Vkupna masa: "<<B.vratiVkupnaMasa()<<endl;
- }
- catch(int)
- {
- cout<<"Pogresno vnesena registracija"<<endl;
- }
- }
- 2. SocialNetwork
- #include <iostream>
- #include <cstring>
- using namespace std;
- bool validPassword(const char * pw) {
- bool uCL = false;
- bool lCL = false;
- bool num = false;
- for(int i = 0; i<strlen(pw); i++) {
- if(isupper(pw[i]))
- uCL=true;
- if(islower(pw[i]))
- lCL=true;
- if(isdigit(pw[i]))
- num=true;
- if(uCL&&lCL&&num)
- return true;
- }
- return false;
- }
- bool validEmail(const char * email) {
- // cout<<"CE: "<<email<<" - ";
- bool valid = false;
- int atCnt =0;
- for(int i = 0; i<strlen(email); i++) {
- if(email[i]=='@'){
- atCnt++;
- }
- }
- if(atCnt==1){
- return true;
- }
- return false;
- }
- class InvalidPassword {
- char msg[50];
- public:
- InvalidPassword(const char * msg) {
- strcpy(this->msg,msg);
- }
- void message(){cout<<msg<<endl;}
- };
- class InvalidEmail {
- char msg[50];
- public:
- InvalidEmail(const char * msg) {
- strcpy(this->msg,msg);
- }
- void message(){cout<<msg<<endl;}
- };
- class MaximumSizeLimit {
- int n;
- public:
- MaximumSizeLimit(int n) {
- this->n=n;
- }
- void message(){cout<<"You can't add more than "<<n<<" users."<<endl;}
- };
- class User {
- protected:
- char username[50];
- char password[50];
- char email[50];
- public:
- User(const char * username = "", const char * password ="", const char * email="") {
- strcpy(this->username,username);
- strcpy(this->password,password);
- strcpy(this->email,email);
- }
- virtual double popularity()=0;
- char * getEmail(){return email;}
- char * getPassword(){return password;}
- };
- class FacebookUser : public User {
- protected:
- int NumOfFriends;
- int NumOfLikes;
- int NumOfComments;
- static double COEFF_LIKES;
- static double COEFF_COMMENTS;
- public:
- FacebookUser(const char * username = "", const char * password ="", const char * email="", int NumOfFriends = 0, int NumOfLikes =0, int NumOfComments=0 ):
- User(username,password,email) {
- this->NumOfFriends=NumOfFriends;
- this->NumOfLikes=NumOfLikes;
- this->NumOfComments=NumOfComments;
- }
- double popularity() {
- return COEFF_LIKES*NumOfLikes+COEFF_COMMENTS*NumOfComments+NumOfFriends;
- }
- };
- double FacebookUser::COEFF_LIKES=0.1;
- double FacebookUser::COEFF_COMMENTS=0.5;
- class TwitterUser: public User {
- protected:
- int NumOfFollowers;
- int NumOfTweets;
- static double COEFF_TWEETS;
- public:
- TwitterUser(const char * username = "", const char * password ="", const char * email="", int NumOfFollowers = 0, int NumOfTweets =0 ):
- User(username,password,email) {
- this->NumOfFollowers=NumOfFollowers;
- this->NumOfTweets=NumOfTweets;
- }
- double popularity() {
- return NumOfTweets*COEFF_TWEETS+NumOfFollowers;
- }
- };
- double TwitterUser::COEFF_TWEETS=0.5;
- class SocialNetwork {
- protected:
- User** niza;
- int totalUsers;
- static int MAX_USERS;
- public:
- SocialNetwork() {
- niza=NULL;
- totalUsers=0;
- }
- SocialNetwork(SocialNetwork *s) {
- niza = new User*[s->totalUsers];
- for(int i =0; i<s->totalUsers; i++) {
- niza[i]=s->niza[i];
- }
- totalUsers=s->totalUsers;
- }
- SocialNetwork &operator=(SocialNetwork &s) {
- niza = new User*[s.totalUsers];
- for(int i =0; i<totalUsers; i++) {
- niza[i]=s.niza[i];
- }
- totalUsers=s.totalUsers;
- return *this;
- }
- SocialNetwork&operator+=(User *u) {
- User ** tmp = new User*[totalUsers+1];
- for(int i =0; i<totalUsers; i++) {
- tmp[i]=niza[i];
- }
- tmp[totalUsers++]=u;
- delete [] niza;
- niza=tmp;
- return *this;
- }
- double avgPopularity() {
- double pop_calc =0;
- for(int i =0; i<totalUsers; i++) {
- pop_calc+=niza[i]->popularity();
- }
- return pop_calc/totalUsers;
- }
- void changeMaximumSize(int number) {
- MAX_USERS=number;
- }
- static int getMAX_USERS() {
- return MAX_USERS;
- }
- int getTotalUsers(){return totalUsers;}
- };
- int SocialNetwork::MAX_USERS=5;
- int main() {
- SocialNetwork network = SocialNetwork();
- int n;
- cin >> n;
- char username[50];
- char password[50];
- char email[50];
- int userType;
- for (int i=0; i < n; ++i) {
- cin >> username;
- cin >> password;
- cin >> email;
- cin >> userType;
- // cout<<"MAIL:"<<email<<endl;
- if (userType == 1) {
- int friends;
- int likes;
- int comments;
- cin >> friends >> likes >> comments;
- // TODO: Try-catch
- try{
- User * u = new FacebookUser(username,password,email,friends,likes,comments);
- if(!validPassword(u->getPassword()))
- throw InvalidPassword("Password too weak.");
- else if(!validEmail(u->getEmail()))
- throw InvalidEmail("Mail is not valid.");
- if(SocialNetwork::getMAX_USERS()==network.getTotalUsers())
- throw MaximumSizeLimit(SocialNetwork::getMAX_USERS());
- network += u;
- }
- catch (InvalidPassword ip){
- ip.message();
- }
- catch (InvalidEmail ie){
- ie.message();
- }
- catch (MaximumSizeLimit max){
- max.message();
- }
- }
- else {
- int followers;
- int tweets;
- cin >> followers >> tweets;
- // TODO: Try-catch
- try{
- User * u= new TwitterUser(username,password,email,followers,tweets);
- if(!validPassword(u->getPassword()))
- throw InvalidPassword("Password is too weak.");
- else if(!validEmail(u->getEmail()))
- throw InvalidEmail("Mail is not valid.");
- if(SocialNetwork::getMAX_USERS()==network.getTotalUsers())
- throw MaximumSizeLimit(SocialNetwork::getMAX_USERS());
- network += u;
- }
- catch (InvalidPassword ip){
- ip.message();
- }
- catch (InvalidEmail ie){
- ie.message();
- }
- catch (MaximumSizeLimit max){
- max.message();
- }
- }
- }
- network.changeMaximumSize(6);
- cin >> username;
- cin >> password;
- cin >> email;
- int followers;
- int tweets;
- cin >> followers >> tweets;
- // TODO: Try-catch
- try{
- User * u= new TwitterUser(username,password,email,followers,tweets);
- if(!validPassword(u->getPassword()))
- throw InvalidPassword("Password is too weak.");
- else if(!validEmail(u->getEmail()))
- throw InvalidEmail("Mail is not valid.");
- if(SocialNetwork::getMAX_USERS()==network.getTotalUsers())
- throw MaximumSizeLimit(SocialNetwork::getMAX_USERS());
- network += u;
- }
- catch (InvalidPassword ip){
- ip.message();
- }
- catch (InvalidEmail ie){
- ie.message();
- }
- catch (MaximumSizeLimit max){
- max.message();
- }
- cout << network.avgPopularity();
- }
- 3. Трансакции
- #include<iostream>
- #include<cstring>
- using namespace std;
- class InvalidDateException {
- private:
- int den;
- int mesec;
- int godina;
- public:
- InvalidDateException(int den,int mesec,int godina) {
- this->den=den;
- this->mesec=mesec;
- this->godina=godina;
- }
- void print() {
- cout<<"Invalid Date "<<den<<"/"<<mesec<<"/"<<godina<<endl;
- }
- };
- // GBP is not a supported currency
- class NotSupportedCurrencyException {
- private:
- char valuta[3];
- public:
- NotSupportedCurrencyException(char *valuta) {
- strcpy(this->valuta,valuta);
- }
- void print() {
- cout<<valuta<<" is not a supported currency"<<endl;
- }
- };
- class Transakcija {
- protected:
- int den;
- int mesec;
- int godina;
- double iznos;
- static double EUR;
- static double USD;
- public:
- Transakcija() {}
- Transakcija(int den,int mesec,int godina,double iznos) {
- if((den<1 || den>31)||(mesec<1 || mesec>12)) {
- throw InvalidDateException(den,mesec,godina);
- }
- this->den=den;
- this->mesec=mesec;
- this->godina=godina;
- this->iznos=iznos;
- }
- static void setEUR(double x) {
- EUR=x;
- }
- static void setUSD(double x) {
- USD=x;
- }
- virtual double voDenari()=0;
- virtual void pecati()=0;
- };
- double Transakcija::EUR=61;
- double Transakcija::USD=50;
- class DenarskaTransakcija: public Transakcija {
- public:
- DenarskaTransakcija() {}
- DenarskaTransakcija(int den,int mesec,int godina,double iznos):Transakcija(den,mesec,godina,iznos) {
- }
- void pecati() {
- //05/06/2018 2500 MKD
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" MKD"<<endl;
- }
- double voDenari() {
- return iznos;
- }
- ~DenarskaTransakcija() {}
- };
- class DeviznaTransakcija: public Transakcija {
- private:
- char valuta[3];
- public:
- DeviznaTransakcija() {}
- DeviznaTransakcija(int den,int mesec,int godina,double iznos,char *valuta):Transakcija(den,mesec,godina,iznos) {
- if((strcmp(valuta,"EUR")!=0)&&(strcmp(valuta,"USD")!=0)) {
- throw NotSupportedCurrencyException(valuta);
- }
- strcpy(this->valuta,valuta);
- }
- ~DeviznaTransakcija() {}
- void pecati() {
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" "<<valuta<<endl;
- }
- double voDenari() {
- if(strcmp(valuta,"EUR")==0) {
- return iznos*EUR;
- } else if(strcmp(valuta,"USD")==0) {
- return iznos*USD;
- } else {
- return iznos;
- }
- }
- };
- class Smetka {
- private:
- Transakcija **transakcii;
- int n;
- char brSmetka[15];
- double saldo;
- public:
- Smetka() {
- transakcii=new Transakcija*[0];
- n=0;
- }
- Smetka(const char *brSmetka,double saldo) {
- transakcii=new Transakcija*[0];
- n=0;
- strcpy(this->brSmetka,brSmetka);
- this->saldo=saldo;
- }
- // Transakcija **transakcii;
- // int n=5;
- Smetka &operator+=(Transakcija *p) {
- Transakcija **tmp=new Transakcija*[n];
- for(int i=0; i<n; i++) {
- tmp[i]=transakcii[i];
- }
- transakcii=new Transakcija*[n+1];
- for(int i=0; i<n; i++) {
- transakcii[i]=tmp[i];
- }
- transakcii[n]=p;
- delete []tmp;
- n++;
- return *this;
- }
- /*
- Smetka &operator-=(Transakcija &p) {
- int brojac=0;
- Transakcija **tmp=new Transakcija*[n];
- for(int i=0; i<n; i++) {
- if(transakcii[i]!=p) {
- tmp[brojac]=transakcii[i];
- brojac++;
- }
- }
- //delete []transakcii;
- transakcii=new Transakcija*[brojac];
- for(int i=0; i<brojac; i++) {
- transakcii[i]=tmp[i];
- }
- delete []tmp;
- n=brojac;
- return *this;
- }
- */
- void izvestajVoDenari() {
- cout<<"Korisnikot so smetka: "<<brSmetka;
- double suma=0;
- for(int i=0; i<n; i++) {
- suma+=transakcii[i]->voDenari();
- }
- cout<<" ima momentalno saldo od "<<suma+saldo;
- cout<<" MKD"<<endl;
- }
- void pecatiTransakcii() {
- for(int i=0; i<n; i++) {
- transakcii[i]->pecati();
- }
- }
- ~Smetka() {
- delete []transakcii;
- }
- //Invalid Date 32/12/2018;
- };
- int main () {
- Smetka s ("300047024112789",1500);
- int n, den, mesec, godina, tip;
- double iznos;
- char valuta [3];
- cin>>n;
- cout<<"===VNESUVANJE NA TRANSAKCIITE I SPRAVUVANJE SO ISKLUCOCI==="<<endl;
- for (int i=0; i<n; i++) {
- cin>>tip>>den>>mesec>>godina>>iznos;
- try {
- if (tip==2) {
- cin>>valuta;
- Transakcija * t = new DeviznaTransakcija(den,mesec,godina,iznos,valuta);
- s+=t;
- //delete t;
- } else {
- Transakcija * t = new DenarskaTransakcija(den,mesec,godina,iznos);
- s+=t;
- //delete t;
- }
- } catch(InvalidDateException a) {
- a.print();
- } catch(NotSupportedCurrencyException a) {
- a.print();
- }
- }
- cout<<"===PECHATENJE NA SITE TRANSAKCII==="<<endl;
- s.pecatiTransakcii();
- cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
- s.izvestajVoDenari();
- cout<<"\n===PROMENA NA KURSOT NA EVROTO I DOLAROT===\n"<<endl;
- double newEUR, newUSD;
- cin>>newEUR>>newUSD;
- Transakcija::setEUR(newEUR);
- Transakcija::setUSD(newUSD);
- cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
- s.izvestajVoDenari();
- return 0;
- }
- 4. Трансакции (simple version)
- #include <iostream>
- #include <cstring>
- using namespace std;
- class X{
- public:
- virtual void print() const = 0;
- virtual ~X() = 0;
- };
- X::~X(){}
- class InvalidDateException : public X{
- int d;
- int m;
- int y;
- public:
- InvalidDateException(int d=0,int m=0,int y=0):d(d),m(m),y(y){}
- void print() const{cout<<"Invalid Date "<<d<<"/"<<m<<"/"<<y<<endl; }
- };
- class NotSupportedCurrencyException : public X{
- char dev[3];
- public:
- NotSupportedCurrencyException(char *dev)
- {
- strcpy(this->dev,dev);
- }
- void print() const{ cout<<dev<<" is not a supported currency"<<endl; }
- };
- class Transakcija{
- protected:
- int den;
- int mesec;
- int godina;
- double iznos;
- static double EUR;
- static double USD;
- public:
- Transakcija(){}
- Transakcija(int den,int mesec,int godina,double iznos)
- :den(den),mesec(mesec),godina(godina),iznos(iznos) {}
- virtual double voDenari() = 0;
- virtual void pecati() = 0;
- virtual ~Transakcija() = 0;
- static void setEUR(double e) { EUR = e;}
- static void setUSD(double u) { USD = u;}
- };
- Transakcija::~Transakcija(){}
- double Transakcija::EUR = 61;
- double Transakcija::USD = 50;
- class DenarskaTransakcija : public Transakcija{
- public:
- DenarskaTransakcija(int den,int mesec,int godina,double iznos):Transakcija(den,mesec,godina,iznos){}
- double voDenari() { return iznos;}
- void pecati() { cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" MKD"<<endl; }
- };
- class DeviznaTransakcija : public Transakcija{
- char dev[3];
- public:
- DeviznaTransakcija(int den,int mesec,int godina,double iznos,char *dev):Transakcija(den,mesec,godina,iznos)
- {
- strcpy(this->dev,dev);
- }
- double voDenari()
- {
- return (!strcmp(dev,"EUR")) ? iznos*Transakcija::EUR : iznos*Transakcija::USD;
- }
- void pecati() { cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" "<<dev<<endl; }
- };
- class Smetka{
- Transakcija **izvrseni;
- int br;
- char brSmetka[15];
- double saldo;
- public:
- Smetka(){ izvrseni=new Transakcija* [0]; br=0;}
- Smetka(char *brSmetka, double saldo):saldo(saldo)
- {
- strcpy(this->brSmetka,brSmetka);
- izvrseni=new Transakcija* [0];
- br=0;
- }
- Smetka(const Smetka &s):br(s.br),saldo(s.saldo)
- {
- strcpy(this->brSmetka,s.brSmetka);
- izvrseni=new Transakcija* [br];
- for(int i=0;i<br;++i)
- izvrseni[i]=s.izvrseni[i];
- }
- Smetka &operator=(const Smetka &s)
- {
- if(this!=&s)
- {
- br=s.br;
- saldo=s.saldo;
- strcpy(brSmetka,s.brSmetka);
- delete [] izvrseni;
- izvrseni=new Transakcija* [br];
- for(int i=0;i<br;++i)
- izvrseni[i]=s.izvrseni[i];
- }
- return *this;
- }
- ~Smetka()
- {
- for(int i=0;i<br;++i)
- delete izvrseni[i];
- delete [] izvrseni;
- }
- Smetka &operator+=(Transakcija *t)
- {
- Transakcija **tmp = new Transakcija* [br+1];
- for (int i=0;i<br;++i)
- tmp[i]=izvrseni[i];
- tmp[br++]=t;
- delete [] izvrseni;
- izvrseni=tmp;
- return *this;
- }
- void izvestajVoDenari()
- {
- double s=saldo;
- cout<<"Korisnikot so smetka: "<<brSmetka<<" ima momentalno saldo od ";
- for(int i=0;i<br;++i)
- s+=izvrseni[i]->voDenari();
- cout<<s<<" MKD"<<endl;
- }
- void pecatiTransakcii()
- {
- for(int i=0;i<br;++i)
- izvrseni[i]->pecati();
- }
- };
- int main()
- {
- Smetka s ("300047024112789",1500);
- int n, den, mesec, godina, tip;
- double iznos;
- char valuta [3];
- cin>>n;
- cout<<"===VNESUVANJE NA TRANSAKCIITE I SPRAVUVANJE SO ISKLUCOCI==="<<endl;
- for (int i=0;i<n;i++){
- cin>>tip>>den>>mesec>>godina>>iznos;
- try{
- if (tip==2){
- cin>>valuta;
- if(den<1 || den>31 || mesec<1 || mesec>12)
- throw InvalidDateException(den,mesec,godina);
- if(strcmp(valuta,"EUR")&&strcmp(valuta,"USD"))
- throw NotSupportedCurrencyException(valuta);
- Transakcija * t = new DeviznaTransakcija(den,mesec,godina,iznos,valuta);
- s+=t;
- }
- //delete t;
- else {
- if(den<1 || den>31 || mesec<1 || mesec>12)
- throw InvalidDateException(den,mesec,godina);
- Transakcija * t = new DenarskaTransakcija(den,mesec,godina,iznos);
- s+=t;
- }
- //delete t;
- }
- catch(X &x)
- {
- x.print();
- }
- }
- cout<<"===PECHATENJE NA SITE TRANSAKCII==="<<endl;
- s.pecatiTransakcii();
- cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
- s.izvestajVoDenari();
- cout<<"\n===PROMENA NA KURSOT NA EVROTO I DOLAROT===\n"<<endl;
- double newEUR, newUSD;
- cin>>newEUR>>newUSD;
- Transakcija::setEUR(newEUR);
- Transakcija::setUSD(newUSD);
- cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
- s.izvestajVoDenari();
- return 0;
- }
- 5. Броеви
- #include<iostream>
- #include<cstring>
- using namespace std;
- class ArithmeticException {
- public:
- void message() {
- cout<<"Division by zero is not allowed"<<endl;
- }
- };
- class NumbersNotDivisibleException {
- private:
- int divider;
- public:
- NumbersNotDivisibleException (int d){
- divider=d;
- }
- void message() {
- cout<<"Division by "<<divider<<" is not supported"<<endl;
- }
- };
- class ArrayFullException{
- public:
- void message() {
- cout<<"The array is full. Increase the capacity"<<endl;
- }
- };
- class IndexOutOfBoundsException {
- private:
- int index;
- public:
- IndexOutOfBoundsException(int i){
- index=i;
- }
- void message() {
- cout<<"Index "<<index<<" is out of bounds"<<endl;
- }
- };
- class NumbersIsNotPositiveException {
- private:
- int number;
- public:
- NumbersIsNotPositiveException(int n) {
- number=n;
- }
- void message() {
- cout<<"Number "<<number<<" is not positive integer"<<endl;
- }
- };
- class PositiveIntegers {
- private:
- int * numbers;
- int size;
- int capacity;
- void copy(const PositiveIntegers &ps){
- numbers = new int [ps.capacity];
- for (int i=0;i<ps.size;i++)
- numbers[i]=ps.numbers[i];
- size=ps.size;
- capacity=ps.capacity;
- }
- public:
- PositiveIntegers(int capacity=0){
- this->capacity=capacity;
- numbers = new int [capacity];
- size = 0;
- }
- PositiveIntegers (const PositiveIntegers &ps){
- copy(ps);
- }
- PositiveIntegers &operator = (const PositiveIntegers &ps){
- if (this!=&ps){
- delete [] numbers;
- copy(ps);
- }
- return *this;
- }
- ~PositiveIntegers() {
- //delete [] numbers;
- }
- void increaseCapacity(int c) {
- int * tmp = new int [capacity+c];
- for (int i=0;i<size;i++){
- tmp[i]=numbers[i];
- }
- delete [] numbers;
- numbers=tmp;
- capacity+=c;
- }
- PositiveIntegers &operator += (int newNumber){
- if (size==capacity)
- throw ArrayFullException();
- if (newNumber<=0)
- throw NumbersIsNotPositiveException(newNumber);
- numbers[size++]=newNumber;
- return *this;
- }
- PositiveIntegers operator * (int x) {
- PositiveIntegers pi (*this);
- for (int i=0;i<pi.size;i++)
- pi.numbers[i]*=x;
- return pi;
- }
- PositiveIntegers operator / (int x){
- if (x==0)
- throw ArithmeticException();
- for (int i=0;i<size;i++)
- if (numbers[i]%x!=0)
- throw NumbersNotDivisibleException(x);
- PositiveIntegers pi (*this);
- for (int i=0;i<pi.size;i++)
- pi.numbers[i]/=x;
- return pi;
- }
- int &operator [] (int i){
- if (i<0 || i>this->size)
- throw IndexOutOfBoundsException(i);
- return numbers[i];
- }
- void print () {
- cout<<"Size: "<<size<<" Capacity: "<<capacity<<" Numbers: ";
- for (int i=0;i<size;i++)
- cout<<numbers[i]<<" ";
- cout<<endl;
- }
- };
- int main() {
- int n,capacity;
- cin >> n >> capacity;
- PositiveIntegers pi (capacity);
- for (int i=0;i<n;i++){
- int number;
- cin>>number;
- try{
- //cout<<number;
- pi+=number;
- }
- catch (ArrayFullException &e){
- e.message();
- }
- catch (NumbersIsNotPositiveException &e){
- e.message();
- }
- }
- cout<<"===FIRST ATTEMPT TO ADD NUMBERS==="<<endl;
- pi.print();
- int incCapacity;
- cin>>incCapacity;
- pi.increaseCapacity(incCapacity);
- cout<<"===INCREASING CAPACITY==="<<endl;
- pi.print();
- int n1;
- cin>>n1;
- for (int i=0;i<n1;i++){
- int number;
- cin>>number;
- try{
- //cout<<number;
- pi+=number;
- }
- catch (ArrayFullException &e){
- e.message();
- }
- catch (NumbersIsNotPositiveException &e){
- e.message();
- }
- }
- cout<<"===SECOND ATTEMPT TO ADD NUMBERS==="<<endl;
- pi.print();
- PositiveIntegers pi1;
- cout<<"===TESTING DIVISION==="<<endl;
- try{
- pi1 = pi/0;
- pi1.print();
- }
- catch (ArithmeticException &e){
- e.message();
- }
- catch (NumbersNotDivisibleException &e){
- e.message();
- }
- try{
- pi1 = pi/1;
- pi1.print();
- }
- catch (ArithmeticException &e){
- e.message();
- }
- catch (NumbersNotDivisibleException &e){
- e.message();
- }
- try{
- pi1 = pi/2;
- pi1.print();
- }
- catch (ArithmeticException &e){
- e.message();
- }
- catch (NumbersNotDivisibleException &e){
- e.message();
- }
- cout<<"===TESTING MULTIPLICATION==="<<endl;
- pi1 = pi*3;
- pi1.print();
- cout<<"===TESTING [] ==="<<endl;
- try{
- cout<<"PositiveIntegers[-1] = "<<pi[-1]<<endl;
- }
- catch (IndexOutOfBoundsException &e){
- e.message();
- }
- try{
- cout<<"PositiveIntegers[2] = "<<pi[2]<<endl;
- }
- catch (IndexOutOfBoundsException &e){
- e.message();
- }
- try{
- cout<<"PositiveIntegers[3] = "<<pi[3]<<endl;
- }
- catch (IndexOutOfBoundsException &e){
- e.message();
- }
- try{
- cout<<"PositiveIntegers[12] = "<<pi[12]<<endl;
- }
- catch (IndexOutOfBoundsException &e){
- e.message();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement