Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class Koncert { //Да се креира класа за опишување на концерти.
- private: //За еден концерт се чуваат информации за (5 поени):
- char naziv[30]; //● назив (низа од најмногу 20 знаци)
- char lokacija[20]; // локација (низа од најмногу 20 знаци)
- static double sezonski; //сезонски попуст (реален број)
- double bilet;// цена на билет во денари (децимален број)
- public://Сите податоци во класата треба да се приватни.
- Koncert() {
- strcpy(this->naziv, "");
- strcpy(this->lokacija, "");
- this->sezonski = 0.0;
- this->bilet = 0.0;
- }
- Koncert(char * naziv, char * lokacija,double bilet) {
- strcpy(this->naziv, naziv);
- strcpy(this->lokacija, lokacija);
- this->bilet = bilet;
- }
- Koncert(const Koncert ©) {
- strcpy(this->naziv, copy.naziv);
- strcpy(this->lokacija, copy.lokacija);
- this->bilet = copy.bilet;
- }
- char * getNaziv () {
- return naziv;
- }
- virtual double cena() { //Основната цена на еден билет за концерт се пресметува со методот:
- return this->bilet - bilet * sezonski; //cena() – која ја враќа цената со сезонскиот попуст (5 поени)
- }
- double getSezonskiPopust() {
- return sezonski;
- }
- static void setSezonskiPopust(double p) { //Сезонскиот попуст е ист за сите концерти и
- sezonski = p; //може да се менува од страна на менаџерите
- //За таа цел да се обезбеди функција за менување на сезонскиот попуст.
- }//во зависност од сезоната.
- };
- double Koncert::sezonski = 0.2; //Сезонскиот попуст е изразен во проценти и почетната вредност е 20 проценти.
- class ElektronskiKoncert : public Koncert { //За потребите на еден летен фестивал, треба да се обезбедат посебен вид
- private://на забавни концерти, електронски концерти. За секој eлектронски концерт дополнително се чуваат
- char * dj; //инфромации за името на DJ-от(динамички алоцирана низа од знаци),
- float nastap; //времетраење на настапот во часови (реален број) и
- bool dnevna; //логичка променлива за дали се работи за дневна или ноќна забава (дневна-true/ноќна-false).
- public:
- ElektronskiKoncert() {
- this->dj = new char[0];
- strcpy(this->dj, "");
- this->nastap = 0.0;
- this->dnevna = false;
- }
- ElektronskiKoncert(char * naziv, char * lokacija,double bilet, char * dj, float nastap, bool dnevna) : Koncert(naziv, lokacija, bilet) {
- this->dj = new char[strlen(dj)+1];
- strcpy(this->dj, dj);
- this->nastap = nastap;
- this->dnevna = dnevna;
- }
- ElektronskiKoncert(const ElektronskiKoncert ©) : Koncert(copy) {
- this->dj = new char[strlen(copy.dj)+1];
- strcpy(this->dj, copy.dj);
- this->nastap = copy.nastap;
- this->dnevna = copy.dnevna;
- }
- double cena() { //cena() - основната цена се зголемува во зависност од времетраењето
- double total=Koncert::cena();
- if(nastap > 5 && nastap < 7) //Ако времетраењето на концертот е подолго од 5 часа,
- total = total + 150; //основната цена се зголемува за 150 денари.
- if(nastap > 7) //Ако времетраењето е подолго од 7 часа,
- total = total + 360; //цената се зголемува за 360 денари.
- if(this->dnevna) //Доколку се работи за дневна забава,
- total = total - 50;//цената се намалува за 50,
- else if(this->dnevna == false) //а доколку се работи за ноќна забава
- total = total + 100; //се зголемува за 100 денари.
- return total;
- }
- }; //Да се имплементираат следните функции:
- void najskapKoncert(Koncert **koncerti, int n) { // void najskapKoncert(Koncert ** koncerti, int n)
- double max = koncerti[0]->cena();
- int indeks = 0, counter = 0;
- for(int i=0; i<n; i++) {
- if(koncerti[i]->cena() > max) {
- max = koncerti[i]->cena(); //– во која ќе се испечати називот и цената на најскапиот концерт во низата.
- indeks = i;
- }
- ElektronskiKoncert * p1= dynamic_cast<ElektronskiKoncert *>(koncerti[i]);
- if(p1!=0) counter++;
- }
- cout<<"Najskap koncert: "<<koncerti[indeks]->getNaziv()<<" "<<koncerti[indeks]->cena()<<endl;
- //Дополнително, да се испечати и колку од концертите се електронски, а колку не во формат:
- cout<<"Elektronski koncerti: "<<counter<<" od vkupno "<<n<<endl;
- } //[Електронски концерти: X од вкупно Y.] (10 поени)
- bool prebarajKoncert(Koncert **koncerti, int n, char * naziv, bool elektronski) {
- //bool prebarajKoncert(Koncert ** koncerti, int n, char * naziv, bool elektronski)
- if (elektronski) {
- for(int i=0; i<n; i++) { //Доколку променливата elektronski е true,
- ElektronskiKoncert * p1 = dynamic_cast<ElektronskiKoncert *>(koncerti[i]);
- if(p1!=0) { //– во која ќе се прабарува концерт кој имаат ист назив како променливата naziv.
- if(strcmp(koncerti[i]->getNaziv(), naziv) == 0) {//треба да се пребарува само низ електронските концерти,
- cout<<koncerti[i]->getNaziv()<<" "<<koncerti[i]->cena()<<endl; //Доколку е пронајден концертот, се печати неговиот
- return true; // назив и цена и функцијата враќа true.
- }
- else return false; //Доколку не е пронајден концертот, функцијата враќа false.
- }
- }
- }
- else { //во спротивно се пребаруваат сите концерти.
- for(int i=0; i<n; i++) {
- if(strcmp(koncerti[i]->getNaziv(), naziv) == 0) {
- cout<<koncerti[i]->getNaziv()<<" "<<koncerti[i]->cena()<<endl;
- return true;
- }
- }
- }
- }
- int main() {
- int tip,n,novaCena;
- char naziv[100], lokacija[100], imeDJ[40];
- bool dnevna;
- float cenaBilet, novPopust;
- float casovi;
- cin>>tip;
- if (tip==1) { //Koncert
- cin>>naziv>>lokacija>>cenaBilet;
- Koncert k1(naziv,lokacija,cenaBilet);
- cout<<"Kreiran e koncert so naziv: "<<k1.getNaziv()<<endl;
- } else if (tip==2) { //cena - Koncert
- cin>>naziv>>lokacija>>cenaBilet;
- Koncert k1(naziv,lokacija,cenaBilet);
- cout<<"Osnovna cena na koncertot so naziv "<<k1.getNaziv()<< " e: " <<k1.cena()<<endl;
- } else if (tip==3) { //ElektronskiKoncert
- cin>>naziv>>lokacija>>cenaBilet>>imeDJ>>casovi>>dnevna;
- ElektronskiKoncert s(naziv,lokacija,cenaBilet,imeDJ,casovi,dnevna);
- cout<<"Kreiran e elektronski koncert so naziv "<<s.getNaziv()<<" i sezonskiPopust "<<s.getSezonskiPopust()<<endl;
- } else if (tip==4) { //cena - ElektronskiKoncert
- cin>>naziv>>lokacija>>cenaBilet>>imeDJ>>casovi>>dnevna;
- ElektronskiKoncert s(naziv,lokacija,cenaBilet,imeDJ,casovi,dnevna);
- cout<<"Cenata na elektronskiot koncert so naziv "<<s.getNaziv()<<" e: "<<s.cena()<<endl;
- } else if (tip==5) { //najskapKoncert
- } else if (tip==6) { //prebarajKoncert
- Koncert ** koncerti = new Koncert *[5];
- int n;
- koncerti[0] = new Koncert("Area","BorisTrajkovski",350);
- koncerti[1] = new ElektronskiKoncert("TomorrowLand","Belgium",8000,"Afrojack",7.5,false);
- koncerti[2] = new ElektronskiKoncert("SeaDance","Budva",9100,"Tiesto",5,true);
- koncerti[3] = new Koncert("Superhiks","PlatoUkim",100);
- koncerti[4] = new ElektronskiKoncert("CavoParadiso","Mykonos",8800,"Guetta",3,true);
- char naziv[100];
- najskapKoncert(koncerti,5);
- } else if (tip==7) { //prebaraj
- Koncert ** koncerti = new Koncert *[5];
- int n;
- koncerti[0] = new Koncert("Area","BorisTrajkovski",350);
- koncerti[1] = new ElektronskiKoncert("TomorrowLand","Belgium",8000,"Afrojack",7.5,false);
- koncerti[2] = new ElektronskiKoncert("SeaDance","Budva",9100,"Tiesto",5,true);
- koncerti[3] = new Koncert("Superhiks","PlatoUkim",100);
- koncerti[4] = new ElektronskiKoncert("CavoParadiso","Mykonos",8800,"Guetta",3,true);
- char naziv[100];
- bool elektronski;
- cin>>elektronski;
- if(prebarajKoncert(koncerti,5, "Area",elektronski))
- cout<<"Pronajden"<<endl;
- else cout<<"Ne e pronajden"<<endl;
- if(prebarajKoncert(koncerti,5, "Area",!elektronski))
- cout<<"Pronajden"<<endl;
- else cout<<"Ne e pronajden"<<endl;
- } else if (tip==8) { //smeni cena
- Koncert ** koncerti = new Koncert *[5];
- int n;
- koncerti[0] = new Koncert("Area","BorisTrajkovski",350);
- koncerti[1] = new ElektronskiKoncert("TomorrowLand","Belgium",8000,"Afrojack",7.5,false);
- koncerti[2] = new ElektronskiKoncert("SeaDance","Budva",9100,"Tiesto",5,true);
- koncerti[3] = new Koncert("Superhiks","PlatoUkim",100);
- koncerti[2] -> setSezonskiPopust(0.9);
- najskapKoncert(koncerti,4);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement