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 <cstring>
- #include <iostream>
- using namespace std;
- #include<iostream>
- #include<cstring>
- using namespace std;
- class Pizza { //Да се креира апстрактна класа Pizza за опишување пици. (5 поени)
- protected: //За секоја пица се чуваат следните информации:
- char ime[20]; //име (низа од максимум 20 знаци)
- char sostojki[80]; //состојки (низа од максимум 100 знаци)
- double osnovna; //основна цена (реален број)
- public:
- Pizza() {
- strcpy(this->ime, "");
- strcpy(this->sostojki, "");
- this->osnovna = 0.0;
- }
- Pizza(char * ime, char * sostojki, double osnovna) {
- strcpy(this->ime, ime);
- strcpy(this->sostojki, sostojki);
- this->osnovna = osnovna;
- }
- Pizza(const Pizza ©) {
- strcpy(this->ime, copy.ime);
- strcpy(this->sostojki, copy.sostojki);
- this->osnovna = copy.osnovna;
- }
- Pizza &operator=(const Pizza ©) {
- if(this!=©) {
- strcpy(this->ime, copy.ime);
- strcpy(this->sostojki, copy.sostojki);
- this->osnovna = copy.osnovna;
- }
- return *this;
- }
- friend ostream &operator<<(ostream &o, Pizza &print) {//оператор << - за печатење сите податоци за пиците во следниов формат:
- o<<print.ime<<": "<<print.sostojki<<", ";
- return o;
- }
- virtual double price() {
- return this->osnovna;
- }
- bool operator<(Pizza &compare) { //оператор < - за споредување на пиците од каков било вид според
- if(this->price() < compare.price())// нивната продажна цена. (5 поени)
- return true;
- else return false;
- }
- };
- enum Size{mala=0, golema=1, familijarna=2};
- class FlatPizza : public Pizza { //Од оваа класа да се изведат класите FlatPizza и
- private: //За секоја рамна пица дополнително се чува големина
- Size golemina; //(enum - една од три можности: мала, голема и фамилијарна).
- public:
- FlatPizza(char * ime, char * sostojki, double osnovna, Size golemina = (Size)0 ) : Pizza(ime, sostojki, osnovna) {
- this->golemina = golemina;
- }
- FlatPizza(const FlatPizza ©) : Pizza(copy) {
- this->golemina = copy.golemina;
- }
- friend ostream &operator<<(ostream &o, FlatPizza &print) {
- o<<print.ime<<": "<<print.sostojki<<", ";
- if(print.golemina == mala)
- o<<"small ";
- else if(print.golemina == golema)
- o<<"big ";
- else if(print.golemina == familijarna)
- o<<"family ";
- o<<"- "<<print.price();
- o<<endl;
- return o;
- }
- double price() {//цената на рамната пица се пресметува така што основната цена се зголемува за
- double total = Pizza::price();
- if(golemina == mala) return total + (total * 0.1);//10%, за мала,
- if(golemina == golema) return total + (total * 0.5); //30% голема и
- if(golemina == familijarna) return total + (total * 0.3); //50% фамилијарна пица соодветно.
- }//na finki instructions se shit swapnati se golema i familijarna
- };
- class FoldedPizza : public Pizza { //FoldedPizza за опишување на рамни и преклопени пици соодветно (5 поени).
- private://За секоја преклопена пица дополнително се чува информација дали
- bool brasno; //тестото е од бело брашно или не (boolean).
- public:
- FoldedPizza(char * ime, char * sostojki, double osnovna) : Pizza (ime, sostojki, osnovna) {
- this->brasno = true;
- }
- void setWhiteFlour(bool brasno) {
- this->brasno = brasno;
- }
- friend ostream &operator<<(ostream &o, FoldedPizza &print) {
- o<<print.ime<<": "<<print.sostojki<<", ";// За преклопена пица: [име]: [состојки],
- if(print.brasno == true)
- o<<"wf ";// [wf - ако е со бело брашно / nwf - ако не е со бело брашно] -
- else o<<"nwf ";
- o<<"- "<<print.price();
- o<<endl;
- return o;
- }
- double price() { //цената на преклопената пица се пресметува така што основната цена
- double total = Pizza::price();
- if(brasno==true) return (total + (total * 0.1)); //се зголемува за 10% ако е тестото од бело брашно,
- else return (total + (total * 0.3)); // а во спротивно за 30%. (10 поени)
- }
- };
- void expensivePizza(Pizza **niza, int n) { //Да се дефинира глобална функција еxpensivePizza
- int indeks=0;
- double max = niza[0]->price(); //што на влез прима низа од покажувачи кон објекти од класата
- for(int i=0; i<n; i++) //Pizza и нивниот број, а како резултат ги печати информациите
- if(niza[i]->price() > max) { //за пицата со највисока продажна цена. Ако има
- max = niza[i]->price(); //повеќе пици со иста највисока цена, се печати првата. (10 поени)
- indeks = i;
- }
- FlatPizza * p1 = dynamic_cast<FlatPizza *>(niza[indeks]);
- if(p1!=0) cout<<*p1;
- FoldedPizza *p2 = dynamic_cast<FoldedPizza * >(niza[indeks]);
- if(p2!=0) cout<<*p2;
- }
- 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->price()<<endl;
- else cout<<fp2->price()<<endl;
- if(*fp1<*fp3)
- cout<<fp1->price()<<endl;
- else cout<<fp3->price()<<endl;
- if(*fp4<*fp2)
- cout<<fp4->price()<<endl;
- else cout<<fp2->price()<<endl;
- if(*fp3<*fp4)
- cout<<fp3->price()<<endl;
- else cout<<fp4->price()<<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