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;
- virtual void pecati()=0;
- };
- class PaketPijalok {
- protected:
- double volumenEden;
- int kolicina;
- public:
- static const double ambalaza=0.2;
- static const double gustina=0.8;
- PaketPijalok(double vol,int kol) {
- volumenEden=vol;
- kolicina=kol;
- }
- int getKolicina() {
- return kolicina;
- }
- double vratiMasa() {
- return (volumenEden*gustina+ambalaza)*getKolicina();
- }
- double getVolumen() {
- return volumenEden;
- }
- double getGustina() {
- return gustina;
- }
- void pecati() {
- cout<<"kolicina "<<kolicina;
- }
- };
- class PaketSok:public PaketPijalok,public ImaMasa {
- private:
- bool daliGaziran;
- public:
- PaketSok(double vol,int kol, bool gaziran):PaketPijalok(vol,kol) {
- daliGaziran=gaziran;
- }
- double vratiMasa() {
- if(daliGaziran==true) {
- return PaketPijalok::vratiMasa();
- }
- else {
- return PaketPijalok::vratiMasa()+0.1*PaketPijalok::getKolicina();
- }
- }
- void pecati() {
- cout<<"Paket sok"<<endl;
- cout<<"kolicina "<<kolicina<<", so po "<<getVolumen()*getGustina()<<" l(dm3)"<<endl;
- }
- };
- class PaketVino:public PaketPijalok,public ImaMasa {
- private:
- double procent_alkohol;
- public:
- PaketVino(double vol,int kol,double pro):PaketPijalok(vol,kol) {
- try {
- procent_alkohol=pro;
- if(procent_alkohol<0 || procent_alkohol>1)
- throw 1;
- }
- catch (int) {
- cout<<"Pogresno vnesen procent na alkohol!"<<endl;
- procent_alkohol=0;
- }
- }
- double getProcentAlkohol() {
- return procent_alkohol;
- }
- double vratiMasa() {
- return PaketPijalok::vratiMasa()*(0.9+procent_alkohol);
- }
- void pecati() {
- cout<<"Paket vino"<<endl;
- cout<<"kolicina "<<kolicina<<", "<<procent_alkohol*100<<"% alkohol od po "<<getVolumen()*getGustina()<<" l(dm3)"<<endl;
- }
- };
- class Kamion {
- private:
- char registracija[9];
- char vozac[50];
- ImaMasa ** niza;
- int broj_elementi;
- public:
- Kamion(char *reg,char *voz) {
- if(!(isalpha(reg[0])&&isalpha(reg[1]) && isalpha(reg[7]) && isalpha(reg[6])))
- throw 0;
- strcpy(registracija,reg);
- strcpy(vozac,voz);
- niza=new ImaMasa*[10];
- broj_elementi=0;
- }
- void setRegistracija(char* r) {
- strcpy(registracija, r);
- }
- void setVozac(char* v) {
- strcpy(vozac, v);
- }
- void setBroj(int b) {
- broj_elementi= b;
- }
- Kamion(char *reg,char *voz,ImaMasa ** m,int broj) {
- niza=new ImaMasa*[broj];
- for(int i=0;i<broj;i++)
- niza[i]=m[i];
- broj_elementi=broj;
- }
- void dodadiElement(ImaMasa *n) {
- ImaMasa ** pom=new ImaMasa*[broj_elementi+1];
- for(int i=0;i<broj_elementi;i++) {
- pom[i]=niza[i];
- }
- pom[broj_elementi]=n;
- broj_elementi++;
- niza=new ImaMasa*[broj_elementi];
- for(int i=0;i<broj_elementi;i++) {
- niza[i]=pom[i];
- }
- }
- double vratiVkupnaMasa() {
- double vkupno=0;
- for(int i=0;i<broj_elementi;i++) {
- vkupno+=niza[i]->vratiMasa();
- }
- return vkupno;
- }
- void pecati() {
- cout<<"Kamion so registracija "<<registracija<<" i vozac "<< vozac<<" prenesuva: "<<endl;
- for(int i=0;i<broj_elementi;i++) {
- niza[i]->pecati();
- }
- }
- Kamion pretovar(char *reg,char * voz) {
- Kamion nov(reg,voz);
- int max_i=0;
- double max_masa=niza[0]->vratiMasa();
- for(int i=0;i<broj_elementi;i++) {
- if(niza[i]->vratiMasa()>max_masa) {
- max_masa=niza[i]->vratiMasa();
- max_i=i;
- }
- }
- for(int i=0;i<broj_elementi;i++) {
- if(i!=max_i)
- nov.dodadiElement(niza[i]);
- }
- return nov;
- }
- };
- 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;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement