Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Кафе Problem 4 (0 / 0)
- Да се дефинира класа Coffee во која се чуваат податоци за:
- името (динамичка низа од знаци),
- цената (децимален број),
- попуст (цел број, изразен во проценти) иницијална вредност 0.
- За потребите на класата да се имплементираат:
- соодветни конструктори и деструктори (погледнете ги повиците во main функцијата) (5 поени)
- оператор << за печатење на податоците за кафето во следниов формат:
- име цена (цена на попуст)
- – делот во цена на попуст се печати само ако кафето има попуст (вредноста на попуст да е поголема од нула) (5 поени)
- оператор ++ во префикс нотација за зголемување на попустот за 5% (5 поени)
- оператор + - две кафиња се собираат така што името на новото кафе се добива со спојување нивните имиња со знак - меѓу нив, има цена што е еднаква на збирот од цените на двете кафиња намален за 20%, а новиот попуст е еднаков на поголемиот од попустите на двете кафиња што се собираат. (10 поени)
- метод void setDiscount(int discount) со кој може да се промени вредноста на попустот. Ако вредноста е негативна или поголема од 100 треба да се фрли исклучок со кој ќе се пренесе навлидно внесената вредност и во соодветно назнчаениот дел во main функцијата справете се со овој исклучок и испечатете порака Nevalidna vrednost za popust: [vrednosta]. (10 поени)
- метод void setName(char* name) со кој се менува името на кафето. (5 поени)
- Да се креира класа CoffeeShop во која се чува:
- име (низа од знаци макс. 50)
- динамички резервирано поле од објекти од класата Coffee
- број на кафиња (цел број).
- За оваа класа да се обезбедат:
- соодветни конструктори и деструктори (погледнете ги повиците во main функцијата)
- оператор += за додавање нов објект од класата Coffee во полето (10 поени)
- оператор << за печатење на листа од сите кафиња во кафетеријата. Прво се печати името на кафетеријата, а потоа се печатат сите кафиња во нов ред. (5 поени)
- метод void setCoffee(int i, Coffee &c) кој го менува кафето на позиција i со кафето c (5 поени)
- Sample input
- 1
- Latte
- 80
- 10
- Macchiato
- 60
- 20
- Sample output
- ====== TESTING COFFEE CLASS ======
- CONSTRUCTOR
- OPERATOR <<
- Latte 80 (72)
- Macchiato 60 (48)
- OPERATOR ++
- Latte 80 (68)
- OPERATOR +
- Latte-Macchiato 112 (89.6)
- //CODE//
- #include <iostream>
- #include <cstring>
- using namespace std;
- class Coffee{
- protected:
- char *ime;
- float cena;
- int popust;
- public:
- Coffee(const char *i = " ", float c = 0.0)
- {
- popust=0;
- cena=c;
- ime=new char[strlen(i)+1];
- strcpy(ime,i);
- }
- Coffee(const Coffee &c)
- {
- popust=c.popust;
- cena=c.cena;
- ime=new char[strlen(c.ime)+1];
- strcpy(ime,c.ime);
- }
- Coffee& operator=(Coffee &c)
- {
- if(this!=&c)
- {
- cena=c.cena;
- popust=c.popust;
- ime=new char[strlen(c.ime)+1];
- strcpy(ime,c.ime);
- }
- return *this;
- }
- Coffee &operator ++()
- {
- popust+=5;
- return *this;
- }
- Coffee operator++(int){
- Coffee c(*this);
- c.popust+=5;
- return c;}
- friend ostream &operator <<(ostream &o, Coffee &c)
- {
- if(c.popust>0)
- o<<c.ime<<" "<<c.cena<<" ("<<c.cena*(1-(float)c.popust/100)<<")";
- else o<<c.ime<<" "<<c.cena<<" ";
- return o;
- }
- void setDiscount(int discount)
- {
- try{
- if(discount<0 || discount>100)
- throw 1;
- popust=discount;
- }
- catch(int)
- {
- cout<<"Nevalidna vrednost za popust: "<<discount<<endl;
- }
- }
- friend Coffee operator+ (Coffee &c1, Coffee &c2)
- {
- int i;
- Coffee tmp;
- delete [] tmp.ime;
- tmp.ime=new char[strlen(c1.ime)+strlen(c2.ime)+2];
- int d=strlen(c1.ime)+strlen(c2.ime)+1;
- for(i=0;i<strlen(c1.ime);i++)
- tmp.ime[i]=c1.ime[i];
- tmp.ime[i]='-';
- int k=0;
- for(i=strlen(c1.ime)+1;i<d;i++)
- tmp.ime[i]=c2.ime[k++];
- tmp.cena=(c1.cena + c2.cena)*0.8;
- tmp.popust=max(c1.popust,c2.popust);
- return tmp;
- }
- void setName(char *name)
- {
- delete [] ime;
- ime=new char[strlen(name)+1];
- strcpy(ime,name);
- }
- ~Coffee()
- {
- }
- };
- class CoffeeShop:public Coffee{
- private:
- char ime[50];
- Coffee *cofi;
- int broj;
- public:
- CoffeeShop(){}
- CoffeeShop(const char *im)
- {
- strcpy(ime,im);
- cofi=new Coffee[0];
- broj=0;
- }
- CoffeeShop(const CoffeeShop &cs)
- {
- strcpy(ime,cs.ime);
- broj=cs.broj;
- cofi=new Coffee[cs.broj];
- for(int i=0;i<broj;i++)
- cofi[i]=cs.cofi[i];
- }
- CoffeeShop &operator=(const CoffeeShop &cs)
- {
- if(this!=&cs)
- {
- strcpy(ime,cs.ime);
- broj=cs.broj;
- delete[]cofi;
- cofi=new Coffee[cs.broj];
- for(int i=0;i<broj;i++)
- cofi[i]=cs.cofi[i];
- }
- return *this;
- }
- CoffeeShop&operator +=(Coffee &c)
- {
- Coffee *tmp=new Coffee[broj+1];
- for(int i=0;i<broj;i++)
- {
- tmp[i]=cofi[i];
- }
- tmp[broj]=c;
- broj++;
- delete[] cofi;
- cofi = tmp;
- return *this;
- }
- friend ostream &operator <<(ostream &o, CoffeeShop &c)
- {
- o<<c.ime<<endl;
- for(int i=0;i<c.broj;i++)
- cout<<c.cofi[i]<<endl;
- return o;
- }
- void setCoffee(int i, Coffee &c)
- {
- cofi[i]=c;
- }
- ~CoffeeShop(){
- }
- };
- // zabraneto e menuvanje na main funkcijata, osven dodavanje na kodot za spravuvanje so iskluchokot na soodvetno mesto
- int main() {
- char name[100];
- float price;
- int discount;
- int testCase;
- cin >> testCase;
- if(testCase == 1) {
- cout << "====== TESTING COFFEE CLASS ======" << endl;
- cin >> name;
- cin >> price;
- cin >> discount;
- cout << "CONSTRUCTOR" << endl;
- Coffee c1(name, price);
- c1.setDiscount(discount);
- cin >> name;
- cin >> price;
- cin >> discount;
- Coffee c2(name, price);
- c2.setDiscount(discount);
- cout << "OPERATOR <<" << endl;
- cout << c1 << endl;
- cout << c2 << endl;
- cout << "OPERATOR ++" << endl;
- ++c1;
- cout << c1 << endl;
- cout << "OPERATOR +" << endl;
- Coffee c3 = c1 + c2;
- cout << c3 << endl;
- } else if(testCase == 2) {
- cout << "====== TESTING COFFEE CONSTRUCTORS ======" << endl;
- cin >> name;
- cin >> price;
- cin >> discount;
- cout << "CONSTRUCTOR" << endl;
- Coffee c1(name, price);
- cout << c1 << endl;
- cout << "COPY CONSTRUCTOR" << endl;
- Coffee c2(c1);
- cin >> name;
- c2.setName(name);
- cout << c1 << endl;
- cout << c2 << endl;
- cout << "OPERATOR =" << endl;
- //Coffee x("ime", 30);
- //x = c2;
- c1 = c2;
- cin >> name;
- c2.setName(name);
- cout << c1 << endl;
- cout << c2 << endl;
- cout << "TESTING EXCEPTION" << endl;
- // vashiot kod za spravuvanje so iskluchok ovde
- cin >> discount;
- c1.setDiscount(discount);
- } else if(testCase == 3) {
- cout << "====== TESTING COFFEE SHOP ======" << endl;
- char csName[50];
- cin >> csName;
- cout << "CONSTRUCTOR" << endl;
- CoffeeShop cs(csName);
- int n;
- cin >> n;
- cout << "OPERATOR +=" << endl;
- for(int i = 0; i < n; ++i) {
- cin >> name;
- cin >> price;
- Coffee c(name, price);
- cs += c;
- }
- cout << cs;
- } else if(testCase == 4) {
- cout << "====== TESTING COFFEE SHOP CONSTRUCTORS ======" << endl;
- char csName[50];
- cin >> csName;
- CoffeeShop cs(csName);
- int n;
- cin >> n;
- for(int i = 0; i < n; ++i) {
- cin >> name;
- cin >> price;
- Coffee c(name, price);
- cs += c;
- }
- Coffee x("Espresso", 60);
- CoffeeShop cp = cs;
- cs.setCoffee(0, x);
- cout << cs << endl;
- cout << cp << endl;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment