Advertisement
Koki99

Vozac - Втор Колоквиум - Пример

Jun 3rd, 2022
710
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.54 KB | None | 0 0
  1. Да се дефинира класа Vozac во која се чуваат информации за:
  2.  
  3. име (низа од максимум 100 знаци)
  4. возраст (цел број)
  5. број на трки (цел број)
  6. дали е ветеран (да/не).
  7. Да се преоптоварат:
  8.  
  9. операторот << за печатење кој ќе ги печати името, возраст, бројот на трки и дали е ветеран (се печати VETERAN)
  10. операторот == за споредување на два возачи според заработувачката по трка.
  11. Од оваа класа да се изведат две нови класи Avtomobilist и Motociklist.
  12.  
  13. За автомобилистот дополнително се чува:
  14.  
  15. цена на автомобилот (децимален број).
  16. За мотоциклистот дополнително се чува:
  17.  
  18. моќност на мотор (цел број).
  19. Заработувачката по трка на возачите се пресметува како:
  20.  
  21. за автомобилостот заработувачката по трка е $\frac{CENA_{AVTOMOBIL}}{5}$
  22. за мотоциклистот заработувачката по трка е $MOKJNOST_NA_MOTOR * 20$
  23. Секој автомобилист плаќа данок на заработка. Да се напишат соодветни методи за пресметување данок:
  24.  
  25. за автомобилисти: ако бројот на трки е поголем од 10 стапката на данок е 15% од заработката, инаку 10% од заработката.
  26. за мотоциклисти: ако е ветеран стапката на данок е 25% од заработката, инаку 20% од заработката.
  27. Да се напше надворешна функција soIstaZarabotuvachka која како аргументи прима низа од покажувачи од класата Vocac, нивниот број, како и покажувач кон ојбект од возач и враќа како резултат бројот на возачи кои имаат иста заработувачка по трка со проследениот возач.
  28. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  29. #include <iostream>
  30. #include <cstring>
  31. using namespace std;
  32.  
  33. class Vozac {
  34. protected:
  35.     char ime[100];
  36.     int vozrast;
  37.     int brojtrki;
  38.     bool veteran;
  39. public:
  40.     Vozac() {}
  41.     Vozac(char *ime,int vozrast,int brojtrki,bool veteran) {
  42.         strcpy(this->ime,ime);
  43.         this->vozrast=vozrast;
  44.         this->brojtrki=brojtrki;
  45.         this->veteran=veteran;
  46.  
  47.     }
  48.     friend ostream &operator<<(ostream &out, Vozac &v) {
  49.         {
  50.         out<<v.ime<<endl;
  51.         out<<v.vozrast<<endl;
  52.         out<<v.brojtrki<<endl;
  53.         if(v.veteran==true)  out<<"VETERAN"<<endl;
  54.         }
  55.          return out;
  56.     }
  57.     bool operator==(const Vozac &v)
  58.     {
  59.         if(this->zarabotuvackaPoTrka()==v.zarabotuvackaPoTrka()) return true;
  60.         else return false;
  61.     }
  62.     virtual int zarabotuvackaPoTrka() const=0;
  63.     virtual float danok() const=0;
  64. };
  65.  
  66. class Avtomobilist : public Vozac {
  67. private:
  68.     float cenaAvtomobil;
  69. public:
  70.     Avtomobilist() {}
  71.     Avtomobilist(char *ime,int vozrast, int brojtrki, bool veteran, float cenaAvtomobil):Vozac(ime,vozrast,brojtrki,veteran) {
  72.         this->cenaAvtomobil=cenaAvtomobil;
  73.     }
  74.    int zarabotuvackaPoTrka() const
  75.    {
  76.        return (cenaAvtomobil/5);
  77.    }
  78.     float danok() const
  79.     {
  80.        
  81.         if(this->brojtrki>10) return zarabotuvackaPoTrka()*0.15;
  82.         else return zarabotuvackaPoTrka()*0.1;
  83.     }
  84.    
  85.    
  86. };
  87.  
  88. class Motociklist : public Vozac
  89. {
  90.     private:
  91.     int moknost;
  92.     public:    
  93.     Motociklist(){}
  94.     Motociklist(char *ime,int vozrast, int brojtrki, bool veteran,int moknost):Vozac(ime,vozrast,brojtrki,veteran)
  95.      {
  96.          this->moknost=moknost;
  97.      }
  98.     int zarabotuvackaPoTrka() const
  99.     {
  100.         return moknost*20;
  101.     }
  102.     float danok()const
  103.     {
  104.        
  105.         if(veteran==true) return zarabotuvackaPoTrka()*0.25;
  106.         else return zarabotuvackaPoTrka()*0.2;
  107.     }
  108. };
  109.  
  110. int soIstaZarabotuvachka(Vozac **v,int broj, Vozac *vx)
  111. {
  112.     int brojac=0;
  113.     for(int i=0;i<broj;i++)
  114.     {
  115.         if(v[i]->zarabotuvackaPoTrka()==vx->zarabotuvackaPoTrka()) brojac++;
  116.     }
  117.     return brojac;
  118. }
  119.  
  120. int main() {
  121.     int n, x;
  122.     cin >> n >> x;
  123.     Vozac **v = new Vozac*[n];
  124.     char ime[100];
  125.     int vozrast;
  126.     int trki;
  127.     bool vet;
  128.     for(int i = 0; i < n; ++i) {
  129.         cin >> ime >> vozrast >> trki >> vet;
  130.         if(i < x) {
  131.             float cena_avto;
  132.             cin >> cena_avto;
  133.             v[i] = new Avtomobilist(ime, vozrast, trki, vet, cena_avto);
  134.         } else {
  135.             int mokjnost;
  136.             cin >> mokjnost;
  137.             v[i] = new Motociklist(ime, vozrast, trki, vet, mokjnost);
  138.         }
  139.     }
  140.     cout << "=== DANOK ===" << endl;
  141.     for(int i = 0; i < n; ++i) {
  142.         cout << *v[i];
  143.         cout << v[i]->danok() << endl;
  144.     }
  145.     cin >> ime >> vozrast >> trki >> vet;
  146.     int mokjnost;
  147.     cin >> mokjnost;
  148.     Vozac *vx = new Motociklist(ime, vozrast, trki, vet, mokjnost);
  149.     cout << "=== VOZAC X ===" << endl;
  150.     cout << *vx;
  151.     cout << "=== SO ISTA ZARABOTUVACKA KAKO VOZAC X ===" << endl;
  152.     cout << soIstaZarabotuvachka(v, n, vx);
  153.     for(int i = 0; i < n; ++i) {
  154.         delete v[i];
  155.     }
  156.     delete [] v;
  157.     delete vx;
  158.     return 0;
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement