Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- За потребите на компанија која врши продажба на звучници, да се креира класа Speaker во која се чуваат следните податоци:
- моќност (изразена во W, децимален број), модел (динамичка низа од знаци), дали има појачало (bool), основна цена (децимален број).
- оператор за споредба на два звучници според моделот,цена и моќност (5 поени)
- оператор + која додава 80% од моќноста на двата звучници, моделот станува двојна низа од двата модели со + измеѓу имињата и цената е 75% од собраните цени за двата звучници (5 поени)
- функција покачиЦена што ќе ја покачи основната цена на звучникот за толку колку што ќе внесеме (5 поени)
- Компанијата нуди два вида на звучници за кои треба да се дефинираат посебни класи: TowerSpeaker и MonitorSpeaker. За првиот вид звучници дополнително се чува податок за типот на столбот на звучникот (има две можности: full/semi), а за вториот вид звучници дополнително се чува податок за намената (има две можности: за во студио/за друга намена).
- За класите треба да се обезбедат:
- соодветни конструктори и деструктори (погледнете ги повиците во main функцијата) (5 поени)
- оператор << за печатење на звучниците во формат: (5 поени)
- модел има/нема појачало цена
- оператор > за споредба на два звучника од каков било вид според пресметаната цена (5 поени)
- метод принт() кој ќе принта звучникот со сите спецификации по редослед од конструктор
- метод float presmetajCena() за пресметување на цената на посебните видови звучници на следниот начин: (10 поени)
- за TowerSpeaker - цената се зголемува за 10% од основната ако звучникот има појачало и за 5% од основната ако видот на столбот е full
- за MonitorSpeaker - цената се зголемува за 10% од основната ако звучникот има појачало и за 15% од основната ако е наменет за во студио
- Во класата Speaker се чува целобројна променлива која е заедничка за сите звучници и го означува данокот на додадена вредност (ДДВ) кој се плаќа за овие производи. Иницијалната вредност на оваа променлива е 18 и ќе биде иста за сите звучници. За работа со оваа променлива да се имплементираат следните методи: (5 поени)
- Доколку се стави негативна вредност за данокот да се фрли усклучок кој ќе принта:
- Ne moze da se stavi negativna vrednost za danok (5 поени)
- Да се имплементира надворешна функција со потпис void minAndMax(Speaker** s, int n) што ќе го отпечати звучникот со најмала цена и звучникот со најголема цена. (10 поени)
- void setDDV(int ddv) за менување на вредноста на ДДВ (5 поени)
- void vkupnoDDV(Speaker** s, int n) која ја печати вкупната цена што треба да се плати за сите звучници и по пресметаниот ДДВ. (5 поени)
- функција void daliIma(Speaker** niza, int n,Speaker &s) која ќе принта дали може да се купи звучникот т.е. дали го има звучникот во низата (5 поени)
- функција void pogolemaVrednost(Speaker** s, int n)која ќе принта кој тип на звучници има поголема средна вредност во споредба со другиот (10 поени)
- Функција kupiZvucnik(Speaker** s, int n, float kesh) што ќе ги отпечати сите звучници што можеме да ги купиме со дадена цена (10 poeni)
- */
- #include<iostream>
- using namespace std;
- class Iskluchok{
- private:
- char error[100];
- public:
- Iskluchok(char error[]){
- strcpy(this->error,error);
- }
- void print(){
- cout<<error<<endl;
- }
- };
- class Speaker{
- protected:
- float w;
- char *model;
- bool pojacalo;
- float cena;
- static int ddv;
- public:
- Speaker(){}
- Speaker(float w,char *model,bool pojacalo,float cena){
- this->w=w;
- this->model=new char[strlen(model)+1];
- strcpy(this->model,model);
- this->pojacalo=pojacalo;
- this->cena=cena;
- }
- // operator <<
- friend ostream& operator<<(ostream &output,Speaker &s){
- output<<s.w<<" "<<s.model<<" "<<s.pojacalo<<" "<<s.cena<<endl;
- return output;
- }
- // operator ==
- bool operator==(Speaker &s){
- if((strcmp(this->model,s.model)==0)&&(this->w==s.w)&&(this->cena==s.cena)){
- return true;
- }else{
- return false;
- }
- }
- // operator +
- Speaker& operator+(Speaker &drugSpeaker){
- Speaker nov;
- nov.w=(this->w+drugSpeaker.w)*0.80;
- nov.model=new char[strlen(this->model)+strlen(drugSpeaker.model)+2];
- strcat(nov.model,this->model);
- strcat(nov.model,"+");
- strcat(nov.model,drugSpeaker.model);
- nov.cena=(this->cena+drugSpeaker.cena)*0.75;
- nov.pojacalo=true;
- return nov;
- }
- void pokaciCena(float suma){
- this->cena+=suma;
- }
- static int getDDV(){
- return ddv;
- }
- static void setDDV(int x){
- if(x<0){
- throw Iskluchok("Ne moze da se stavi negativna vrednost za danok");
- }
- ddv=x;
- }
- // virtuelna funkcija
- virtual float presmetajCena()=0;
- ~Speaker(){}
- };
- int Speaker::ddv=18;
- class TowerSpeaker:public Speaker{
- private:
- bool stolb;
- public:
- TowerSpeaker(){}
- TowerSpeaker(float w,char *model,bool pojacalo,float cena,bool stolb):Speaker(w,model,pojacalo,cena){
- this->stolb=stolb;
- }
- // preoptovaruvame virtuelnata funkcija
- float presmetajCena(){
- float novaCena=0;
- if(pojacalo==true){
- //this->cena=this->cena*1.10;
- novaCena+=this->cena*0.10;
- }
- if(stolb==true){
- novaCena+=this->cena*0.05;
- }
- novaCena+=this->cena;
- return novaCena;
- }
- ~TowerSpeaker(){
- // delete []model;
- }
- };
- class MonitorSpeaker:public Speaker{
- private:
- bool namena;
- public:
- MonitorSpeaker(){}
- MonitorSpeaker(float w,char *model,bool pojacalo,float cena,bool namena):Speaker(w,model,pojacalo,cena){
- this->namena=namena;
- }
- // preoptovaruvame virtuelnata funkcija
- float presmetajCena(){
- float novaCena=this->cena;
- if(pojacalo){
- novaCena+=this->cena*0.10;
- }
- if(namena){
- novaCena+=this->cena*0.15;
- }
- return novaCena;
- }
- ~MonitorSpeaker(){
- // delete []model;
- }
- };
- // min/max
- void minAndMax(Speaker **niza,int n){
- float minCena=niza[0]->presmetajCena();
- float maxCena=niza[0]->presmetajCena();
- int pamtiMax;
- int pamtiMin;
- for(int i=0;i<n;i++){
- if(niza[i]->presmetajCena()>maxCena){
- maxCena=niza[i]->presmetajCena();
- pamtiMax=i;
- }
- if(niza[i]->presmetajCena()<minCena){
- minCena=niza[i]->presmetajCena();
- pamtiMin=i;
- }
- }
- cout<<"Najevtin zvucnik e"<<endl;
- cout<<niza[pamtiMin];
- cout<<"Najskap zvucnik e"<<endl;
- cout<<niza[pamtiMax];
- }
- // suma
- void vkupnoDDV(Speaker** niza, int n){
- float sumSpeakers=0;
- for(int i=0;i<n;i++){
- sumSpeakers+=niza[i]->presmetajCena();
- }
- float danok=((float)Speaker::getDDV()/100);
- sumSpeakers=sumSpeakers + danok*sumSpeakers;
- cout<<"Vkupnata suma posle danok e "<<sumSpeakers<<endl;
- }
- // flag
- void daliIma(Speaker** niza, int n,Speaker *s){
- int flag=0;
- for(int i=0;i<n;i++){
- if(niza[i]==s){
- cout<<"Go ima zvucnikot, idi kupi go"<<endl;
- flag=1;
- break;
- }
- }
- if(flag==0){
- cout<<"Go nema zvucnikot na lager"<<endl;
- }
- }
- // najteshkata
- void pogolemaVrednost(Speaker** niza, int n){
- int brojTower=0;
- int brojMonitor=0;
- float sumaTower=0;
- float sumaMonitor=0;
- for(int i=0;i<n;i++){
- TowerSpeaker *ts=dynamic_cast<TowerSpeaker*>(niza[i]);
- if(ts!=0){
- brojTower++;
- sumaTower+=niza[i]->presmetajCena();
- }
- MonitorSpeaker *ms=dynamic_cast<MonitorSpeaker*>(niza[i]);
- if(ms!=0){
- brojMonitor++;
- sumaMonitor+=ms->presmetajCena();
- }
- }
- float srednaTower=sumaTower/brojTower;
- float srednaMonitor=sumaMonitor/brojMonitor;
- if(srednaTower>srednaMonitor){
- cout<<"Tower zvuchnicite se poskapi"<<endl;
- }else{
- cout<<"Monitor zvuchnicite se poskapi"<<endl;
- }
- }
- int main() {
- float power;
- char model[100];
- bool amp;
- float price;
- bool fullSemi;
- 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);
- }
- cout<<"== Testirame najmal i najgolem zvucnik funkcija =="<<endl;
- lowestPrice(speakers, n);
- cout<<"== Testirame vkupnoDDV funkcija =="<<endl;
- Speaker::vkupnoDDV(speakers, n);
- int ddv;
- cout<<"== Testirame DDV =="<<endl;
- cin >> ddv;
- try{
- Speaker::setDDV(ddv);
- }catch(Iskluchok objekt){
- objekt.print();
- }
- cout<<"== Testirame vkupnoDDV funkcija =="<<endl;
- Speaker::vkupnoDDV(speakers, n);
- for(int i = 0; i < n; ++i) {
- delete speakers[i];
- }
- delete [] speakers;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement