Advertisement
frusso1337

Kamion C++ LAB 9

Apr 30th, 2018
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.68 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. class ImaMasa
  6. {
  7. public:
  8.     virtual double vratiMasa()=0; //cisto virtuelna funkcija
  9.     virtual void pecati()=0; //cisto virtuelna funckija
  10. };
  11. class PaketPijalok : public ImaMasa //PaketPijalok go nasleduva public delot na ImaMasa (virtuelnite funkcii koi treba da se prepokrijat)
  12. {
  13. protected:
  14.     double volumenEden;
  15.     int kolicina;
  16.     static const double GUSTINA=0.8; //staticki variabli
  17.     static const double MASA_AMBALAZHA=0.2;
  18. public:
  19.     PaketPijalok(double volumenEden=0.0f,int kolicina=0)
  20.     {
  21.         this->volumenEden=volumenEden;
  22.         this->kolicina=kolicina;
  23.     }
  24.     double vratiMasa()
  25.     {
  26.         return this->kolicina*(this->volumenEden*GUSTINA+MASA_AMBALAZHA);
  27.     }
  28.     void pecati()
  29.     {
  30.         cout << "kolicina " << this->kolicina << endl;
  31.     }
  32.     int getKolicina() {
  33.  
  34.      return this->kolicina;
  35.  }
  36.  
  37. };
  38. class PaketSok : public PaketPijalok //klasata PaketSok nasleduva public del od PaketPijalok(double vratiMasa(), pecati() i getKolicina()
  39. {
  40. private:
  41.     bool daliGaziran;
  42. public:
  43.     PaketSok(double volumenEden=0.0f,int kolicina=0,bool daliGaziran=false):PaketPijalok(volumenEden,kolicina)
  44.     {
  45.         this->daliGaziran=daliGaziran;
  46.     }
  47.     double vratiMasa()
  48.     {
  49.         if(daliGaziran)
  50.             return PaketPijalok::vratiMasa(); //ClassName Scope(::)nameofFunction
  51.         else return PaketPijalok::vratiMasa() + (0.1 * kolicina); //ako e gaziran
  52.     }
  53.     void pecati()
  54.     {
  55.         cout<<"Paket sok"<<endl;
  56.         cout<<"kolicina "<<kolicina<<", so po "<<volumenEden*GUSTINA<<" l(dm3)"<<endl;
  57.     }
  58. };
  59. class PaketVino : public PaketPijalok
  60. {
  61. private:
  62.     double procentAlkohol;
  63. public:
  64.     PaketVino(double volumenEden=0.0,int kolicina=0,double procentAlkohol=0.0):PaketPijalok(volumenEden,kolicina)
  65.     {
  66.         this->procentAlkohol=procentAlkohol;
  67.         try
  68.         {
  69.            if((procentAlkohol<0) || (procentAlkohol>1))
  70.             throw 1.1;
  71.         }
  72.         catch(double)
  73.         {
  74.             this->procentAlkohol=0;
  75.             cout<<"Pogresno vnesen procent na alkohol!"<<endl;
  76.         }
  77.     }
  78.     double vratiMasa()
  79.     {
  80.         return PaketPijalok::vratiMasa() * (0.9+procentAlkohol);
  81.     }
  82.     void pecati()
  83.     {
  84.         cout<<"Paket vino"<<endl;
  85.         cout<<"kolicina "<<kolicina<<", "<<procentAlkohol*100<<"% alkohol od po "<<volumenEden*GUSTINA<<" l(dm3)"<<endl;
  86.     }
  87.     double getProcentAlkohol() {
  88.  
  89.      return this->procentAlkohol;
  90.  }
  91.  
  92. };
  93. class Kamion
  94. {
  95. private:
  96.     char *registracija;
  97.     char *vozac;
  98.     ImaMasa **paketi;
  99.     int n;
  100. public:
  101.     Kamion(char *registracija="",char *vozac="",ImaMasa **paketi=NULL)
  102.     {
  103.         this->registracija = new char[strlen(registracija)+1]; //dinamicka alokacija na memorija
  104.         strcpy(this->registracija,registracija); //iskopiraj ja
  105.  
  106.         if(!(isalpha(registracija[0]) && isalpha(registracija[1]) && isalpha(registracija[6]) && isalpha(registracija[7])))
  107.             throw 1;
  108.  
  109.         this->vozac = new char[strlen(vozac)+1];
  110.         strcpy(this->vozac,vozac);
  111.         this->n=0;
  112.         paketi = new ImaMasa*[0];
  113.     }
  114.     void dodadiElement(ImaMasa *m)
  115.     {
  116.         ImaMasa **tmp;
  117.         tmp = new ImaMasa*[this->n+1];
  118.  
  119.         for(int i=0;i<n;i++)
  120.         {
  121.             tmp[i]=paketi[i];
  122.         }
  123.  
  124.         //delete [] this->paketi;
  125.  
  126.         paketi=tmp;
  127.         paketi[this->n]=m;
  128.         this->n++;
  129.     }
  130.     double vratiVkupnaMasa()
  131.     {
  132.         double vkupnaMasa=0;
  133.         for(int i=0;i<n;i++)
  134.         {
  135.             vkupnaMasa+=paketi[i]->vratiMasa();
  136.         }
  137.         return vkupnaMasa;
  138.     }
  139.     void pecati()
  140.     {
  141.         cout<<"Kamion so registracija "<<registracija<<" i vozac ";
  142.         cout<<vozac<<" prenesuva: "<<endl;
  143.         for(int i=0;i<n;i++)
  144.         {
  145.             paketi[i]->pecati(); // ke se pecatat za site proizvodi
  146.         }
  147.     }
  148.     Kamion pretovar(char *reg, char *ime)
  149.     {
  150.         delete[] this->vozac;
  151.         this->vozac=new char[strlen(ime)+1];
  152.         strcpy(this->vozac,ime);
  153.  
  154.         delete [] this->registracija;
  155.         this->registracija=new char[strlen(reg)+1];
  156.         strcpy(this->registracija,reg);
  157.  
  158.         double maxMasa=0;
  159.         int index=-1;
  160.         for(int i=0;i<n;i++)
  161.         {
  162.             if(paketi[i]->vratiMasa() > maxMasa)
  163.             {
  164.                 maxMasa=paketi[i]->vratiMasa();
  165.                 index=i;
  166.             }
  167.         }
  168.         ImaMasa *p = paketi[index];
  169.         ImaMasa **tmp=new ImaMasa*[n-1];
  170.         int j=-1;
  171.         for(int i=0;i<n;i++)
  172.         {
  173.             if(paketi[i] != p )
  174.             {
  175.                 j++;
  176.                 tmp[j]=paketi[i];
  177.             }
  178.  
  179.         }
  180.         delete [] paketi;
  181.         paketi=tmp;
  182.         this->n--;
  183.  
  184.         return *this;
  185.     }
  186. };
  187.  
  188. int main()
  189. {
  190. char ime[20], reg[9];
  191. double vol;
  192. int kol;
  193. bool g;
  194. double proc;
  195.  
  196. try{
  197. cin>>reg;
  198. cin>>ime;
  199. Kamion A(reg, ime);
  200. ImaMasa **d = new ImaMasa*[5];
  201. cin>>vol>>kol;
  202. cin>>g;
  203. d[0] = new PaketSok(vol, kol, g);
  204. cin>>vol>>kol;
  205. cin>>proc;
  206. d[1] = new PaketVino(vol, kol, proc);
  207. cin>>vol>>kol;
  208. cin>>proc;
  209. d[2] = new PaketVino(vol, kol, proc);
  210. cin>>vol>>kol;
  211. cin>>g;
  212. d[3] = new PaketSok(vol, kol, g);
  213. cin>>vol>>kol;
  214. cin>>proc;
  215. d[4] = new PaketVino(vol, kol, proc);
  216.  
  217. A.dodadiElement(d[0]);
  218. A.dodadiElement(d[1]);
  219. A.dodadiElement(d[2]);
  220. A.dodadiElement(d[3]);
  221. A.dodadiElement(d[4]);
  222. A.pecati();
  223. cout<<"Vkupna masa: "<<A.vratiVkupnaMasa()<<endl;
  224. cin>>reg;
  225. cin>>ime;
  226. Kamion B = A.pretovar(reg, ime);
  227. B.pecati();
  228. cout<<"Vkupna masa: "<<B.vratiVkupnaMasa()<<endl;
  229. }
  230. catch (int){
  231.  
  232. cout<<"Pogresno vnesena registracija";
  233. }
  234. return 0;
  235. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement