Advertisement
196040

OOP zadaci za vezbanje 2 Vozac

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