Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.67 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 { Poligon, Gradska, Nocna, Parkiranje };
  17. enum Kategorija { A, B, C, D, E };
  18. const int maxKategorija = 5;
  19.  
  20. struct Datum {
  21.     int * _dan, *_mjesec, *_godina;
  22.     void Unos(int d, int m, int g) {
  23.         _dan = new int(d);
  24.         _mjesec = new int(m);
  25.         _godina = new int(g);
  26.     }
  27.     void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
  28.     void Dealociraj()
  29.     {
  30.         if (_dan || _mjesec || _godina == nullptr)
  31.             return;
  32.         delete  _dan; delete  _mjesec; delete _godina;
  33.     }
  34. };
  35.  
  36. bool istiDatum(Datum d1, Datum d2)
  37. {
  38.     if (*d1._godina == *d2._godina && *d1._mjesec == *d2._mjesec && *d1._dan == *d2._dan)
  39.         return true;
  40.     return false;
  41. }
  42. bool minimalno30Dana(Datum OD, Datum DO)
  43. {
  44.     int datumOD = *OD._dan + *OD._mjesec * 30 + *OD._godina * 30 * 12;
  45.     int datumDO = *DO._dan + *DO._mjesec * 30 + *DO._godina * 30 * 12;
  46.  
  47.     if (datumDO - datumOD >= 30)
  48.         return true;
  49.     return false;
  50. }
  51. struct Aktivnost {
  52.     unique_ptr<VrstaAktivnosti> _vrsta;
  53.     Datum _datumIzvrsenja;
  54.     char * _komentar;
  55.     int _ocjena; // 1 - 5
  56.     void Unos(VrstaAktivnosti vrsta, Datum * datum, int ocjena, const char * komentar)
  57.     {
  58.         _vrsta = make_unique<VrstaAktivnosti>(vrsta);
  59.         _datumIzvrsenja.Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  60.         _ocjena = ocjena;
  61.         int size = strlen(komentar) + 1;
  62.         _komentar = new char[size];
  63.         strcpy_s(_komentar, size, komentar);
  64.     }
  65.     void Ispis() {
  66.         cout << *_vrsta << " " << _ocjena << " " << _komentar;
  67.         _datumIzvrsenja.Ispis();
  68.         cout << endl;
  69.     }
  70.     void Dealociraj() {
  71.         _datumIzvrsenja.Dealociraj();
  72.         delete[] _komentar; _komentar = nullptr;
  73.     }
  74. };
  75. struct VozackaKategorija {
  76.     Datum * _datumPolaganja;//datum koji ce se evidentirati kao datum polaganja kategorije tj. kada su ispunjene sve aktivnosti/obaveze
  77.     Kategorija _kategorija;
  78.     Aktivnost * _listaIzvrsenihAktivnosti;
  79.     int _trenutnoIzvrsenihAktivnosti;
  80.  
  81.     void Kopiraj(VozackaKategorija & vozacka)
  82.     {
  83.         _datumPolaganja = new Datum;
  84.         if (vozacka._datumPolaganja != nullptr)
  85.         {
  86.             _datumPolaganja->Unos(*vozacka._datumPolaganja->_dan, *vozacka._datumPolaganja->_mjesec, *vozacka._datumPolaganja->_godina);
  87.         }
  88.         _kategorija = vozacka._kategorija;
  89.         _trenutnoIzvrsenihAktivnosti = vozacka._trenutnoIzvrsenihAktivnosti;
  90.         _listaIzvrsenihAktivnosti = new Aktivnost[vozacka._trenutnoIzvrsenihAktivnosti];
  91.         for (int i = 0; i < vozacka._trenutnoIzvrsenihAktivnosti; i++)
  92.         {
  93.             _listaIzvrsenihAktivnosti[i].Unos(*vozacka._listaIzvrsenihAktivnosti[i]._vrsta, &vozacka._listaIzvrsenihAktivnosti[i]._datumIzvrsenja,
  94.                 vozacka._listaIzvrsenihAktivnosti[i]._ocjena, vozacka._listaIzvrsenihAktivnosti[i]._komentar);
  95.         }
  96.  
  97.     }
  98.  
  99.     void Unos(Kategorija kategorija) {
  100.         _listaIzvrsenihAktivnosti = nullptr;
  101.         _trenutnoIzvrsenihAktivnosti = 0;
  102.         _datumPolaganja = nullptr;
  103.         _kategorija = kategorija;
  104.     }
  105.     void Dealociraj()
  106.     {
  107.         if (_datumPolaganja != nullptr)
  108.         {
  109.             _datumPolaganja->Dealociraj();
  110.         }
  111.         for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  112.         {
  113.             _listaIzvrsenihAktivnosti[i].Dealociraj();
  114.         }
  115.         delete[] _listaIzvrsenihAktivnosti;
  116.         _listaIzvrsenihAktivnosti = nullptr;
  117.     }
  118.     void Ispis()
  119.     {
  120.         if (_datumPolaganja != nullptr)
  121.         {
  122.             _datumPolaganja->Ispis();
  123.         }
  124.         cout << _kategorija << endl;
  125.         for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  126.             _listaIzvrsenihAktivnosti[i].Ispis();
  127.     }
  128.     /*Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene aktivnosti za potrebe stjecanja odredjene
  129. vozacke kategorije.
  130. Broj aktivnosti nije ogranicen.
  131.  
  132. Identicna aktivnost se moze dodati jedino u slucaju kada je prethodna (identivna aktivnost po vrsti i datumu izvrsenja)
  133. imala ocjenu manju od 3.
  134.  
  135. Uspjesnom aktivnoscu se smatraju one aktivnosti koje imaju ocjenu vecu od 2, a svaka naredna identicna aktivnost, bez
  136. obzira da li je uspjesna ili ne,
  137. moze biti dodana jedino ako je proslo najmanje 30 dana od izvrsenja prethodne.
  138.  
  139. Onemoguciti dodavanje aktivnosti uspjesno polozenoj kategoriji.*/
  140. //datum?
  141.     bool DodajIzvrsenuAktivnost(VrstaAktivnosti vrsta, Datum * datm, int ocjena, const char * komentar)
  142.     {
  143.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  144.         {
  145.             if ((*_listaIzvrsenihAktivnosti[i]._vrsta == vrsta) && istiDatum(_listaIzvrsenihAktivnosti[i]._datumIzvrsenja, *datm))
  146.             {
  147.                 if (!(_listaIzvrsenihAktivnosti[i]._ocjena < 3))
  148.                 {
  149.                     return false;
  150.                 }
  151.             }
  152.             if (*_listaIzvrsenihAktivnosti[i]._vrsta == vrsta)
  153.             {
  154.                 if (!(minimalno30Dana(_listaIzvrsenihAktivnosti[i]._datumIzvrsenja, *datm)))
  155.                 {
  156.                     return false;
  157.                 }
  158.             }
  159.         }
  160.  
  161.         Aktivnost * temp = new Aktivnost[_trenutnoIzvrsenihAktivnosti + 1];
  162.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  163.         {
  164.             temp[i].Unos(*_listaIzvrsenihAktivnosti[i]._vrsta,
  165.                 &_listaIzvrsenihAktivnosti[i]._datumIzvrsenja, _listaIzvrsenihAktivnosti[i]._ocjena, _listaIzvrsenihAktivnosti[i]._komentar);
  166.         }
  167.         temp[_trenutnoIzvrsenihAktivnosti].Unos(vrsta, datm, ocjena, komentar);
  168.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  169.         {
  170.             _listaIzvrsenihAktivnosti[i].Dealociraj();
  171.         }
  172.         delete[] _listaIzvrsenihAktivnosti;
  173.         _listaIzvrsenihAktivnosti = temp;
  174.         _trenutnoIzvrsenihAktivnosti++;
  175.         return true;
  176.     }
  177.  
  178.     //koristeci neki od obradjenih algoritama, po ocjeni sortirati aktivnosti u okviru odredjene kategorije
  179.     void Sortiraj()
  180.     {
  181.         int minI;
  182.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  183.         {
  184.             minI = i;
  185.             for (int j = i + 1; j < _trenutnoIzvrsenihAktivnosti; j++)
  186.             {
  187.                 if (_listaIzvrsenihAktivnosti[minI]._ocjena > _listaIzvrsenihAktivnosti[j]._ocjena)
  188.                 {
  189.                     minI = j;
  190.                 }
  191.             }
  192.             swap(_listaIzvrsenihAktivnosti[i], _listaIzvrsenihAktivnosti[minI]);
  193.             cout << "Soritrane ocjene: " << _listaIzvrsenihAktivnosti[i]._ocjena << endl;
  194.         }
  195.     }
  196.  
  197.     /*Stjecanje kategorije zahtijeva uspjesnu realizaciju svih planiranih aktivnosti, a one se za jedan povecavaju sa svakom novom
  198.     kategorijom, npr.
  199.     A: 1 x poligon, 1 x gradska, 1 x nocna, 1 x parkiranje;
  200.     B: 2 x poligon, 2 x gradska, 2 x nocna, 2 x parkiranje; i td...
  201.  
  202.     Funkcija vraca false u slucaju da:
  203.     su kandidatu u listu aktivnosti evidentirane tri negativno ocijenjene identicne vrste aktivnosti
  204.     (npr. tri negativne ocjene iz gradske voznje), onda se ta kategorija ne moze smatrati uspjesno polozenom
  205.  
  206.     ,te ukoliko nedostaje bilo koja od aktivnosti zahtijevanih u okviru te kategorije.
  207.  
  208.     Ukoliko je kandidat uspjesno realizovao sve aktivnost, datum polaganja se postavlja na datum posljednje uspjesno
  209.     realizovane aktivnosti*/
  210.     bool DaLiJePolozena()
  211.     {
  212.         int negativneOcjenePoligon = 0, negativneOcjeneGradska = 0, negativneOcjeneNocna = 0, negativneOcjeneParkiranje = 0;
  213.         int zahtijevaneKativnostiPoligon = 0, zahtijevaneKativnostiGradska = 0, zahtijevaneKativnostiNocna = 0,
  214.             zahtijevaneKativnostiParkiranje = 0;
  215.         Datum datumPolaganja;
  216.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  217.         {
  218.             if (!(_listaIzvrsenihAktivnosti[i]._ocjena > 2))
  219.             {
  220.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Poligon)
  221.                     negativneOcjenePoligon++;
  222.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Gradska)
  223.                     negativneOcjeneGradska++;
  224.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Nocna)
  225.                     negativneOcjeneNocna++;
  226.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Parkiranje)
  227.                     negativneOcjeneParkiranje++;
  228.             }
  229.         }
  230.         if (negativneOcjenePoligon >= 3)
  231.             return false;
  232.         if (negativneOcjeneGradska >= 3)
  233.             return false;
  234.         if (negativneOcjeneNocna >= 3)
  235.             return false;
  236.         if (negativneOcjeneParkiranje >= 3)
  237.             return false;
  238.  
  239.         for (int i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  240.         {
  241.             if (_listaIzvrsenihAktivnosti[i]._ocjena > 2)
  242.             {
  243.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Poligon)
  244.                     zahtijevaneKativnostiPoligon++;
  245.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Gradska)
  246.                     zahtijevaneKativnostiGradska++;
  247.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Nocna)
  248.                     zahtijevaneKativnostiNocna++;
  249.                 if (*_listaIzvrsenihAktivnosti[i]._vrsta == Parkiranje)
  250.                     zahtijevaneKativnostiParkiranje++;
  251.             }
  252.  
  253.             datumPolaganja = _listaIzvrsenihAktivnosti[i]._datumIzvrsenja;
  254.         }
  255.         if (_kategorija == A)
  256.         {
  257.             if (!(zahtijevaneKativnostiPoligon >= 1 && zahtijevaneKativnostiGradska >= 1 && zahtijevaneKativnostiNocna >= 1
  258.                 && zahtijevaneKativnostiParkiranje >= 1))
  259.             {
  260.                 return false;
  261.             }
  262.         }
  263.         if (_kategorija == B)
  264.         {
  265.             if (!(zahtijevaneKativnostiPoligon >= 2 && zahtijevaneKativnostiGradska >= 2 && zahtijevaneKativnostiNocna >= 2
  266.                 && zahtijevaneKativnostiParkiranje >= 2))
  267.             {
  268.                 return false;
  269.             }
  270.         }
  271.         if (_kategorija == C)
  272.         {
  273.             if (!(zahtijevaneKativnostiPoligon >= 3 && zahtijevaneKativnostiGradska >= 3 && zahtijevaneKativnostiNocna >= 3
  274.                 && zahtijevaneKativnostiParkiranje >= 3))
  275.             {
  276.                 return false;
  277.             }
  278.         }
  279.         if (_kategorija == D)
  280.         {
  281.             if (!(zahtijevaneKativnostiPoligon >= 4 && zahtijevaneKativnostiGradska >= 4 && zahtijevaneKativnostiNocna >= 4
  282.                 && zahtijevaneKativnostiParkiranje >= 4))
  283.             {
  284.                 return false;
  285.             }
  286.         }
  287.         if (_kategorija == E)
  288.         {
  289.             if (!(zahtijevaneKativnostiPoligon >= 5 && zahtijevaneKativnostiGradska >= 5 && zahtijevaneKativnostiNocna >= 5
  290.                 && zahtijevaneKativnostiParkiranje >= 5))
  291.             {
  292.                 return false;
  293.             }
  294.         }
  295.  
  296.         _datumPolaganja = new Datum;
  297.         _datumPolaganja->Unos(*datumPolaganja._dan, *datumPolaganja._mjesec, *datumPolaganja._godina);
  298.         return false;
  299.     }
  300.  
  301.     /*Funkcija vraca prosjecnu ocjenu svih uspjesno realizovanih aktivnosti koja u nazivu ili opisu sadrze vrijednost
  302.     primljenog parametra.
  303.     Ukoliko smatrate da je potrebno, mozete dodati i druge parametre za potrebe implementacije ove funkcije*/
  304.     float PretragaRekrzivno(const char * napomena, int &suma, int & brojac, int & i, float & prosjek)
  305.     {
  306.         if (_trenutnoIzvrsenihAktivnosti == i)
  307.         {
  308.             if (brojac == 0)
  309.                 return 0;
  310.             else
  311.             {
  312.                 prosjek = float(suma) / brojac;
  313.                 return prosjek;
  314.             }
  315.         }
  316.         else
  317.         {
  318.             if (strstr(_listaIzvrsenihAktivnosti[i]._komentar, napomena) != nullptr && _listaIzvrsenihAktivnosti[i]._ocjena > 2)
  319.             {
  320.                 suma += _listaIzvrsenihAktivnosti[i]._ocjena;
  321.                 brojac++;
  322.             }
  323.         }
  324.         i++;
  325.         return PretragaRekrzivno(napomena, suma, brojac, i, prosjek);
  326.     }
  327.  
  328. };
  329.  
  330. struct Kandidat {
  331.     char * _imePrezime;
  332.     shared_ptr<VozackaKategorija> _kategorije[maxKategorija];
  333.     int _trenutnoKategorija;
  334.  
  335.     void Unos(const char * imePrezime)
  336.     {
  337.         int size = strlen(imePrezime) + 1;
  338.         _imePrezime = new char[size];
  339.         strcpy_s(_imePrezime, size, imePrezime);
  340.         _trenutnoKategorija = 0;
  341.     }
  342.     void Dealociraj()
  343.     {
  344.         delete[] _imePrezime; _imePrezime = nullptr;
  345.  
  346.         for (size_t i = 0; i < _trenutnoKategorija; i++)
  347.         {
  348.             if (_kategorije[i] != nullptr)
  349.             {
  350.                 _kategorije[i]->Dealociraj();
  351.                 _kategorije[i].reset();
  352.             }
  353.         }
  354.     }
  355.     void Ispis() {
  356.         cout << _imePrezime << endl;
  357.         for (size_t i = 0; i < _trenutnoKategorija; i++)
  358.             _kategorije[i]->Ispis();
  359.     }
  360.  
  361.     /*
  362.     Pretpostavka je da se kategorije moraju polagati po redoslijedu tj. ne smije se dozvoliti dodavanje kategorije C
  363.     ukoliko prethodno nisu uspjesno polozene kategorije B i C. Za provjeru ispunjenosti preduslova dodavanja nove kategorije,
  364.     unutar funkcije DodajKategoriju, kreirati lambda funkciju.
  365.     */
  366.     bool DodajKategoriju(VozackaKategorija vozacka)
  367.     {
  368.         auto lambda = [&]()
  369.         {
  370.             if (_trenutnoKategorija == vozacka._kategorija)
  371.                 return true;
  372.             else
  373.                 return false;
  374.         };
  375.  
  376.         if (lambda() == true)
  377.         {
  378.             _kategorije[_trenutnoKategorija] = make_shared<VozackaKategorija>();
  379.             _kategorije[_trenutnoKategorija]->Kopiraj(vozacka);
  380.             _trenutnoKategorija++;
  381.             return true;
  382.         }
  383.  
  384.         return false;
  385.     }
  386.  
  387.  
  388.     //Funkcija GetNajboljuKategoriju  vraca par koji sadrzi oznaku i prosjecnu ocjenu (uspjesno okoncanih aktivnosti)
  389.     //kategorije sa najvecim prosjekom
  390.     pair <Kategorija, float>GetNajboljuKategoriju()
  391.     {
  392.         float prosjek = 0;
  393.         Kategorija kategorija;
  394.         int sumaOcjena = 0, brojacPozitivnihOcjena = 0;
  395.         float maxProsjek = 0;
  396.         pair <Kategorija, float> rezultat;
  397.  
  398.         for (int i = 0; i < _trenutnoKategorija; i++)
  399.         {
  400.             for (int j = 0; j < _kategorije[i]->_trenutnoIzvrsenihAktivnosti; j++)
  401.             {
  402.                 if (_kategorije[i]->_listaIzvrsenihAktivnosti[j]._ocjena > 2)
  403.                 {
  404.                     sumaOcjena += _kategorije[i]->_listaIzvrsenihAktivnosti[j]._ocjena;
  405.                     brojacPozitivnihOcjena++;
  406.                 }
  407.             }
  408.             prosjek = float(sumaOcjena) / brojacPozitivnihOcjena;
  409.             if (prosjek > maxProsjek)
  410.             {
  411.                 maxProsjek = prosjek;
  412.                 kategorija = _kategorije[i]->_kategorija;
  413.             }
  414.         }
  415.         rezultat = make_pair(kategorija, maxProsjek);
  416.         return rezultat;
  417.     }
  418. };
  419.  
  420. void main() {
  421.  
  422.     //BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA
  423.     //STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  424.     Datum datumPolaganja1, datumPolaganja2, datumPolaganja3, datumPolaganja4;
  425.     datumPolaganja1.Unos(10, 6, 2018);
  426.     datumPolaganja2.Unos(18, 6, 2018);
  427.     datumPolaganja3.Unos(22, 3, 2018);
  428.     datumPolaganja4.Unos(28, 7, 2018);
  429.  
  430.     VozackaKategorija kategorijaA, kategorijaB, kategorijaC;
  431.     kategorijaA.Unos(A);
  432.  
  433.     kategorijaB.Unos(B);
  434.     kategorijaC.Unos(C);
  435.  
  436.     /*Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene aktivnosti za potrebe stjecanja odredjene
  437.     vozacke kategorije. Broj aktivnosti nije ogranicen.
  438.     Identicna aktivnost se moze dodati jedino u slucaju kada je prethodna (identivna aktivnost po vrsti i datumu izvrsenja)
  439.     imala ocjenu manju od 3.
  440.     Uspjesnom aktivnoscu se smatraju one aktivnosti koje imaju ocjenu vecu od 2, a svaka naredna identicna aktivnost, bez
  441.     obzira da li je uspjesna ili ne,
  442.     moze biti dodana jedino ako je proslo najmanje 30 dana od izvrsenja prethodne. Onemoguciti dodavanje aktivnosti uspjesno
  443.     polozenoj kategoriji.*/
  444.     //datum?
  445.     if (kategorijaA.DodajIzvrsenuAktivnost(Poligon, &datumPolaganja1, 3, "izuzetno dobra orijentacija"))
  446.         cout << "Aktivnost uspjesno dodana!" << endl;
  447.     if (kategorijaA.DodajIzvrsenuAktivnost(Gradska, &datumPolaganja1, 2, "nesigurnost u raskrsnicama"))
  448.         cout << "Aktivnost uspjesno dodana!" << endl;
  449.     if (kategorijaA.DodajIzvrsenuAktivnost(Gradska, &datumPolaganja2, 4, "raskrsnice savladane"))//datum?
  450.         cout << "Aktivnost uspjesno dodana!" << endl;
  451.     if (kategorijaA.DodajIzvrsenuAktivnost(Gradska, &datumPolaganja4, 4, "raskrsnice savladane"))
  452.         cout << "Aktivnost uspjesno dodana!" << endl;
  453.  
  454.  
  455.     //koristeci neki od obradjenih algoritama, po ocjeni sortirati aktivnosti u okviru odredjene kategorije
  456.     kategorijaA.Sortiraj();
  457.  
  458.  
  459.     /*Stjecanje kategorije zahtijeva uspjesnu realizaciju svih planiranih aktivnosti, a one se za jedan povecavaju sa svakom novom
  460.     kategorijom, npr.
  461.     A: 1 x poligon, 1 x gradska, 1 x nocna, 1 x parkiranje;
  462.     B: 2 x poligon, 2 x gradska, 2 x nocna, 2 x parkiranje; i td...
  463.     Funkcija vraca false u slucaju da: su kandidatu u listu aktivnosti evidentirane tri negativno ocijenjene identicne vrste aktivnosti
  464.     (npr. tri negativne ocjene iz gradske voznje), onda se ta kategorija ne moze smatrati uspjesno polozenom
  465.     ,te ukoliko nedostaje bilo koja od aktivnosti zahtijevanih u okviru te kategorije. Ukoliko je kandidat uspjesno realizovao sve aktivnost,
  466.     datum polaganja se postavlja na datum posljednje uspjesno realizovane aktivnosti*/
  467.     if (kategorijaA.DaLiJePolozena())
  468.         kategorijaA.Ispis();
  469.  
  470.     /*Funkcija vraca prosjecnu ocjenu svih uspjesno realizovanih aktivnosti koja u nazivu ili opisu sadrze vrijednost primljenog parametra.
  471.     Ukoliko smatrate da je potrebno, mozete dodati i druge parametre za potrebe implementacije ove funkcije*/
  472.     int suma = 0, brojac = 0, i = 0;
  473.     float prosjek1 = 0;
  474.     cout << "Prosjecna ocjena za kategoriju A -> " << kategorijaA.PretragaRekrzivno("nesigurno", suma, brojac, i, prosjek1) << endl;
  475.  
  476.     //ispisuje sve dostupne podatke o kategoriji
  477.     kategorijaA.Ispis();
  478.  
  479.     Kandidat jasmin;
  480.     jasmin.Unos("Jasmin Azemovic");
  481.  
  482.     /*
  483.     Pretpostavka je da se kategorije moraju polagati po redoslijedu tj. ne smije se dozvoliti dodavanje kategorije C
  484.     ukoliko prethodno nisu uspjesno polozene kategorije B i C. Za provjeru ispunjenosti preduslova dodavanja nove kategorije,
  485.     unutar funkcije DodajKategoriju, kreirati lambda funkciju.
  486.     */
  487.     if (jasmin.DodajKategoriju(kategorijaA))
  488.         cout << "Kategorija uspjesno dodan!" << endl;
  489.     if (jasmin.DodajKategoriju(kategorijaC))
  490.         cout << "Kategorija uspjesno dodan!" << endl;
  491.     if (jasmin.DodajKategoriju(kategorijaB))
  492.         cout << "Kategorija uspjesno dodan!" << endl;
  493.  
  494.     float prosjek = 0;
  495.     Kategorija kategorija;
  496.     //Funkcija GetNajboljuKategoriju  vraca par koji sadrzi oznaku i prosjecnu ocjenu (uspjesno okoncanih aktivnosti)
  497.     //kategorije sa najvecim prosjekom
  498.     tie(kategorija, prosjek) = jasmin.GetNajboljuKategoriju();
  499.     cout << "Najbolji rezultat od " << prosjek << " je ostvaren tokom polaganja kategorije " << kategorija << endl;
  500.  
  501.  
  502.     datumPolaganja1.Dealociraj(), datumPolaganja2.Dealociraj(), datumPolaganja3.Dealociraj(), datumPolaganja4.Dealociraj();
  503.  
  504.     kategorijaA.Dealociraj(),
  505.         kategorijaB.Dealociraj(),
  506.         kategorijaC.Dealociraj();
  507.  
  508.     jasmin.Dealociraj();
  509.  
  510.     system("pause");
  511. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement