MikiStrail

Задачи за вежбање за втор колоквиум - ООП

May 16th, 2019
1,193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 47.92 KB | None | 0 0
  1. 1. Транспорт
  2. // вашиот код треба да биде тука
  3. #include <iostream>
  4. #include <cstring>
  5. using namespace std;
  6. class Transport
  7. {
  8. protected:
  9.     char destinacija[30];
  10.     int osnovnaCena;
  11.     int rastojanie;
  12. public:
  13.     Transport(){}
  14.     Transport(char destinacija[],int osnovnaCena,int rastojanie)
  15.     {
  16.         strcpy(this->destinacija,destinacija);
  17.         this->osnovnaCena = osnovnaCena;
  18.         this->rastojanie = rastojanie;
  19.     }
  20.     void setDestinacija(char destinacija[])
  21.     {
  22.         strcpy(this->destinacija,destinacija);
  23.     }
  24.     void setOsnovnaCena(int osnovnaCena)
  25.     {
  26.         this->osnovnaCena = osnovnaCena;
  27.     }
  28.     char* getDestinacija()
  29.     {
  30.         return destinacija;
  31.     }
  32.     int getRastojanie()
  33.     {
  34.         return rastojanie;
  35.     }
  36.    
  37.     //virtual cenaTransport() = 0;
  38.     virtual int cenaTransport()
  39.     {
  40.         return osnovnaCena;
  41.     }
  42.     bool operator < (Transport &t)
  43.     {
  44.         return this->rastojanie < t.rastojanie;
  45.     }
  46.     ~Transport(){}
  47.    
  48. };
  49. class AvtomobilTransport : public Transport
  50. {
  51. private:
  52.     bool sofer;
  53. public:
  54.     AvtomobilTransport(){}
  55.     AvtomobilTransport(char destinacija[],int osnovnaCena,int rastojanie,bool sofer): Transport(destinacija,osnovnaCena,rastojanie)
  56.     {
  57.         this->sofer = sofer;
  58.     }
  59.     int cenaTransport()
  60.     {
  61.         int c = Transport::cenaTransport();
  62.         if(sofer)
  63.         {
  64.             c = c + c*20/100;
  65.         }
  66.         return c;
  67.     }
  68.     ~AvtomobilTransport(){}
  69. };
  70. class KombeTransport : public Transport
  71. {
  72. private:
  73.     int brPatnici;
  74. public:
  75.     KombeTransport(){}
  76.     KombeTransport(char destinacija[],int osnovnaCena,int rastojanie,int brPatnici): Transport(destinacija,osnovnaCena,rastojanie)
  77.     {
  78.         this->brPatnici = brPatnici;
  79.     }
  80.     int cenaTransport()
  81.     {
  82.         int c = Transport::cenaTransport();
  83.         c = c - (200 * brPatnici);
  84.         return c;
  85.     }
  86.     ~KombeTransport(){}
  87. };
  88. void pecatiPoloshiPonudi(Transport **ponudi,int n,AvtomobilTransport &T)
  89. {
  90.    
  91.     int br=0;
  92.     for(int i=0;i<n;i++)
  93.     {
  94.        
  95.         if(ponudi[i]->cenaTransport()>T.cenaTransport())
  96.             br++;
  97.     }
  98.     int j=0;
  99.     Transport **temp = new Transport *[br];
  100.     for(int i=0;i<n;i++)
  101.    
  102.     {
  103.         if(ponudi[i]->cenaTransport()>T.cenaTransport())
  104.     {
  105.         temp[j] = ponudi[i];
  106.         j++;
  107.     }
  108.            
  109.        
  110.     }
  111.     Transport *pom;
  112.     for(int i=0;i<br;i++)
  113.     {
  114.         for(int j=0;j<br-1-i;j++)
  115.         {
  116.             if(temp[j]->cenaTransport()>temp[j+1]->cenaTransport())
  117.             {
  118.                 pom = temp[j];
  119.                 temp[j] = temp[j+1];
  120.                 temp[j+1] = pom;
  121.             }
  122.         }
  123.     }
  124.     for(int i=0;i<n;i++)
  125.     {
  126.         cout<<temp[i]->getDestinacija()<<" "<<temp[i]->getRastojanie()<<" "<<temp[i]->cenaTransport()<<endl;
  127.     }
  128. }
  129.  
  130. int main(){
  131.  
  132. char destinacija[20];
  133. int tip,cena,rastojanie,lugje;
  134. bool shofer;
  135. int n;
  136. cin>>n;
  137. Transport  **ponudi;
  138. ponudi=new Transport *[n];
  139.  
  140. for (int i=0;i<n;i++){
  141.  
  142.     cin>>tip>>destinacija>>cena>>rastojanie;
  143.     if (tip==1) {
  144.         cin>>shofer;
  145.         ponudi[i]=new AvtomobilTransport(destinacija,cena,rastojanie,shofer);
  146.  
  147.     }
  148.     else {
  149.         cin>>lugje;
  150.         ponudi[i]=new KombeTransport(destinacija,cena,rastojanie,lugje);
  151.     }
  152.  
  153.  
  154. }
  155.  
  156. AvtomobilTransport nov("Ohrid",2000,600,false);
  157. pecatiPoloshiPonudi(ponudi,n,nov);
  158.  
  159. for (int i=0;i<n;i++) delete ponudi[i];
  160. delete [] ponudi;
  161. return 0;
  162. }
  163.  
  164. 2. Демонстратор 1
  165. #include<iostream>
  166. #include<string.h>
  167. using namespace std;
  168.  
  169.  
  170. class Kurs {
  171. private:
  172.     char ime[20];
  173.     int krediti;
  174. public:
  175.     Kurs (char *ime,int krediti) {
  176.         strcpy(this->ime,ime);
  177.         this->krediti=krediti;
  178.     }
  179.     Kurs () {
  180.         strcpy(this->ime,"");
  181.         krediti=0;
  182.     }
  183.     bool operator==(const char *ime) const {
  184.         return strcmp(this->ime,ime)==0;
  185.     }
  186.     char const * getIme()const {
  187.         return ime;
  188.     }
  189.     void pecati ()const {
  190.         cout<<ime<<" "<<krediti<<"ECTS";
  191.     }
  192. };
  193.  
  194. class Student {
  195. private:
  196.     int *ocenki;
  197.     int brojOcenki;
  198.  
  199. protected:
  200.     int indeks;
  201.  
  202. public:
  203.     Student(int indeks,int *ocenki, int brojOcenki) {
  204.         this->indeks=indeks;
  205.         this->brojOcenki=brojOcenki;
  206.         this->ocenki=new int[brojOcenki];
  207.         for (int i=0; i<brojOcenki; i++) this->ocenki[i]=ocenki[i];
  208.     }
  209.     Student(const Student &k) {
  210.         this->indeks=k.indeks;
  211.         this->brojOcenki=k.brojOcenki;
  212.         this->ocenki=new int[k.brojOcenki];
  213.         for (int i=0; i<k.brojOcenki; i++) this->ocenki[i]=k.ocenki[i];
  214.     }
  215.     Student operator=(const Student &k) {
  216.         if (&k==this) return *this;
  217.         this->indeks=k.indeks;
  218.         this->brojOcenki=k.brojOcenki;
  219.         delete [] ocenki;
  220.         this->ocenki=new int[k.brojOcenki];
  221.         for (int i=0; i<k.brojOcenki; i++) this->ocenki[i]=k.ocenki[i];
  222.         return *this;
  223.     }
  224.  
  225.     ~Student() {
  226.         delete [] ocenki;
  227.     }
  228.  
  229.     //dopolni ja klasata
  230.     virtual int getBodovi() {
  231.         double count = 0;
  232.         for (int i=0; i<brojOcenki; i++) {
  233.             if (ocenki[i]>5)
  234.                 count++;
  235.         }
  236.  
  237.         return (int) (count/brojOcenki*100.00);
  238.     }
  239.  
  240.     virtual void pecati() {
  241.         cout<<indeks<<endl;
  242.     }
  243. };
  244.  
  245. class Predavach {
  246. private:
  247.     Kurs kursevi[10];
  248.     int brojKursevi;
  249.  
  250. protected:
  251.     char *imeIPrezime;
  252.  
  253. public:
  254.     Predavach(char *imeIPrezime,Kurs *kursevi,int brojKursevi) {
  255.         this->brojKursevi=brojKursevi;
  256.         for (int i=0; i<brojKursevi; i++) this->kursevi[i]=kursevi[i];
  257.         this->imeIPrezime=new char[strlen(imeIPrezime)+1];
  258.         strcpy(this->imeIPrezime,imeIPrezime);
  259.     }
  260.     Predavach(const Predavach &p) {
  261.         this->brojKursevi=p.brojKursevi;
  262.         for (int i=0; i<p.brojKursevi; i++) this->kursevi[i]=p.kursevi[i];
  263.         this->imeIPrezime=new char[strlen(p.imeIPrezime)+1];
  264.         strcpy(this->imeIPrezime,p.imeIPrezime);
  265.     }
  266.     Predavach operator=(const Predavach &p) {
  267.         if (this==&p) return *this;
  268.         this->brojKursevi=p.brojKursevi;
  269.         for (int i=0; i<p.brojKursevi; i++) this->kursevi[i]=p.kursevi[i];
  270.         this->imeIPrezime=new char[strlen(p.imeIPrezime)+1];
  271.         delete [] imeIPrezime;
  272.         strcpy(this->imeIPrezime,p.imeIPrezime);
  273.         return *this;
  274.     }
  275.     ~Predavach() {
  276.         delete [] imeIPrezime;
  277.     }
  278.     int getBrojKursevi()const {
  279.         return brojKursevi;
  280.     }
  281.     Kurs getKursevi(int n){
  282.         return kursevi[n];
  283.     }
  284.     char * const getImeIPrezime()const {
  285.         return imeIPrezime;
  286.     }
  287.  
  288.     Kurs operator[](int i) const {
  289.         if (i<brojKursevi&&i>=0)
  290.             return kursevi[i];
  291.         else return Kurs();
  292.     }
  293.     void pecati() const  {
  294.         cout<<imeIPrezime<<" (";
  295.         for (int i=0; i<brojKursevi; i++) {
  296.             kursevi[i].pecati();
  297.             if (i<brojKursevi-1) cout<<", ";
  298.             else cout<<")";
  299.         }
  300.     }
  301. };
  302.  
  303.  
  304. //mesto za vashiot kod
  305. class NoCourseException {
  306. private:
  307.     int indeks;
  308.  
  309. public:
  310.     NoCourseException(int index) {
  311.         this->indeks=index;
  312.     }
  313.  
  314.     void message() {
  315.         cout<<"Demonstratorot so indeks "<<indeks<<" ne drzi laboratoriski vezbi"<<endl;
  316.     }
  317.  
  318. };
  319. class Demonstrator : public Predavach, public Student {
  320. private:
  321.     int brojchasovi;
  322.  
  323. public:
  324.     Demonstrator (int indeks,int * ocenki,int brojOcenki,char * imeIPrezime,Kurs * kursevi,int brojKursevi,int brojCasovi)
  325.         : Predavach(imeIPrezime,kursevi,brojKursevi), Student(indeks,ocenki,brojOcenki) {
  326.         this->brojchasovi = brojCasovi;
  327.     }
  328.  
  329.     Demonstrator (const Demonstrator &d) : Predavach(d), Student(d) {
  330.  
  331.     }
  332.  
  333.     int getBodovi() {
  334.         if (getBrojKursevi()==0)
  335.             throw NoCourseException(indeks);
  336.         int bodovi = Student::getBodovi();
  337.         bodovi += (20*brojchasovi) / getBrojKursevi();
  338.         return bodovi;
  339.     }
  340.  
  341.     void pecati() {
  342.         cout<<indeks<<": "<<imeIPrezime<<" (";
  343.         for (int i=0; i<getBrojKursevi(); i++) {
  344.             getKursevi(i).pecati();
  345.             if (i==getBrojKursevi()-1)
  346.                 cout<<")";
  347.             else
  348.                 cout<<", ";
  349.         }
  350.  
  351.  
  352.     }
  353.  
  354.  
  355. };
  356.  
  357. Student & vratiNajdobroRangiran (Student ** studenti, int n) {
  358.     Student * max = studenti[0];
  359.     for (int i=1; i<n; i++) {
  360.         Demonstrator * dem = dynamic_cast<Demonstrator *>(studenti[i]);
  361.         try {
  362.             if (studenti[i]->getBodovi()>max->getBodovi())
  363.                 max=studenti[i];
  364.         } catch (NoCourseException &e) {
  365.             e.message();
  366.         }
  367.     }
  368.     return (*max);
  369. }
  370.  
  371. void pecatiDemonstratoriKurs (char* kurs, Student** studenti, int n) {
  372.  
  373.     for (int i=0; i<n; i++) {
  374.         Demonstrator * dem = dynamic_cast<Demonstrator *> (studenti[i]);
  375.         if (dem) {
  376.             for (int j=0; j<dem->getBrojKursevi(); j++) {
  377.                 Predavach p = (Predavach) (*dem);
  378.                 if (p[j]==kurs) {
  379.                     studenti[i]->pecati();
  380.                     cout<<endl;
  381.                     break;
  382.                 }
  383.             }
  384.         }
  385.     }
  386. }
  387.  
  388. int main() {
  389.  
  390.     Kurs kursevi[10];
  391.     int indeks,brojKursevi, ocenki[20],ocenka,brojOcenki,tip,brojCasovi,krediti;
  392.     char ime[20],imeIPrezime[50];
  393.  
  394.     cin>>tip;
  395.  
  396.     if (tip==1) { //test class Demonstrator
  397.         cout<<"-----TEST Demonstrator-----"<<endl;
  398.         cin>>indeks>>brojOcenki;
  399.         for (int i=0; i<brojOcenki; i++) {
  400.             cin>>ocenka;
  401.             ocenki[i]=ocenka;
  402.         }
  403.         cin>>imeIPrezime>>brojKursevi;
  404.         for (int i=0; i<brojKursevi; i++) {
  405.             cin>>ime>>krediti;
  406.             kursevi[i]=Kurs(ime,krediti);
  407.         }
  408.         cin>>brojCasovi;
  409.  
  410.         Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  411.         cout<<"Objekt od klasata Demonstrator e kreiran";
  412.  
  413.     } else if (tip==2) { //funkcija pecati vo Student
  414.         cout<<"-----TEST pecati-----"<<endl;
  415.         cin>>indeks>>brojOcenki;
  416.         for (int i=0; i<brojOcenki; i++) {
  417.             cin>>ocenka;
  418.             ocenki[i]=ocenka;
  419.         }
  420.  
  421.         Student s(indeks,ocenki,brojOcenki);
  422.         s.pecati();
  423.  
  424.     } else if (tip==3) { //funkcija getVkupnaOcenka vo Student
  425.         cout<<"-----TEST getVkupnaOcenka-----"<<endl;
  426.         cin>>indeks>>brojOcenki;
  427.         for (int i=0; i<brojOcenki; i++) {
  428.             cin>>ocenka;
  429.             ocenki[i]=ocenka;
  430.         }
  431.         Student s(indeks,ocenki,brojOcenki);
  432.         cout<<"Broj na bodovi: "<<s.getBodovi()<<endl;
  433.  
  434.     } else if (tip==4) { //funkcija getVkupnaOcenka vo Demonstrator
  435.         cout<<"-----TEST getVkupnaOcenka-----"<<endl;
  436.         cin>>indeks>>brojOcenki;
  437.         for (int i=0; i<brojOcenki; i++) {
  438.             cin>>ocenka;
  439.             ocenki[i]=ocenka;
  440.         }
  441.         cin>>imeIPrezime>>brojKursevi;
  442.         for (int i=0; i<brojKursevi; i++) {
  443.             cin>>ime>>krediti;
  444.             kursevi[i]=Kurs(ime,krediti);
  445.         }
  446.         cin>>brojCasovi;
  447.  
  448.         Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  449.         cout<<"Broj na bodovi: "<<d.getBodovi()<<endl;
  450.  
  451.     } else if (tip==5) { //funkcija pecati vo Demonstrator
  452.         cout<<"-----TEST pecati -----"<<endl;
  453.         cin>>indeks>>brojOcenki;
  454.         for (int i=0; i<brojOcenki; i++) {
  455.             cin>>ocenka;
  456.             ocenki[i]=ocenka;
  457.         }
  458.         cin>>imeIPrezime>>brojKursevi;
  459.         for (int i=0; i<brojKursevi; i++) {
  460.             cin>>ime>>krediti;
  461.             kursevi[i]=Kurs(ime,krediti);
  462.         }
  463.         cin>>brojCasovi;
  464.  
  465.         Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  466.         d.pecati();
  467.  
  468.     } else if (tip==6) { //site klasi
  469.         cout<<"-----TEST Student i Demonstrator-----"<<endl;
  470.         cin>>indeks>>brojOcenki;
  471.         for (int i=0; i<brojOcenki; i++) {
  472.             cin>>ocenka;
  473.             ocenki[i]=ocenka;
  474.         }
  475.         cin>>imeIPrezime>>brojKursevi;
  476.         for (int i=0; i<brojKursevi; i++) {
  477.             cin>>ime>>krediti;
  478.             kursevi[i]=Kurs(ime,krediti);
  479.         }
  480.         cin>>brojCasovi;
  481.  
  482.         Student *s=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  483.         s->pecati();
  484.         cout<<"\nBroj na bodovi: "<<s->getBodovi()<<endl;
  485.         delete s;
  486.  
  487.  
  488.     } else if (tip==7) { //funkcija vratiNajdobroRangiran
  489.         cout<<"-----TEST vratiNajdobroRangiran-----"<<endl;
  490.         int k, opt;
  491.         cin>>k;
  492.         Student **studenti=new Student*[k];
  493.         for (int j=0; j<k; j++) {
  494.             cin>>opt; //1 Student 2 Demonstrator
  495.             cin>>indeks>>brojOcenki;
  496.             for (int i=0; i<brojOcenki; i++) {
  497.                 cin>>ocenka;
  498.                 ocenki[i]=ocenka;
  499.             }
  500.             if (opt==1) {
  501.                 studenti[j]=new Student(indeks,ocenki,brojOcenki);
  502.             } else {
  503.                 cin>>imeIPrezime>>brojKursevi;
  504.                 for (int i=0; i<brojKursevi; i++) {
  505.                     cin>>ime>>krediti;
  506.                     kursevi[i]=Kurs(ime,krediti);
  507.                 }
  508.                 cin>>brojCasovi;
  509.                 studenti[j]=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  510.             }
  511.         }
  512.         Student& najdobar=vratiNajdobroRangiran(studenti,k);
  513.         cout<<"Maksimalniot broj na bodovi e:"<<najdobar.getBodovi();
  514.         cout<<"\nNajdobro rangiran:";
  515.         najdobar.pecati();
  516.  
  517.         for (int j=0; j<k; j++) delete studenti[j];
  518.         delete [] studenti;
  519.     } else if (tip==8) { //funkcija pecatiDemonstratoriKurs
  520.         cout<<"-----TEST pecatiDemonstratoriKurs-----"<<endl;
  521.         int k, opt;
  522.         cin>>k;
  523.         Student **studenti=new Student*[k];
  524.         for (int j=0; j<k; j++) {
  525.             cin>>opt; //1 Student 2 Demonstrator
  526.             cin>>indeks>>brojOcenki;
  527.             for (int i=0; i<brojOcenki; i++) {
  528.                 cin>>ocenka;
  529.                 ocenki[i]=ocenka;
  530.             }
  531.             if (opt==1) {
  532.                 studenti[j]=new Student(indeks,ocenki,brojOcenki);
  533.             } else {
  534.                 cin>>imeIPrezime>>brojKursevi;
  535.                 for (int i=0; i<brojKursevi; i++) {
  536.                     cin>>ime>>krediti;
  537.                     kursevi[i]=Kurs(ime,krediti);
  538.                 }
  539.                 cin>>brojCasovi;
  540.                 studenti[j]=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  541.             }
  542.         }
  543.         char kurs[20];
  544.         cin>>kurs;
  545.         cout<<"Demonstratori na "<<kurs<<" se:"<<endl;
  546.         pecatiDemonstratoriKurs (kurs,studenti,k);
  547.         for (int j=0; j<k; j++) delete studenti[j];
  548.         delete [] studenti;
  549.  
  550.     }
  551.  
  552.  
  553.     return 0;
  554. }
  555.  
  556. 3. Возач
  557. // vashiot kod ovde
  558. #include <iostream>
  559. #include <cstring>
  560. using namespace std;
  561.  
  562. class Vozac{
  563. protected:
  564.     char ime[100];
  565.     int vozrast;
  566.     int brtrki;
  567.     bool veteran;
  568. public:
  569.     Vozac(){}
  570.     Vozac(char *i,int v,int b,bool vet){
  571.         strcpy(ime,i);
  572.         vozrast=v;
  573.         brtrki=b;
  574.         veteran=vet;
  575.     }
  576.    
  577.     virtual float zarabotuvacka()=0;
  578.     virtual float danok()=0;
  579.    
  580.     friend ostream& operator<<(ostream &out,Vozac &v){
  581.         out<<v.ime<<endl;
  582.         out<<v.vozrast<<endl;
  583.         out<<v.brtrki<<endl;
  584.         if(v.veteran){
  585.             out<<"VETERAN"<<endl;
  586.         }
  587.         return out;
  588.     }
  589.    
  590.     bool operator==(Vozac &v){
  591.         if(v.zarabotuvacka()==zarabotuvacka())return true;
  592.         else return false;
  593.     }
  594. };
  595.  
  596. class Avtomobilist:public Vozac{
  597. private:
  598.     float cenaavto;
  599. public:
  600.     Avtomobilist(char *ime,int vozrast,int brtrki,bool veteran,float ca):Vozac(ime,vozrast,brtrki,veteran){
  601.         cenaavto=ca;
  602.     }
  603.    
  604.     float zarabotuvacka(){
  605.         return cenaavto/5;
  606.     }
  607.    
  608.     float danok(){
  609.         if(brtrki>10){
  610.             return 15*zarabotuvacka()/100;
  611.         }
  612.         else
  613.             return 10*zarabotuvacka()/100;
  614.     }
  615. };
  616. class Motociklist:public Vozac{
  617. private:
  618.     int moknost;
  619. public:
  620.     Motociklist(char *ime,int vozrast,int brtrki,bool veteran,int m):Vozac(ime,vozrast,brtrki,veteran){
  621.         moknost=m;
  622.     }
  623.    
  624.     float zarabotuvacka(){
  625.         return moknost*20;
  626.     }
  627.    
  628.     float danok(){
  629.         if(veteran){
  630.             return 25*zarabotuvacka()/100;
  631.         }
  632.         else
  633.             return 20*zarabotuvacka()/100;
  634.     }
  635.    
  636. };
  637.  
  638. int soIstaZarabotuvachka(Vozac **vozaci,int n,Vozac *pok){
  639.     int brojac=0;
  640.     for(int i=0;i<n;i++){
  641.         if(*pok==*vozaci[i]){
  642.             brojac++;
  643.         }
  644.     }
  645.     return brojac;
  646. }
  647. int main() {
  648.     int n, x;
  649.     cin >> n >> x;
  650.     Vozac **v = new Vozac*[n];
  651.     char ime[100];
  652.     int vozrast;
  653.     int trki;
  654.     bool vet;
  655.     for(int i = 0; i < n; ++i) {
  656.         cin >> ime >> vozrast >> trki >> vet;
  657.         if(i < x) {
  658.             float cena_avto;
  659.             cin >> cena_avto;
  660.             v[i] = new Avtomobilist(ime, vozrast, trki, vet, cena_avto);
  661.         } else {
  662.             int mokjnost;
  663.             cin >> mokjnost;
  664.             v[i] = new Motociklist(ime, vozrast, trki, vet, mokjnost);
  665.         }
  666.     }
  667.     cout << "=== DANOK ===" << endl;
  668.     for(int i = 0; i < n; ++i) {
  669.         cout << *v[i];
  670.         cout << v[i]->danok() << endl;
  671.     }
  672.     cin >> ime >> vozrast >> trki >> vet;
  673.     int mokjnost;
  674.     cin >> mokjnost;
  675.     Vozac *vx = new Motociklist(ime, vozrast, trki, vet, mokjnost);
  676.     cout << "=== VOZAC X ===" << endl;
  677.     cout << *vx;
  678.     cout << "=== SO ISTA ZARABOTUVACKA KAKO VOZAC X ===" << endl;
  679.     cout << soIstaZarabotuvachka(v, n, vx);
  680.     for(int i = 0; i < n; ++i) {
  681.         delete v[i];
  682.     }
  683.     delete [] v;
  684.     delete vx;
  685.     return 0;
  686. }
  687.  
  688. 4. Картичка
  689. #include<iostream>
  690. #include<string.h>
  691. using namespace std;
  692.  
  693. class Karticka {
  694. protected:
  695.     char smetka[16];
  696.     int pin;
  697.     bool povekjePin;
  698. public:
  699.     Karticka(char* smetka,int pin) {
  700.         strcpy(this->smetka,smetka);
  701.         this->pin=pin;
  702.         this->povekjePin=false;
  703.     }
  704.     // дополниете ја класата
  705.     bool getDopolnitelenPin() {
  706.         return povekjePin;
  707.     }
  708.     char *getSmetka() {
  709.         return smetka;
  710.     }
  711.     virtual int tezinaProbivanje() {
  712.         int temp=pin;
  713.         int tezina=0;
  714.         while(temp) {
  715.             temp/=10;
  716.             tezina++;
  717.  
  718.         }
  719.         return tezina;
  720.  
  721.     }
  722.     friend ostream &operator<<(ostream &out, Karticka &k) {
  723.         out<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
  724.         return out;
  725.     }
  726.  
  727.     virtual ~Karticka() {}
  728. };
  729.  
  730. //вметнете го кодот за SpecijalnaKarticka
  731. class SpecijalnaKarticka: public Karticka {
  732. private:
  733.     int *dopolnitelni;
  734.     int pinkodovi;
  735.     const static int P;
  736.  
  737. public:
  738.     SpecijalnaKarticka(char *smetka, int pin): Karticka(smetka,pin) {
  739.         dopolnitelni=new int[0];
  740.         pinkodovi=0;
  741.         povekjePin=true;
  742.     }
  743.  
  744.     //get metodi za exceptiono posle
  745.     int getPINkodovi() {
  746.         return pinkodovi;
  747.     }
  748.     int getP() {
  749.         return P;
  750.     }
  751.  
  752.     int tezinaProbivanje() {
  753.         return Karticka::tezinaProbivanje()+pinkodovi;
  754.     }
  755.  
  756.  
  757.  
  758.     SpecijalnaKarticka &operator+=(int kod) {
  759.         int *pom=dopolnitelni;
  760.         dopolnitelni=new int[pinkodovi+1];
  761.         for(int i=0; i<pinkodovi; i++) {
  762.             dopolnitelni[i]=pom[i];
  763.         }
  764.         dopolnitelni[pinkodovi]=kod;
  765.         pinkodovi++;
  766.  
  767.         return *this;
  768.  
  769.  
  770.  
  771.     }
  772.  
  773. };
  774.  
  775. const int SpecijalnaKarticka::P=4;
  776.  
  777. class Banka {
  778. private:
  779.     char naziv[30];
  780.     Karticka *karticki[20];
  781.     int broj;
  782.     static int LIMIT;
  783. public:
  784.     Banka(char *naziv, Karticka** karticki,int broj ) {
  785.         strcpy(this->naziv,naziv);
  786.         for (int i=0; i<broj; i++) {
  787.             //ako kartickata ima dopolnitelni pin kodovi
  788.             if (karticki[i]->getDopolnitelenPin()) {
  789.                 this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
  790.             } else this->karticki[i]=new Karticka(*karticki[i]);
  791.         }
  792.         this->broj=broj;
  793.     }
  794.     ~Banka() {
  795.         for (int i=0; i<broj; i++) delete karticki[i];
  796.     }
  797.  
  798.     //да се дополни класата
  799.     void dodadiDopolnitelenPin(char * smetka, int novPin) {
  800.         for(int i=0; i<broj; i++) {
  801.             if(strcmp(karticki[i]->getSmetka(),smetka)==0&&karticki[i]->getDopolnitelenPin()) {
  802.  
  803.                 SpecijalnaKarticka  *s=dynamic_cast<SpecijalnaKarticka*>(karticki[i]);
  804.  
  805.                 *s+=novPin;
  806.             }
  807.  
  808.  
  809.         }
  810.     }
  811.     void pecatiKarticki() {
  812.         cout<<"Vo bankata "<<naziv<<" moze da se probijat kartickite:"<<endl;
  813.         for(int i=0; i<broj; i++)
  814.             if(karticki[i]->tezinaProbivanje()<=LIMIT)
  815.                 cout<<*karticki[i];
  816.  
  817.     }
  818.     static void setLIMIT(int L) {
  819.         LIMIT=L;
  820.     }
  821. };
  822.  
  823. int Banka::LIMIT=7;
  824.  
  825. int main() {
  826.  
  827.     Karticka **niza;
  828.     int n,m,pin;
  829.     char smetka[16];
  830.     bool daliDopolnitelniPin;
  831.     cin>>n;
  832.     niza=new Karticka*[n];
  833.     for (int i=0; i<n; i++) {
  834.         cin>>smetka;
  835.         cin>>pin;
  836.         cin>>daliDopolnitelniPin;
  837.         if (!daliDopolnitelniPin)
  838.             niza[i]=new Karticka(smetka,pin);
  839.         else
  840.             niza[i]=new SpecijalnaKarticka(smetka,pin);
  841.     }
  842.  
  843.     Banka komercijalna("Komercijalna",niza,n);
  844.     for (int i=0; i<n; i++) delete niza[i];
  845.     delete [] niza;
  846.     cin>>m;
  847.     for (int i=0; i<m; i++) {
  848.         cin>>smetka>>pin;
  849.  
  850.         komercijalna.dodadiDopolnitelenPin(smetka,pin);
  851.  
  852.     }
  853.  
  854.     Banka::setLIMIT(5);
  855.  
  856.     komercijalna.pecatiKarticki();
  857.  
  858. }
  859.  
  860. 5. Опера и Балет
  861. #include<iostream>
  862. #include<string.h>
  863. using namespace std;
  864.  
  865. //место за вашиот код
  866. class Delo{
  867. protected:
  868.     char ime[50];
  869.     int godina;
  870.     char poteklo[50];
  871. public:
  872.     Delo(){}
  873.    
  874.     Delo(char* i,int g,char* z){
  875.         strcpy(ime,i);
  876.         strcpy(poteklo,z);
  877.         godina=g;
  878.     }
  879.    
  880.     bool operator==(Delo& d){
  881.         return (strcmp(ime,d.ime))==0;
  882.     }
  883.    
  884.     int getGodina(){
  885.         return godina;
  886.     }
  887.    
  888.     char* getPoteklo(){
  889.         return poteklo;
  890.     }
  891.    
  892.     char* getIme(){
  893.         return ime;
  894.     }
  895.        
  896.     Delo& operator=(const Delo& d){
  897.         strcpy(ime,d.ime);
  898.         strcpy(poteklo,d.poteklo);
  899.         godina=d.godina;
  900.         return *this;
  901.     }
  902.    
  903.    
  904.    
  905. };
  906.  
  907. class Pretstava{
  908. protected:
  909.     Delo d;
  910.     int karti;
  911.     char data[15];
  912. public:
  913.     Pretstava(Delo d,int brojProdadeni,char* data){
  914.         karti=brojProdadeni;
  915.         this->d=d;
  916.         strcpy(this->data,data);
  917.     }
  918.    
  919.     virtual int cena(){
  920.         int n,m;
  921.         int god=d.getGodina();
  922.         if(god>1900) m=50;
  923.         else if(god>1800) m=75;
  924.         else m=100;
  925.            
  926.         if(strcmp(d.getPoteklo(),"Rusija")==0)  n=150;
  927.         else if(strcmp(d.getPoteklo(),"Italija")==0) n=100;
  928.         else n=80;
  929.        
  930.         return m+n;
  931.        
  932.     }
  933.    
  934.     Delo getDelo(){
  935.         return d;
  936.     }
  937.    
  938.     int getKarti(){
  939.         return karti;
  940.     }
  941. };
  942.  
  943. int brojPretstaviNaDelo(Pretstava** pole,int n,Delo& f){
  944.     int counter=0;
  945.     for(int i=0;i<n;i++){
  946.         if(pole[i]->getDelo()==f) counter++;
  947.     }
  948.     return counter;
  949. }
  950.  
  951. int prihod(Pretstava** pole,int n){
  952.     int profit=0;
  953.     for(int i=0;i<n;i++){
  954.         profit+=pole[i]->cena()*pole[i]->getKarti();
  955.     }
  956.     return profit;
  957. }
  958.  
  959. class Opera:public Pretstava{
  960. protected:
  961.    
  962. public:
  963.     Opera(Delo d,int brojProdadeni,char* data):Pretstava(d,brojProdadeni,data){
  964.        
  965.     }
  966.    
  967.    
  968.    
  969. };
  970.  
  971. class Balet:public Pretstava{
  972. protected:
  973.     static int CENABALET;
  974. public:
  975.    
  976.     Balet(Delo d,int brojProdadeni,char* data):Pretstava(d,brojProdadeni,data){
  977.    
  978.     }
  979.    
  980.     int cena(){
  981.         return Pretstava::cena()+CENABALET;
  982.     }
  983.    
  984.    
  985.     static void setCenaBalet(int n){
  986.         CENABALET=n;
  987.     }
  988.    
  989. };
  990.  
  991. int Balet::CENABALET=150;
  992.  
  993. //citanje na delo
  994. Delo readDelo(){
  995.     char ime[50];
  996.     int godina;
  997.     char zemja[50];
  998.     cin>>ime>>godina>>zemja;
  999.     return Delo(ime,godina,zemja);
  1000. }
  1001. //citanje na pretstava
  1002. Pretstava* readPretstava(){
  1003.     int tip; //0 za Balet , 1 za Opera
  1004.     cin>>tip;
  1005.     Delo d=readDelo();
  1006.     int brojProdadeni;
  1007.     char data[15];
  1008.     cin>>brojProdadeni>>data;
  1009.     if (tip==0)  return new Balet(d,brojProdadeni,data);
  1010.     else return new Opera(d,brojProdadeni,data);
  1011. }
  1012. int main(){
  1013.     int test_case;
  1014.     cin>>test_case;
  1015.    
  1016.     switch(test_case){
  1017.     case 1:
  1018.     //Testiranje na klasite Opera i Balet
  1019.     {
  1020.         cout<<"======TEST CASE 1======="<<endl;
  1021.         Pretstava* p1=readPretstava();
  1022.         cout<<p1->getDelo().getIme()<<endl;
  1023.         Pretstava* p2=readPretstava();
  1024.         cout<<p2->getDelo().getIme()<<endl;
  1025.     }break;
  1026.        
  1027.     case 2:
  1028.     //Testiranje na  klasite Opera i Balet so cena
  1029.     {
  1030.         cout<<"======TEST CASE 2======="<<endl;
  1031.         Pretstava* p1=readPretstava();
  1032.         cout<<p1->cena()<<endl;
  1033.         Pretstava* p2=readPretstava();
  1034.         cout<<p2->cena()<<endl;
  1035.     }break;
  1036.    
  1037.     case 3:
  1038.     //Testiranje na operator ==
  1039.     {
  1040.         cout<<"======TEST CASE 3======="<<endl;
  1041.         Delo f1=readDelo();
  1042.         Delo f2=readDelo();
  1043.         Delo f3=readDelo();
  1044.        
  1045.         if (f1==f2) cout<<"Isti se"<<endl; else cout<<"Ne se isti"<<endl;
  1046.         if (f1==f3) cout<<"Isti se"<<endl; else cout<<"Ne se isti"<<endl;
  1047.    
  1048.     }break;
  1049.    
  1050.     case 4:
  1051.     //testiranje na funkcijata prihod
  1052.     {
  1053.         cout<<"======TEST CASE 4======="<<endl;
  1054.         int n;
  1055.         cin>>n;
  1056.         Pretstava **pole=new Pretstava*[n];
  1057.         for (int i=0;i<n;i++){
  1058.             pole[i]=readPretstava();
  1059.        
  1060.         }
  1061.         cout<<prihod(pole,n);
  1062.     }break;
  1063.    
  1064.     case 5:
  1065.     //testiranje na prihod so izmena na cena za 3d proekcii
  1066.     {
  1067.         cout<<"======TEST CASE 5======="<<endl;
  1068.         int cenaBalet;
  1069.         cin>>cenaBalet;
  1070.         Balet::setCenaBalet(cenaBalet);
  1071.         int n;
  1072.         cin>>n;
  1073.         Pretstava **pole=new Pretstava*[n];
  1074.         for (int i=0;i<n;i++){
  1075.             pole[i]=readPretstava();
  1076.         }
  1077.         cout<<prihod(pole,n);
  1078.         }break;
  1079.        
  1080.     case 6:
  1081.     //testiranje na brojPretstaviNaDelo
  1082.     {
  1083.         cout<<"======TEST CASE 6======="<<endl;
  1084.         int n;
  1085.         cin>>n;
  1086.         Pretstava **pole=new Pretstava*[n];
  1087.         for (int i=0;i<n;i++){
  1088.             pole[i]=readPretstava();
  1089.         }
  1090.        
  1091.         Delo f=readDelo();
  1092.         cout<<brojPretstaviNaDelo(pole,n,f);
  1093.     }break;
  1094.    
  1095.     };
  1096.  
  1097.  
  1098. return 0;
  1099. }
  1100.  
  1101. 6. Студент
  1102. #include<iostream>
  1103. #include<string.h>
  1104. using namespace std;
  1105.  
  1106. class BadInputException {
  1107. private:
  1108.     char msg[100];
  1109.     public:
  1110.     BadInputException(char *msg){
  1111.         strcpy(this->msg,msg);
  1112.     }
  1113.     void print(){
  1114.         cout<<msg<<endl;
  1115.     }
  1116. };
  1117.  
  1118.  
  1119. class StudentKurs {
  1120. protected:
  1121.     char ime[30];
  1122.     int ocenka;
  1123.     bool daliUsno;
  1124.     static int MAX;
  1125. public:
  1126.     StudentKurs(char* ime,int finalenIspit) {
  1127.         strcpy(this->ime,ime);
  1128.         this->ocenka=finalenIspit;
  1129.         this->daliUsno=false;
  1130.     }
  1131.     //дополни ја класата
  1132.     static void setMAX (int max) {
  1133.         MAX = max;
  1134.     }
  1135.     bool getDaliUsno() {
  1136.         return daliUsno;
  1137.     }
  1138.     virtual int grade () {
  1139.         return ocenka;
  1140.     }
  1141.     virtual ~StudentKurs () {}
  1142.  
  1143.     virtual StudentKurs& operator += (char *op) {
  1144.         return *this;
  1145.     }
  1146.  
  1147.     friend ostream& operator << (ostream &x, StudentKurs &s) {
  1148.         x << s.ime << " --- "<<s.grade()<<endl;
  1149.         return x;
  1150.     }
  1151.     char *getIme () {
  1152.         return ime;
  1153.     }
  1154. };
  1155. int StudentKurs::MAX = 10;
  1156.  
  1157.  
  1158. //вметни го кодот за StudentKursUsno
  1159. class StudentKursUsno : public StudentKurs {
  1160. private:
  1161.     char *opisna;
  1162. public:
  1163.     StudentKursUsno(char* ime,int finalenIspit)
  1164.         : StudentKurs (ime,finalenIspit) {
  1165.         daliUsno = true;
  1166.     }
  1167.     int grade () {
  1168.         if(strcmp(opisna,"odlicen")==0&&ocenka+2 <= MAX)
  1169.             return StudentKurs::grade() + 2;
  1170.         if(strcmp(opisna,"dobro")==0&&ocenka+1 <= MAX)
  1171.             return StudentKurs::grade () + 1;
  1172.         if(strcmp(opisna,"losho")==0&&ocenka-1 <= MAX)
  1173.             return StudentKurs::grade () - 1;
  1174.         return StudentKurs::grade ();
  1175.     }
  1176.     ~StudentKursUsno () {
  1177.         delete [] opisna;
  1178.     }
  1179.     friend ostream& operator << (ostream &x, StudentKursUsno &s) {
  1180.         x << s.ime << " --- "<<s.grade()<<endl;
  1181.         return x;
  1182.     }
  1183.     StudentKursUsno& operator += (char *op) {
  1184.  
  1185.         opisna = new char [strlen(op)+1];
  1186.         int flag = 0,k=0;
  1187.         for(int i=0; i<strlen(op); i++) {
  1188.             if(isalpha(op[i])) {
  1189.                 opisna[k]=op[i];
  1190.                 k++;
  1191.             } else flag = 1;
  1192.         }
  1193.  
  1194.         if(flag)
  1195.             throw BadInputException("Greshna opisna ocenka");
  1196.  
  1197.         return *this;
  1198.     }
  1199. };
  1200. class KursFakultet {
  1201. private:
  1202.     char naziv[30];
  1203.     StudentKurs *studenti[20];
  1204.     int broj;
  1205.     static const int MINOCENKA = 6;
  1206. public:
  1207.     KursFakultet(char *naziv, StudentKurs** studenti,int broj ) {
  1208.         strcpy(this->naziv,naziv);
  1209.         for (int i=0; i<broj; i++) {
  1210.             //ako studentot ima usno isprashuvanje
  1211.             if (studenti[i]->getDaliUsno()) {
  1212.                 this->studenti[i]=new StudentKursUsno(*dynamic_cast<StudentKursUsno*>(studenti[i]));
  1213.             } else this->studenti[i]=new StudentKurs(*studenti[i]);
  1214.         }
  1215.         this->broj=broj;
  1216.     }
  1217.     ~KursFakultet() {
  1218.         for (int i=0; i<broj; i++) delete studenti[i];
  1219.     }
  1220.  
  1221.     //дополни ја класата
  1222.     void pecatiStudenti () {
  1223.         cout<<"Kursot "<<naziv<<" go polozile:"<<endl;
  1224.         for(int i=0; i<broj; i++) {
  1225.             if(studenti[i]->grade()>=MINOCENKA)
  1226.                 cout<<*studenti[i];
  1227.         }
  1228.  
  1229.     }
  1230.     void postaviOpisnaOcenka (char *ime, char *opisnaOcenka) {
  1231.         for(int i=0; i<broj; i++) {
  1232.             if(strcmp(ime,studenti[i]->getIme())==0)
  1233.                 *studenti[i]+=opisnaOcenka;
  1234.         }
  1235.     }
  1236. };
  1237.  
  1238. int main() {
  1239.  
  1240.     StudentKurs **niza;
  1241.     int n,m,ocenka;
  1242.     char ime[30],opisna[10];
  1243.     bool daliUsno;
  1244.     cin>>n;
  1245.     niza=new StudentKurs*[n];
  1246.     for (int i=0; i<n; i++) {
  1247.         cin>>ime;
  1248.         cin>>ocenka;
  1249.         cin>>daliUsno;
  1250.         if (!daliUsno)
  1251.             niza[i]=new StudentKurs(ime,ocenka);
  1252.         else
  1253.             niza[i]=new StudentKursUsno(ime,ocenka);
  1254.     }
  1255.  
  1256.     KursFakultet programiranje("OOP",niza,n);
  1257.     for (int i=0; i<n; i++) delete niza[i];
  1258.     delete [] niza;
  1259.     cin>>m;
  1260.  
  1261.     for (int i=0; i<m; i++) {
  1262.         cin>>ime>>opisna;
  1263.         try {
  1264.             programiranje.postaviOpisnaOcenka(ime,opisna);
  1265.         } catch (BadInputException &e) {
  1266.             e.print();
  1267.         }
  1268.     }
  1269.  
  1270.     StudentKurs::setMAX(9);
  1271.  
  1272.     programiranje.pecatiStudenti();
  1273.  
  1274. }
  1275.  
  1276. 7. Игри
  1277. #include <iostream>
  1278. #include <cstring>
  1279. using namespace std;
  1280.  
  1281. // Your code goes here
  1282.  
  1283. class ExistingGame {
  1284. private:
  1285.     char msg[256];
  1286.  
  1287. public:
  1288.     ExistingGame(char msg_txt[]) {
  1289.         strncpy(this->msg, msg_txt, 255);
  1290.         this->msg[255] = '\0';
  1291.     }
  1292.  
  1293.     void message() {
  1294.         std::cout<<this->msg<<std::endl;
  1295.     }
  1296. };
  1297.  
  1298. class Game {
  1299.  
  1300. protected:
  1301.     char name[100];
  1302.     float price;
  1303.     bool on_sale;
  1304. public:
  1305.     Game() {
  1306.         name[0] = '\0';
  1307.     }
  1308.     Game(char *n, float p, bool s=false) {
  1309.         strncpy(name, n, 99);
  1310.         this->name[99] = '\0';
  1311.  
  1312.         price = p;
  1313.  
  1314.         on_sale = s;
  1315.     }
  1316.  
  1317.     virtual float get_price() {
  1318.         if (on_sale) {
  1319.             return price * 0.3F;
  1320.         }
  1321.  
  1322.         return price;
  1323.     }
  1324.  
  1325.     bool operator==(Game& g) {
  1326.         return !strcmp(this->name, g.name);
  1327.     }
  1328.  
  1329.     friend ostream & operator<<(ostream & o, const Game& g);
  1330.     friend istream & operator>>(istream & i, Game& g);
  1331. };
  1332.  
  1333. class SubscriptionGame : public Game {
  1334. protected:
  1335.     float monthly_fee;
  1336.     int month, year;
  1337.  
  1338. public:
  1339.     SubscriptionGame() {
  1340.         name[0] = '\0';
  1341.     }
  1342.  
  1343.     SubscriptionGame(char *n, float p, bool s, float mf, int m, int y):
  1344.         Game(n, p, s),
  1345.         monthly_fee(mf),
  1346.         month(m),
  1347.         year(y) { }
  1348.  
  1349.     float get_price() {
  1350.         float price = Game::get_price();
  1351.  
  1352.         int months=0;
  1353.         if (year<2018) {
  1354.             months = (12 - this->month) + (2017 - year)*12 + 5;
  1355.         } else {
  1356.             months = 5 - this->month;
  1357.         }
  1358.  
  1359.         price += months * monthly_fee;
  1360.  
  1361.         return price;
  1362.     }
  1363.  
  1364.     friend ostream & operator<<(ostream & o, SubscriptionGame& sg);
  1365.     friend istream & operator>>(istream & i, SubscriptionGame& g);
  1366.  
  1367. };
  1368.  
  1369. ostream & operator<<(ostream & o, const Game& g) {
  1370.     o<<"Game: "<< g.name <<", regular price: $" << g.price;
  1371.  
  1372.     if (g.on_sale) {
  1373.         o<<", bought on sale";
  1374.     }
  1375.     return o;
  1376. }
  1377.  
  1378. ostream & operator<<(ostream & o, SubscriptionGame& sg) {
  1379.  
  1380.     Game * tmp = dynamic_cast<Game*>(&sg);
  1381.  
  1382.     o << *tmp;
  1383.  
  1384.     o<<", monthly fee: $"<< sg.monthly_fee
  1385.      <<", purchased: "<< sg.month << "-" << sg.year<<std::endl;
  1386.  
  1387.     return o;
  1388. }
  1389.  
  1390. istream & operator>>(istream & is, Game &g) {
  1391.  
  1392.     is.get();
  1393.     is.getline(g.name,100);
  1394.     is>>g.price>>g.on_sale;
  1395.  
  1396.     return is;
  1397. }
  1398.  
  1399. istream & operator>>(istream & is, SubscriptionGame &g) {
  1400.     is.get();
  1401.     is.getline(g.name,100);
  1402.     is>>g.price>>g.on_sale;
  1403.     is>>g.monthly_fee >> g.month >> g.year;
  1404.     return is;
  1405. }
  1406.  
  1407. class User {
  1408. private:
  1409.     void obj_copy(const User * orig, User * cpy) {
  1410.         strcpy(cpy->username, orig->username);
  1411.         cpy->num_games = orig->num_games;
  1412.  
  1413.         cpy->games = new Game*[cpy->num_games];
  1414.  
  1415.         for (int i=0; i< cpy->num_games; ++i) {
  1416.             cpy->games[i] = new Game(*(orig->games[i]));
  1417.         }
  1418.     }
  1419.  
  1420. protected:
  1421.     char username[100];
  1422.     Game ** games;
  1423.     int num_games;
  1424. public:
  1425.     User (char const * const un="") {
  1426.         strncpy(this->username, un, 99);
  1427.         this->username[99] = '\0';
  1428.         games = 0;
  1429.         num_games = 0;
  1430.     }
  1431.  
  1432.     User (const User& orig) {
  1433.         obj_copy(&orig,this);
  1434.     }
  1435.  
  1436.     ~User() {
  1437.         for (int i=0; i < this->num_games; ++i) {
  1438.             delete this->games[i];
  1439.         }
  1440.         delete [] games;
  1441.     }
  1442.  
  1443.     User& operator=(User & orig) {
  1444.         if (&orig != this) {
  1445.  
  1446.             for (int i=0; i < this->num_games; ++i) {
  1447.                 delete orig.games[i];
  1448.             }
  1449.  
  1450.             delete [] orig.games;
  1451.  
  1452.             obj_copy(&orig, this);
  1453.         }
  1454.         return *this;
  1455.     }
  1456.  
  1457.     User& operator+=(Game&g) {
  1458.  
  1459.         Game ** new_games = new Game*[this->num_games+1];
  1460.  
  1461.         for (int i=0; i < (this->num_games); ++i) {
  1462.             if ( (*(this->games[i])) == g) {
  1463.                 throw ExistingGame("The game is already in the collection");
  1464.             }
  1465.  
  1466.             new_games[i] = games[i];
  1467.         }
  1468.  
  1469.         for (int i=0; i < (this->num_games); ++i) {
  1470.             new_games[i] = games[i];
  1471.         }
  1472.  
  1473.         SubscriptionGame * sg = dynamic_cast< SubscriptionGame* >(&g);
  1474.  
  1475.         if(sg) {
  1476.  
  1477.             new_games[num_games] = new SubscriptionGame(*sg);
  1478.         } else {
  1479. //cout<<"Game"<<endl;
  1480.             new_games[num_games] = new Game(g);
  1481.         }
  1482.  
  1483.         delete [] this->games;
  1484.         this->games = new_games;
  1485.         this->num_games++;
  1486.  
  1487. //cout<<"User: "<< this->username<<endl;
  1488.  
  1489. // for (int i=0; i<this->num_games;++i){
  1490. // cout<< *(this->games[i]);
  1491. // }
  1492.  
  1493.         return *this;
  1494.     }
  1495.  
  1496.     Game& get_game(int i) {
  1497.         return (*(this->games[i]));
  1498.     }
  1499.  
  1500.     float total_spent() {
  1501.         float sum = 0.0f;
  1502.         for (int i=0; i<this->num_games; ++i) {
  1503.             sum += games[i]->get_price();
  1504.         }
  1505.         return sum;
  1506.     }
  1507.  
  1508.     char const * const get_username() {
  1509.         return this->username;
  1510.     }
  1511.  
  1512.     int get_games_number() {
  1513.         return this->num_games;
  1514.     }
  1515.  
  1516. };
  1517.  
  1518. ostream & operator<<(ostream & o, User& u) {
  1519.  
  1520.     o<<"\nUser: "<<u.get_username()<<"\n";
  1521.  
  1522.     for (int i=0; i < u.get_games_number(); ++i) {
  1523.         Game * g;
  1524.         SubscriptionGame * sg;
  1525.         g = &(u.get_game(i));
  1526.  
  1527.         sg = dynamic_cast<SubscriptionGame *> (g);
  1528.  
  1529.         if (sg) {
  1530.             cout<<"- "<<(*sg);
  1531.         } else {
  1532.             cout<<"- "<<(*g);
  1533.         }
  1534.         cout<<"\n";
  1535.     }
  1536.     return o;
  1537. }
  1538.  
  1539. int main() {
  1540.     int test_case_num;
  1541.  
  1542.     cin>>test_case_num;
  1543.  
  1544.     // for Game
  1545.     char game_name[100];
  1546.     float game_price;
  1547.     bool game_on_sale;
  1548.  
  1549.     // for SubscritionGame
  1550.     float sub_game_monthly_fee;
  1551.     int sub_game_month, sub_game_year;
  1552.  
  1553.     // for User
  1554.     char username[100];
  1555.     int num_user_games;
  1556.  
  1557.     if (test_case_num == 1) {
  1558.         cout<<"Testing class Game and operator<< for Game"<<std::endl;
  1559.         cin.get();
  1560.         cin.getline(game_name,100);
  1561.         cin>>game_price>>game_on_sale;
  1562.  
  1563.         Game g(game_name, game_price, game_on_sale);
  1564.  
  1565.         cout<<g;
  1566.     } else if (test_case_num == 2) {
  1567.         cout<<"Testing class SubscriptionGame and operator<< for SubscritionGame"<<std::endl;
  1568.         cin.get();
  1569.         cin.getline(game_name, 100);
  1570.  
  1571.         cin>>game_price>>game_on_sale;
  1572.  
  1573.         cin>>sub_game_monthly_fee;
  1574.         cin>>sub_game_month>>sub_game_year;
  1575.  
  1576.         SubscriptionGame sg(game_name, game_price, game_on_sale, sub_game_monthly_fee, sub_game_month, sub_game_year);
  1577.         cout<<sg;
  1578.     } else if (test_case_num == 3) {
  1579.         cout<<"Testing operator>> for Game"<<std::endl;
  1580.         Game g;
  1581.  
  1582.         cin>>g;
  1583.  
  1584.         cout<<g;
  1585.     } else if (test_case_num == 4) {
  1586.         cout<<"Testing operator>> for SubscriptionGame"<<std::endl;
  1587.         SubscriptionGame sg;
  1588.  
  1589.         cin>>sg;
  1590.  
  1591.         cout<<sg;
  1592.     } else if (test_case_num == 5) {
  1593.         cout<<"Testing class User and operator+= for User"<<std::endl;
  1594.         cin.get();
  1595.         cin.getline(username,100);
  1596.         User u(username);
  1597.  
  1598.         int num_user_games;
  1599.         int game_type;
  1600.         cin >>num_user_games;
  1601.  
  1602.         try {
  1603.  
  1604.             for (int i=0; i<num_user_games; ++i) {
  1605.  
  1606.                 cin >> game_type;
  1607.  
  1608.                 Game *g;
  1609.                 // 1 - Game, 2 - SubscriptionGame
  1610.                 if (game_type == 1) {
  1611.                     cin.get();
  1612.                     cin.getline(game_name, 100);
  1613.  
  1614.                     cin>>game_price>>game_on_sale;
  1615.                     g = new Game(game_name, game_price, game_on_sale);
  1616.                 } else if (game_type == 2) {
  1617.                     cin.get();
  1618.                     cin.getline(game_name, 100);
  1619.  
  1620.                     cin>>game_price>>game_on_sale;
  1621.  
  1622.                     cin>>sub_game_monthly_fee;
  1623.                     cin>>sub_game_month>>sub_game_year;
  1624.                     g = new SubscriptionGame(game_name, game_price, game_on_sale, sub_game_monthly_fee, sub_game_month, sub_game_year);
  1625.                 }
  1626.  
  1627.                 u+=(*g);
  1628.             }
  1629.         } catch(ExistingGame &ex) {
  1630.             ex.message();
  1631.         }
  1632.  
  1633.         cout<<u;
  1634.  
  1635.  
  1636.     } else if (test_case_num == 6) {
  1637.         cout<<"Testing exception ExistingGame for User"<<std::endl;
  1638.         cin.get();
  1639.         cin.getline(username,100);
  1640.         User u(username);
  1641.  
  1642.         int num_user_games;
  1643.         int game_type;
  1644.         cin >>num_user_games;
  1645.  
  1646.         for (int i=0; i<num_user_games; ++i) {
  1647.  
  1648.             cin >> game_type;
  1649.  
  1650.             Game *g;
  1651.             // 1 - Game, 2 - SubscriptionGame
  1652.             if (game_type == 1) {
  1653.                 cin.get();
  1654.                 cin.getline(game_name, 100);
  1655.  
  1656.                 cin>>game_price>>game_on_sale;
  1657.                 g = new Game(game_name, game_price, game_on_sale);
  1658.             } else if (game_type == 2) {
  1659.                 cin.get();
  1660.                 cin.getline(game_name, 100);
  1661.  
  1662.                 cin>>game_price>>game_on_sale;
  1663.  
  1664.                 cin>>sub_game_monthly_fee;
  1665.                 cin>>sub_game_month>>sub_game_year;
  1666.                 g = new SubscriptionGame(game_name, game_price, game_on_sale, sub_game_monthly_fee, sub_game_month, sub_game_year);
  1667.             }
  1668.  
  1669.             //cout<<(*g);
  1670.  
  1671.             try {
  1672.                 u+=(*g);
  1673.             } catch(ExistingGame &ex) {
  1674.                 ex.message();
  1675.             }
  1676.         }
  1677.  
  1678.         cout<<u;
  1679.  
  1680.     } else if (test_case_num == 7) {
  1681.         cout<<"Testing total_spent method() for User"<<std::endl;
  1682.         cin.get();
  1683.         cin.getline(username,100);
  1684.         User u(username);
  1685.  
  1686.         int num_user_games;
  1687.         int game_type;
  1688.         cin >>num_user_games;
  1689.  
  1690.         for (int i=0; i<num_user_games; ++i) {
  1691.  
  1692.             cin >> game_type;
  1693.  
  1694.             Game *g;
  1695.             // 1 - Game, 2 - SubscriptionGame
  1696.             if (game_type == 1) {
  1697.                 cin.get();
  1698.                 cin.getline(game_name, 100);
  1699.  
  1700.                 cin>>game_price>>game_on_sale;
  1701.                 g = new Game(game_name, game_price, game_on_sale);
  1702.             } else if (game_type == 2) {
  1703.                 cin.get();
  1704.                 cin.getline(game_name, 100);
  1705.  
  1706.                 cin>>game_price>>game_on_sale;
  1707.  
  1708.                 cin>>sub_game_monthly_fee;
  1709.                 cin>>sub_game_month>>sub_game_year;
  1710.                 g = new SubscriptionGame(game_name, game_price, game_on_sale, sub_game_monthly_fee, sub_game_month, sub_game_year);
  1711.             }
  1712.  
  1713.             //cout<<(*g);
  1714.  
  1715.  
  1716.             u+=(*g);
  1717.         }
  1718.  
  1719.         cout<<u;
  1720.  
  1721.         cout<<"Total money spent: $"<<u.total_spent()<<endl;
  1722.     }
  1723. }
  1724.  
  1725. 8. Концерти
  1726. #include <iostream>
  1727. #include <cstring>
  1728.  
  1729. using namespace std;
  1730.  
  1731. class Koncert {
  1732. private:
  1733.     char ime[20];
  1734.     char lokacija[20];
  1735.     static float sezonskiPopust;
  1736.     float cenaBilet; //Vo denari
  1737. public:
  1738.     Koncert() {}
  1739.     Koncert(char *_ime, char *_lokacija, float _cenaBilet) {
  1740.         strcpy(this->ime, _ime);
  1741.         strcpy(this->lokacija, _lokacija);
  1742.         this->cenaBilet = _cenaBilet;
  1743.     }
  1744.     ~Koncert() {}
  1745.  
  1746.     static void setSezonskiPopust(float popust) {
  1747.         sezonskiPopust = popust;
  1748.     }
  1749.  
  1750.     static float getSezonskiPopust() {
  1751.         return sezonskiPopust;
  1752.     }
  1753.  
  1754.     virtual float cena() {
  1755.         return cenaBilet - cenaBilet * sezonskiPopust;
  1756.     }
  1757.  
  1758.     float getCenaBilet() {
  1759.         return cenaBilet;
  1760.     }
  1761.  
  1762.     char *getNaziv() {
  1763.         return ime;
  1764.     }
  1765.  
  1766.     char *getLokacija() {
  1767.         return lokacija;
  1768.     }
  1769.  
  1770.     void setCenaBilet(int cena) {
  1771.         cenaBilet = cena;
  1772.     }
  1773.  
  1774.     void setNaziv(char *novNaziv) {
  1775.         strcpy(ime, novNaziv);
  1776.     }
  1777.  
  1778.     void setLokacija(char *novaLokacija) {
  1779.         strcpy(lokacija, novaLokacija);
  1780.     }
  1781. };
  1782.  
  1783. class ElektronskiKoncert : public Koncert {
  1784. private:
  1785.     char *dj;
  1786.     float vremetraenje; //Vo saati
  1787.     bool daliDen; //Dnevna-TRUE, Nokjna-FALSE
  1788. public:
  1789.     ElektronskiKoncert() {
  1790.         this->dj = new char[0];
  1791.     }
  1792.     ElektronskiKoncert(char *_ime, char *_lokacija, float _cenaBilet,char *_dj, float _vremetraenje, bool _daliDen) : Koncert(_ime, _lokacija, _cenaBilet) {
  1793.         this->dj = new char[strlen(_dj)+1];
  1794.         strcpy(this->dj, _dj);
  1795.         this->vremetraenje = _vremetraenje;
  1796.         this->daliDen = _daliDen;
  1797.     }
  1798.     ~ElektronskiKoncert() {
  1799.         delete [] dj;
  1800.     }
  1801.  
  1802.     float cena() {
  1803.         float vkupno = Koncert::cena();
  1804.         if (vremetraenje > 7.0) {
  1805.             vkupno += 360;
  1806.         } else if (vremetraenje > 5.0) {
  1807.             vkupno += 150;
  1808.         }
  1809.         if (daliDen) {
  1810.             vkupno -= 50.0;
  1811.         } else {
  1812.             vkupno += 100.0;
  1813.         }
  1814.         return vkupno;
  1815.     }
  1816. };
  1817.  
  1818. void najskapKoncert(Koncert **koncerti, int n) {
  1819.     float sporedba=koncerti[0]->cena();
  1820.     int max = 0;
  1821.     for (int i=1; i<n; i++) {
  1822.         if (sporedba<koncerti[i]->cena()) {
  1823.             sporedba = koncerti[i]->cena();
  1824.             max = i;
  1825.         }
  1826.     }
  1827.     cout<<"Najskap koncert: "<<koncerti[max]->getNaziv()<<" "<<koncerti[max]->cena()<<endl;
  1828.  
  1829.     int brojElektronski = 0;
  1830.     for (int i=0; i<n; i++) {
  1831.         if (ElektronskiKoncert *ek = dynamic_cast<ElektronskiKoncert*>(koncerti[i])) {
  1832.             brojElektronski++;
  1833.         }
  1834.     }
  1835.     cout<<"Elektronski koncerti: "<<brojElektronski<<" od vkupno "<<n<<endl;
  1836. }
  1837.  
  1838. bool prebarajKoncert(Koncert ** koncerti, int n, char * naziv, bool elektronski) {
  1839.     if (elektronski) {
  1840.         for (int i=0; i<n; i++) {
  1841.             if (ElektronskiKoncert *ek = dynamic_cast<ElektronskiKoncert*>(koncerti[i])) {
  1842.                 if(strcmp(naziv, koncerti[i]->getNaziv())==0) {
  1843.                     cout<<koncerti[i]->getNaziv()<<" "<<koncerti[i]->cena()<<endl;
  1844.                     return true;
  1845.                 }
  1846.             }
  1847.         }
  1848.     } else {
  1849.         for (int i=0; i<n; i++) {
  1850.             if(strcmp(naziv, koncerti[i]->getNaziv())==0) {
  1851.                 cout<<koncerti[i]->getNaziv()<<" "<<koncerti[i]->cena()<<endl;
  1852.                 return true;
  1853.             }
  1854.         }
  1855.     }
  1856.     return false;
  1857. }
  1858.  
  1859. float Koncert::sezonskiPopust(0.20);
  1860.  
  1861. int main() {
  1862.  
  1863.     int tip,n,novaCena;
  1864.     char naziv[100], lokacija[100], imeDJ[40];
  1865.     bool dnevna;
  1866.     float cenaBilet, novPopust;
  1867.     float casovi;
  1868.  
  1869.     cin>>tip;
  1870.     if (tip==1) { //Koncert
  1871.         cin>>naziv>>lokacija>>cenaBilet;
  1872.         Koncert k1(naziv,lokacija,cenaBilet);
  1873.         cout<<"Kreiran e koncert so naziv: "<<k1.getNaziv()<<endl;
  1874.     } else if (tip==2) { //cena - Koncert
  1875.         cin>>naziv>>lokacija>>cenaBilet;
  1876.         Koncert k1(naziv,lokacija,cenaBilet);
  1877.         cout<<"Osnovna cena na koncertot so naziv "<<k1.getNaziv()<< " e: " <<k1.cena()<<endl;
  1878.     } else if (tip==3) { //ElektronskiKoncert
  1879.         cin>>naziv>>lokacija>>cenaBilet>>imeDJ>>casovi>>dnevna;
  1880.         ElektronskiKoncert s(naziv,lokacija,cenaBilet,imeDJ,casovi,dnevna);
  1881.         cout<<"Kreiran e elektronski koncert so naziv "<<s.getNaziv()<<" i sezonskiPopust "<<s.getSezonskiPopust()<<endl;
  1882.     } else if (tip==4) { //cena - ElektronskiKoncert
  1883.         cin>>naziv>>lokacija>>cenaBilet>>imeDJ>>casovi>>dnevna;
  1884.         ElektronskiKoncert s(naziv,lokacija,cenaBilet,imeDJ,casovi,dnevna);
  1885.         cout<<"Cenata na elektronskiot koncert so naziv "<<s.getNaziv()<<" e: "<<s.cena()<<endl;
  1886.     } else if (tip==5) { //najskapKoncert
  1887.  
  1888.     } else if (tip==6) { //prebarajKoncert
  1889.         Koncert ** koncerti = new Koncert *[5];
  1890.         int n;
  1891.         koncerti[0] = new Koncert("Area","BorisTrajkovski",350);
  1892.         koncerti[1] = new ElektronskiKoncert("TomorrowLand","Belgium",8000,"Afrojack",7.5,false);
  1893.         koncerti[2] = new ElektronskiKoncert("SeaDance","Budva",9100,"Tiesto",5,true);
  1894.         koncerti[3] = new Koncert("Superhiks","PlatoUkim",100);
  1895.         koncerti[4] = new ElektronskiKoncert("CavoParadiso","Mykonos",8800,"Guetta",3,true);
  1896.         char naziv[100];
  1897.         najskapKoncert(koncerti,5);
  1898.     } else if (tip==7) { //prebaraj
  1899.         Koncert ** koncerti = new Koncert *[5];
  1900.         int n;
  1901.         koncerti[0] = new Koncert("Area","BorisTrajkovski",350);
  1902.         koncerti[1] = new ElektronskiKoncert("TomorrowLand","Belgium",8000,"Afrojack",7.5,false);
  1903.         koncerti[2] = new ElektronskiKoncert("SeaDance","Budva",9100,"Tiesto",5,true);
  1904.         koncerti[3] = new Koncert("Superhiks","PlatoUkim",100);
  1905.         koncerti[4] = new ElektronskiKoncert("CavoParadiso","Mykonos",8800,"Guetta",3,true);
  1906.         char naziv[100];
  1907.         bool elektronski;
  1908.         cin>>elektronski;
  1909.         if(prebarajKoncert(koncerti,5, "Area",elektronski))
  1910.             cout<<"Pronajden"<<endl;
  1911.         else cout<<"Ne e pronajden"<<endl;
  1912.  
  1913.         if(prebarajKoncert(koncerti,5, "Area",!elektronski))
  1914.             cout<<"Pronajden"<<endl;
  1915.         else cout<<"Ne e pronajden"<<endl;
  1916.  
  1917.     } else if (tip==8) { //smeni cena
  1918.         Koncert ** koncerti = new Koncert *[5];
  1919.         int n;
  1920.         koncerti[0] = new Koncert("Area","BorisTrajkovski",350);
  1921.         koncerti[1] = new ElektronskiKoncert("TomorrowLand","Belgium",8000,"Afrojack",7.5,false);
  1922.         koncerti[2] = new ElektronskiKoncert("SeaDance","Budva",9100,"Tiesto",5,true);
  1923.         koncerti[3] = new Koncert("Superhiks","PlatoUkim",100);
  1924.         koncerti[2] -> setSezonskiPopust(0.9);
  1925.         najskapKoncert(koncerti,4);
  1926.     }
  1927.  
  1928.     return 0;
  1929. }
Add Comment
Please, Sign In to add comment