Advertisement
196040

OOP zadaci za vezbanje 2 Koncerti

Jun 7th, 2020
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.29 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. class Koncert { //Да се креира класа за опишување на концерти.
  5. private: //За еден концерт се чуваат информации за (5 поени):
  6.     char naziv[30]; //● назив (низа од најмногу 20 знаци)
  7.     char lokacija[20]; // локација (низа од најмногу 20 знаци)
  8.     static double sezonski; //сезонски попуст (реален број)
  9.     double bilet;// цена на билет во денари (децимален број)
  10. public://Сите податоци во класата треба да се приватни.
  11.     Koncert() {
  12.         strcpy(this->naziv, "");
  13.         strcpy(this->lokacija, "");
  14.         this->sezonski = 0.0;
  15.         this->bilet = 0.0;
  16.     }
  17.     Koncert(char * naziv, char * lokacija,double bilet) {
  18.         strcpy(this->naziv, naziv);
  19.         strcpy(this->lokacija, lokacija);
  20.         this->bilet = bilet;
  21.     }
  22.     Koncert(const Koncert &copy) {
  23.         strcpy(this->naziv, copy.naziv);
  24.         strcpy(this->lokacija, copy.lokacija);
  25.         this->bilet = copy.bilet;
  26.     }
  27.     char * getNaziv () {
  28.         return naziv;
  29.     }
  30.     virtual double cena() { //Основната цена на еден билет за концерт се пресметува со методот:
  31.         return this->bilet - bilet * sezonski; //cena() – која ја враќа цената со сезонскиот попуст (5 поени)
  32.     }
  33.     double getSezonskiPopust() {
  34.     return sezonski;
  35.     }
  36.     static void setSezonskiPopust(double p) { //Сезонскиот попуст е ист за сите концерти и
  37.         sezonski = p; //може да се менува од страна на менаџерите
  38.         //За таа цел да се обезбеди функција за менување на сезонскиот попуст.
  39.     }//во зависност од сезоната.
  40. };
  41. double Koncert::sezonski = 0.2; //Сезонскиот попуст е изразен во проценти и почетната вредност е 20 проценти.
  42. class ElektronskiKoncert : public Koncert { //За потребите на еден летен фестивал, треба да се обезбедат посебен вид
  43. private://на забавни концерти, електронски концерти. За секој eлектронски концерт дополнително се чуваат
  44.     char * dj; //инфромации за името на DJ-от(динамички алоцирана низа од знаци),
  45.     float nastap; //времетраење на настапот во часови (реален број) и
  46.     bool dnevna; //логичка променлива за дали се работи за дневна или ноќна забава (дневна-true/ноќна-false).
  47. public:
  48.     ElektronskiKoncert() {
  49.         this->dj = new char[0];
  50.         strcpy(this->dj, "");
  51.         this->nastap = 0.0;
  52.         this->dnevna = false;
  53.     }
  54.     ElektronskiKoncert(char * naziv, char * lokacija,double bilet, char * dj, float nastap, bool dnevna) : Koncert(naziv, lokacija, bilet) {
  55.         this->dj = new char[strlen(dj)+1];
  56.         strcpy(this->dj, dj);
  57.         this->nastap = nastap;
  58.         this->dnevna = dnevna;
  59.     }
  60.     ElektronskiKoncert(const ElektronskiKoncert &copy) : Koncert(copy) {
  61.         this->dj = new char[strlen(copy.dj)+1];
  62.         strcpy(this->dj, copy.dj);
  63.         this->nastap = copy.nastap;
  64.         this->dnevna = copy.dnevna;
  65.     }
  66.     double cena() { //cena() - основната цена се зголемува во зависност од времетраењето
  67.         double total=Koncert::cena();
  68.        if(nastap > 5 && nastap < 7) //Ако времетраењето на концертот е подолго од 5 часа,
  69.             total = total + 150; //основната цена се зголемува за 150 денари.
  70.         if(nastap > 7) //Ако времетраењето е подолго од 7 часа,
  71.            total = total + 360; //цената се зголемува за 360 денари.
  72.         if(this->dnevna) //Доколку се работи за дневна забава,
  73.             total = total - 50;//цената се намалува за 50,
  74.         else if(this->dnevna == false)  //а доколку се работи за ноќна забава
  75.             total = total + 100; //се зголемува за 100 денари.
  76.         return total;
  77.     }
  78. }; //Да се имплементираат следните функции:
  79. void najskapKoncert(Koncert **koncerti, int n) { // void najskapKoncert(Koncert ** koncerti, int n)
  80.     double max = koncerti[0]->cena();
  81.     int indeks = 0, counter = 0;
  82.     for(int i=0; i<n; i++) {
  83.         if(koncerti[i]->cena() > max) {
  84.             max = koncerti[i]->cena(); //– во која ќе се испечати називот и цената на најскапиот концерт во низата.
  85.             indeks = i;
  86.         }
  87.         ElektronskiKoncert * p1= dynamic_cast<ElektronskiKoncert *>(koncerti[i]);
  88.         if(p1!=0) counter++;
  89.     }
  90.     cout<<"Najskap koncert: "<<koncerti[indeks]->getNaziv()<<" "<<koncerti[indeks]->cena()<<endl;
  91. //Дополнително, да се испечати и колку од концертите се електронски, а колку не во формат:
  92.     cout<<"Elektronski koncerti: "<<counter<<" od vkupno "<<n<<endl;
  93. } //[Електронски концерти: X од вкупно Y.] (10 поени)
  94. bool prebarajKoncert(Koncert **koncerti, int n, char * naziv, bool elektronski) {
  95.     //bool prebarajKoncert(Koncert ** koncerti, int n, char * naziv, bool elektronski)
  96.     if (elektronski) {
  97.         for(int i=0; i<n; i++) { //Доколку променливата elektronski е true,
  98.         ElektronskiKoncert * p1 = dynamic_cast<ElektronskiKoncert *>(koncerti[i]);
  99.         if(p1!=0) { //– во која ќе се прабарува концерт кој имаат ист назив како променливата naziv.
  100.             if(strcmp(koncerti[i]->getNaziv(), naziv) == 0) {//треба да се пребарува само низ електронските концерти,
  101.                 cout<<koncerti[i]->getNaziv()<<" "<<koncerti[i]->cena()<<endl; //Доколку е пронајден концертот, се печати неговиот
  102.                 return true; //  назив и цена и функцијата враќа true.
  103.             }
  104.             else return false; //Доколку не е пронајден концертот, функцијата враќа false.
  105.         }
  106.     }
  107.     }
  108.     else { //во спротивно се пребаруваат сите концерти.
  109.         for(int i=0; i<n; i++) {
  110.             if(strcmp(koncerti[i]->getNaziv(), naziv) == 0) {
  111.                 cout<<koncerti[i]->getNaziv()<<" "<<koncerti[i]->cena()<<endl;
  112.                 return true;
  113.             }
  114.             }
  115.    
  116.     }
  117. }
  118. int main() {
  119.  
  120.     int tip,n,novaCena;
  121.     char naziv[100], lokacija[100], imeDJ[40];
  122.     bool dnevna;
  123.     float cenaBilet, novPopust;
  124.     float casovi;
  125.  
  126.     cin>>tip;
  127.     if (tip==1) { //Koncert
  128.         cin>>naziv>>lokacija>>cenaBilet;
  129.         Koncert k1(naziv,lokacija,cenaBilet);
  130.         cout<<"Kreiran e koncert so naziv: "<<k1.getNaziv()<<endl;
  131.     } else if (tip==2) { //cena - Koncert
  132.         cin>>naziv>>lokacija>>cenaBilet;
  133.         Koncert k1(naziv,lokacija,cenaBilet);
  134.         cout<<"Osnovna cena na koncertot so naziv "<<k1.getNaziv()<< " e: " <<k1.cena()<<endl;
  135.     } else if (tip==3) { //ElektronskiKoncert
  136.         cin>>naziv>>lokacija>>cenaBilet>>imeDJ>>casovi>>dnevna;
  137.         ElektronskiKoncert s(naziv,lokacija,cenaBilet,imeDJ,casovi,dnevna);
  138.         cout<<"Kreiran e elektronski koncert so naziv "<<s.getNaziv()<<" i sezonskiPopust "<<s.getSezonskiPopust()<<endl;
  139.     } else if (tip==4) { //cena - ElektronskiKoncert
  140.         cin>>naziv>>lokacija>>cenaBilet>>imeDJ>>casovi>>dnevna;
  141.         ElektronskiKoncert s(naziv,lokacija,cenaBilet,imeDJ,casovi,dnevna);
  142.         cout<<"Cenata na elektronskiot koncert so naziv "<<s.getNaziv()<<" e: "<<s.cena()<<endl;
  143.     } else if (tip==5) { //najskapKoncert
  144.  
  145.     } else if (tip==6) { //prebarajKoncert
  146.         Koncert ** koncerti = new Koncert *[5];
  147.         int n;
  148.         koncerti[0] = new Koncert("Area","BorisTrajkovski",350);
  149.         koncerti[1] = new ElektronskiKoncert("TomorrowLand","Belgium",8000,"Afrojack",7.5,false);
  150.         koncerti[2] = new ElektronskiKoncert("SeaDance","Budva",9100,"Tiesto",5,true);
  151.         koncerti[3] = new Koncert("Superhiks","PlatoUkim",100);
  152.         koncerti[4] = new ElektronskiKoncert("CavoParadiso","Mykonos",8800,"Guetta",3,true);
  153.         char naziv[100];
  154.         najskapKoncert(koncerti,5);
  155.     } else if (tip==7) { //prebaraj
  156.         Koncert ** koncerti = new Koncert *[5];
  157.         int n;
  158.         koncerti[0] = new Koncert("Area","BorisTrajkovski",350);
  159.         koncerti[1] = new ElektronskiKoncert("TomorrowLand","Belgium",8000,"Afrojack",7.5,false);
  160.         koncerti[2] = new ElektronskiKoncert("SeaDance","Budva",9100,"Tiesto",5,true);
  161.         koncerti[3] = new Koncert("Superhiks","PlatoUkim",100);
  162.         koncerti[4] = new ElektronskiKoncert("CavoParadiso","Mykonos",8800,"Guetta",3,true);
  163.         char naziv[100];
  164.         bool elektronski;
  165.         cin>>elektronski;
  166.         if(prebarajKoncert(koncerti,5, "Area",elektronski))
  167.             cout<<"Pronajden"<<endl;
  168.         else cout<<"Ne e pronajden"<<endl;
  169.  
  170.         if(prebarajKoncert(koncerti,5, "Area",!elektronski))
  171.             cout<<"Pronajden"<<endl;
  172.         else cout<<"Ne e pronajden"<<endl;
  173.  
  174.     } else if (tip==8) { //smeni cena
  175.         Koncert ** koncerti = new Koncert *[5];
  176.         int n;
  177.         koncerti[0] = new Koncert("Area","BorisTrajkovski",350);
  178.         koncerti[1] = new ElektronskiKoncert("TomorrowLand","Belgium",8000,"Afrojack",7.5,false);
  179.         koncerti[2] = new ElektronskiKoncert("SeaDance","Budva",9100,"Tiesto",5,true);
  180.         koncerti[3] = new Koncert("Superhiks","PlatoUkim",100);
  181.         koncerti[2] -> setSezonskiPopust(0.9);
  182.         najskapKoncert(koncerti,4);
  183.     }
  184.  
  185.     return 0;
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement