Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Звучници Problem 6 (0 / 0)
- За потребите на компанија која врши продажба на звучници, да се креира класа 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) која ја печати вкупната цена што треба да се плати за сите звучници и вкупниот ДДВ.
- Sample input
- 1
- 120.3 JBL 1 5000 1
- 45.1 Pioneer 0 3000 1
- Sample output
- ===== TESTING CONSTRUCTORS ======
- JBL ima pojachalo 5750
- Pioneer nema pojachalo 3450
- //CODE//
- #include <iostream>
- #include <cstring>
- using namespace std;
- class Speaker{
- float moknost;
- char *model;
- bool pojacalo;
- float cena;
- public:
- Speaker(float moknost = 0.0, const char *model = " ", bool pojacalo = false, float cena = 0.0){
- this -> moknost = moknost;
- this -> model = new char[strlen(model) + 1];
- strcpy(this -> model, model);
- this -> cena = cena;
- this -> pojacalo = pojacalo;}
- char *getModel(){return this -> model;}
- friend ostream& operator<<(ostream &out,Speaker &s){
- out<<s.model;
- if(s.pojacalo)
- out<<" ima pojachalo ";
- else
- out<<" nema pojachalo ";
- out<<s.presmetajCena();
- return out;}
- bool getPojacalo(){return this -> pojacalo;}
- float getCena(){return this -> cena;}
- virtual float presmetajCena() = 0;
- bool operator>(Speaker &s){
- return presmetajCena() > s.presmetajCena();}
- static int DDV;
- static void smeniDDV(int ddv){Speaker::DDV = ddv;}
- virtual ~Speaker(){}
- static void vkupnoDDV(Speaker** s, int n){
- float cena = 0;
- float vkupnoddv = 0;
- for(int i = 0; i < n; i++){
- cena += s[i] ->presmetajCena();
- vkupnoddv = cena * DDV/100;
- }
- cout<<"Vkupna cena: "<<cena<<endl;
- cout<<"Vkupno DDV: "<<vkupnoddv<<endl;
- }
- };
- void lowestPrice(Speaker** s, int n){
- int min=0;
- for (int i = 0;i < n;i++){
- if(s[min]->presmetajCena() > s[i]->presmetajCena())
- min=i;
- }
- cout<<s[min];
- }
- int Speaker::DDV = 18;
- class TowerSpeaker : public Speaker{
- bool tip;
- public:
- TowerSpeaker(float moknost = 0.0, const char *model = " ", bool pojacalo = false, float cena = 0.0, bool tip = false):Speaker(moknost, model, pojacalo, cena){
- this -> tip = tip;}
- float presmetajCena(){
- int sopojacalo = 0;
- int sostolb = 0;
- if(getPojacalo())sopojacalo+=getCena() * 0.1;
- if(tip)sostolb += getCena() * 0.05;
- return getCena() + sopojacalo + sostolb;}
- };
- class MonitorSpeaker : public Speaker{
- bool namena;
- public:
- MonitorSpeaker(float moknost = 0.0, const char *model = " ", bool pojacalo = false, float cena = 0.0, bool namena = false):Speaker(moknost, model, pojacalo, cena){
- this -> namena = namena;}
- float presmetajCena(){
- int sopojacalo = 0;
- int zastudio = 0;
- if(getPojacalo()) sopojacalo += getCena() * 0.1;
- if(namena) zastudio += getCena() * 0.15;
- return getCena() + sopojacalo + zastudio;}
- };
- // vashiot kod ovde
- // zabraneto e menuvanje na main funkcijata
- 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;
- }
- }
Add Comment
Please, Sign In to add comment