Advertisement
limun11

1.1KaratePojas-Rjesenje

Jun 9th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.72 KB | None | 0 0
  1. #include<iostream>
  2. #include <tuple>
  3. using namespace std;
  4. /*
  5. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NECE BODOVATI
  6. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  7. 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
  8. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  9. 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)
  10. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  11. */
  12. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  13. #pragma warning(disable:4996)
  14.  
  15.  
  16. enum VrstaAktivnosti { Tehnike, Kata, Borba };
  17. const char * vrtaAktivnostiChar[] = { "Tehnike", "Kata", "Borba" };
  18.  
  19. enum Pojas { Zuti, Narandzasti, Zeleni, Plavi, Smedji, Crni };
  20. const char * pojasChar[] = { "Zuti", "Narandzasti", "Zeleni", "Plavi", "Smedji", "Crni" };
  21.  
  22. struct Datum {
  23.     int * _dan, *_mjesec, *_godina;
  24.     void Unos(int d, int m, int g) {
  25.         _dan = new int(d);
  26.         _mjesec = new int(m);
  27.         _godina = new int(g);
  28.     }
  29.     void Ispis()
  30.     {
  31.         if (_dan != nullptr && _mjesec != nullptr && _godina != nullptr)
  32.         {
  33.             cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl;
  34.         }
  35.     }
  36.     void Dealociraj() { delete _dan; delete _mjesec; delete _godina; }
  37. };
  38. bool istiDatum(Datum d1, Datum d2)
  39. {
  40.     if (*d1._godina == *d2._godina && *d1._mjesec == *d2._mjesec && *d1._dan == *d2._dan)
  41.         return true;
  42.     return false;
  43. }
  44. bool veciZa15Dana(Datum d1, Datum d2)
  45. {
  46.     int daniD1 = *d1._dan + *d1._mjesec * 30 + *d1._godina * 30 * 12;
  47.     int daniD2 = *d2._dan + *d2._mjesec * 30 + *d2._godina * 30 * 12;
  48.  
  49.     if (daniD2 - daniD1 >= 15)
  50.         return true;
  51.     return false;
  52. }
  53. struct Aktivnost {
  54.     unique_ptr<VrstaAktivnosti> _vrsta;
  55.     Datum _datumIzvrsenja;
  56.     char * _nazivOpis;
  57.     int _ocjena; // 1 - 10
  58.     void Unos(VrstaAktivnosti vrsta, Datum * datum, int ocjena, const char * nazivOpis)
  59.     {
  60.         _vrsta = make_unique <VrstaAktivnosti>(vrsta);
  61.         _datumIzvrsenja.Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  62.         _ocjena = ocjena;
  63.         int size = strlen(nazivOpis) + 1;
  64.         _nazivOpis = new char[size];
  65.         strcpy_s(_nazivOpis, size, nazivOpis);
  66.     }
  67.     void Ispis()
  68.     {
  69.         cout << *_vrsta << " " << _ocjena << " " << _nazivOpis;
  70.         _datumIzvrsenja.Ispis();
  71.         cout << endl;
  72.     }
  73.     void Dealociraj()
  74.     {
  75.         _datumIzvrsenja.Dealociraj();
  76.         delete[] _nazivOpis; _nazivOpis = nullptr;
  77.     }
  78. };
  79. struct KaratePojas {
  80.     Datum * _datumPolaganja;//datum koji ce se evidentirati kao datum polaganja pojasa tj. kada su ispunjene sve aktivnosti/obaveze
  81.     Pojas _pojas;
  82.     Aktivnost * _listaIzvrsenihAktivnosti;
  83.     int _trenutnoIzvrsenihAktivnosti;
  84.  
  85.     void kopiraj(KaratePojas pojas)
  86.     {
  87.         if (pojas._datumPolaganja == nullptr) //ova funkcija ce postaviti _datum Polaganja, ako nije prije ova funkcije dje bila pozvana
  88.         {
  89.             DaLiJePolozen();
  90.         }
  91.         if (pojas._datumPolaganja != nullptr)
  92.         {
  93.             _datumPolaganja = new Datum;
  94.             _datumPolaganja->Unos(*pojas._datumPolaganja->_dan, *pojas._datumPolaganja->_mjesec, *pojas._datumPolaganja->_godina);
  95.         }
  96.  
  97.         _pojas = pojas._pojas;
  98.  
  99.         _trenutnoIzvrsenihAktivnosti = pojas._trenutnoIzvrsenihAktivnosti;
  100.         _listaIzvrsenihAktivnosti = new Aktivnost[_trenutnoIzvrsenihAktivnosti];
  101.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  102.         {
  103.             _listaIzvrsenihAktivnosti[i].Unos(*pojas._listaIzvrsenihAktivnosti[i]._vrsta, &pojas._listaIzvrsenihAktivnosti[i]._datumIzvrsenja,
  104.                 pojas._listaIzvrsenihAktivnosti[i]._ocjena, pojas._listaIzvrsenihAktivnosti[i]._nazivOpis);
  105.         }
  106.     }
  107.  
  108.     void Unos(Pojas pojas) {
  109.         _listaIzvrsenihAktivnosti = nullptr;
  110.         _trenutnoIzvrsenihAktivnosti = 0;
  111.         _datumPolaganja = nullptr;
  112.         _pojas = pojas;
  113.     }
  114.     void Dealociraj()
  115.     {
  116.         if (_datumPolaganja != nullptr)
  117.         {
  118.             _datumPolaganja->Dealociraj(); _datumPolaganja = nullptr;
  119.         }
  120.         for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  121.             _listaIzvrsenihAktivnosti[i].Dealociraj();
  122.         delete[] _listaIzvrsenihAktivnosti;
  123.         _listaIzvrsenihAktivnosti = nullptr;
  124.     }
  125.     void Ispis()
  126.     {
  127.         if (_datumPolaganja != nullptr)
  128.         {
  129.             _datumPolaganja->Ispis();
  130.         }
  131.         cout << _pojas << endl;
  132.         for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  133.             _listaIzvrsenihAktivnosti[i].Ispis();
  134.     }
  135.  
  136.     /*Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene aktivnosti za potrebe stjecanja odredjenog pojasa.
  137.  
  138.     Broj aktivnosti nije ogranicen.
  139.  
  140.     Identicna aktivnost se moze dodati jedino u slucaju kada je prethodna (identivna aktivnost po vrsti i datumu izvrsenja) imala ocjenu manju od 6.
  141.  
  142.     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,
  143.     moze biti dodana jedino ako je proslo najmanje 15 dana od izvrsenja prethodne.
  144.  
  145.     Onemoguciti dodavanje aktivnosti uspjesno polozenom pojasu.*/
  146.     bool DodajIzvrsenuAktivnost(Aktivnost * aktivnost)
  147.     {
  148.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  149.         {
  150.             if ((*_listaIzvrsenihAktivnosti[i]._vrsta == *aktivnost->_vrsta) && (istiDatum(_listaIzvrsenihAktivnosti[i]._datumIzvrsenja, aktivnost->_datumIzvrsenja) == true))
  151.             {
  152.                 if (!(_listaIzvrsenihAktivnosti[i]._ocjena < 6))
  153.                 {
  154.                     return false;
  155.                 }
  156.             }
  157.             if (*_listaIzvrsenihAktivnosti[i]._vrsta == *aktivnost->_vrsta)
  158.             {
  159.                 if (!(veciZa15Dana(_listaIzvrsenihAktivnosti[i]._datumIzvrsenja, aktivnost->_datumIzvrsenja) == true))
  160.                 {
  161.                     return false;
  162.                 }
  163.             }
  164.         }
  165.  
  166.         Aktivnost * temp = new Aktivnost[_trenutnoIzvrsenihAktivnosti + 1];
  167.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  168.         {
  169.             temp[i].Unos(*_listaIzvrsenihAktivnosti[i]._vrsta, &_listaIzvrsenihAktivnosti[i]._datumIzvrsenja, _listaIzvrsenihAktivnosti[i]._ocjena, _listaIzvrsenihAktivnosti[i]._nazivOpis);
  170.         }
  171.         temp[_trenutnoIzvrsenihAktivnosti].Unos(*aktivnost->_vrsta, &aktivnost->_datumIzvrsenja, aktivnost->_ocjena, aktivnost->_nazivOpis);
  172.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  173.         {
  174.             _listaIzvrsenihAktivnosti[i].Dealociraj();
  175.         }
  176.         delete[] _listaIzvrsenihAktivnosti;
  177.         _listaIzvrsenihAktivnosti = temp;
  178.         _trenutnoIzvrsenihAktivnosti++;
  179.         return true;
  180.     }
  181.  
  182.     //Koristeci neki od obradjenih algoritama, po ocjeni sortirati aktivnosti u okviru odredjenog pojasa
  183.     void Sortiraj()
  184.     {
  185.         int minI;
  186.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  187.         {
  188.             minI = i;
  189.             for (int j = i + 1; j < _trenutnoIzvrsenihAktivnosti; j++)
  190.             {
  191.                 if (_listaIzvrsenihAktivnosti[i]._ocjena < _listaIzvrsenihAktivnosti[j]._ocjena)
  192.                     minI = j;
  193.             }
  194.             swap(_listaIzvrsenihAktivnosti[i], _listaIzvrsenihAktivnosti[minI]);
  195.             cout << "SORTIRANE OCJENE: " << _listaIzvrsenihAktivnosti[i]._ocjena << endl;
  196.         }
  197.     }
  198.  
  199.     /* Karate pojas zahtijeva uspjesnu realizaciju svih planiranih aktivnosti, a one se za jedan povecavaju sa svakim novim pojasom, npr.
  200.     zuti pojas: 1 x tehnika, 1 x kata, 1 x borba;   narandzasti pojas: 2 x tehnika, 2 x kata, 2 x borba; i td...
  201.  
  202.     Funkcija vraca false u slucaju da: su
  203.     -kandidatu u listu aktivnosti evidentirane tri negativno ocijenjene identicne vrste aktivnosti (npr. tri negativne ocjene iz borbi),
  204.     onda se taj pojas ne moze smatrati uspjesno stecenim
  205.     i,
  206.     -te ukoliko nedostaje bilo koja od aktivnosti zahtijevanih u okviru tog pojasa.
  207.  
  208.     Ukoliko je kandidat uspjesno realizovao sve aktivnost,
  209.  
  210.     datum polaganja se postavlja na datum posljednje uspjesno realizovane aktivnosti*/
  211.     bool DaLiJePolozen()
  212.     {
  213.         /*
  214.         enum VrstaAktivnosti { Tehnike, Kata, Borba };
  215.         enum Pojas { Zuti, Narandzasti, Zeleni, Plavi, Smedji, Crni };
  216.         */
  217.         Datum datumPosljednjeAktivnosti;
  218.         int brojacTehnike = 0, brojacKata = 0, brojacBorba = 0;
  219.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  220.         {
  221.             if (_listaIzvrsenihAktivnosti[i]._ocjena <= 5)
  222.             {
  223.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Tehnike)
  224.                     brojacTehnike++;
  225.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Kata)
  226.                     brojacKata++;
  227.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Borba)
  228.                     brojacBorba++;
  229.             }
  230.         }
  231.         if (brojacTehnike >= 3)
  232.             return false;
  233.         if (brojacKata >= 3)
  234.             return false;
  235.         if (brojacBorba >= 3)
  236.             return false;
  237.  
  238.         brojacTehnike = 0, brojacKata = 0, brojacBorba = 0;
  239.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  240.         {
  241.             if (_listaIzvrsenihAktivnosti[i]._ocjena > 5)
  242.             {
  243.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Tehnike)
  244.                     brojacTehnike++;
  245.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Kata)
  246.                     brojacKata++;
  247.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Borba)
  248.                     brojacBorba++;
  249.                 datumPosljednjeAktivnosti = _listaIzvrsenihAktivnosti[i]._datumIzvrsenja;
  250.             }
  251.         }
  252.         if (brojacTehnike == 0 || brojacKata == 0 || brojacBorba == 0)
  253.         {
  254.             return false;
  255.         }
  256.  
  257.         if (!(brojacTehnike >= int(_pojas + 1) || brojacKata >= int(_pojas + 1) || brojacBorba >= int(_pojas + 1)))
  258.         {
  259.             return false;
  260.         }
  261.  
  262.         _datumPolaganja = new Datum;
  263.         _datumPolaganja->Unos(*datumPosljednjeAktivnosti._dan, *datumPosljednjeAktivnosti._mjesec, *datumPosljednjeAktivnosti._godina);
  264.         return true;
  265.     }
  266.  
  267.     /*Funkcija vraca prosjecnu ocjenu svih uspjesno realizovanih aktivnosti koja u nazivu ili opisu sadrze vrijednost primljenog parametra.
  268.     Ukoliko smatrate da je
  269.     potrebno, mozete dodati i druge parametre za potrebe implementacije ove funkcije*/
  270.     float PretragaRekrzivno(const char * naziv, int & i, int & brojac, int & suma, float & prosjek)
  271.     {
  272.         if (_trenutnoIzvrsenihAktivnosti == i)
  273.         {
  274.             if (brojac == 0)
  275.                 return 0;
  276.             else
  277.             {
  278.                 prosjek = float(suma) / brojac;
  279.                 return prosjek;
  280.             }
  281.         }
  282.         else
  283.         {
  284.             if (_listaIzvrsenihAktivnosti[i]._ocjena > 5)
  285.             {
  286.                 if (strstr(_listaIzvrsenihAktivnosti[i]._nazivOpis, naziv) != nullptr)
  287.                 {
  288.                     suma += _listaIzvrsenihAktivnosti[i]._ocjena;
  289.                     brojac++;
  290.                 }
  291.             }
  292.         }
  293.         i++;
  294.         return PretragaRekrzivno(naziv, i, brojac, suma, prosjek);
  295.     }
  296. };
  297.  
  298. struct Kandidat
  299. {
  300.     char * _imePrezime;
  301.     shared_ptr<KaratePojas> _pojasevi[6];
  302.     void Unos(const char * imePrezime)
  303.     {
  304.         int size = strlen(imePrezime) + 1;
  305.         _imePrezime = new char[size];
  306.         strcpy_s(_imePrezime, size, imePrezime);
  307.         for (size_t i = 0; i < 6; i++)
  308.             _pojasevi[i] = nullptr;
  309.     }
  310.     void Dealociraj()
  311.     {
  312.         if (_imePrezime != nullptr)
  313.         {
  314.             delete[] _imePrezime; _imePrezime = nullptr;
  315.         }
  316.         for (size_t i = 0; i < 6; i++)
  317.         {
  318.             if (_pojasevi[i] != nullptr)
  319.             {
  320.                 _pojasevi[i]->Dealociraj();
  321.                 _pojasevi[i].reset();
  322.             }
  323.         }
  324.     }
  325.     void Ispis()
  326.     {
  327.         cout << _imePrezime << endl;
  328.         for (size_t i = 0; i < 6; i++)
  329.         {
  330.             if (_pojasevi[i] != nullptr)
  331.                 _pojasevi[i]->Ispis();
  332.         }
  333.     }
  334.  
  335.     /*
  336.     Karate pojasevi se moraju dodavati po redoslijedu tj. ne smije se dozvoliti dodavanje zelenog pojasa ukoliko prethodno
  337.     nije dodan zuti i narandzasti.
  338.  
  339.     Za provjeru lokacije (unutar funkcije DodajPojas) na koju ce se dodati novi karate pojas, te da li su nizi pojasevi
  340.     prethodno dodani koristiti lambda funkciju.
  341.     */
  342.     bool DodajPojas(KaratePojas pojas)
  343.     {
  344.         //{ Zuti, Narandzasti, Zeleni, Plavi, Smedji, Crni };
  345.         auto lambda = [&]()
  346.         {
  347.             int prethodni = int(pojas._pojas) - 1;
  348.             if (prethodni < 0) //ne smije indeks niza biti manji od 0, ovdje to znaci da nema dodanih pojaseva
  349.             {
  350.                 if (_pojasevi[0] == nullptr)
  351.                 {
  352.                     return true;
  353.                 }
  354.                 else
  355.                 {
  356.                     return false;
  357.                 }
  358.             }
  359.             if (_pojasevi[prethodni] != nullptr && _pojasevi[int(pojas._pojas)]==nullptr)//ovdje provjeravam da li je dodan pojas prethodni i
  360.                 //da li je pojas koji zelimo dodati vec dodan ranije, ukoliko nije dodan ranije dodat cemo ga
  361.             {
  362.                 return true;
  363.             }
  364.         };
  365.  
  366.         //shared_ptr<KaratePojas> _pojasevi[6];
  367.         if (lambda() == true)
  368.         {
  369.             for (int i = 0; i < 6; i++)
  370.             {
  371.                 if (_pojasevi[i] == nullptr)
  372.                 {
  373.                     _pojasevi[i] = make_shared<KaratePojas>();
  374.                     _pojasevi[i]->kopiraj(pojas);
  375.                     return true;
  376.                 }
  377.             }
  378.         }
  379.         return false;
  380.     }
  381.  
  382.  
  383.     //Funkcija GetNajbolji vraca par koji sadrzi oznaku i prosjecnu ocjenu (uspjesno okoncanih aktivnosti) pojasa sa najvecim prosjekom
  384.     pair <Pojas, float> GetNajbolji()
  385.     {
  386.         float prosjek = 0;
  387.         Pojas pojas;
  388.         float suma = 0;
  389.         int brojacUspjesnih = 0;
  390.         float maxProsjek = 0;
  391.  
  392.         for (int i = 0; i < 6; i++)
  393.         {
  394.             brojacUspjesnih = 0;
  395.             suma = 0;
  396.             if (_pojasevi[i] != nullptr)
  397.             {
  398.                 for (int j = 0; j < _pojasevi[i]->_trenutnoIzvrsenihAktivnosti; j++)
  399.                 {
  400.                     if (_pojasevi[i]->_listaIzvrsenihAktivnosti[j]._ocjena > 5)
  401.                     {
  402.                         suma += _pojasevi[i]->_listaIzvrsenihAktivnosti[j]._ocjena;
  403.                         brojacUspjesnih++;
  404.                     }
  405.                 }
  406.                 prosjek = suma / brojacUspjesnih;
  407.                 if (maxProsjek < prosjek)
  408.                 {
  409.                     maxProsjek = prosjek;
  410.                     pojas = _pojasevi[i]->_pojas;
  411.                     //pojas = Pojas(i);
  412.                 }
  413.             }
  414.         }
  415.  
  416.         pair <Pojas, float> rezultat = make_pair(pojas, maxProsjek);
  417.         return rezultat;
  418.  
  419.     }
  420. };
  421.  
  422. void main() {
  423.  
  424.     //BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA
  425.     //STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  426.     Datum datumPolaganja1, datumPolaganja2, datumPolaganja3, datumPolaganja4;
  427.     datumPolaganja1.Unos(10, 6, 2018);
  428.     datumPolaganja2.Unos(18, 6, 2018);
  429.     datumPolaganja3.Unos(22, 3, 2018);
  430.     datumPolaganja4.Unos(22, 7, 2018);
  431.  
  432.     Aktivnost aktivnost1, aktivnost2, aktivnost3, aktivnost4, aktivnost5;
  433.     aktivnost1.Unos(Tehnike, &datumPolaganja1, 6, "Tehnike za zuti pojas");
  434.     aktivnost2.Unos(Kata, &datumPolaganja1, 8, "Taiki joko shodan - zuti pojas");
  435.     aktivnost3.Unos(Borba, &datumPolaganja1, 2, "Jednostavne borbene tehnike sa partnerom");
  436.     aktivnost4.Unos(Borba, &datumPolaganja1, 6, "Jednostavne borbene tehnike sa partnerom");
  437.     aktivnost5.Unos(Borba, &datumPolaganja4, 6, "Jednostavne borbene tehnike sa partnerom");
  438.  
  439.     KaratePojas pojasZuti, pojasNarandzasti, pojasZeleni;
  440.     pojasZuti.Unos(Zuti);
  441.  
  442.     pojasZeleni.Unos(Zeleni);
  443.     pojasNarandzasti.Unos(Narandzasti);
  444.  
  445.     /*Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene aktivnosti za potrebe stjecanja odredjenog pojasa. Broj aktivnosti nije ogranicen.
  446.     Identicna aktivnost se moze dodati jedino u slucaju kada je prethodna (identivna aktivnost po vrsti i datumu izvrsenja) imala ocjenu manju od 6.
  447.     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,
  448.     moze biti dodana jedino ako je proslo najmanje 15 dana od izvrsenja prethodne. Onemoguciti dodavanje aktivnosti uspjesno polozenom pojasu.*/
  449.     if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost1))
  450.         cout << "Aktivnost uspjesno dodana!" << endl;
  451.     if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost2))
  452.         cout << "Aktivnost uspjesno dodana!" << endl;
  453.     if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost3))
  454.         cout << "Aktivnost uspjesno dodana!" << endl;
  455.     if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost4))//15 dana...
  456.         cout << "Aktivnost uspjesno dodana!" << endl;
  457.     if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost5))
  458.         cout << "Aktivnost uspjesno dodana!" << endl;
  459.  
  460.     //Koristeci neki od obradjenih algoritama, po ocjeni sortirati aktivnosti u okviru odredjenog pojasa
  461.     pojasZuti.Sortiraj();
  462.  
  463.  
  464.     /* Karate pojas zahtijeva uspjesnu realizaciju svih planiranih aktivnosti, a one se za jedan povecavaju sa svakim novim pojasom, npr.
  465.     zuti pojas: 1 x tehnika, 1 x kata, 1 x borba;   narandzasti pojas: 2 x tehnika, 2 x kata, 2 x borba; i td...
  466.     Funkcija vraca false u slucaju da: su kandidatu u listu aktivnosti evidentirane tri negativno ocijenjene identicne vrste aktivnosti (npr. tri negativne ocjene iz borbi),
  467.     onda se taj pojas ne moze smatrati uspjesno stecenim
  468.     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
  469.     datum posljednje uspjesno realizovane aktivnosti*/
  470.     if (pojasZuti.DaLiJePolozen())
  471.         pojasZuti.Ispis();
  472.  
  473.     /*Funkcija vraca prosjecnu ocjenu svih uspjesno realizovanih aktivnosti koja u nazivu ili opisu sadrze vrijednost primljenog parametra. Ukoliko smatrate da je
  474.     potrebno, mozete dodati i druge parametre za potrebe implementacije ove funkcije*/
  475.     int  i = 0, brojac = 0, suma = 0;
  476.     float prosjek1 = 0;
  477.     cout << "Prosjecna ocjena za zuti pojas -> " << pojasZuti.PretragaRekrzivno("pojas", i, brojac, suma, prosjek1) << endl;
  478.  
  479.     //ispisuje sve dostupne podatke o pojasu
  480.     pojasZuti.Ispis();
  481.  
  482.     Kandidat jasmin;
  483.     jasmin.Unos("Jasmin Azemovic");
  484.     /*
  485.     Karate pojasevi se moraju dodavati po redoslijedu tj. ne smije se dozvoliti dodavanje zelenog pojasa ukoliko prethodno nije dodan zuti i narandzasti.
  486.     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.
  487.     */
  488.     if (jasmin.DodajPojas(pojasZuti))
  489.         cout << "Pojas uspjesno dodan!" << endl;
  490.     if (jasmin.DodajPojas(pojasZeleni))//prethodno je trebao biti dodan narandzasti pojas
  491.         cout << "Pojas uspjesno dodan!" << endl;
  492.     if (jasmin.DodajPojas(pojasNarandzasti))
  493.         cout << "Pojas uspjesno dodan!" << endl;
  494.  
  495.     float prosjek = 0;
  496.     Pojas pojas;
  497.     //Funkcija GetNajbolji vraca par koji sadrzi oznaku i prosjecnu ocjenu (uspjesno okoncanih aktivnosti) pojasa sa najvecim prosjekom
  498.     tie(pojas, prosjek) = jasmin.GetNajbolji();
  499.     cout << "Najbolji rezultat od " << prosjek << " je ostvaren tokom stjecanja pojasa " << pojas << endl;
  500.  
  501.  
  502.     datumPolaganja1.Dealociraj(), datumPolaganja2.Dealociraj(), datumPolaganja3.Dealociraj(), datumPolaganja4.Dealociraj();
  503.     aktivnost1.Dealociraj(), aktivnost2.Dealociraj(), aktivnost3.Dealociraj(), aktivnost4.Dealociraj(), aktivnost5.Dealociraj();
  504.     pojasZuti.Dealociraj(), pojasNarandzasti.Dealociraj(), pojasZeleni.Dealociraj();
  505.     jasmin.Dealociraj();
  506.  
  507.     system("pause");
  508. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement