Koki99

Жичани инструменти

Jun 23rd, 2021
980
332 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. Жичани инструменти Задача 1 (1 / 2)
  3. Да се креира хиерархиjа на класи за репрезентациjа на жичани инструменти. За потребите на оваа хиерархиjа да се дефинира класа ZicanInstrument од коjа ќе бидат изведени двете класи Mandolina и Violina.
  4.  
  5. Во класата ZicanInstrument се чуваат податоци за:
  6.  
  7. името на инструментот (низа од 20 знаци)
  8. броjот на жици
  9. основната цена на инструментот.
  10. За класата Mandolina дополнително се чува неjзината форма (низа од 20 знаци).
  11.  
  12. За класата Violina дополнително се чува неjзината големина (децимален броj).
  13.  
  14. За секоjа изведените класи треба да се дефинираат соодветните конструктори и следните методи:
  15.  
  16. cena() за пресметување на цената на инструментот
  17. основната цена на мандолината се зголемува за 15% доколку таа има форма во Неаполитански стил (вредноста на променливата форма е “Neapolitan”)
  18. основната цена на виолината се зголемува за 10% ако неjзината големина има вредност 1/4 (0.25), односно за 20% ако неjзината големина има вредност 1 (1.00)
  19. проптоварување на операторот ==, коj ги споредува жичаните инструменти според броjот на жици што го имаат
  20. преоптоварување на операторот << за печатење на сите податоци за жичаните инструменти.
  21. Да се напише функциjа pecatiInstrumenti(ZicanInstrument &zi, ZicanInstrument **i, int n) коjа на влез прима жичан инструмент, низа од покажувачи кон жичани инструменти и броj на елементи во низата. Функциjата jа печати цената на сите жичани инструменти од низата кои имаат ист броj на жици како и инструментот проследен како прв аргумент на функциjата.
  22. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  23. #include <iostream>
  24. #include <cstring>
  25. using namespace std;
  26. class ZicanInstrument {
  27. protected:
  28.     char ime[20];
  29.     int brZhici;
  30.     int osnovnaCena;
  31. public:
  32.     ZicanInstrument() {}; // default
  33.     ZicanInstrument(char *ime, int zhici, int osnovnaCena) { // arguments
  34.         strcpy(this->ime,ime);
  35.         brZhici=zhici;
  36.         this->osnovnaCena=osnovnaCena;
  37.     }
  38.     friend bool operator== (const ZicanInstrument &zi, const ZicanInstrument &z) {
  39.         if(zi.brZhici==z.brZhici) return true;
  40.         else return false;
  41.     }
  42.     virtual int cena()=0;
  43. };
  44.  
  45. class Mandolina: public ZicanInstrument {
  46. private:
  47.     char forma[20];
  48. public:
  49.     Mandolina() {} // default
  50.     Mandolina(char *ime, int zhici, int osnovnaCena, char *forma):ZicanInstrument(ime, zhici, osnovnaCena) {
  51.         strcpy(this->forma,forma);
  52.     }
  53.     int cena() {
  54.         if(strcmp(forma,"Neapolitan")==0)
  55.             osnovnaCena += osnovnaCena*15/100;
  56.         return osnovnaCena;
  57.     }
  58.     friend bool operator== (const Mandolina &m1, const Mandolina &m2) {
  59.         if(m1.brZhici==m2.brZhici) return true;
  60.         else return false;
  61.     }
  62.     friend ostream &operator<< (ostream &out, const Mandolina &m) {
  63.         return out<<m.ime<<endl<<m.brZhici<<endl<<m.osnovnaCena<<endl<<m.forma<<endl;
  64.     }
  65. };
  66.  
  67. class Violina: public ZicanInstrument {
  68. private:
  69.     float golemina;
  70. public:
  71.     Violina() {} // default
  72.     Violina(char *ime, int zhici, int osnovnaCena, float g):ZicanInstrument(ime, zhici, osnovnaCena) {
  73.         golemina=g;
  74.     }
  75.     int cena() {
  76.         if(golemina==0.25)
  77.             osnovnaCena += osnovnaCena*10/100;
  78.         else if (golemina==1.00)
  79.             osnovnaCena += osnovnaCena*20/100;
  80.         return osnovnaCena;
  81.     }
  82.     friend bool operator== (const Violina &v1, const Violina &v2) {
  83.         if(v1.brZhici==v2.brZhici) return true;
  84.         else return false;
  85.     }
  86.     friend ostream &operator<< (ostream &out, const Violina &v) {
  87.         return out<<v.ime<<endl<<v.brZhici<<endl<<v.osnovnaCena<<endl<<v.golemina<<endl;
  88.     }
  89. };
  90. void pecatiInstrumenti(ZicanInstrument &zi, ZicanInstrument **i, int n) {
  91.     for(int k=0; k<n; k++)
  92.         if(zi==*i[k])
  93.             cout<<i[k]->cena()<<endl;
  94. }
  95. int main() {
  96.     char ime[20];
  97.     int brojZici;
  98.     float cena;
  99.     char forma[20];
  100.     cin >> ime >> brojZici >> cena >> forma;
  101.     Mandolina m(ime, brojZici, cena, forma);
  102.     int n;
  103.     cin >> n;
  104.     ZicanInstrument **zi = new ZicanInstrument*[2 * n];
  105.     for(int i = 0; i < n; ++i) {
  106.         cin >> ime >> brojZici >> cena >> forma;
  107.         zi[i] = new Mandolina(ime, brojZici, cena, forma);
  108.     }
  109.     for(int i = 0; i < n; ++i) {
  110.         float golemina;
  111.         cin >> ime >> brojZici >> cena >> golemina;
  112.         zi[n + i] = new Violina(ime, brojZici, cena, golemina);
  113.     }
  114.     pecatiInstrumenti(m, zi, 2 * n);
  115.     for(int i = 0; i < 2 * n; ++i) {
  116.         delete zi[i];
  117.     }
  118.     delete [] zi;
  119.     return 0;
  120. }
RAW Paste Data