SlavkovB

Звучници OOP Exercises

Jun 15th, 2016
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.12 KB | None | 0 0
  1. Звучници Problem 6 (0 / 0)
  2. За потребите на компанија која врши продажба на звучници, да се креира класа Speaker во која се чуваат следните податоци:
  3.  
  4. моќност (изразена во W, децимален број),
  5. модел (низа од знаци),
  6. дали има појачало (bool),
  7. основна цена (децимален број).
  8. Компанијата нуди два вида на звучници за кои треба да се дефинираат посебни класи: TowerSpeaker и MonitorSpeaker. За првиот вид звучници дополнително се чува податок за типот на столбот на звучникот (има две можности: full/semi), а за вториот вид звучници дополнително се чува податок за намената (има две можности: за во студио/за друга намена).
  9.  
  10. За класите треба да се обезбедат:
  11.  
  12. соодветни конструктори и деструктори (погледнете ги повиците во main функцијата) (5 поени)
  13. оператор << за печатење на звучниците во формат: (5 поени)
  14.  
  15. модел има/нема појачало цена
  16.  
  17. оператор > за споредба на два звучника од каков било вид според пресметаната цена (5 поени)
  18.  
  19. метод float presmetajCena() за пресметување на цената на посебните видови звучници на следниот начин: (10 поени)
  20. за TowerSpeaker - цената се зголемува за 10% од основната ако звучникот има појачало и за 5% од основната ако видот на столбот е full
  21. за MonitorSpeaker - цената се зголемува за 10% од основната ако звучникот има појачало и за 15% од основната ако е наменет за во студио
  22. Да се имплементира надворешна функција со потпис void lowestPrice(Speaker** s, int n) што ќе го отпечати звучникот со најмала цена. (10 поени)
  23.  
  24. Во класата Speaker се чува целобројна променлива која е заедничка за сите звучници и го означува данокот на додадена вредност (ДДВ) кој се плаќа за овие производи. Иницијалната вредност на оваа променлива е 18. За работа со оваа променлива да се имплементираат следните статички методи: (5 поени)
  25.  
  26. void smeniDDV(int ddv) за менување на вредноста на ДДВ
  27. void vkupnoDDV(Speaker** s, int n) која ја печати вкупната цена што треба да се плати за сите звучници и вкупниот ДДВ.
  28.  
  29. Sample input
  30. 1
  31. 120.3 JBL 1 5000 1
  32. 45.1 Pioneer 0 3000 1
  33.  
  34. Sample output
  35. ===== TESTING CONSTRUCTORS ======
  36. JBL ima pojachalo 5750
  37. Pioneer nema pojachalo 3450
  38.  
  39. //CODE//
  40.  
  41.  
  42. #include <iostream>
  43. #include <cstring>
  44. using namespace std;
  45.  
  46. class Speaker{
  47.  
  48.     float moknost;
  49.     char *model;
  50.     bool pojacalo;
  51.     float cena;
  52. public:
  53.     Speaker(float moknost = 0.0, const char *model = " ", bool pojacalo = false, float cena = 0.0){
  54.     this -> moknost = moknost;
  55.     this -> model = new char[strlen(model) + 1];
  56.     strcpy(this -> model, model);
  57.     this -> cena = cena;
  58.     this -> pojacalo = pojacalo;}
  59.     char *getModel(){return this -> model;}
  60.     friend ostream& operator<<(ostream &out,Speaker &s){
  61.     out<<s.model;
  62.        
  63.         if(s.pojacalo)
  64.     out<<" ima pojachalo ";
  65.     else
  66.     out<<" nema pojachalo ";
  67.     out<<s.presmetajCena();
  68.         return out;}
  69.      bool getPojacalo(){return this -> pojacalo;}
  70.     float getCena(){return this -> cena;}
  71.     virtual float presmetajCena() = 0; 
  72.     bool operator>(Speaker &s){
  73.     return presmetajCena() > s.presmetajCena();}
  74.     static int DDV;
  75.     static void smeniDDV(int ddv){Speaker::DDV = ddv;}
  76.     virtual ~Speaker(){}
  77.     static void vkupnoDDV(Speaker** s, int n){
  78.     float cena = 0;
  79.         float vkupnoddv = 0;
  80.         for(int i = 0; i < n; i++){
  81.         cena += s[i] ->presmetajCena();
  82.         vkupnoddv = cena * DDV/100;
  83.         }
  84.     cout<<"Vkupna cena: "<<cena<<endl;
  85.        cout<<"Vkupno DDV: "<<vkupnoddv<<endl;
  86.     }
  87. };
  88. void lowestPrice(Speaker** s, int n){
  89. int min=0;
  90.     for (int i = 0;i < n;i++){
  91.         if(s[min]->presmetajCena() > s[i]->presmetajCena())
  92.         min=i;
  93.     }
  94.     cout<<s[min];
  95. }
  96.  
  97.     int Speaker::DDV = 18;
  98. class TowerSpeaker : public Speaker{
  99.  
  100.     bool tip;
  101.     public:
  102.     TowerSpeaker(float moknost = 0.0, const char *model = " ", bool pojacalo = false, float cena = 0.0, bool tip = false):Speaker(moknost, model, pojacalo, cena){
  103.     this -> tip = tip;}
  104.     float presmetajCena(){
  105.         int sopojacalo = 0;
  106.         int sostolb = 0;
  107.         if(getPojacalo())sopojacalo+=getCena() * 0.1;
  108.         if(tip)sostolb += getCena() * 0.05;
  109.     return getCena() + sopojacalo + sostolb;}
  110. };
  111.  
  112. class MonitorSpeaker : public Speaker{
  113. bool namena;
  114. public:
  115. MonitorSpeaker(float moknost = 0.0, const char *model = " ", bool pojacalo = false, float cena = 0.0, bool namena = false):Speaker(moknost, model, pojacalo, cena){
  116. this -> namena = namena;}
  117.     float presmetajCena(){
  118.         int sopojacalo = 0;
  119.         int zastudio = 0;
  120.         if(getPojacalo()) sopojacalo += getCena() * 0.1;
  121.         if(namena) zastudio += getCena() * 0.15;
  122.     return getCena() + sopojacalo + zastudio;}
  123. };
  124. // vashiot kod ovde
  125.  
  126. // zabraneto e menuvanje na main funkcijata
  127.  
  128.  
  129. int main() {
  130.     int testCase;
  131.     cin >> testCase;
  132.     float power;
  133.     char model[100];
  134.     bool amp;
  135.     float price;
  136.     bool fullSemi;
  137.     if(testCase == 1) {
  138.         cout << "===== TESTING CONSTRUCTORS ======" << endl;
  139.         cin >> power;
  140.         cin >> model;
  141.         cin >> amp;
  142.         cin >> price;
  143.         cin >> fullSemi;
  144.         TowerSpeaker ts(power, model, amp, price, fullSemi);
  145.         cout << ts << endl;
  146.         cin >> power;
  147.         cin >> model;
  148.         cin >> amp;
  149.         cin >> price;
  150.         cin >> fullSemi;
  151.         MonitorSpeaker ms(power, model, amp, price, fullSemi);
  152.         cout << ms << endl;
  153.        
  154.     } else if(testCase == 2) {
  155.         cout << "===== TESTING LOWEST PRICE ======" << endl;
  156.         int n;
  157.         cin >> n;
  158.         Speaker** speakers = new Speaker*[n];
  159.         for(int i = 0; i < n; ++i) {
  160.             cin >> power;
  161.             cin >> model;
  162.             cin >> amp;
  163.             cin >> price;
  164.             cin >> fullSemi;
  165.             if(i % 2 == 1)
  166.                 speakers[i] = new TowerSpeaker(power, model, amp, price, fullSemi);
  167.             else
  168.                 speakers[i] = new MonitorSpeaker(power, model, amp, price, fullSemi);
  169.         }
  170.        
  171.         lowestPrice(speakers, n);
  172.         for(int i = 0; i < n; ++i) {
  173.             delete speakers[i];
  174.         }
  175.         delete [] speakers;
  176.     } else if(testCase == 3) {
  177.         cout << "===== TESTING DDV STATIC ======" << endl;
  178.         int n;
  179.         cin >> n;
  180.         Speaker** speakers = new Speaker*[n];
  181.         for(int i = 0; i < n; ++i) {
  182.             cin >> power;
  183.             cin >> model;
  184.             cin >> amp;
  185.             cin >> price;
  186.             cin >> fullSemi;
  187.             if(i % 2 == 1)
  188.                 speakers[i] = new TowerSpeaker(power, model, amp, price, fullSemi);
  189.             else
  190.                 speakers[i] = new MonitorSpeaker(power, model, amp, price, fullSemi);
  191.         }
  192.         Speaker::vkupnoDDV(speakers, n);
  193.         int ddv;
  194.         cin >> ddv;
  195.         Speaker::smeniDDV(ddv);
  196.         Speaker::vkupnoDDV(speakers, n);
  197.         for(int i = 0; i < n; ++i) {
  198.             delete speakers[i];
  199.         }
  200.         delete [] speakers;
  201.     }
  202.    
  203. }
Add Comment
Please, Sign In to add comment