leo99fi

Вежби за прв колоквиум - CD

Apr 4th, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.07 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. enum tip {pop, rap, rok};
  7.  
  8. class Pesna {
  9. private:
  10.     char *name;
  11.     int length;
  12.     tip type;
  13.  
  14.     void _copy(const Pesna &p) {
  15.         this->name = new char[strlen(p.name) + 1];
  16.         strcpy(this->name, p.name);
  17.         this->length = p.length;
  18.         this->type = p.type;
  19.     }
  20. public:
  21.     Pesna() {
  22.         name = NULL;
  23.         length = 0;
  24.         //type = tip::pop;
  25.         type = tip(0);
  26.     }
  27.  
  28.     Pesna(const char *n, const int m, const tip tt) {
  29.         this->name = new char[strlen(n) + 1];
  30.         strcpy(name, n);
  31.         length = m;
  32.         type = tt;
  33.     }
  34.  
  35.     Pesna (const Pesna &c) {
  36.         _copy(c);
  37.     }
  38.  
  39.     Pesna& operator= (const Pesna& p) {
  40.         if (this == &p) {
  41.             return *this;
  42.         }
  43.         delete [] this->name;
  44.         _copy(p);
  45.         return *this;
  46.     }
  47.  
  48.     ~Pesna () {
  49.         delete [] this->name;
  50.     }
  51.  
  52.     void pecati() {
  53.         cout << "\"" << name << "\"" << "-" << length << "min\n";
  54.     }
  55.     int getLength() {
  56.         return this->length;
  57.     }
  58.     int getType() {
  59.         return this->type;
  60.     }
  61. };
  62.  
  63. class CD {
  64.     Pesna p[10];
  65.     int bp;
  66.     int min;
  67.  
  68.     int taken_minutes () {
  69.         int m = 0;
  70.         for (int i = 0; i < bp; ++i) {
  71.             m += p[i].getLength();
  72.         }
  73.         return m;
  74.     }
  75. public:
  76.     CD (int m) {
  77.         this->min = m;
  78.         this->bp = 0;
  79.     }
  80.     void dodadiPesna (Pesna& p) {
  81.         if (bp == 10) {
  82.             return;
  83.         }
  84.         if ((min-taken_minutes()) < (p.getLength())) {
  85.             return;
  86.         }
  87.         this->p[bp] = p;
  88.         bp++;
  89.     }
  90.     void pecatiPesniPoTip (tip t) {
  91.         for (int i = 0; i < bp; ++i) {
  92.             if (p[i].getType() == t) {
  93.                 p[i].pecati();
  94.             }
  95.         }
  96.     }
  97.     Pesna& getPesna (int i) {
  98.         return p[i];
  99.     }
  100.     int getBroj() {
  101.         return bp;
  102.     }
  103. };
  104.  
  105. int main() {
  106.     // se testira zadacata modularno
  107.     int testCase;
  108.     cin >> testCase;
  109.    
  110.     int n, minuti, kojtip;
  111.     char ime[50];
  112.    
  113.     if(testCase == 1) {
  114.         cout << "===== Testiranje na klasata Pesna ======" << endl;
  115.         cin >> ime;
  116.         cin >> minuti;
  117.         cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  118.         Pesna p(ime,minuti,(tip)kojtip);
  119.         p.pecati();
  120.     } else if(testCase == 2) {
  121.         cout << "===== Testiranje na klasata CD ======" << endl;
  122.         CD omileno(20);
  123.         cin>>n;
  124.             for (int i=0;i<n;i++){
  125.                 cin >> ime;
  126.                 cin >> minuti;
  127.                 cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  128.                 Pesna p(ime,minuti,(tip)kojtip);
  129.                 omileno.dodadiPesna(p);
  130.             }
  131.             for (int i=0; i<n; i++)
  132.                 (omileno.getPesna(i)).pecati();
  133.     }
  134.     else if(testCase == 3) {
  135.         cout << "===== Testiranje na metodot dodadiPesna() 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.             for (int i=0; i<omileno.getBroj(); i++)
  146.                 (omileno.getPesna(i)).pecati();
  147.     }
  148.     else if(testCase == 4) {
  149.         cout << "===== Testiranje na metodot pecatiPesniPoTip() od klasata CD ======" << endl;
  150.         CD omileno(20);
  151.         cin>>n;
  152.             for (int i=0;i<n;i++){
  153.                 cin >> ime;
  154.                 cin >> minuti;
  155.                 cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  156.                 Pesna p(ime,minuti,(tip)kojtip);
  157.                 omileno.dodadiPesna(p);
  158.             }
  159.         cin>>kojtip;
  160.         omileno.pecatiPesniPoTip((tip)kojtip);
  161.            
  162.     }
  163.     else if(testCase == 5) {
  164.         cout << "===== Testiranje na metodot pecatiPesniPoTip() od klasata CD ======" << endl;
  165.         CD omileno(20);
  166.         cin>>n;
  167.             for (int i=0;i<n;i++){
  168.                 cin >> ime;
  169.                 cin >> minuti;
  170.                 cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  171.                 Pesna p(ime,minuti,(tip)kojtip);
  172.                 omileno.dodadiPesna(p);
  173.             }
  174.         cin>>kojtip;
  175.         omileno.pecatiPesniPoTip((tip)kojtip);
  176.            
  177.     }
  178.    
  179. return 0;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment