Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- using namespace std;
- enum tip{pop, rap, rok};
- class Pesna {
- char *ime;
- int minuti;
- tip tip_pesna;
- public:
- Pesna() {}
- Pesna(char *i, int m, tip tp) {
- ime = new char[strlen(i)];
- strcpy(ime, i);
- minuti = m;
- tip_pesna = tp;
- }
- Pesna(const Pesna &tmp) {
- ime = new char[strlen(tmp.ime)];
- strcpy(ime, tmp.ime);
- minuti = tmp.minuti;
- tip_pesna = tmp.tip_pesna;
- }
- ~Pesna() {}
- void pecati() {
- cout << '"'<< ime << '"' << "-" << minuti << "min" << endl;
- }
- int get_minuti() {
- return minuti;
- }
- tip get_tip_pesna() {
- return tip_pesna;
- }
- };
- class CD {
- Pesna niza[10];
- int pesni;
- int maks_vreme;
- int sum_na_vreme;
- public:
- CD () {}
- CD(int br_pesni) {
- maks_vreme = br_pesni;
- pesni = 0;
- sum_na_vreme = 0;
- }
- CD(const CD &tmp) {
- pesni = tmp.pesni;
- maks_vreme = tmp.maks_vreme;
- for(int i = 0; i < pesni; i++) {
- niza[i] = tmp.niza[i];
- }
- }
- ~CD() {}
- Pesna getPesna(int indeks) {
- return niza[indeks];
- }
- int getBroj() {
- return pesni;
- }
- void dodadiPesna(Pesna p) {
- if(pesni < 10) {
- if(sum_na_vreme + p.get_minuti() <= maks_vreme and p.get_minuti() <= maks_vreme) {
- niza[pesni] = p;
- pesni++;
- sum_na_vreme += p.get_minuti();
- }
- }
- }
- void pecatiPesniPoTip(tip t) {
- for(int i = 0; i < pesni; i++) {
- if(niza[i].get_tip_pesna() == t) {
- niza[i].pecati();
- }
- }
- }
- };
- int main() {
- // se testira zadacata modularno
- int testCase;
- cin >> testCase;
- int n, minuti, kojtip;
- char ime[50];
- if(testCase == 1) {
- cout << "===== Testiranje na klasata Pesna ======" << endl;
- cin >> ime;
- cin >> minuti;
- cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
- Pesna p(ime,minuti,(tip)kojtip);
- p.pecati();
- } else if(testCase == 2) {
- cout << "===== Testiranje na klasata CD ======" << endl;
- CD omileno(20);
- cin>>n;
- for (int i=0;i<n;i++){
- cin >> ime;
- cin >> minuti;
- cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
- Pesna p(ime,minuti,(tip)kojtip);
- omileno.dodadiPesna(p);
- }
- for (int i=0; i<n; i++)
- (omileno.getPesna(i)).pecati();
- }
- else if(testCase == 3) {
- cout << "===== Testiranje na metodot dodadiPesna() od klasata CD ======" << endl;
- CD omileno(20);
- cin>>n;
- for (int i=0;i<n;i++){
- cin >> ime;
- cin >> minuti;
- cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
- Pesna p(ime,minuti,(tip)kojtip);
- omileno.dodadiPesna(p);
- }
- for (int i=0; i<omileno.getBroj(); i++)
- (omileno.getPesna(i)).pecati();
- }
- else if(testCase == 4) {
- cout << "===== Testiranje na metodot pecatiPesniPoTip() od klasata CD ======" << endl;
- CD omileno(20);
- cin>>n;
- for (int i=0;i<n;i++){
- cin >> ime;
- cin >> minuti;
- cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
- Pesna p(ime,minuti,(tip)kojtip);
- omileno.dodadiPesna(p);
- }
- cin>>kojtip;
- omileno.pecatiPesniPoTip((tip)kojtip);
- }
- else if(testCase == 5) {
- cout << "===== Testiranje na metodot pecatiPesniPoTip() od klasata CD ======" << endl;
- CD omileno(20);
- cin>>n;
- for (int i=0;i<n;i++){
- cin >> ime;
- cin >> minuti;
- cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
- Pesna p(ime,minuti,(tip)kojtip);
- omileno.dodadiPesna(p);
- }
- cin>>kojtip;
- omileno.pecatiPesniPoTip((tip)kojtip);
- }
- return 0;
- }
- /*
- Да се дефинира класата Pesna во која се чуваат информации за (5 поени):
- име на песна (динамички алоцирано поле од знаци)
- времетраење на песната во минути
- тип на песна кој може да биде: поп, рап или рок (енумерација tip)
- Да се обезбедат сите потребни методи за класата за правилно функционирање на програмата. (10 поени)
- Дополнително за оваа класа да се дефинира методот:
- pecati() - функција во која ќе се печатат одделени со цртичка(-): името на песната во наводници и времетраењето на песната со постфикс min. (5 поени)
- Да се креира класата CD во која се чуваат информации за (5 поени):
- низа од песни снимени на CD-то (Поле од најмногу 10 објекти од класата Pesna )
- број на песни снимени на CD-то
- максимално времетраење на песните на CD-то (во минути)
- Да се обезбедат сите потребни методи за класата за правилно функционирање на програмата. (5 поени)
- Дополнително за оваа класа да се дефинираат методите:
- dodadiPesna (Pesna p) - со кој се додава песната p на CDто, но само ако има доволно преостанато место (земајќи го предвид максималното времетраење на песните на CDто и времетраењата на песните на CD-то) и ако има помалку од 10 песни на CD-то. (10 поени)
- pecatiPesniPoTip(tip t) – со кој се печатат информациите за сите песни од тип t (поп, рап или рок). (10 поени)
- Комплетна функционалност (5 поени).
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement