Advertisement
196040

OOP zadaci za vezbanje 1 CD

May 18th, 2020
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.43 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. enum tip {pop, rap, rok}; //(енумерација tip)
  5. class Pesna { //Да се дефинира класата Pesna во која се чуваат информации за (5 поени):
  6. private:
  7.     char * pesna; //име на песна (динамички алоцирано поле од знаци)
  8.     int minuti; //времетраење на песната во минути
  9.     tip vid; //тип на песна кој може да биде: поп, рап или рок
  10. public: //Да се обезбедат сите потребни методи за класата за правилно функционирање на програмата. (10 поени)
  11.     Pesna(char * pesna = "", int minuti = 0, tip vid=(tip)0) { //konstruktor so argumentiiiiiiiii
  12.         this->pesna=new char[strlen(pesna)+1];
  13.         strcpy(this->pesna, pesna);
  14.         this->minuti=minuti;
  15.         this->vid=vid;
  16.     }
  17.     Pesna(const Pesna &p) { //copy constructor
  18.         this->pesna=new char[strlen(p.pesna)+1];
  19.         strcpy(this->pesna, p.pesna);
  20.         this->minuti=p.minuti;
  21.         this->vid=p.vid;
  22.     } //Дополнително за оваа класа да се дефинира методот:
  23.     void pecati() { // pecati() - функција во која ќе се печатат одделени со цртичка(-):
  24.         //името на песната во наводници и времетраењето на песната со постфикс min. (5 поени)
  25.         cout<<"\""<<pesna<<"\""<<"-"<<minuti<<"min"<<endl;
  26.     }
  27.     tip gettip() {
  28.     return vid;
  29.     }
  30.     int getminuti() {
  31.     return minuti;
  32.     }
  33.     ~Pesna(){
  34.   //  delete [] pesna;
  35.     }
  36. };
  37. class CD { //Да се креира класата CD во која се чуваат информации за (5 поени):
  38.     Pesna niza[10]; //низа од песни снимени на CD-то (Поле од најмногу 10 објекти од класата Pesna )
  39.     int broj; //број на песни снимени на CD-то
  40.     int maxmin; //максимално времетраење на песните на CD-то (во минути)
  41. public: //Да се обезбедат сите потребни методи за класата за правилно функционирање на програмата. (5 поени)
  42.     CD(int maxmin) {
  43.     this->broj = 0;
  44.         this->maxmin = maxmin;
  45.     } //defaulten konstruktor
  46.     CD(Pesna * niza = NULL, int broj = 0, int maxmin = 0) { //konstruktor so argumenti
  47.         this->broj=broj;
  48.         this->maxmin=maxmin;
  49.         for(int i=0; i<broj; i++)
  50.             this->niza[i]=niza[i];
  51.     }
  52.     CD(const CD &c) {
  53.         this->broj=c.broj;
  54.         this->maxmin=c.maxmin;
  55.         for(int i=0; i<10; i++)
  56.             this->niza[i]=c.niza[i];
  57.     } //Дополнително за оваа класа да се дефинираат методите:
  58.     void dodadiPesna(Pesna &p){//dodadiPesna (Pesna p) - со кој се додава
  59.             int zbir=0;//песната p на CDто, но само ако има
  60.             for(int i=0;i<broj;i++){// доволно преостанато место
  61.                 zbir=zbir+p.getminuti();//(земајќи го предвид
  62.             }//максималното времетраење на песните на
  63.             if(maxmin - zbir > p.getminuti() && broj<10){// CDто и времетраењата на песните на
  64.                 niza[broj++]=p;// CD-то) и ако има помалку од 10 песни на CD-то.
  65.             }
  66.         }
  67.     void pecatiPesniPoTip (tip t){ //pecatiPesniPoTip(tip t)
  68.         for(int i=0; i<broj;i++)
  69.         if (niza[i].gettip() == t) //со кој се печатат информациите за сите песни од
  70.             niza[i].pecati();//тип t (поп, рап или рок). (10 поени)
  71.     }  
  72.     int getBroj() {
  73.     return broj;
  74.     }
  75.     Pesna getPesna(int i) {
  76.     return niza[i];
  77.     }
  78.     ~CD(){
  79.    // delete [] niza;
  80.     }
  81. };
  82. int main() {
  83.     // se testira zadacata modularno
  84.     int testCase;
  85.     cin >> testCase;
  86.     int n, minuti, kojtip;
  87.     char ime[50];
  88.     if(testCase == 1) {
  89.         cout << "===== Testiranje na klasata Pesna ======" << endl;
  90.         cin >> ime;
  91.         cin >> minuti;
  92.         cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  93.         Pesna p(ime,minuti,(tip)kojtip);
  94.         p.pecati();
  95.     } else if(testCase == 2) {
  96.         cout << "===== Testiranje na klasata CD ======" << endl;
  97.         CD omileno(20);
  98.         cin>>n;
  99.         for (int i=0; i<n; i++) {
  100.             cin >> ime;
  101.             cin >> minuti;
  102.             cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  103.             Pesna p(ime,minuti,(tip)kojtip);
  104.             omileno.dodadiPesna(p);
  105.         }
  106.         for (int i=0; i<n; i++)
  107.             (omileno.getPesna(i)).pecati();
  108.     } else if(testCase == 3) {
  109.         cout << "===== Testiranje na metodot dodadiPesna() od klasata CD ======" << endl;
  110.         CD omileno(20);
  111.         cin>>n;
  112.         for (int i=0; i<n; i++) {
  113.             cin >> ime;
  114.             cin >> minuti;
  115.             cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  116.             Pesna p(ime,minuti,(tip)kojtip);
  117.             omileno.dodadiPesna(p);
  118.         }
  119.         for (int i=0; i<omileno.getBroj(); i++)
  120.             (omileno.getPesna(i)).pecati();
  121.     } else if(testCase == 4) {
  122.         cout << "===== Testiranje na metodot pecatiPesniPoTip() od klasata CD ======" << endl;
  123.         CD omileno(20);
  124.         cin>>n;
  125.         for (int i=0; i<n; i++) {
  126.             cin >> ime;
  127.             cin >> minuti;
  128.             cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  129.             Pesna p(ime,minuti,(tip)kojtip);
  130.             omileno.dodadiPesna(p);
  131.         }
  132.         cin>>kojtip;
  133.         omileno.pecatiPesniPoTip((tip)kojtip);
  134.     } else if(testCase == 5) {
  135.         cout << "===== Testiranje na metodot pecatiPesniPoTip() od klasata CD ======" << endl;
  136.         CD omileno(20);
  137.         cin>>n;
  138.         for (int i=0; i<n; i++) {
  139.             cin >> ime;
  140.             cin >> minuti;
  141.             cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  142.             Pesna p(ime,minuti,(tip)kojtip);
  143.             omileno.dodadiPesna(p);
  144.         }
  145.         cin>>kojtip;
  146.         omileno.pecatiPesniPoTip((tip)kojtip);
  147.     }
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement