ivana_andreevska

Kolokviumska zadaca 3

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