Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Да се креира апстрактна класа Pizza за опишување пици. (5 поени) За секоја пица се чуваат следните информации:
- име (низа од максимум 20 знаци)
- состојки (низа од максимум 100 знаци)
- основна цена (реален број)
- Од оваа класа да се изведат класите FlatPizza и FoldedPizza за опишување на рамни и преклопени пици соодветно (5 поени).
- За секоја рамна пица дополнително се чува големина (enum - една од три можности: мала, голема и фамилијарна). За секоја преклопена пица дополнително се чува информација дали тестото е од бело брашно или не (boolean).
- За секоја пица треба да се обезбеди метод за пресметување на нејзината продажна цена:
- цената на рамната пица се пресметува така што основната цена се зголемува за 10%, 30% и 50% за мала, голема и фамилијарна пица соодветно.
- цената на преклопената пица се пресметува така што основната цена се зголемува за 10% ако е тестото е од бело брашно, а во спротивно за 30%. (10 поени)
- Да се преоптоварат следните оператори:
- оператор << - за печатење сите податоци за пиците во следниов формат:
- За рамна пица:[име]: [состојки], [големина] - [продажната цена на пицата]. За преклопена пица: [име]: [состојки], [wf - ако е со бело брашно / nwf - ако не е со бело брашно] - [продажната цена на пицата] (5 поени)
- оператор < - за споредување на пиците од каков било вид според нивната продажна цена. (5 поени)
- Да се дефинира глобална функција еxpensivePizza што на влез прима низа од покажувачи кон објекти од класата Pizza и нивниот број, а како резултат ги печати информациите за пицата со највисока продажна цена. Ако има повеќе пици со иста највисока цена, се печати првата. (10 поени)
- Да се дефинираат потребните конструктори и методи во класите за правилно функционирање на програмата. (5 поени)
- #include <iostream>
- #include <cstring>
- //Zadaca 5
- using namespace std;
- enum Size{mala, golema, familijarna};
- class Pizza {
- protected:
- char name[20];
- char ingredients[100];
- float price;
- public:
- Pizza() {
- strcpy(this->name, "");
- strcpy(this->ingredients, "");
- this->price = 0;
- }
- Pizza(char* name, char* ingredients, float price) {
- strcpy(this->name, name);
- strcpy(this->ingredients, ingredients);
- this->price = price;
- }
- virtual float getPrice()=0;
- virtual ~Pizza(){}
- };
- class FlatPizza : public Pizza {
- private:
- Size s;
- public:
- FlatPizza() {
- //empty
- }
- FlatPizza(char* name, char* ingredients, float price) : Pizza(name, ingredients, price) {
- //
- }
- FlatPizza(char* name, char* ingredients, float price, Size s)
- : Pizza(name, ingredients, price) {
- this->s = s;
- }
- friend ostream &operator<<(ostream &output, FlatPizza &fp) {
- float totalPrice;
- output<<fp.name<<": "<<fp.ingredients<<", ";
- if (fp.s == 0 || fp.s == 1) {
- output<<"small";
- totalPrice = fp.price + fp.price * 0.1;
- }
- else if (fp.s == 2) {
- output<<"family";
- totalPrice = fp.price + fp.price * 0.3;
- }
- else if (fp.s == 3) {
- output<<"family";
- totalPrice = fp.price + fp.price * 0.5;
- }
- output<<" - "<<totalPrice<<endl;
- return output;
- }
- float getPrice()
- {
- if(this->s == 0 || this->s == 1) {
- return this->price*1.1;
- }
- if(this->s == 2) {
- return this->price*1.3;
- }
- else {
- return this->price*1.5;
- }
- }
- };
- class FoldedPizza : public Pizza {
- private:
- bool white;
- public:
- FoldedPizza() {
- this->white = true;
- }
- FoldedPizza(char* name, char *ingredients, float price)
- : Pizza(name, ingredients, price) {
- this->white = true;
- }
- void setWhiteFlour(bool x) {
- this->white = x;
- }
- friend ostream &operator<<(ostream &output, FoldedPizza &fp) {
- float totalPrice;
- output<<fp.name<<": "<<fp.ingredients<<", ";
- if (fp.white == true) {
- output<<"wf";
- totalPrice = fp.price + fp.price * 0.1;
- }
- else {
- output<<"nwf";
- totalPrice = fp.price + fp.price * 0.3;
- }
- output<<" - "<<totalPrice<<endl;
- return output;
- }
- float getPrice()
- {
- if(this->white == true) {
- return this->price*1.1;
- }
- else {
- return this->price*1.3;
- }
- }
- };
- bool operator<(Pizza &p1, Pizza &p2) {
- if(p1.getPrice() < p2.getPrice()) {
- return true;
- }
- else {
- return false;
- }
- }
- void expensivePizza(Pizza** pi, int n) {
- int temp_i, maxPrice;
- for (int i=0; i<n; i++) {
- if (i==0) {
- temp_i = i;
- maxPrice = pi[i]->getPrice();
- }
- else if (pi[i]->getPrice() > maxPrice) {
- temp_i = i;
- maxPrice = pi[i]->getPrice();
- }
- }
- FoldedPizza *pointerToFoldedPizzaObject = dynamic_cast<FoldedPizza *>(pi[temp_i]);
- FlatPizza *pointerToFlatPizzaObject = dynamic_cast<FlatPizza *>(pi[temp_i]);
- if (pointerToFlatPizzaObject) {
- cout<<*pointerToFlatPizzaObject;
- }
- else {
- cout<<*pointerToFoldedPizzaObject;
- }
- }
- // Testing
- int main() {
- int test_case;
- char name[20];
- char ingredients[100];
- float inPrice;
- Size size;
- bool whiteFlour;
- cin >> test_case;
- if (test_case == 1) {
- // Test Case FlatPizza - Constructor, operator <<, price
- cin.get();
- cin.getline(name,20);
- cin.getline(ingredients,100);
- cin >> inPrice;
- FlatPizza fp(name, ingredients, inPrice);
- cout << fp;
- } else if (test_case == 2) {
- // Test Case FlatPizza - Constructor, operator <<, price
- cin.get();
- cin.getline(name,20);
- cin.getline(ingredients,100);
- cin >> inPrice;
- int s;
- cin>>s;
- FlatPizza fp(name, ingredients, inPrice, (Size)s);
- cout << fp;
- } else if (test_case == 3) {
- // Test Case FoldedPizza - Constructor, operator <<, price
- cin.get();
- cin.getline(name,20);
- cin.getline(ingredients,100);
- cin >> inPrice;
- FoldedPizza fp(name, ingredients, inPrice);
- cout << fp;
- } else if (test_case == 4) {
- // Test Case FoldedPizza - Constructor, operator <<, price
- cin.get();
- cin.getline(name,20);
- cin.getline(ingredients,100);
- cin >> inPrice;
- FoldedPizza fp(name, ingredients, inPrice);
- fp.setWhiteFlour(false);
- cout << fp;
- } else if (test_case == 5) {
- // Test Cast - operator <, price
- int s;
- cin.get();
- cin.getline(name,20);
- cin.getline(ingredients,100);
- cin >> inPrice;
- cin>>s;
- FlatPizza *fp1 = new FlatPizza(name, ingredients, inPrice, (Size)s);
- cout << *fp1;
- cin.get();
- cin.getline(name,20);
- cin.getline(ingredients,100);
- cin >> inPrice;
- cin>>s;
- FlatPizza *fp2 = new FlatPizza(name, ingredients, inPrice, (Size)s);
- cout << *fp2;
- cin.get();
- cin.getline(name,20);
- cin.getline(ingredients,100);
- cin >> inPrice;
- FoldedPizza *fp3 = new FoldedPizza(name, ingredients, inPrice);
- cout << *fp3;
- cin.get();
- cin.getline(name,20);
- cin.getline(ingredients,100);
- cin >> inPrice;
- FoldedPizza *fp4 = new FoldedPizza(name, ingredients, inPrice);
- fp4->setWhiteFlour(false);
- cout << *fp4;
- cout<<"Lower price: "<<endl;
- if(*fp1<*fp2)
- cout<<fp1->getPrice()<<endl;
- else cout<<fp2->getPrice()<<endl;
- if(*fp1<*fp3)
- cout<<fp1->getPrice()<<endl;
- else cout<<fp3->getPrice()<<endl;
- if(*fp4<*fp2)
- cout<<fp4->getPrice()<<endl;
- else cout<<fp2->getPrice()<<endl;
- if(*fp3<*fp4)
- cout<<fp3->getPrice()<<endl;
- else cout<<fp4->getPrice()<<endl;
- } else if (test_case == 6) {
- // Test Cast - expensivePizza
- int num_p;
- int pizza_type;
- cin >> num_p;
- Pizza **pi = new Pizza *[num_p];
- for (int j = 0; j < num_p; ++j) {
- cin >> pizza_type;
- if (pizza_type == 1) {
- cin.get();
- cin.getline(name,20);
- cin.getline(ingredients,100);
- cin >> inPrice;
- int s;
- cin>>s;
- FlatPizza *fp = new FlatPizza(name, ingredients, inPrice, (Size)s);
- cout << (*fp);
- pi[j] = fp;
- }
- if (pizza_type == 2) {
- cin.get();
- cin.getline(name,20);
- cin.getline(ingredients,100);
- cin >> inPrice;
- FoldedPizza *fp =
- new FoldedPizza (name, ingredients, inPrice);
- if(j%2)
- (*fp).setWhiteFlour(false);
- cout << (*fp);
- pi[j] = fp;
- }
- }
- cout << endl;
- cout << "The most expensive pizza:\n";
- expensivePizza(pi,num_p);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement