Advertisement
196040

OOP labs 7 Vozilo

May 15th, 2020
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.89 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. class Vozilo { //Да се дефинира класа Vozilo која
  4. private: //ќе содржи информација за
  5.     double masa; //неговата маса (децимален број),
  6.     int sirina, visina; //ширина и висина (цели броеви).
  7. public:
  8.     Vozilo() { // defaulten konstruktor
  9.         this-> masa = 0;
  10.         this-> sirina = 0;
  11.         this-> visina = 0;
  12.     }
  13.     Vozilo (double masa, int sirina, int visina) { // konstruktor so argumenti
  14.         this->masa = masa;
  15.         this-> sirina = sirina;
  16.         this-> visina = visina;
  17.     }
  18.     Vozilo (const Vozilo &v) { // copy konstruktor
  19.         this->masa = v.masa;
  20.         this-> sirina = v.sirina;
  21.         this-> visina = v.visina;
  22.     }
  23.  
  24.     ~Vozilo() {} // destruktor
  25.     double getmasa() {
  26.         return masa;
  27.     }
  28.     int getsirina() {
  29.         return sirina;
  30.     }
  31.     virtual int vratiDnevnaCena() = 0;//Да се дефинира виртуелна функција int vratiDnevnaCena() во класата Vozilo
  32. };
  33. class Avtomobil : public Vozilo { //Од оваа класа да се изведе класата Автомобил
  34. private: //во која како дополнителна информација се чува
  35.     int brojnavrati; //информацијата за бројот на врати (цел број).
  36. public:
  37.     Avtomobil() { // defaulten konstruktor
  38.         this->brojnavrati = 0;
  39.     }
  40.     Avtomobil(double masa, int sirina, int visina, int brojnavrati) : Vozilo(masa, sirina, visina) {
  41.         this->brojnavrati = brojnavrati;
  42.     } // konstruktor so argumenti
  43.     Avtomobil (const Avtomobil &at) : Vozilo(at) { // copy konstruktor
  44.         this->brojnavrati = at.brojnavrati;
  45.     }
  46.     ~Avtomobil() {} // destruktor
  47.     int vratiDnevnaCena() { //  истата да се преоптовари во сите изведени класи.
  48.         if (this->brojnavrati<5) //За секој автомобил со помалку од 5 врати
  49.             return 100;  //дневната цена е 100
  50.         else return 130; //а инаку е 130 денари.
  51.     }
  52. };
  53. class Avtobus : public Vozilo { //Oд класата возило да се изведе и класата Автобус
  54. private: //во која се чуваат информации и за
  55.     int brojnapatnici; //бројот на патници кои може да ги пренесува.
  56. public:
  57.     Avtobus() { // defaulten
  58.         this->brojnapatnici = 0;
  59.     }
  60.     Avtobus(double masa, int sirina, int visina, int brojnapatnici) : Vozilo (masa, sirina, visina) {
  61.         this->brojnapatnici = brojnapatnici;
  62.     } // konstruktor so argumenti
  63.     Avtobus(const Avtobus &ab) : Vozilo (ab) { // copy konstruktor
  64.         this->brojnapatnici = ab. brojnapatnici;
  65.     }
  66.     ~Avtobus() {} // destruktor
  67.     int vratiDnevnaCena() { // За секој
  68.         return this->brojnapatnici * 5; //автобус цената е 5 денари по лице кое може да се пренесува.
  69.     }
  70. };
  71. class Kamion : public Vozilo { //Од класата возило да се изведе класата Камион
  72. private: //во која се чуваат информации и за
  73.     double maxmasa; //максималната маса која може да се товари на него (децимална вредност).
  74. public:
  75.     Kamion() { // defaulten konstruktor
  76.         this->maxmasa = 0;
  77.     }
  78.     Kamion(double masa, int sirina, int visina, double maxmasa) : Vozilo (masa, sirina, visina) {
  79.         this->maxmasa = maxmasa;
  80.     } // konstruktor so argumenti
  81.     Kamion (const Kamion &k) : Vozilo (k) { // copy konstruktor
  82.         this->maxmasa = k.maxmasa;
  83.     }
  84.     ~Kamion() {} // destruktor
  85.     int vratiDnevnaCena() { //За секој камион цената се пресметува со формулата:
  86.         return (getmasa()+this->maxmasa)*0.02; // (masa+nosivost)*0.02
  87.     }
  88. };    //За сите класи да се креираат погодни контруктори, како и set и get функции.
  89. class ParkingPlac { //Да се дефинира класа ParkingPlac за која се чува
  90. private:
  91.     Vozilo **v; //динамичко алоцирано поле од покажувачи кон Vozilo
  92.     int brelementi; //како и бројот на елементи во полето.
  93. public: //Во оваа класа да се дефинираат:
  94.     ParkingPlac() { // default konstruktor
  95.         this->v=new Vozilo*[1];
  96.         this->brelementi = 0;
  97.     }
  98.     ParkingPlac(Vozilo **v, int brelementi) { //конструктор
  99.         this->brelementi=brelementi;
  100.         this-> v = new Vozilo * [brelementi];
  101.         for(int i=0; i<brelementi; i++)
  102.             this->v[i] = v[i];
  103.     }
  104.     ~ParkingPlac() { //деструктор
  105.         for(int i=0; i<brelementi; i++)
  106.             delete this->v[i];
  107.     }
  108.     ParkingPlac &operator +=(Vozilo *voz) {//операторот += за додавање на ново возило
  109.         Vozilo ** tmp = new Vozilo * [brelementi+1];
  110.         for(int i=0; i <brelementi; i++) {
  111.             tmp[i] = v[i];
  112.         }
  113.         tmp[brelementi++] = voz;
  114.         //   delete [] v;
  115.         v = tmp;
  116.         return *this;
  117.     } // (аргументот е покажувач кон Vozilo
  118.     int vratiDnevnaZarabotka() { //Во класата ParkingPlac да се додаде следната функција:
  119.         int total=0;
  120.         for(int i=0; i <this->brelementi; i++) //функција int vratiDnevnaZarabotka()
  121.             total = total + v[i]->vratiDnevnaCena();
  122.         return total;
  123.     }// со која се враќа дневната заработка од сите возила на паркингот.
  124.     float presmetajVkupnaMasa() { //функција float presmetajVkupnaMasa() со која се пресметува
  125.         float total=0.0;
  126.         for(int i=0; i <brelementi; i++)
  127.             total = total + v[i]->getmasa();
  128.         return total;
  129.     }       // вкупната маса на сите возила во паркинг плацот
  130.     int brojVozilaPoshirokiOd (int l) { // функција int brojVozilaPoshirokiOd(int l) со која се пресметува
  131.         int total=0;
  132.         for(int i=0; i <brelementi; i++) {
  133.             if (v[i]->getsirina() > l)
  134.                 total++;
  135.         }
  136.         return total; //бројот на возила кои се пошироки од дадената вредност
  137.     }
  138.     void pecati () { //функција void pecati() со која се печати:
  139.                                int koli=0, jsp=0, kamionc=0;
  140.                         for(int i=0;i<brelementi;i++){
  141.                                 Avtomobil* a=dynamic_cast<Avtomobil*>(v[i]);
  142.                                 if (a!=0) koli++;
  143.                                 Avtobus* b=dynamic_cast<Avtobus*>(v[i]);
  144.                                 if (b!=0) jsp++;
  145.                                 Kamion* k=dynamic_cast<Kamion*>(v[i]);
  146.                                 if (k!=0) kamionc++;
  147.                         }
  148.                         cout<<"Brojot na avtomobili e "<<koli;
  149.         cout<<", brojot na avtobusi e "<<jsp;
  150.         cout<<" i brojot na kamioni e "<<kamionc<<"."<<endl;
  151.     }
  152.     int pogolemaNosivostOd (Vozilo &vi) { //функција int pogolemaNosivostOd(Vozilo &v)
  153.         Kamion * k;
  154.         int counter=0;
  155.         for(int i=0; i <brelementi; i++) {
  156.             if( (k = dynamic_cast <Kamion *> (v[i])) ) {
  157.                 if(k->getmasa() > vi.getmasa())
  158.                     counter++;
  159.             }
  160.         } //во која се враќа бројот на сите камиони кои имаат носивост поголема
  161.         return counter;  //од масата на возилото предадено како аргумент.
  162.     }
  163. };
  164. int main() {
  165.     ParkingPlac p;
  166.     int n;
  167.     cin>>n;
  168.     int shirina,visina, broj;
  169.     float masa,nosivost;
  170.     for (int i=0; i<n; i++) {
  171.         int type;
  172.         cin>>type;
  173.         if(type==1) {
  174.             cin>>masa>>shirina>>visina>>broj;
  175.             Avtomobil *a=new Avtomobil(masa,shirina,visina,broj);
  176.             p+=a;
  177.         }
  178.         if(type==2) {
  179.             cin>>masa>>shirina>>visina>>broj;
  180.             p+=new Avtobus(masa,shirina,visina,broj);
  181.         }
  182.         if(type==3) {
  183.             cin>>masa>>shirina>>visina>>nosivost;
  184.             p+=new Kamion(masa,shirina,visina,nosivost);
  185.         }
  186.     }
  187.     p.pecati();
  188.     cout<<"\nZarabotkata e "<<p.vratiDnevnaZarabotka()<<endl;
  189.     cout<<"Vkupnata masa e "<<p.presmetajVkupnaMasa()<<endl;
  190.     cout<<"Brojot poshiroki od 5 e "<<p.brojVozilaPoshirokiOd(5)<<endl;
  191.     Avtomobil a(1200,4,3,5);
  192.     cout<<"Brojot na kamioni so nosivost pogolema od avtomobilot e "<<p.pogolemaNosivostOd(a)<<endl;
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement