Advertisement
josiftepe

Untitled

Mar 29th, 2021
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.17 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. enum tip{pop, rap, rok};
  5. class Pesna {
  6.     char *ime;
  7.     int minuti;
  8.     tip tip_pesna;
  9. public:
  10.     Pesna() {}
  11.     Pesna(char *i, int m, tip tp) {
  12.         ime = new char[strlen(i)];
  13.         strcpy(ime, i);
  14.         minuti = m;
  15.         tip_pesna = tp;
  16.     }
  17.     Pesna(const Pesna &tmp) {
  18.         ime = new char[strlen(tmp.ime)];
  19.         strcpy(ime, tmp.ime);
  20.         minuti = tmp.minuti;
  21.         tip_pesna = tmp.tip_pesna;
  22.     }
  23.     ~Pesna() {}
  24.     void pecati() {
  25.         cout << '"'<< ime  << '"' << "-" << minuti  << "min" << endl;
  26.     }
  27.     int get_minuti() {
  28.         return minuti;
  29.     }
  30.     tip get_tip_pesna() {
  31.         return tip_pesna;
  32.     }
  33. };
  34. class CD {
  35.     Pesna niza[10];
  36.     int pesni;
  37.     int maks_vreme;
  38.     int sum_na_vreme;
  39. public:
  40.     CD () {}
  41.     CD(int br_pesni) {
  42.         maks_vreme = br_pesni;
  43.         pesni = 0;
  44.         sum_na_vreme = 0;
  45.     }
  46.     CD(const CD &tmp) {
  47.         pesni = tmp.pesni;
  48.         maks_vreme = tmp.maks_vreme;
  49.         for(int i = 0; i < pesni; i++) {
  50.             niza[i] = tmp.niza[i];
  51.         }
  52.     }
  53.     ~CD() {}
  54.     Pesna getPesna(int indeks) {
  55.         return niza[indeks];
  56.     }
  57.     int getBroj() {
  58.         return pesni;
  59.     }
  60.     void dodadiPesna(Pesna p) {
  61.         if(pesni < 10) {
  62.             if(sum_na_vreme + p.get_minuti() <= maks_vreme and p.get_minuti() <= maks_vreme) {
  63.                 niza[pesni] = p;
  64.                 pesni++;
  65.                 sum_na_vreme += p.get_minuti();
  66.             }
  67.         }
  68.     }
  69.     void pecatiPesniPoTip(tip t) {
  70.         for(int i = 0; i < pesni; i++) {
  71.             if(niza[i].get_tip_pesna() == t) {
  72.                 niza[i].pecati();
  73.             }
  74.         }
  75.        
  76.     }
  77. };
  78. int main() {
  79. // se testira zadacata modularno
  80. int testCase;
  81. cin >> testCase;
  82.  
  83. int n, minuti, kojtip;
  84. char ime[50];
  85.  
  86. if(testCase == 1) {
  87.   cout << "===== Testiranje na klasata Pesna ======" << endl;
  88.   cin >> ime;
  89.   cin >> minuti;
  90.   cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  91.   Pesna p(ime,minuti,(tip)kojtip);
  92.   p.pecati();
  93. } else if(testCase == 2) {
  94.   cout << "===== Testiranje na klasata CD ======" << endl;
  95.   CD omileno(20);
  96.   cin>>n;
  97.       for (int i=0;i<n;i++){
  98.           cin >> ime;
  99.           cin >> minuti;
  100.           cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  101.           Pesna p(ime,minuti,(tip)kojtip);
  102.           omileno.dodadiPesna(p);
  103.       }
  104.       for (int i=0; i<n; i++)
  105.           (omileno.getPesna(i)).pecati();
  106. }
  107. else if(testCase == 3) {
  108.   cout << "===== Testiranje na metodot dodadiPesna() od klasata CD ======" << endl;
  109.   CD omileno(20);
  110.   cin>>n;
  111.       for (int i=0;i<n;i++){
  112.           cin >> ime;
  113.           cin >> minuti;
  114.           cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  115.           Pesna p(ime,minuti,(tip)kojtip);
  116.           omileno.dodadiPesna(p);
  117.       }
  118.       for (int i=0; i<omileno.getBroj(); i++)
  119.           (omileno.getPesna(i)).pecati();
  120. }
  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.      
  135. }
  136. else if(testCase == 5) {
  137.   cout << "===== Testiranje na metodot pecatiPesniPoTip() od klasata CD ======" << endl;
  138.   CD omileno(20);
  139.   cin>>n;
  140.       for (int i=0;i<n;i++){
  141.           cin >> ime;
  142.           cin >> minuti;
  143.           cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
  144.           Pesna p(ime,minuti,(tip)kojtip);
  145.           omileno.dodadiPesna(p);
  146.       }
  147.   cin>>kojtip;
  148.   omileno.pecatiPesniPoTip((tip)kojtip);
  149.      
  150. }
  151.  
  152. return 0;
  153. }
  154. /*
  155.  Да се дефинира класата Pesna во која се чуваат информации за (5 поени):
  156.  
  157.      име на песна (динамички алоцирано поле од знаци)
  158.      времетраење на песната во минути
  159.      тип на песна кој може да биде: поп, рап или рок (енумерација tip)
  160.  
  161.  Да се обезбедат сите потребни методи за класата за правилно функционирање на програмата. (10 поени)
  162.  
  163.  Дополнително за оваа класа да се дефинира методот:
  164.  
  165.      pecati() - функција во која ќе се печатат одделени со цртичка(-): името на песната во наводници и времетраењето на песната со постфикс min. (5 поени)
  166.  
  167.  Да се креира класата CD во која се чуваат информации за (5 поени):
  168.  
  169.      низа од песни снимени на CD-то (Поле од најмногу 10 објекти од класата Pesna )
  170.      број на песни снимени на CD-то
  171.      максимално времетраење на песните на CD-то (во минути)
  172.  
  173.  Да се обезбедат сите потребни методи за класата за правилно функционирање на програмата. (5 поени)
  174.  
  175.  Дополнително за оваа класа да се дефинираат методите:
  176.  
  177.      dodadiPesna (Pesna p) - со кој се додава песната p на CDто, но само ако има доволно преостанато место (земајќи го предвид максималното времетраење на песните на CDто и времетраењата на песните на CD-то) и ако има помалку од 10 песни на CD-то. (10 поени)
  178.      pecatiPesniPoTip(tip t) – со кој се печатат информациите за сите песни од тип t (поп, рап или рок). (10 поени)
  179.  
  180.  Комплетна функционалност (5 поени).
  181.        
  182.  */
  183.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement