Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*За потребите на компанија која врши продажба на звучници, да се креира класа Speaker во која се чуваат следните податоци:
- моќност (изразена во W, децимален број),
- модел (низа од знаци),
- дали има појачало (bool),
- основна цена (децимален број).
- Компанијата нуди два вида на звучници за кои треба да се дефинираат посебни класи: TowerSpeaker и MonitorSpeaker. За првиот вид звучници дополнително се чува податок за типот на столбот на звучникот (има две можности: full/semi), а за вториот вид звучници дополнително се чува податок за намената (има две можности: за во студио/за друга намена).
- За класите треба да се обезбедат:
- соодветни конструктори и деструктори (погледнете ги повиците во main функцијата) (5 поени)
- оператор << за печатење на звучниците во формат: (5 поени)
- модел има/нема појачало цена
- оператор > за споредба на два звучника од каков било вид според пресметаната цена (5 поени)
- метод float presmetajCena() за пресметување на цената на посебните видови звучници на следниот начин: (10 поени)
- за TowerSpeaker - цената се зголемува за 10% од основната ако звучникот има појачало и за 5% од основната ако видот на столбот е full
- за MonitorSpeaker - цената се зголемува за 10% од основната ако звучникот има појачало и за 15% од основната ако е наменет за во студио
- Да се имплементира надворешна функција со потпис void lowestPrice(Speaker** s, int n) што ќе го отпечати звучникот со најмала цена. (10 поени)
- Во класата Speaker се чува целобројна променлива која е заедничка за сите звучници и го означува данокот на додадена вредност (ДДВ) кој се плаќа за овие производи. Иницијалната вредност на оваа променлива е 18. За работа со оваа променлива да се имплементираат следните статички методи: (5 поени)
- void smeniDDV(int ddv) за менување на вредноста на ДДВ
- void vkupnoDDV(Speaker** s, int n) која ја печати вкупната цена што треба да се плати за сите звучници и вкупниот ДДВ.*/
- #include <iostream>
- #include<cstring>
- using namespace std;
- class Speaker
- {
- protected:
- float mokjnost;
- char *model;
- bool pojacalo;
- float oCena;
- public:
- static int DDV;
- Speaker(float mokjnost=0.0, char *model="", bool pojacalo=false, float oCena=0.0)
- {
- this->mokjnost=mokjnost;
- this->model=new char[strlen(model)+1];
- strcpy(this->model, model);
- this->pojacalo=pojacalo;
- this->oCena=oCena;
- }
- char *getModel(){return this->model;}
- bool getPojacalo(){return this->pojacalo;}
- virtual float presmetajCena(){return 0;}
- friend ostream& operator <<(ostream& o, Speaker &s)
- {
- o<<s.model<<" ";
- if(s.pojacalo)
- {
- o<<"ima pojachalo"<<" ";
- }else
- {
- o<<"nema pojachalo"<<" ";
- }
- o<<s.presmetajCena();
- return o;
- }
- bool operator >(Speaker &s)
- {
- return (this->presmetajCena() > s.presmetajCena());
- }
- static void vkupnoDDV(Speaker** s, int n)
- {
- int suma=0,vkddv=0;
- for(int i=0;i<n;i++)
- {
- suma+=s[i]->presmetajCena();
- }
- vkddv=suma*DDV/100;
- cout<<"Vkupna cena: "<<suma<<endl;
- cout<<"Vkupno DDV: "<<vkddv<<endl;
- }
- static void smeniDDV(int ddv)
- {
- Speaker::DDV=ddv;
- }
- };
- int Speaker::DDV=18;
- class TowerSpeaker: public Speaker
- {
- private:
- bool tip;
- public:
- TowerSpeaker(float mokjnost=0.0, char *model="", bool pojacalo=false, float oCena=0.0, bool tip=false):Speaker(mokjnost,model,pojacalo,oCena)
- {
- this->tip=tip;
- }
- float presmetajCena()
- {
- int poj=0,vktip=0;
- if(pojacalo){poj=oCena*0.1;}
- if(tip){vktip=oCena*0.05;}
- return oCena+poj+vktip;
- }
- };
- class MonitorSpeaker: public Speaker
- {
- private:
- bool namena;
- public:
- MonitorSpeaker(float mokjnost=0.0, char *model="", bool pojacalo=false, float oCena=0.0, bool namena=false):Speaker(mokjnost,model,pojacalo,oCena)
- {
- this->namena=namena;
- }
- float presmetajCena()
- {
- int poj=0,nam=0;
- if(pojacalo){poj=(oCena*0.1);}
- if(namena){nam=(oCena*0.15);}
- return oCena+poj+nam;
- }
- };
- void lowestPrice(Speaker** s, int n)
- {
- int mini,minIndex;
- mini=s[0]->presmetajCena();
- for(int i=0;i<n;i++)
- {
- if(mini > s[i]->presmetajCena())
- {
- mini=s[i]->presmetajCena();
- minIndex=i;
- }
- }
- cout<<s[minIndex]->getModel();
- if(s[minIndex]->getPojacalo())
- cout<<" ima pojachalo ";
- else
- cout<<" nema pojachalo ";
- cout<<s[minIndex]->presmetajCena();
- }
- int main() {
- int testCase;
- cin >> testCase;
- float power;
- char model[100];
- bool amp;
- float price;
- bool fullSemi;
- if(testCase == 1) {
- cout << "===== TESTING CONSTRUCTORS ======" << endl;
- cin >> power;
- cin >> model;
- cin >> amp;
- cin >> price;
- cin >> fullSemi;
- TowerSpeaker ts(power, model, amp, price, fullSemi);
- cout << ts << endl;
- cin >> power;
- cin >> model;
- cin >> amp;
- cin >> price;
- cin >> fullSemi;
- MonitorSpeaker ms(power, model, amp, price, fullSemi);
- cout << ms << endl;
- } else if(testCase == 2) {
- cout << "===== TESTING LOWEST PRICE ======" << endl;
- int n;
- cin >> n;
- Speaker** speakers = new Speaker*[n];
- for(int i = 0; i < n; ++i) {
- cin >> power;
- cin >> model;
- cin >> amp;
- cin >> price;
- cin >> fullSemi;
- if(i % 2 == 1)
- speakers[i] = new TowerSpeaker(power, model, amp, price, fullSemi);
- else
- speakers[i] = new MonitorSpeaker(power, model, amp, price, fullSemi);
- }
- lowestPrice(speakers, n);
- for(int i = 0; i < n; ++i) {
- delete speakers[i];
- }
- delete [] speakers;
- } else if(testCase == 3) {
- cout << "===== TESTING DDV STATIC ======" << endl;
- int n;
- cin >> n;
- Speaker** speakers = new Speaker*[n];
- for(int i = 0; i < n; ++i) {
- cin >> power;
- cin >> model;
- cin >> amp;
- cin >> price;
- cin >> fullSemi;
- if(i % 2 == 1)
- speakers[i] = new TowerSpeaker(power, model, amp, price, fullSemi);
- else
- speakers[i] = new MonitorSpeaker(power, model, amp, price, fullSemi);
- }
- Speaker::vkupnoDDV(speakers, n);
- int ddv;
- cin >> ddv;
- Speaker::smeniDDV(ddv);
- Speaker::vkupnoDDV(speakers, n);
- for(int i = 0; i < n; ++i) {
- delete speakers[i];
- }
- delete [] speakers;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment