Advertisement
add1ctus

5. Musician

May 15th, 2015
488
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. class Musician
  7. {
  8. protected:
  9.     char name[100];
  10.     float earnings;
  11.     int performances;
  12.     char gender;
  13. public:
  14.     virtual float performancePrice() = 0;
  15.     virtual float danok() = 0;
  16.     Musician(){}
  17.     Musician(char *n, float e, int p, char g)
  18.     {
  19.         strcpy(name,n);
  20.         earnings=e;
  21.         performances=p;
  22.         gender=g;
  23.     }
  24.     friend ostream &operator<<(ostream &output, const Musician &rhs)
  25.     {
  26.         output<<rhs.name<<endl<<rhs.earnings<<endl<<rhs.gender<<endl;
  27.         return output;
  28.     }
  29.     bool operator> (Musician &rhs)
  30.     {
  31.         return this->performancePrice()>rhs.performancePrice();
  32.     }
  33. };
  34.  
  35. class Guitarist:public Musician
  36. {
  37.     float guitarPrice;
  38. public:
  39.     Guitarist(){}
  40.     Guitarist(char *n, float e, int p, char g, float gp):Musician(n,e,p,g)
  41.     {
  42.         guitarPrice=gp;
  43.     }
  44.     float performancePrice()
  45.     {
  46.         return guitarPrice/10;
  47.     }
  48.     float danok()
  49.     {
  50.         return (performances>30)?earnings*0.08:earnings*0.1;
  51.     }
  52. };
  53.  
  54. class Drummer:public Musician
  55. {
  56.     int age;
  57. public:
  58.     Drummer(){}
  59.     Drummer(char *n, float e, int p, char g, int a):Musician(n,e,p,g)
  60.     {
  61.         age=a;
  62.     }
  63.     float performancePrice()
  64.     {
  65.         return age*50;
  66.     }
  67.     float danok()
  68.     {
  69.         return (gender=='M')?0.12*earnings:0.1*earnings;
  70.     }
  71. };
  72.  
  73. void mostExpensiveMusician(Musician **arr, int n)
  74. {
  75.     float highestPrice=arr[0]->performancePrice();
  76.     int id=0;
  77.     for(int i=1;i<n;i++)
  78.         if(highestPrice<arr[i]->performancePrice())
  79.         {
  80.             highestPrice=arr[i]->performancePrice();
  81.             id=i;
  82.         }
  83.     cout<<*arr[id];
  84. }
  85.  
  86. int main() {
  87.     int n, x;
  88.     cin >> n >> x;
  89.     Musician **m = new Musician*[n];
  90.     for(int i = 0; i < n; ++i) {
  91.         char ime[100];
  92.         float zarabotka;
  93.         int nastapi;
  94.         char pol;
  95.         cin >> ime >> zarabotka >> nastapi >> pol;
  96.         if(i < x) {
  97.             float cena_gitara;
  98.             cin >> cena_gitara;
  99.             m[i] = new Guitarist(ime, zarabotka, nastapi, pol, cena_gitara);
  100.         } else {
  101.             int vozrast;
  102.             cin >> vozrast;
  103.             m[i] = new Drummer(ime, zarabotka, nastapi, pol, vozrast);
  104.         }
  105.     }
  106.     cout << "=== TAX ===" << endl;
  107.     for(int i = 0; i < n; ++i) {
  108.         cout << *m[i];
  109.         cout << m[i]->danok() << endl;
  110.     }
  111.     cout << "=== MOST EXPENSIVE ===" << endl;
  112.     mostExpensiveMusician(m, n);
  113.  
  114.     for(int i = 0; i < n; ++i) {
  115.         delete m[i];
  116.     }
  117.     delete [] m;
  118.     return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement