Advertisement
brsjak

Kamion

Apr 26th, 2016
431
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.15 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. class ImaMasa {
  6. public:
  7.     virtual double vratiMasa()=0;
  8.     virtual void pecati()=0;
  9. };
  10. class PaketPijalok {
  11. protected:
  12.     double volumenEden;
  13.     int kolicina;
  14. public:
  15.     static const double ambalaza=0.2;
  16.     static const double gustina=0.8;
  17.     PaketPijalok(double vol,int kol) {
  18.         volumenEden=vol;
  19.         kolicina=kol;
  20.         }
  21.     int getKolicina() {
  22.         return kolicina;
  23.     }
  24.     double vratiMasa() {
  25.         return (volumenEden*gustina+ambalaza)*getKolicina();
  26.     }
  27.     double getVolumen() {
  28.         return volumenEden;
  29.     }
  30.     double getGustina() {
  31.         return gustina;
  32.     }
  33.     void pecati() {
  34.         cout<<"kolicina "<<kolicina;
  35.     }
  36. };
  37.  
  38. class PaketSok:public PaketPijalok,public ImaMasa {
  39. private:
  40.         bool daliGaziran;
  41. public:
  42.         PaketSok(double vol,int kol, bool gaziran):PaketPijalok(vol,kol) {
  43.                 daliGaziran=gaziran;
  44.         }
  45.    
  46. double vratiMasa() {
  47.     if(daliGaziran==true) {
  48.     return PaketPijalok::vratiMasa();
  49.         }
  50.         else {
  51.                 return PaketPijalok::vratiMasa()+0.1*PaketPijalok::getKolicina();
  52.         }
  53. }
  54.    
  55. void pecati() {
  56.     cout<<"Paket sok"<<endl;
  57.     cout<<"kolicina "<<kolicina<<", so po "<<getVolumen()*getGustina()<<" l(dm3)"<<endl;
  58. }
  59. };
  60.  
  61. class PaketVino:public PaketPijalok,public ImaMasa {
  62. private:
  63.         double procent_alkohol;
  64. public:
  65.         PaketVino(double vol,int kol,double pro):PaketPijalok(vol,kol) {
  66.         try {
  67.             procent_alkohol=pro;
  68.             if(procent_alkohol<0 || procent_alkohol>1)
  69.             throw 1;
  70.         }
  71.         catch (int) {
  72.             cout<<"Pogresno vnesen procent na alkohol!"<<endl;
  73.             procent_alkohol=0;
  74.         }
  75. }
  76. double getProcentAlkohol() {
  77.         return procent_alkohol;
  78. }
  79. double vratiMasa() {
  80.         return PaketPijalok::vratiMasa()*(0.9+procent_alkohol);
  81. }
  82. void pecati() {
  83.     cout<<"Paket vino"<<endl;
  84.     cout<<"kolicina "<<kolicina<<", "<<procent_alkohol*100<<"% alkohol od po "<<getVolumen()*getGustina()<<" l(dm3)"<<endl;
  85. }
  86. };
  87.  
  88. class Kamion {
  89. private:
  90.     char registracija[9];
  91.     char vozac[50];
  92.     ImaMasa ** niza;
  93.     int broj_elementi;
  94. public:
  95.         Kamion(char *reg,char *voz) {
  96.         if(!(isalpha(reg[0])&&isalpha(reg[1]) && isalpha(reg[7]) && isalpha(reg[6])))
  97.         throw 0;
  98.         strcpy(registracija,reg);
  99.         strcpy(vozac,voz);
  100.         niza=new ImaMasa*[10];
  101.         broj_elementi=0;
  102. }
  103. void setRegistracija(char* r) {
  104.         strcpy(registracija, r);
  105. }
  106. void setVozac(char* v) {
  107.         strcpy(vozac, v);
  108. }
  109. void setBroj(int b) {
  110.         broj_elementi= b;
  111. }
  112. Kamion(char *reg,char *voz,ImaMasa ** m,int broj) {
  113.     niza=new ImaMasa*[broj];
  114.     for(int i=0;i<broj;i++)
  115.     niza[i]=m[i];
  116.     broj_elementi=broj;
  117. }
  118. void dodadiElement(ImaMasa *n) {
  119.     ImaMasa ** pom=new ImaMasa*[broj_elementi+1];
  120.     for(int i=0;i<broj_elementi;i++) {
  121.         pom[i]=niza[i];
  122.     }
  123.     pom[broj_elementi]=n;
  124.     broj_elementi++;
  125.     niza=new ImaMasa*[broj_elementi];
  126.     for(int i=0;i<broj_elementi;i++) {
  127.         niza[i]=pom[i];
  128.     }
  129. }
  130. double vratiVkupnaMasa() {
  131.     double vkupno=0;
  132.     for(int i=0;i<broj_elementi;i++) {
  133.         vkupno+=niza[i]->vratiMasa();
  134.     }
  135.     return vkupno;
  136. }
  137. void pecati() {
  138.     cout<<"Kamion so registracija "<<registracija<<" i vozac "<< vozac<<" prenesuva: "<<endl;
  139.     for(int i=0;i<broj_elementi;i++) {
  140.         niza[i]->pecati();
  141.     }
  142. }
  143. Kamion pretovar(char *reg,char * voz) {
  144.     Kamion nov(reg,voz);
  145.     int max_i=0;
  146.     double max_masa=niza[0]->vratiMasa();
  147.     for(int i=0;i<broj_elementi;i++) {
  148.         if(niza[i]->vratiMasa()>max_masa) {
  149.             max_masa=niza[i]->vratiMasa();
  150.             max_i=i;
  151.         }
  152.     }
  153.     for(int i=0;i<broj_elementi;i++) {
  154.         if(i!=max_i)
  155.         nov.dodadiElement(niza[i]);
  156.     }
  157.     return nov;
  158.     }
  159. };
  160.  
  161. int main()
  162. {
  163.     char ime[20], reg[9];
  164.     double vol;
  165.     int kol;
  166.     bool g;
  167.     double proc;
  168.     try {
  169.    
  170.             cin>>reg;
  171.             cin>>ime;
  172.             Kamion A(reg, ime);
  173.             ImaMasa **d = new ImaMasa*[5];
  174.             cin>>vol>>kol;
  175.             cin>>g;
  176.             d[0] = new PaketSok(vol, kol, g);
  177.             cin>>vol>>kol;
  178.             cin>>proc;
  179.             d[1] = new PaketVino(vol, kol, proc);
  180.             cin>>vol>>kol;
  181.             cin>>proc;
  182.             d[2] = new PaketVino(vol, kol, proc);
  183.             cin>>vol>>kol;
  184.             cin>>g;
  185.             d[3] = new PaketSok(vol, kol, g);
  186.             cin>>vol>>kol;
  187.             cin>>proc;
  188.             d[4] = new PaketVino(vol, kol, proc);
  189.  
  190.             A.dodadiElement(d[0]);
  191.             A.dodadiElement(d[1]);
  192.             A.dodadiElement(d[2]);
  193.             A.dodadiElement(d[3]);
  194.             A.dodadiElement(d[4]);
  195.             A.pecati();
  196.             cout<<"Vkupna masa: "<<A.vratiVkupnaMasa()<<endl;
  197.             cin>>reg;
  198.             cin>>ime;
  199.             Kamion B = A.pretovar(reg, ime);
  200.             B.pecati();
  201.             cout<<"Vkupna masa: "<<B.vratiVkupnaMasa()<<endl;
  202.     }
  203.     catch(int) {
  204.         cout<<"Pogresno vnesena registracija"<<endl;
  205. }
  206.  
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement