Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class Delo { //Потребно е да се моделира продажба на карти за прикажување на претстави во некој културен центар.
- private:// За таа цел, да се направи класа DELO. За класата се чуваат следните атрибути:
- char ime[50];//Име на делото (низа од 50 знаци)
- int godina;//Година кога е напишано (цел број)
- char zemja[50];//Земја на потекло (низа од 50 знаци)
- public://За класата да се направат потребниот конструктор, get и set методи.
- Delo(char * ime = "", int godina = 0, char * zemja = "") {
- strcpy(this->ime, ime);
- this->godina = godina;
- strcpy(this->zemja, zemja);
- }
- Delo(const Delo ©) {
- strcpy(this->ime, copy.ime);
- this->godina = copy.godina;
- strcpy(this->zemja, copy.zemja);
- }
- Delo &operator=(const Delo ©) {
- if(this!=©) {
- strcpy(this->ime, copy.ime);
- this->godina = copy.godina;
- strcpy(this->zemja, copy.zemja);
- }
- return *this;
- }
- int getgodina() {
- return godina;
- }
- char * getzemja() {
- return this->zemja;
- }
- char * getIme() {
- return ime;
- }
- bool operator==(Delo &compare) { //За класата DELO да се преоптовари операторот ==
- if (strcmp(this->ime, compare.ime)==0) return true;//кој ќе споредува дали две дела се исти
- else return false;//(две дела се исти ако имаат исто име) (5 поени).
- }
- };
- class Pretstava { //Да се дефинира класа PRЕTSTAVA.
- private://За класата се чуваат информации за:
- Delo d; //Делото кое се прикажува (објект од класата DELO)
- int karti; //Број на продадени карти (цел број)
- char data[15]; //Дата на прикажување (низа од 15 знаци)
- public://За класата да се дефинира потребниот конструктор, set и get методите
- Pretstava() {
- this->karti = 0;
- strcpy(this->data, "");
- }
- Pretstava(Delo d, int karti, char * data) {
- this->d = d;
- this->karti = karti;
- strcpy(this->data, data);
- }
- Pretstava(const Pretstava ©) {
- this->d = copy.d;
- this->karti = copy.karti;
- strcpy(this->data, copy.data);
- }
- int getkarti() {
- return karti;
- }
- Delo getDelo() {
- return d;
- }
- virtual int cena() { //Дополнително, за класата PRETSTAVA да се напише метода cena која треба да ја
- //врати цената на една карта.
- int m = 0, n = 0; //Цената зависи од староста на делото и од земјата на потекло и се пресметува по следната формула:
- if(d.getgodina() > 1899)// Цена = N + М, каде М = 50ден.
- m = 50; //ако делото е напишано во 20 или 21 век,
- else if(d.getgodina() < 1900&&d.getgodina() > 1799) //М = 75ден. ако делото е напишано во
- m = 75; //19 век и
- else if(d.getgodina() < 1800) m = 100;//М = 100ден. ако делото е напишано пред 19 век.
- if(strcmp(d.getzemja(), "Italija")==0) //N = 100ден ако
- n = 100;// делото е од Италија,
- else if(strcmp(d.getzemja(), "Rusija")==0) //N = 150ден ако
- n = 150; //делото е од Русија.
- else n = 80;//Делата од останатите земји имаат N = 80ден.
- return m+n;
- }
- };
- class Balet : public Pretstava { //Претставите можат да бидат опера и балет.
- private://За балетите се чува дополнителен атрибут за
- static int dopolnitelna;//цената на балетот која се додава на оригиналната цена на картата
- public://и таа вредност е иста за сите балетски претстави.
- Balet(){}
- Balet(Delo d, int karti, char * data) : Pretstava(d, karti, data) {}
- int cena() {
- return Pretstava::cena() + this->dopolnitelna;
- }
- static void setCenaBalet(int newcena) {
- dopolnitelna = newcena;
- }
- Balet(const Balet ©) : Pretstava(copy) {}
- };
- class Opera : public Pretstava {
- public:
- Opera(){}
- Opera(Delo d, int karti, char * data) : Pretstava(d, karti, data) {}
- int cena() {
- return Pretstava::cena();
- }
- Opera(const Opera ©) : Pretstava(copy) {}
- };
- int Balet::dopolnitelna = 150; //На почеток изнесува 150 денари, со можност да се променува
- int prihod (Pretstava **niza, int broj) { //Да се дефинира надворешна функција prihod која како аргумент
- int total = 0;//прима низа од покажувачи кон претстави кои се прикажале во еден месец и големина на низата, а како
- for(int i=0;i<broj;i++)
- total = total + niza[i]->cena() * niza[i]->getkarti();
- return total;
- } // резултат треба да го пресмета и врати вкупниот приход на културниот центар. (10 поени)
- int brojPretstaviNaDelo(Pretstava **niza, int broj, Delo d) { //Да се дефинира надворешна функција brojPretstaviNaDelo
- int counter=0;//која како аргумент прима низа од покажувачи кон претстави кои се прикажале во еден месец,
- for(int i=0;i<broj;i++) //големина на низата и едно дело. Оваа функција пресметува на
- if(niza[i]->getDelo() == d) //колку од дадените претстави е прикажано даденото дело. (5 поени)
- counter++;
- return counter;
- }
- Delo readDelo(){
- char ime[50];
- int godina;
- char zemja[50];
- cin>>ime>>godina>>zemja;
- return Delo(ime,godina,zemja);
- }
- //citanje na pretstava
- Pretstava* readPretstava(){
- int tip; //0 za Balet , 1 za Opera
- cin>>tip;
- Delo d=readDelo();
- int brojProdadeni;
- char data[15];
- cin>>brojProdadeni>>data;
- if (tip==0) return new Balet(d,brojProdadeni,data);
- else return new Opera(d,brojProdadeni,data);
- }
- int main(){
- int test_case;
- cin>>test_case;
- switch(test_case){
- case 1:
- //Testiranje na klasite Opera i Balet
- {
- cout<<"======TEST CASE 1======="<<endl;
- Pretstava* p1=readPretstava();
- cout<<p1->getDelo().getIme()<<endl;
- Pretstava* p2=readPretstava();
- cout<<p2->getDelo().getIme()<<endl;
- }break;
- case 2:
- //Testiranje na klasite Opera i Balet so cena
- {
- cout<<"======TEST CASE 2======="<<endl;
- Pretstava* p1=readPretstava();
- cout<<p1->cena()<<endl;
- Pretstava* p2=readPretstava();
- cout<<p2->cena()<<endl;
- }break;
- case 3:
- //Testiranje na operator ==
- {
- cout<<"======TEST CASE 3======="<<endl;
- Delo f1=readDelo();
- Delo f2=readDelo();
- Delo f3=readDelo();
- if (f1==f2) cout<<"Isti se"<<endl; else cout<<"Ne se isti"<<endl;
- if (f1==f3) cout<<"Isti se"<<endl; else cout<<"Ne se isti"<<endl;
- }break;
- case 4:
- //testiranje na funkcijata prihod
- {
- cout<<"======TEST CASE 4======="<<endl;
- int n;
- cin>>n;
- Pretstava **pole=new Pretstava*[n];
- for (int i=0;i<n;i++){
- pole[i]=readPretstava();
- }
- cout<<prihod(pole,n);
- }break;
- case 5:
- //testiranje na prihod so izmena na cena za 3d proekcii
- {
- cout<<"======TEST CASE 5======="<<endl;
- int cenaBalet;
- cin>>cenaBalet;
- Balet::setCenaBalet(cenaBalet);
- int n;
- cin>>n;
- Pretstava **pole=new Pretstava*[n];
- for (int i=0;i<n;i++){
- pole[i]=readPretstava();
- }
- cout<<prihod(pole,n);
- }break;
- case 6:
- //testiranje na brojPretstaviNaDelo
- {
- cout<<"======TEST CASE 6======="<<endl;
- int n;
- cin>>n;
- Pretstava **pole=new Pretstava*[n];
- for (int i=0;i<n;i++){
- pole[i]=readPretstava();
- }
- Delo f=readDelo();
- cout<<brojPretstaviNaDelo(pole,n,f);
- }break;
- };
- return 0;
- }
Add Comment
Please, Sign In to add comment