Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class ImaMasa
- {
- public:
- virtual double vratiMasa()=0; //cisto virtuelna funkcija
- virtual void pecati()=0; //cisto virtuelna funckija
- };
- class PaketPijalok : public ImaMasa //PaketPijalok go nasleduva public delot na ImaMasa (virtuelnite funkcii koi treba da se prepokrijat)
- {
- protected:
- double volumenEden;
- int kolicina;
- static const double GUSTINA=0.8; //staticki variabli
- static const double MASA_AMBALAZHA=0.2;
- public:
- PaketPijalok(double volumenEden=0.0f,int kolicina=0)
- {
- this->volumenEden=volumenEden;
- this->kolicina=kolicina;
- }
- double vratiMasa()
- {
- return this->kolicina*(this->volumenEden*GUSTINA+MASA_AMBALAZHA);
- }
- void pecati()
- {
- cout << "kolicina " << this->kolicina << endl;
- }
- int getKolicina() {
- return this->kolicina;
- }
- };
- class PaketSok : public PaketPijalok //klasata PaketSok nasleduva public del od PaketPijalok(double vratiMasa(), pecati() i getKolicina()
- {
- private:
- bool daliGaziran;
- public:
- PaketSok(double volumenEden=0.0f,int kolicina=0,bool daliGaziran=false):PaketPijalok(volumenEden,kolicina)
- {
- this->daliGaziran=daliGaziran;
- }
- double vratiMasa()
- {
- if(daliGaziran)
- return PaketPijalok::vratiMasa(); //ClassName Scope(::)nameofFunction
- else return PaketPijalok::vratiMasa() + (0.1 * kolicina); //ako e gaziran
- }
- void pecati()
- {
- cout<<"Paket sok"<<endl;
- cout<<"kolicina "<<kolicina<<", so po "<<volumenEden*GUSTINA<<" l(dm3)"<<endl;
- }
- };
- class PaketVino : public PaketPijalok
- {
- private:
- double procentAlkohol;
- public:
- PaketVino(double volumenEden=0.0,int kolicina=0,double procentAlkohol=0.0):PaketPijalok(volumenEden,kolicina)
- {
- this->procentAlkohol=procentAlkohol;
- try
- {
- if((procentAlkohol<0) || (procentAlkohol>1))
- throw 1.1;
- }
- catch(double)
- {
- this->procentAlkohol=0;
- cout<<"Pogresno vnesen procent na alkohol!"<<endl;
- }
- }
- double vratiMasa()
- {
- return PaketPijalok::vratiMasa() * (0.9+procentAlkohol);
- }
- void pecati()
- {
- cout<<"Paket vino"<<endl;
- cout<<"kolicina "<<kolicina<<", "<<procentAlkohol*100<<"% alkohol od po "<<volumenEden*GUSTINA<<" l(dm3)"<<endl;
- }
- double getProcentAlkohol() {
- return this->procentAlkohol;
- }
- };
- class Kamion
- {
- private:
- char *registracija;
- char *vozac;
- ImaMasa **paketi;
- int n;
- public:
- Kamion(char *registracija="",char *vozac="",ImaMasa **paketi=NULL)
- {
- this->registracija = new char[strlen(registracija)+1]; //dinamicka alokacija na memorija
- strcpy(this->registracija,registracija); //iskopiraj ja
- if(!(isalpha(registracija[0]) && isalpha(registracija[1]) && isalpha(registracija[6]) && isalpha(registracija[7])))
- throw 1;
- this->vozac = new char[strlen(vozac)+1];
- strcpy(this->vozac,vozac);
- this->n=0;
- paketi = new ImaMasa*[0];
- }
- void dodadiElement(ImaMasa *m)
- {
- ImaMasa **tmp;
- tmp = new ImaMasa*[this->n+1];
- for(int i=0;i<n;i++)
- {
- tmp[i]=paketi[i];
- }
- //delete [] this->paketi;
- paketi=tmp;
- paketi[this->n]=m;
- this->n++;
- }
- double vratiVkupnaMasa()
- {
- double vkupnaMasa=0;
- for(int i=0;i<n;i++)
- {
- vkupnaMasa+=paketi[i]->vratiMasa();
- }
- return vkupnaMasa;
- }
- void pecati()
- {
- cout<<"Kamion so registracija "<<registracija<<" i vozac ";
- cout<<vozac<<" prenesuva: "<<endl;
- for(int i=0;i<n;i++)
- {
- paketi[i]->pecati(); // ke se pecatat za site proizvodi
- }
- }
- Kamion pretovar(char *reg, char *ime)
- {
- delete[] this->vozac;
- this->vozac=new char[strlen(ime)+1];
- strcpy(this->vozac,ime);
- delete [] this->registracija;
- this->registracija=new char[strlen(reg)+1];
- strcpy(this->registracija,reg);
- double maxMasa=0;
- int index=-1;
- for(int i=0;i<n;i++)
- {
- if(paketi[i]->vratiMasa() > maxMasa)
- {
- maxMasa=paketi[i]->vratiMasa();
- index=i;
- }
- }
- ImaMasa *p = paketi[index];
- ImaMasa **tmp=new ImaMasa*[n-1];
- int j=-1;
- for(int i=0;i<n;i++)
- {
- if(paketi[i] != p )
- {
- j++;
- tmp[j]=paketi[i];
- }
- }
- delete [] paketi;
- paketi=tmp;
- this->n--;
- return *this;
- }
- };
- 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";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement