Advertisement
KresimirRakic

Anton

Jul 22nd, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.29 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. #include <iostream>
  4. #include <memory>
  5. #include <cstring>
  6. #include <tuple>
  7. using namespace std;
  8.  
  9. /*
  10. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NECE BODOVATI
  11. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  12. 3. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB160061.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE
  13. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  14. 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI CETE KOPIRATI VAŠA RJEŠENJA)
  15. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  16. */
  17.  
  18. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  19. #pragma warning(disable:4996)
  20.  
  21.  
  22. enum VrstaAktivnosti { Tehnike, Kata, Borba };
  23.  
  24. // dodano kako bi se enum podatak ispisivao tekstualnom vrijednoscu, a ne brojcanom
  25. const char *vrstaAktivnosti[] = { "Tehnike", "Kata", "Borba" };
  26. std::ostream& operator<<(std::ostream& os, enum VrstaAktivnosti va)
  27. {
  28.     return os << vrstaAktivnosti[va];
  29. }
  30.  
  31. enum Pojas { Zuti, Narandzasti, Zeleni, Plavi, Smedji, Crni };
  32.  
  33. // dodano kako bi se enum podatak ispisivao tekstualnom vrijednoscu, a ne brojcanom
  34. const char *pojas[] = { "Zuti", "Narandzasti", "Zeleni", "Plavi", "Smedji", "Crni" };
  35. std::ostream& operator<<(std::ostream& os, enum Pojas p)
  36. {
  37.     return os << pojas[p];
  38. }
  39.  
  40.  
  41. struct Datum
  42. {
  43.     int * _dan, *_mjesec, *_godina;
  44.  
  45.     void Unos(int d, int m, int g) {
  46.         _dan = new int(d);
  47.         _mjesec = new int(m);
  48.         _godina = new int(g);
  49.     }
  50.  
  51.     void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
  52.  
  53.     void Dealociraj() { delete _dan; delete _mjesec; delete _godina; }
  54.  
  55.     // dodana funkcija za racunanje broja dana izmedju dva datuma, radi jednostavnosti je uzeto da svaki mjesec ima 30 dana i da nema prijestupnih godina
  56.     // ako je to potrebno uzeti u obzir, detaljan algoritam imas na https://www.geeksforgeeks.org/find-number-of-days-between-two-given-dates/
  57.     int ProsloDana(Datum *datum)
  58.     {
  59.         int d1 = *_godina * 365 + *_mjesec * 30 + *_dan;
  60.         int d2 = *datum->_godina * 365 + *datum->_mjesec * 30 + *datum->_dan;
  61.         return d1 - d2;
  62.     }
  63.  
  64.     int Dan() { return *_dan; }
  65.     int Mjesec() { return *_mjesec; }
  66.     int Godina() { return *_godina; }
  67. };
  68.  
  69. struct Aktivnost
  70. {
  71.     unique_ptr<VrstaAktivnosti> _vrsta;
  72.     Datum _datumIzvrsenja;
  73.     char * _nazivOpis;
  74.     int _ocjena; // 1 - 10
  75.  
  76.     void Unos(VrstaAktivnosti vrsta, Datum * datum, int ocjena, const char * nazivOpis) {
  77.         // dodana inicijalizacija clana _vrsta, nije bila u zadatku
  78.         _vrsta = unique_ptr<VrstaAktivnosti>(new VrstaAktivnosti(vrsta));
  79.         _datumIzvrsenja.Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  80.         _ocjena = ocjena;
  81.         int size = strlen(nazivOpis) + 1;
  82.         _nazivOpis = new char[size];
  83.         strcpy_s(_nazivOpis, size, nazivOpis);
  84.     }
  85.  
  86.     void Ispis()
  87.     {
  88.         cout << *_vrsta << " " << _ocjena << " " << _nazivOpis << " ";
  89.         _datumIzvrsenja.Ispis();
  90.         // cout << endl;
  91.     }
  92.  
  93.     void Dealociraj()
  94.     {
  95.         _datumIzvrsenja.Dealociraj();
  96.         delete[] _nazivOpis; _nazivOpis = nullptr;
  97.     }
  98. };
  99.  
  100. struct KaratePojas
  101. {
  102.     Datum * _datumPolaganja; // datum koji ce se evidentirati kao datum polaganja pojasa tj. kada su ispunjene sve aktivnosti/obaveze
  103.     Pojas _pojas;
  104.     Aktivnost * _listaIzvrsenihAktivnosti;
  105.     int _trenutnoIzvrsenihAktivnosti;
  106.  
  107.     typedef string value_type;
  108.     void Unos(Pojas pojas)
  109.     {
  110.         _listaIzvrsenihAktivnosti = nullptr;
  111.         _trenutnoIzvrsenihAktivnosti = 0;
  112.         _datumPolaganja = nullptr;
  113.         _pojas = pojas;
  114.     }
  115.  
  116.     void Dealociraj()
  117.     {
  118.         _datumPolaganja->Dealociraj(); _datumPolaganja = nullptr;
  119.         for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  120.             _listaIzvrsenihAktivnosti[i].Dealociraj();
  121.         delete[] _listaIzvrsenihAktivnosti;
  122.         _listaIzvrsenihAktivnosti = nullptr;
  123.     }
  124.  
  125.     void Ispis()
  126.     {
  127.         _datumPolaganja->Ispis();
  128.         cout << _pojas << endl;
  129.         for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  130.             _listaIzvrsenihAktivnosti[i].Ispis();
  131.     }
  132.  
  133.     // dodana funkcija DodajIzvrsenuAktivnost() u skladu sa zahtjevima zadatka
  134.     bool DodajIzvrsenuAktivnost(Aktivnost *aktivnost)
  135.     {
  136.         if (!this->DaLiJePolozen())
  137.         {
  138.             // Identicna aktivnost se moze dodati jedino u slucaju kada je prethodna (identicna aktivnost po vrsti i datumu izvrsenja) imala ocjenu manju od 6.
  139.             for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  140.                 if ((*_listaIzvrsenihAktivnosti[i]._vrsta == *aktivnost->_vrsta) && (&_listaIzvrsenihAktivnosti[i]._datumIzvrsenja == &aktivnost->_datumIzvrsenja))
  141.                     if (_listaIzvrsenihAktivnosti[i]._ocjena >= 6)
  142.                         return false;
  143.  
  144.             // Uspjesnom aktivnoscu se smatraju one aktivnosti koje imaju ocjenu vecu od 5, a svaka naredna identicna aktivnost, bez obzira da li je uspjesna ili ne,
  145.             // moze biti dodana jedino ako je proslo najmanje 15 dana od izvrsenja prethodne.
  146.             for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  147.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == *aktivnost->_vrsta)
  148.                     if ((_listaIzvrsenihAktivnosti[i]._ocjena >= 6) && (aktivnost->_datumIzvrsenja.ProsloDana(&_listaIzvrsenihAktivnosti[i]._datumIzvrsenja) < 15))
  149.                         return false;
  150.  
  151.             Aktivnost * _pomocnaListaIzvrsenihAktivnosti = new Aktivnost[_trenutnoIzvrsenihAktivnosti + 1];
  152.             for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  153.                 _pomocnaListaIzvrsenihAktivnosti[i].Unos(*_listaIzvrsenihAktivnosti[i]._vrsta, &_listaIzvrsenihAktivnosti[i]._datumIzvrsenja, _listaIzvrsenihAktivnosti[i]._ocjena, _listaIzvrsenihAktivnosti[i]._nazivOpis);
  154.             _pomocnaListaIzvrsenihAktivnosti[_trenutnoIzvrsenihAktivnosti++].Unos(*aktivnost->_vrsta, &aktivnost->_datumIzvrsenja, aktivnost->_ocjena, aktivnost->_nazivOpis);
  155.             _listaIzvrsenihAktivnosti = _pomocnaListaIzvrsenihAktivnosti;
  156.  
  157.             return true;
  158.         }
  159.         else
  160.             return false;
  161.     }
  162.  
  163.     // dodana funkcija Sortiraj() u skladu sa zahtjevima zadatka
  164.     void Sortiraj()
  165.     {
  166.         for(int i = 0; i < _trenutnoIzvrsenihAktivnosti - 1; i++)
  167.             for(int j = i + 1; j < _trenutnoIzvrsenihAktivnosti; j++)
  168.                 if (_listaIzvrsenihAktivnosti[i]._ocjena < _listaIzvrsenihAktivnosti[j]._ocjena)
  169.                 {
  170.                     Aktivnost tmpAktivnost;
  171.                     tmpAktivnost.Unos(*_listaIzvrsenihAktivnosti[i]._vrsta, &_listaIzvrsenihAktivnosti[i]._datumIzvrsenja, _listaIzvrsenihAktivnosti[i]._ocjena, _listaIzvrsenihAktivnosti[i]._nazivOpis);
  172.                     _listaIzvrsenihAktivnosti[i].Unos(*_listaIzvrsenihAktivnosti[j]._vrsta, &_listaIzvrsenihAktivnosti[j]._datumIzvrsenja, _listaIzvrsenihAktivnosti[j]._ocjena, _listaIzvrsenihAktivnosti[j]._nazivOpis);
  173.                     _listaIzvrsenihAktivnosti[j].Unos(*tmpAktivnost._vrsta, &tmpAktivnost._datumIzvrsenja, tmpAktivnost._ocjena, tmpAktivnost._nazivOpis);
  174.                 }
  175.     }
  176.  
  177.     // dodana funkcija DaLiJePolozen() u skladu sa zahtjevima zadatka
  178.     bool DaLiJePolozen()
  179.     {
  180.         int pozTehnike = 0, negTehnike = 0, pozKata = 0, negKata = 0, pozBorba = 0, negBorba = 0;
  181.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  182.             switch (*_listaIzvrsenihAktivnosti[i]._vrsta)
  183.             {
  184.                 case Tehnike:
  185.                 {
  186.                     if (_listaIzvrsenihAktivnosti[i]._ocjena > 5)
  187.                         pozTehnike++;
  188.                     else
  189.                         negTehnike++;
  190.                     break;
  191.                 }
  192.                 case Kata:
  193.                 {
  194.                     if (_listaIzvrsenihAktivnosti[i]._ocjena > 5)
  195.                         pozKata++;
  196.                     else
  197.                         negKata++;
  198.                     break;
  199.                 }
  200.                 case Borba:
  201.                 {
  202.                     if (_listaIzvrsenihAktivnosti[i]._ocjena > 5)
  203.                         pozBorba++;
  204.                     else
  205.                         negBorba++;
  206.                     break;
  207.                 }
  208.             }
  209.        
  210.         //cout << "T+" << pozTehnike << "K+" << pozKata << "B+" << pozBorba << endl;
  211.         //cout << "T-" << negTehnike << "K-" << negKata << "B-" << negBorba << endl;
  212.  
  213.         if ((negTehnike >= 3) || (negKata >= 3) || (negBorba >= 3))
  214.             return false;
  215.  
  216.         // kako se podaci enum tipa predstavljaju cijelim brojevima pocevsi od 0, provjera polozenosti moze ici ovako ili kao u komentiranom dijelu ispod
  217.         if ((pozTehnike >= _pojas + 1) && (pozKata >= _pojas + 1) && (pozBorba >= _pojas + 1))
  218.         {
  219.             Datum datumPolaganja;
  220.             // postavljam neki izmisljeni datum 1. 1. 1. koji je manji od datuma bilo koje aktivnosti i trazim zadnji datum pozitivne aktivnosti
  221.             datumPolaganja.Unos(1, 1, 1);
  222.             for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  223.                 if ((_listaIzvrsenihAktivnosti[i]._ocjena > 5) && (datumPolaganja.ProsloDana(&_listaIzvrsenihAktivnosti[i]._datumIzvrsenja) < 0))
  224.                     datumPolaganja.Unos(_listaIzvrsenihAktivnosti[i]._datumIzvrsenja.Dan(), _listaIzvrsenihAktivnosti[i]._datumIzvrsenja.Mjesec(), _listaIzvrsenihAktivnosti[i]._datumIzvrsenja.Godina());
  225.  
  226.             if (_datumPolaganja == nullptr)
  227.                 _datumPolaganja = new Datum;
  228.             _datumPolaganja->Unos(datumPolaganja.Dan(), datumPolaganja.Mjesec(), datumPolaganja.Godina());
  229.             return true;
  230.         }
  231.         else
  232.             return false;
  233.  
  234.         /* drugi nacin provjere polozenosti - trebalo bi u svaki case dodati odredjivanje datuma polaganja
  235.         switch (_pojas)
  236.         {
  237.             case Zuti:
  238.             {
  239.                
  240.                 if ((pozTehnike >= 1) && (pozKata >= 1) && (pozBorba >= 1))
  241.                     return true;
  242.                 else
  243.                     return false;
  244.                 break;
  245.             }
  246.             case Narandzasti:
  247.             {
  248.                 if ((pozTehnike >= 2) && (pozKata >= 2) && (pozBorba >= 2))
  249.                     return true;
  250.                 else
  251.                     return false;
  252.                 break;
  253.             }
  254.             case Zeleni:
  255.             {
  256.                 if ((pozTehnike >= 3) && (pozKata >= 3) && (pozBorba >= 3))
  257.                     return true;
  258.                 else
  259.                     return false;
  260.                 break;
  261.             }
  262.             case Plavi:
  263.             {
  264.                 if ((pozTehnike >= 4) && (pozKata >= 4) && (pozBorba >= 4))
  265.                     return true;
  266.                 else
  267.                     return false;
  268.                 break;
  269.             }
  270.             case Smedji:
  271.             {
  272.                 if ((pozTehnike >= 5) && (pozKata >= 5) && (pozBorba >= 5))
  273.                     return true;
  274.                 else
  275.                     return false;
  276.                 break;
  277.             }
  278.             case Crni:
  279.             {
  280.                 if ((pozTehnike >= 6) && (pozKata >= 6) && (pozBorba >= 6))
  281.                     return true;
  282.                 else
  283.                     return false;
  284.                 break;
  285.             }
  286.         } */
  287.  
  288.     }
  289.    
  290.     double PretragaRekurzivno(const char * searchString)
  291.     {
  292.         int brojac = 0, sumaPozitivnih = 0;
  293.  
  294.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  295.             if (_listaIzvrsenihAktivnosti[i]._ocjena > 5)
  296.             {
  297.                 if (strstr(_listaIzvrsenihAktivnosti[i]._nazivOpis, searchString) != NULL)
  298.                 {
  299.                     brojac++;
  300.                     sumaPozitivnih += _listaIzvrsenihAktivnosti[i]._ocjena;
  301.                 }
  302.             }
  303.         double prosjek = static_cast<double>(sumaPozitivnih) / brojac;
  304.         return prosjek;
  305.     }
  306.  
  307.     float ProsjecnaOcjena()
  308.     {
  309.         int brojac = 0, sumaPozitivnih = 0;
  310.  
  311.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  312.             if (_listaIzvrsenihAktivnosti[i]._ocjena > 5)
  313.             {
  314.                 brojac++;
  315.                 sumaPozitivnih += _listaIzvrsenihAktivnosti[i]._ocjena;
  316.             }
  317.         float prosjek = static_cast<float>(sumaPozitivnih) / brojac;
  318.         return prosjek;
  319.     }
  320. };
  321.  
  322. struct Kandidat
  323. {
  324.     char * _imePrezime;
  325.     shared_ptr<KaratePojas> _pojasevi[6];
  326.  
  327.     void Unos(const char * imePrezime)
  328.     {
  329.         int size = strlen(imePrezime) + 1;
  330.         _imePrezime = new char[size];
  331.         strcpy_s(_imePrezime, size, imePrezime);
  332.         for (size_t i = 0; i < 6; i++)
  333.             _pojasevi[i] = nullptr;
  334.     }
  335.  
  336.     void Dealociraj()
  337.     {
  338.         delete[] _imePrezime; _imePrezime = nullptr;
  339.         for (size_t i = 0; i < 6; i++)
  340.             if (_pojasevi[i] != nullptr)
  341.             {
  342.                 _pojasevi[i]->Dealociraj();
  343.                 _pojasevi[i].reset();
  344.             }
  345.     }
  346.  
  347.     void Ispis()
  348.     {
  349.         cout << _imePrezime << endl;
  350.         for (size_t i = 0; i < 6; i++)
  351.             if (_pojasevi[i] != nullptr)
  352.                 _pojasevi[i]->Ispis();
  353.     }
  354.  
  355.     bool DodajPojas(KaratePojas pojas)
  356.     {
  357.         // u ovoj funkciji nisam koristio lambda funkciju za provjere, kako se trazi u zadatku,
  358.         // nisam to do sada nikad koristio, niti sam na internetu nasao slican primjer, ako imas primjer s vjezbi posalji mi pa cu ga prilagoditi za ovaj zadatak
  359.  
  360.         // ako nisu polozeni svi raniji pojasevi ne moze se dodati novi
  361.         for (int i = 0; i < pojas._pojas; i++)
  362.             if (_pojasevi[i] == nullptr)
  363.                 return false;
  364.  
  365.         if (_pojasevi[pojas._pojas] != nullptr)
  366.             // ako je pojas vec polozen ne moze se ponovno dodati
  367.             return false;
  368.         else
  369.         {
  370.             _pojasevi[pojas._pojas] = make_shared<KaratePojas>(pojas);
  371.             return true;
  372.         }
  373.     }
  374.  
  375.     pair<Pojas, float> GetNajbolji()
  376.     {
  377.         Pojas p;
  378.         float maxProsjek = 0;
  379.         for (int i = 0; i < 6; i++)
  380.             if (_pojasevi[i] != nullptr)
  381.             {
  382.                 KaratePojas kp = *_pojasevi[i];
  383.                 float prosjek = kp.ProsjecnaOcjena();
  384.                 if (prosjek > maxProsjek)
  385.                 {
  386.                     p = kp._pojas;
  387.                     maxProsjek = prosjek;
  388.                 }
  389.             }
  390.         return make_pair(p, maxProsjek);
  391.  
  392.     }
  393. };
  394.  
  395. void main() {
  396.  
  397.     // BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA
  398.     // STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  399.     Datum datumPolaganja1, datumPolaganja2, datumPolaganja3, datumPolaganja4;
  400.     datumPolaganja1.Unos(10, 6, 2018);
  401.     datumPolaganja2.Unos(18, 6, 2018);
  402.     datumPolaganja3.Unos(22, 3, 2018);
  403.     datumPolaganja4.Unos(22, 7, 2018);
  404.  
  405.     Aktivnost aktivnost1, aktivnost2, aktivnost3, aktivnost4, aktivnost5;
  406.     aktivnost1.Unos(Tehnike, &datumPolaganja1, 6, "Tehnike za zuti pojas");
  407.     aktivnost2.Unos(Kata, &datumPolaganja1, 8, "Taiki joko shodan - zuti pojas");
  408.     aktivnost3.Unos(Borba, &datumPolaganja1, 2, "Jednostavne borbene tehnike sa partnerom");
  409.     aktivnost4.Unos(Borba, &datumPolaganja1, 6, "Jednostavne borbene tehnike sa partnerom");
  410.     aktivnost5.Unos(Borba, &datumPolaganja4, 6, "Jednostavne borbene tehnike sa partnerom");
  411.  
  412.  
  413.     KaratePojas pojasZuti, pojasNarandzasti, pojasZeleni;
  414.     pojasZuti.Unos(Zuti);
  415.     // dodano radi kasnije upotrebe varijabli pojasNarandzasti i pojasZeleni
  416.     pojasNarandzasti.Unos(Narandzasti);
  417.     pojasZeleni.Unos(Zeleni);
  418.  
  419.     /* Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene aktivnosti za potrebe stjecanja odredjenog pojasa. Broj aktivnosti nije ogranicen.
  420.     Identicna aktivnost se moze dodati jedino u slucaju kada je prethodna (identicna aktivnost po vrsti i datumu izvrsenja) imala ocjenu manju od 6.
  421.     Uspjesnom aktivnoscu se smatraju one aktivnosti koje imaju ocjenu vecu od 5, a svaka naredna identicna aktivnost, bez obzira da li je uspjesna ili ne,
  422.     moze biti dodana jedino ako je proslo najmanje 15 dana od izvrsenja prethodne. Onemoguciti dodavanje aktivnosti uspjesno polozenom pojasu. */
  423.     if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost1))
  424.         cout << "Aktivnost uspjesno dodana!" << endl;
  425.     if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost2))
  426.         cout << "Aktivnost uspjesno dodana!" << endl;
  427.     if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost3))
  428.         cout << "Aktivnost uspjesno dodana!" << endl;
  429.     if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost4))  // 15 dana ...  // moze se dodati jer je aktivnost3 neuspjesna (ocjena 2)      
  430.         cout << "Aktivnost uspjesno dodana!" << endl;
  431.     if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost5))                  // ne moze se dodati jer je pojas vec polozen
  432.         cout << "Aktivnost uspjesno dodana!" << endl;
  433.  
  434.     //Koristeci neki od obradjenih algoritama, po ocjeni sortirati aktivnosti u okviru odredjenog pojasa
  435.     pojasZuti.Sortiraj();
  436.    
  437.  
  438.     /* Karate pojas zahtijeva uspjesnu realizaciju svih planiranih aktivnosti, a one se za jedan povecavaju sa svakim novim pojasom, npr.
  439.     zuti pojas: 1 x tehnika, 1 x kata, 1 x borba;   narandzasti pojas: 2 x tehnika, 2 x kata, 2 x borba; i td...
  440.     Funkcija vraca false u slucaju da: su kandidatu u listu aktivnosti evidentirane tri negativno ocijenjene identicne vrste aktivnosti (npr. tri negativne ocjene iz borbi), onda se taj pojas ne moze smatrati uspjesno stecenim
  441.     i, te ukoliko nedostaje bilo koja od aktivnosti zahtijevanih u okviru tog pojasa. Ukoliko je kandidat uspjesno realizovao sve aktivnost, datum polaganja se postavlja na datum posljednje uspjesno realizovane aktivnosti */
  442.     if (pojasZuti.DaLiJePolozen())
  443.         pojasZuti.Ispis();
  444.  
  445.     /* Funkcija vraca prosjecnu ocjenu svih uspjesno realizovanih aktivnosti koja u nazivu ili opisu sadrze vrijednost primljenog parametra. Ukoliko smatrate da je potrebno, mozete dodati i druge parametre za potrebe implementacije ove funkcije */
  446.     cout << "Prosjecna ocjena za zuti pojas -> " << pojasZuti.PretragaRekurzivno("pojas") << endl;
  447.  
  448.     // ispisuje sve dostupne podatke o pojasu
  449.     pojasZuti.Ispis();
  450.  
  451.     Kandidat jasmin;
  452.     jasmin.Unos("Jasmin Azemovic");
  453.    
  454.     /*
  455.     Karate pojasevi se moraju dodavati po redoslijedu tj. ne smije se dozvoliti dodavanje zelenog pojasa ukoliko prethodno nije dodan zuti i narandzasti. Za provjeru lokacije (unutar funkcije DodajPojas) na koju ce se dodati novi karate pojas, te da li su nizi pojasevi prethodno dodani koristiti lambda funkciju.
  456.     */
  457.    
  458.     if (jasmin.DodajPojas(pojasZuti))
  459.         cout << "Pojas uspjesno dodan!" << endl;
  460.     if (jasmin.DodajPojas(pojasZeleni))             // prethodno je trebao biti dodan narandzasti pojas
  461.         cout << "Pojas uspjesno dodan!" << endl;
  462.     if (jasmin.DodajPojas(pojasNarandzasti))        // pojas nije polozen
  463.         cout << "Pojas uspjesno dodan!" << endl;
  464.  
  465.     float prosjek = 0;
  466.     Pojas pojas;
  467.     // Funkcija GetNajbolji vraca par koji sadrzi oznaku i prosjecnu ocjenu (uspjesno okoncanih aktivnosti) pojasa sa najvecim prosjekom
  468.     tie(pojas, prosjek) = jasmin.GetNajbolji();
  469.     cout << "Najbolji rezultat od " << prosjek << " je ostvaren tokom stjecanja pojasa " << pojas << endl;
  470.  
  471.  
  472.     //datumPolaganja1.Dealociraj(), datumPolaganja2.Dealociraj(), datumPolaganja3.Dealociraj(), datumPolaganja4.Dealociraj();
  473.     //aktivnost1.Dealociraj(), aktivnost2.Dealociraj(), aktivnost3.Dealociraj(), aktivnost4.Dealociraj(), aktivnost5.Dealociraj();
  474.     //pojasZuti.Dealociraj(), pojasNarandzasti.Dealociraj(), pojasZeleni.Dealociraj();
  475.     //jasmin.Dealociraj();
  476.  
  477.     system("pause");
  478. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement