metalni

OOP Labs 7 Vozilo

Jun 2nd, 2020
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.66 KB | None | 0 0
  1. /*Возило Problem 3 (0 / 0)
  2.  
  3. Да се дефинира класа Vozilo која ќе содржи информација за неговата маса (децимален број), ширина и висина (цели броеви).
  4.  
  5. Од оваа класа да се изведе класата Автомобил во која како дополнителна информација се чува информацијата за бројот на врати (цел број).
  6.  
  7. Од класата возило да се изведе и класата Автобус во која се чуваат информации и за бројот на патници кои може да ги пренесува.
  8.  
  9. Од класата возило да се изведе класата Камион во која се чуваат информации и за максималната маса која може да се товари на него (децимална вредност).
  10.  
  11. За сите класи да се креираат погодни контруктори, како и set и get функции.
  12.  
  13. Да се дефинира класа ParkingPlac за која се чува динамичко алоцирано поле од покажувачи кон Vozilo, како и бројот на елементи во полето. Во оваа класа да се дефинираат:
  14.  
  15.     конструктор
  16.     деструктор
  17.     операторот += за додавање на ново возило (аргументот е покажувач кон Vozilo)
  18.     функција float presmetajVkupnaMasa() со која се пресметува вкупната маса на сите возила во паркинг плацот
  19.     функција int brojVozilaPoshirokiOd(int l) со која се пресметува бројот на возила кои се пошироки од дадената вредност
  20.     функција void pecati() со која се печати: Brojot na avtomobili e X, brojot na avtobusi e Y i brojot na kamioni e Z.
  21.     функција int pogolemaNosivostOd(Vozilo& v) во која се враќа бројот на сите камиони кои имаат носивост поголема од масата на возилото предадено како аргумент.
  22.  
  23. Да се дефинира виртуелна функција int vratiDnevnaCena() во класата Vozilo и истата да се преоптовари во сите изведени класи. За секој автомобил со помалку од 5 врати дневната цена е 100, а инаку е 130 денари. За секој камион цената се пресметува со формулата: (masa+nosivost)*0.02. За секој автобус цената е 5 денари по лице кое може да се пренесува.
  24.  
  25. Во класата ParkingPlac да се додаде следната функција: - функција int vratiDnevnaZarabotka() со која се враќа дневната заработка од сите возила на паркингот.
  26. */
  27.  
  28. #include<iostream>
  29. #include<cstring>
  30. using namespace std;
  31.  
  32. class Vozilo {
  33.     protected:
  34.         float mass;
  35.         int width;
  36.         int height;
  37.     public:
  38.         Vozilo();
  39.         Vozilo(const float mass, const int width, const int height);
  40.         ~Vozilo();
  41.         virtual int vratiDnevnaCena();
  42.         const float getMass();
  43.         const int getWidth();
  44. };
  45.  
  46. Vozilo::Vozilo(){
  47.     this->mass = 0.0;
  48.     this->width = 0;
  49.     this->height = 0;
  50. }
  51. Vozilo::Vozilo(const float mass, const int width, const int height){
  52.     this->mass = mass;
  53.     this->width = width;
  54.     this->height = height;
  55. }
  56. Vozilo::~Vozilo(){}
  57. int Vozilo::vratiDnevnaCena(){
  58.     return 0;
  59. }
  60. const float Vozilo::getMass(){
  61.     return this->mass;
  62. }
  63. const int Vozilo::getWidth(){
  64.     return this->width;
  65. }
  66. //Avtomobil
  67. class Avtomobil : public Vozilo{
  68.     private:
  69.         int doors;
  70.     public:
  71.         Avtomobil();
  72.         Avtomobil(const float mass, const int width, const int height, const int doors) : Vozilo(mass, width, height){
  73.             this->doors = doors;
  74.         }
  75.         ~Avtomobil();
  76.         int vratiDnevnaCena();
  77. };
  78. Avtomobil::Avtomobil(){
  79.     this->doors = 0;
  80. }
  81. Avtomobil::~Avtomobil(){}
  82. int Avtomobil::vratiDnevnaCena(){
  83.     if(this->doors < 5)
  84.         return 100;
  85.     else
  86.         return 130;
  87. }
  88.  
  89. //Avtobus
  90. class Avtobus : public Vozilo{
  91.     private:
  92.         int passengers;
  93.     public:
  94.         Avtobus();
  95.         Avtobus(const float mass, const int width, const int height, const int passengers) : Vozilo(mass, width, height){
  96.             this->passengers = passengers;
  97.         }
  98.         ~Avtobus();
  99.         int vratiDnevnaCena();
  100. };
  101.  
  102. Avtobus::Avtobus(){
  103.     this->passengers = 0;
  104. }
  105. Avtobus::~Avtobus(){}
  106. int Avtobus::vratiDnevnaCena(){
  107.     return this->passengers * 5;
  108. }
  109.  
  110. //Kamion
  111. class Kamion : public Vozilo{
  112.     private:
  113.         float maxMass;
  114.     public:
  115.         Kamion();
  116.         Kamion(const float mass, const int width, const int height, const float maxMass) : Vozilo(mass, width, height){
  117.             this->maxMass = maxMass;    
  118.         }
  119.         ~Kamion();
  120.         int vratiDnevnaCena();
  121.         const float getMaxMass();
  122. };
  123.  
  124. Kamion::Kamion(){
  125.     this->maxMass = 0.0;
  126. }
  127. Kamion::~Kamion(){}
  128. int Kamion::vratiDnevnaCena(){
  129.     return (this->mass + this->maxMass) * 0.02;
  130. }
  131. const float Kamion::getMaxMass(){
  132.     return this->maxMass;
  133. }
  134. //ParkingPlac
  135. class ParkingPlac{
  136.     private:
  137.         Vozilo ** v;
  138.         int noElements;
  139.     public:
  140.         ParkingPlac();
  141.         ~ParkingPlac();
  142.         ParkingPlac &operator+=(Vozilo * orig){
  143.             Vozilo ** tmp = new Vozilo * [this->noElements + 1];
  144.             for(int i=0; i <this->noElements; i++) {
  145.                 tmp[i] = v[i];
  146.             }
  147.             tmp[this->noElements++] = orig;
  148.             //delete [] v;
  149.             v = tmp;
  150.             return *this;
  151.         }
  152.         float presmetajVkupnaMasa();
  153.         int brojVozilaPoshirokiOd(int l);
  154.         void pecati();
  155.         int pogolemaNosivostOd(Vozilo &v);
  156.         int vratiDnevnaZarabotka();
  157. };
  158.  
  159. ParkingPlac::ParkingPlac(){
  160.     this->v = new Vozilo * [1];
  161.     this->noElements = 0;
  162. }
  163. ParkingPlac::~ParkingPlac(){
  164.    delete [] this->v;
  165. }
  166. float ParkingPlac::presmetajVkupnaMasa(){
  167.     float mass=0.0;
  168.     for(int i=0; i<this->noElements; i++){
  169.         mass += this->v[i]->getMass();
  170.     }
  171.     return mass;
  172. }
  173. int ParkingPlac::brojVozilaPoshirokiOd(int l){
  174.     int count=0;
  175.     for(int i=0; i<this->noElements; i++){
  176.         if(this->v[i]->getWidth() > l)
  177.             count++;
  178.     }
  179.     return count;
  180. }
  181. void ParkingPlac::pecati(){
  182.     int koli = 0; int avtobusi = 0; int kamioni = 0;
  183.     for(int i=0; i<this->noElements; i++){
  184.         Vozilo *a = dynamic_cast<Avtomobil*>(this->v[i]);
  185.         Vozilo *b = dynamic_cast<Avtobus*>(this->v[i]);
  186.         Vozilo *c = dynamic_cast<Kamion*>(this->v[i]);
  187.         if(a)
  188.             koli++;
  189.         if(b)
  190.             avtobusi++;
  191.         if(c)
  192.             kamioni++;
  193.     }
  194.     cout << "Brojot na avtomobili e " << koli << ", brojot na avtobusi e " << avtobusi << " i brojot na kamioni e " << kamioni << "." << endl;
  195. }
  196. int ParkingPlac::pogolemaNosivostOd(Vozilo &v){
  197.     int count = 0;
  198.     for(int i=0; i<this->noElements; i++){
  199.         Kamion * tmp = dynamic_cast<Kamion *>(this->v[i]);
  200.         if(tmp){
  201.             if(tmp->getMaxMass() > v.getMass())
  202.                 count++;
  203.         }
  204.     }
  205.     return count;
  206. }
  207. int ParkingPlac::vratiDnevnaZarabotka(){
  208.     int profit = 0;
  209.     for(int i=0; i<this->noElements; i++){
  210.         profit += this->v[i]->vratiDnevnaCena();
  211.     }
  212.     return profit;
  213. }
  214. //main
  215. int main(){
  216. ParkingPlac p;
  217.  
  218. int n;
  219. cin>>n;
  220. int shirina,visina, broj;
  221. float masa,nosivost;
  222. for (int i=0;i<n;i++){
  223.     int type;
  224.     cin>>type;
  225.     if(type==1){
  226.         cin>>masa>>shirina>>visina>>broj;
  227.         Avtomobil *a=new Avtomobil(masa,shirina,visina,broj);
  228.         p+=a;
  229.     }
  230.     if(type==2){
  231.         cin>>masa>>shirina>>visina>>broj;
  232.         p+=new Avtobus(masa,shirina,visina,broj);
  233.     }
  234.     if(type==3){
  235.         cin>>masa>>shirina>>visina>>nosivost;
  236.         p+=new Kamion(masa,shirina,visina,nosivost);
  237.     }
  238. }
  239.  
  240. p.pecati();
  241.  
  242. cout<<"\nZarabotkata e "<<p.vratiDnevnaZarabotka()<<endl;
  243. cout<<"Vkupnata masa e "<<p.presmetajVkupnaMasa()<<endl;
  244. cout<<"Brojot poshiroki od 5 e "<<p.brojVozilaPoshirokiOd(5)<<endl;
  245. Avtomobil a(1200,4,3,5);
  246. cout<<"Brojot na kamioni so nosivost pogolema od avtomobilot e "<<p.pogolemaNosivostOd(a)<<endl;
  247.  
  248.  
  249. }
Add Comment
Please, Sign In to add comment