SlavkovB

Возач OOP Exercises

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