Advertisement
wiuu23

PR2 2018

Sep 13th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 49.22 KB | None | 0 0
  1. //********************************************juni
  2. //karate: https://pastebin.com/rgygcLJV
  3. #include<iostream>
  4. using namespace std;
  5. /*
  6. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NECE BODOVATI
  7. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  8. 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
  9. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  10. 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)
  11. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  12. */
  13. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  14. #pragma warning(disable:4996)
  15.  
  16.  
  17. enum VrstaAktivnosti { Tehnike, Kata, Borba };
  18. enum Pojas { Zuti, Narandzasti, Zeleni, Plavi, Smedji, Crni };
  19. struct Datum {
  20. int * _dan, *_mjesec, *_godina;
  21. void Unos(int d, int m, int g) {
  22. _dan = new int(d);
  23. _mjesec = new int(m);
  24. _godina = new int(g);
  25. }
  26. void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
  27. void Dealociraj() { delete _dan; delete _mjesec; delete _godina; }
  28. };
  29. struct Aktivnost {
  30. unique_ptr<VrstaAktivnosti> _vrsta;
  31. Datum _datumIzvrsenja;
  32. char * _nazivOpis;
  33. int _ocjena; // 1 - 10
  34. void Unos(VrstaAktivnosti vrsta, Datum * datum, int ocjena, const char * nazivOpis) {  
  35. _datumIzvrsenja.Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  36. _ocjena = ocjena;
  37. int size = strlen(nazivOpis) + 1;
  38. _nazivOpis = new char[size];
  39. strcpy_s(_nazivOpis, size, nazivOpis);
  40. }
  41. void Ispis() {
  42. cout << *_vrsta << " " << _ocjena << " " << _nazivOpis;
  43. _datumIzvrsenja.Ispis();
  44. cout << endl;
  45. }
  46. void Dealociraj() {
  47. _datumIzvrsenja.Dealociraj();
  48. delete[] _nazivOpis; _nazivOpis = nullptr;
  49. }
  50. };
  51. struct KaratePojas {
  52. Datum * _datumPolaganja;//datum koji ce se evidentirati kao datum polaganja pojasa tj. kada su ispunjene sve aktivnosti/obaveze
  53. Pojas _pojas;
  54. Aktivnost * _listaIzvrsenihAktivnosti;
  55. int _trenutnoIzvrsenihAktivnosti;
  56. void Unos(Pojas pojas) {
  57. _listaIzvrsenihAktivnosti = nullptr;
  58. _trenutnoIzvrsenihAktivnosti = 0;
  59. _datumPolaganja = nullptr;
  60. _pojas = pojas;
  61. }
  62. void Dealociraj() {
  63. _datumPolaganja->Dealociraj(); _datumPolaganja = nullptr;
  64. for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  65. _listaIzvrsenihAktivnosti[i].Dealociraj();
  66. delete[] _listaIzvrsenihAktivnosti;
  67. _listaIzvrsenihAktivnosti = nullptr;
  68. }
  69. void Ispis() {
  70. _datumPolaganja->Ispis();
  71. cout << _pojas <<endl;
  72. for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  73. _listaIzvrsenihAktivnosti[i].Ispis();
  74. }  
  75. };
  76.  
  77. struct Kandidat {
  78. char * _imePrezime;
  79. shared_ptr<KaratePojas> _pojasevi[6];
  80. void Unos(const char * imePrezime) {
  81. int size = strlen(imePrezime) + 1;
  82. _imePrezime = new char[size];
  83. strcpy_s(_imePrezime, size, imePrezime);
  84. for (size_t i = 0; i < 6; i++)
  85. _pojasevi[i] = nullptr;
  86. }
  87. void Dealociraj() {
  88. delete[] _imePrezime; _imePrezime = nullptr;
  89. for (size_t i = 0; i < 6; i++)
  90. if (_pojasevi[i] != nullptr) {
  91. _pojasevi[i]->Dealociraj();
  92. _pojasevi[i].reset();  
  93. }
  94. }
  95. void Ispis() {
  96. cout << _imePrezime << endl;
  97. for (size_t i = 0; i < 6; i++)
  98. if (_pojasevi[i] != nullptr)
  99. _pojasevi[i]->Ispis();
  100. }  
  101. };
  102.  
  103. void main() {
  104.  
  105. //BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA
  106. //STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  107. Datum datumPolaganja1, datumPolaganja2, datumPolaganja3, datumPolaganja4;
  108. datumPolaganja1.Unos(10, 6, 2018);
  109. datumPolaganja2.Unos(18, 6, 2018);
  110. datumPolaganja3.Unos(22, 3, 2018);
  111. datumPolaganja4.Unos(22, 7, 2018);
  112.  
  113. Aktivnost aktivnost1, aktivnost2, aktivnost3, aktivnost4, aktivnost5;
  114. aktivnost1.Unos(Tehnike, &datumPolaganja1, 6, "Tehnike za zuti pojas");
  115. aktivnost2.Unos(Kata, &datumPolaganja1, 8, "Taiki joko shodan - zuti pojas");
  116. aktivnost3.Unos(Borba, &datumPolaganja1, 2, "Jednostavne borbene tehnike sa partnerom");
  117. aktivnost4.Unos(Borba, &datumPolaganja1, 6, "Jednostavne borbene tehnike sa partnerom");
  118. aktivnost5.Unos(Borba, &datumPolaganja4, 6, "Jednostavne borbene tehnike sa partnerom");
  119.  
  120. KaratePojas pojasZuti, pojasNarandzasti, pojasZeleni;
  121. pojasZuti.Unos(Zuti);
  122.  
  123. /*Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene aktivnosti za potrebe stjecanja odredjenog pojasa. Broj aktivnosti nije ogranicen.
  124. Identicna aktivnost se moze dodati jedino u slucaju kada je prethodna (identivna aktivnost po vrsti i datumu izvrsenja) imala ocjenu manju od 6.
  125. 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,
  126. moze biti dodana jedino ako je proslo najmanje 15 dana od izvrsenja prethodne. Onemoguciti dodavanje aktivnosti uspjesno polozenom pojasu.*/
  127. if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost1))
  128. cout << "Aktivnost uspjesno dodana!" << endl;
  129. if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost2))
  130. cout << "Aktivnost uspjesno dodana!" << endl;
  131. if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost3))
  132. cout << "Aktivnost uspjesno dodana!" << endl;
  133. if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost4))//15 dana...
  134. cout << "Aktivnost uspjesno dodana!" << endl;
  135. if (pojasZuti.DodajIzvrsenuAktivnost(&aktivnost5))
  136. cout << "Aktivnost uspjesno dodana!" << endl;
  137.  
  138. //Koristeci neki od obradjenih algoritama, po ocjeni sortirati aktivnosti u okviru odredjenog pojasa
  139. pojasZuti.Sortiraj();
  140.  
  141.  
  142. /* Karate pojas zahtijeva uspjesnu realizaciju svih planiranih aktivnosti, a one se za jedan povecavaju sa svakim novim pojasom, npr.
  143. zuti pojas: 1 x tehnika, 1 x kata, 1 x borba;   narandzasti pojas: 2 x tehnika, 2 x kata, 2 x borba; i td...
  144. 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
  145. 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*/
  146. if (pojasZuti.DaLiJePolozen())
  147. pojasZuti.Ispis();
  148.  
  149. /*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*/
  150. cout << "Prosjecna ocjena za zuti pojas -> " << pojasZuti.PretragaRekrzivno("pojas") << endl;
  151.  
  152. //ispisuje sve dostupne podatke o pojasu
  153. pojasZuti.Ispis();
  154.  
  155. Kandidat jasmin;
  156. jasmin.Unos("Jasmin Azemovic");
  157. /*
  158. 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.
  159. */
  160. if (jasmin.DodajPojas(pojasZuti))
  161. cout << "Pojas uspjesno dodan!" << endl;
  162. if (jasmin.DodajPojas(pojasZeleni))//prethodno je trebao biti dodan narandzasti pojas
  163. cout << "Pojas uspjesno dodan!" << endl;
  164. if (jasmin.DodajPojas(pojasNarandzasti))
  165. cout << "Pojas uspjesno dodan!" << endl;
  166.  
  167. float prosjek = 0;
  168. Pojas pojas;
  169. //Funkcija GetNajbolji vraca par koji sadrzi oznaku i prosjecnu ocjenu (uspjesno okoncanih aktivnosti) pojasa sa najvecim prosjekom
  170. tie(pojas, prosjek) = jasmin.GetNajbolji();
  171. cout << "Najbolji rezultat od " << prosjek << " je ostvaren tokom stjecanja pojasa " << pojas << endl;
  172.  
  173.  
  174. datumPolaganja1.Dealociraj(), datumPolaganja2.Dealociraj(), datumPolaganja3.Dealociraj(), datumPolaganja4.Dealociraj();
  175. aktivnost1.Dealociraj(), aktivnost2.Dealociraj(), aktivnost3.Dealociraj(), aktivnost4.Dealociraj(), aktivnost5.Dealociraj();
  176. pojasZuti.Dealociraj(), pojasNarandzasti.Dealociraj(), pojasZeleni.Dealociraj();
  177. jasmin.Dealociraj();
  178.  
  179. system("pause");
  180. }
  181.  
  182.  
  183. //vozacki ispit: https://pastebin.com/VVKtx6PZ
  184. #include<iostream>
  185. using namespace std;
  186. /*
  187. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NECE BODOVATI
  188. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  189. 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
  190. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  191. 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)
  192. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  193. */
  194. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  195. #pragma warning(disable:4996)
  196.  
  197.  
  198. enum VrstaAktivnosti { Poligon, Gradska, Nocna, Parkiranje };
  199. enum Kategorija { A, B, C, D, E };
  200. const int maxKategorija = 5;
  201.  
  202. struct Datum {
  203.     int * _dan, *_mjesec, *_godina;
  204.     void Unos(int d, int m, int g) {
  205.         _dan = new int(d);
  206.         _mjesec = new int(m);
  207.         _godina = new int(g);
  208.     }
  209.     void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
  210.     void Dealociraj() { delete  _dan; delete  _mjesec; delete _godina; }
  211. };
  212. struct Aktivnost {
  213.     unique_ptr<VrstaAktivnosti> _vrsta;
  214.     Datum _datumIzvrsenja;
  215.     char * _komentar;
  216.     int _ocjena; // 1 - 5
  217.     void Unos(VrstaAktivnosti vrsta, Datum * datum, int ocjena, const char * komentar) {
  218.         _datumIzvrsenja.Unos(*datum->_dan, *datum->_mjesec, *datum->_godina);
  219.         _ocjena = ocjena;
  220.         int size = strlen(komentar) + 1;
  221.         _komentar = new char[size];
  222.         strcpy_s(_komentar, size, komentar);
  223.     }
  224.     void Ispis() {
  225.         cout << *_vrsta << " " << _ocjena << " " << _komentar;
  226.         _datumIzvrsenja.Ispis();
  227.         cout << endl;
  228.     }
  229.     void Dealociraj() {
  230.         _datumIzvrsenja.Dealociraj();
  231.         delete[] _komentar; _komentar = nullptr;
  232.     }
  233. };
  234. struct VozackaKategorija {
  235.     Datum * _datumPolaganja;//datum koji ce se evidentirati kao datum polaganja kategorije tj. kada su ispunjene sve aktivnosti/obaveze
  236.     Kategorija _kategorija;
  237.     Aktivnost * _listaIzvrsenihAktivnosti;
  238.     int _trenutnoIzvrsenihAktivnosti;
  239.     void Unos(Kategorija kategorija) {
  240.         _listaIzvrsenihAktivnosti = nullptr;
  241.         _trenutnoIzvrsenihAktivnosti = 0;
  242.         _datumPolaganja = nullptr;
  243.         _kategorija = kategorija;
  244.     }
  245.     void Dealociraj() {
  246.         _datumPolaganja->Dealociraj();
  247.         for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  248.             _listaIzvrsenihAktivnosti[i].Dealociraj();
  249.         delete[] _listaIzvrsenihAktivnosti;
  250.         _listaIzvrsenihAktivnosti = nullptr;
  251.     }
  252.     void Ispis() {
  253.         _datumPolaganja->Ispis();
  254.         cout << _kategorija << endl;
  255.         for (size_t i = 0; i < _trenutnoIzvrsenihAktivnosti; i++)
  256.             _listaIzvrsenihAktivnosti[i].Ispis();
  257.     }
  258. };
  259.  
  260. struct Kandidat {
  261.     char * _imePrezime;
  262.     shared_ptr<VozackaKategorija> _kategorije[maxKategorija];
  263.     int _trenutnoKategorija;
  264.     void Unos(const char * imePrezime) {
  265.         int size = strlen(imePrezime) + 1;
  266.         _imePrezime = new char[size];
  267.         strcpy_s(_imePrezime, size, imePrezime);
  268.         _trenutnoKategorija = 0;
  269.     }
  270.     void Dealociraj() {
  271.         delete[] _imePrezime; _imePrezime = nullptr;
  272.         for (size_t i = 0; i < _trenutnoKategorija; i++) {
  273.             _kategorije[i]->Dealociraj();
  274.             _kategorije[i].reset();
  275.         }
  276.     }
  277.     void Ispis() {
  278.         cout << _imePrezime << endl;
  279.         for (size_t i = 0; i < _trenutnoKategorija; i++)
  280.             _kategorije[i]->Ispis();
  281.     }
  282. };
  283.  
  284. void main() {
  285.  
  286.     //BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA
  287.     //STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  288.     Datum datumPolaganja1, datumPolaganja2, datumPolaganja3, datumPolaganja4;
  289.     datumPolaganja1.Unos(10, 6, 2018);
  290.     datumPolaganja2.Unos(18, 6, 2018);
  291.     datumPolaganja3.Unos(22, 3, 2018);
  292.     datumPolaganja4.Unos(28, 7, 2018);
  293.  
  294.     VozackaKategorija kategorijaA, kategorijaB, kategorijaC;
  295.     kategorijaA.Unos(A);
  296.  
  297.     /*Na osnovu vrijednosti primljenog parametra osigurati dodavanje novoizvrsene aktivnosti za potrebe stjecanja odredjene vozacke kategorije. Broj aktivnosti nije ogranicen.
  298.     Identicna aktivnost se moze dodati jedino u slucaju kada je prethodna (identivna aktivnost po vrsti i datumu izvrsenja) imala ocjenu manju od 3.
  299.     Uspjesnom aktivnoscu se smatraju one aktivnosti koje imaju ocjenu vecu od 2, a svaka naredna identicna aktivnost, bez obzira da li je uspjesna ili ne,
  300.     moze biti dodana jedino ako je proslo najmanje 30 dana od izvrsenja prethodne. Onemoguciti dodavanje aktivnosti uspjesno polozenoj kategoriji.*/
  301.     if (kategorijaA.DodajIzvrsenuAktivnost(Poligon, &datumPolaganja1, 3, "izuzetno dobra orijentacija"))
  302.         cout << "Aktivnost uspjesno dodana!" << endl;
  303.     if (kategorijaA.DodajIzvrsenuAktivnost(Gradska, &datumPolaganja1, 2, "nesigurnost u raskrsnicama"))
  304.         cout << "Aktivnost uspjesno dodana!" << endl;
  305.     if (kategorijaA.DodajIzvrsenuAktivnost(Gradska, &datumPolaganja2, 4, "raskrsnice savladane"))//datum?
  306.         cout << "Aktivnost uspjesno dodana!" << endl;
  307.     if (kategorijaA.DodajIzvrsenuAktivnost(Gradska, &datumPolaganja4, 4, "raskrsnice savladane"))
  308.         cout << "Aktivnost uspjesno dodana!" << endl;
  309.  
  310.  
  311.     //koristeci neki od obradjenih algoritama, po ocjeni sortirati aktivnosti u okviru odredjene kategorije
  312.     kategorijaA.Sortiraj();
  313.  
  314.  
  315.     /*Stjecanje kategorije zahtijeva uspjesnu realizaciju svih planiranih aktivnosti, a one se za jedan povecavaju sa svakom novom kategorijom, npr.
  316.     A: 1 x poligon, 1 x gradska, 1 x nocna, 1 x parkiranje;
  317.     B: 2 x poligon, 2 x gradska, 2 x nocna, 2 x parkiranje; i td...
  318.     Funkcija vraca false u slucaju da: su kandidatu u listu aktivnosti evidentirane tri negativno ocijenjene identicne vrste aktivnosti (npr. tri negativne ocjene iz gradske voznje), onda se ta kategorija ne moze smatrati uspjesno polozenom
  319.     ,te ukoliko nedostaje bilo koja od aktivnosti zahtijevanih u okviru te kategorije. Ukoliko je kandidat uspjesno realizovao sve aktivnost, datum polaganja se postavlja na datum posljednje uspjesno realizovane aktivnosti*/
  320.     if (kategorijaA.DaLiJePolozena())
  321.         kategorijaA.Ispis();
  322.  
  323.     /*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*/
  324.     cout << "Prosjecna ocjena za kategoriju A -> " << kategorijaA.PretragaRekrzivno("nesigurno") << endl;
  325.  
  326.     //ispisuje sve dostupne podatke o kategoriji
  327.     kategorijaA.Ispis();
  328.  
  329.     Kandidat jasmin;
  330.     jasmin.Unos("Jasmin Azemovic");
  331.  
  332.     /*
  333.     Pretpostavka je da se kategorije moraju polagati po redoslijedu tj. ne smije se dozvoliti dodavanje kategorije C ukoliko prethodno nisu uspjesno polozene kategorije B i C. Za provjeru ispunjenosti preduslova dodavanja nove kategorije, unutar funkcije DodajKategoriju, kreirati lambda funkciju.
  334.     */
  335.     if (jasmin.DodajKategoriju(kategorijaA))
  336.         cout << "Kategorija uspjesno dodan!" << endl;
  337.     if (jasmin.DodajKategoriju(kategorijaC))
  338.         cout << "Kategorija uspjesno dodan!" << endl;
  339.     if (jasmin.DodajKategoriju(kategorijaB))
  340.         cout << "Kategorija uspjesno dodan!" << endl;
  341.  
  342.     float prosjek = 0;
  343.     Kategorija kategorija;
  344.     //Funkcija GetNajboljuKategoriju  vraca par koji sadrzi oznaku i prosjecnu ocjenu (uspjesno okoncanih aktivnosti) kategorije sa najvecim prosjekom
  345.     tie(kategorija, prosjek) = jasmin.GetNajboljuKategoriju();
  346.     cout << "Najbolji rezultat od " << prosjek << " je ostvaren tokom polaganja kategorije " << kategorija << endl;
  347.  
  348.  
  349.     datumPolaganja1.Dealociraj(), datumPolaganja2.Dealociraj(), datumPolaganja3.Dealociraj(), datumPolaganja4.Dealociraj();
  350.     kategorijaA.Dealociraj(), kategorijaB.Dealociraj(), kategorijaC.Dealociraj();
  351.     jasmin.Dealociraj();
  352.  
  353.     system("pause");
  354. }
  355. ******************************************** juli
  356. //filter: https://pastebin.com/hwfzMeTY
  357. /*
  358. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA, U SUPROTNOM SE RAD NECE BODOVATI
  359. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  360. 3. KREIRAJTE .DOC FAJL SA VASIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJESENJA VASIH ZADATAKA. NE PREDAVATI .CPP FAJLOVE
  361. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORISTENJE HELP-A
  362. 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI CETE KOPIRATI VASA RJESENJA)
  363. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URADJENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  364. */
  365. #include<iostream>
  366. using namespace std;
  367.  
  368. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  369. #pragma warning(disable:4996)
  370.  
  371. const char *crt = "\n-------------------------------------------\n";
  372.  
  373. enum vrstaDokumenta { PDF, DOC, TXT, HTML };
  374. const char * vrstaDokumentaChar[] = { "PDF", "DOC", "TXT", "HTML" };
  375.  
  376. enum Prioritet { VISOK, SREDNJI, NIZAK };
  377. const char * PrioritetChar[] = { "VISOK", "SREDNJI", "NIZAK" };
  378.  
  379. char * AlocirajNizKaraktera(const char * sadrzaj) {
  380.     int vel = strlen(sadrzaj) + 1;
  381.     char * temp = new char[vel];
  382.     strcpy_s(temp, vel, sadrzaj);
  383.     return temp;
  384. }
  385.  
  386. const int BROJ_ZNAKOVA_PO_STRANICI = 30;
  387.  
  388. struct DatumVrijeme {
  389.     int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
  390.     void Unos(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 1, int minuti = 1) {
  391.         _dan = new int(dan);
  392.         _mjesec = new int(mjesec);
  393.         _godina = new int(godina);
  394.         _sati = new int(sati);
  395.         _minuti = new int(minuti);
  396.     }
  397.     void Dealociraj() {
  398.         delete _dan; _dan = nullptr;
  399.         delete _mjesec; _mjesec = nullptr;
  400.         delete _godina; _godina = nullptr;
  401.         delete _sati; _sati = nullptr;
  402.         delete _minuti; _minuti = nullptr;
  403.     }
  404.     void Ispis() {
  405.         cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
  406.     }
  407. };
  408.  
  409. struct Filter {
  410.     char * _sadrzaj;
  411.     Prioritet _prioritet;
  412.     void Unos(const char * sadrzaj, Prioritet prioritet) {
  413.         _sadrzaj = AlocirajNizKaraktera(sadrzaj);
  414.         _prioritet = prioritet;
  415.     }
  416.     void Dealociraj() {
  417.         delete[] _sadrzaj; _sadrzaj = nullptr;
  418.     }
  419.     void Ispis() { cout << _sadrzaj << " (" << PrioritetChar[_prioritet] << ")" << endl; }
  420. };
  421.  
  422. struct Dokument {
  423.     vrstaDokumenta _vrsta;
  424.     char * _naziv;
  425.     char * _sadrzaj;
  426.     unique_ptr<DatumVrijeme> _kreiran;
  427.     int _brojStranica;
  428.  
  429.     void Unos(vrstaDokumenta vrsta, const char * naziv, DatumVrijeme kreiran) {
  430.         _naziv = AlocirajNizKaraktera(naziv);
  431.         _vrsta = vrsta;
  432.         _kreiran = kreiran;
  433.         _brojStranica = 0;//broj stranica se odredjuje prilikom svakog dodavanja novog sadrzaja dokumentu
  434.         _sadrzaj = nullptr;
  435.     }
  436.     void Dealociraj() {
  437.         delete[] _naziv; _naziv = nullptr;
  438.         delete[] _sadrzaj; _sadrzaj = nullptr;
  439.         _kreiran->Dealociraj();
  440.     }
  441.     void Ispis() {
  442.         cout << crt << _naziv << " " << vrstaDokumentaChar[_vrsta] << " kreiran ";
  443.         _kreiran->Ispis();
  444.         cout << crt << _sadrzaj << crt << " br.stranica (" << _brojStranica << ")" << crt;
  445.     }
  446. };
  447. struct Printer {
  448.     char * _model;
  449.     Dokument * _dokumenti;
  450.     int _trenutnoDokumenata;
  451.     Filter * _filteri;
  452.     int _trenutnoFiltera;
  453.  
  454.     void Unos(const char * model) {
  455.         _model = AlocirajNizKaraktera(model);
  456.         _filteri = nullptr;
  457.         _dokumenti = nullptr;
  458.         _trenutnoDokumenata = 0;
  459.         _trenutnoFiltera = 0;
  460.     }
  461.     void Dealociraj() {
  462.         delete[] _model; _model = nullptr;
  463.         for (size_t i = 0; i < _trenutnoDokumenata; i++)
  464.             _dokumenti[i].Dealociraj();
  465.         delete[]_dokumenti; _dokumenti = nullptr;
  466.         for (size_t i = 0; i < _trenutnoFiltera; i++)
  467.             _filteri[i].Dealociraj();
  468.         delete[]_filteri; _filteri = nullptr;
  469.     }
  470.     void Ispis() {
  471.         cout << _model << crt;
  472.         for (size_t i = 0; i < _trenutnoDokumenata; i++)
  473.             _dokumenti[i].Ispis();
  474.     }
  475. };
  476.  
  477.  
  478. int main() {
  479.     DatumVrijeme prije3Dana; prije3Dana.Unos(3, 2, 2018, 10, 15);
  480.     DatumVrijeme danas1; danas1.Unos(6, 2, 2018, 10, 15);
  481.     DatumVrijeme danas2; danas2.Unos(6, 2, 2018, 10, 16);
  482.     DatumVrijeme za10Dana; za10Dana.Unos(16, 2, 2018, 10, 15);
  483.  
  484.     Dokument ispitPRII, ispitMAT, ispitUIT, ispitUITDrugiRok;
  485.     ispitPRII.Unos(DOC, "ispitPRII.doc", prije3Dana);
  486.     ispitMAT.Unos(DOC, "ispitMAT.doc", danas1);
  487.     ispitUIT.Unos(DOC, "ispitUIT.doc", danas2);
  488.     ispitUITDrugiRok.Unos(PDF, "ispitUITDrugiRok.pdf", za10Dana);
  489.  
  490.     /*BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM DODAVANJA SADRZAJA. ZA POTREBE ISPITA PRETPOSTAVLJAMO DA NA JEDNU
  491.     STRANICU MOZE STATI BROJ_ZNAKOVA_PO_STRANICI ZNAKOVA UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA*/
  492.     ispitPRII.DodajSadrzaj("Programiranje ili racunarsko programiranje (engl. programming) jeste vjestina pomocu koje ");
  493.     ispitPRII.DodajSadrzaj("korisnik stvara i izvrsava algoritme koristeci odredjene programske jezike da bi ... ");
  494.     cout << "Broj stranica -> " << ispitPRII._brojStranica << endl;
  495.  
  496.     ispitPRII.Ispis();//ISPISUJE SVE PODATKE O DOKUMENTU
  497.  
  498.     ispitMAT.DodajSadrzaj("Matematika se razvila iz potrebe da se obavljaju proracuni u trgovini, vrse mjerenja zemljista i predvidjaju ");
  499.     ispitMAT.DodajSadrzaj("astronomski dogadjaji, i ove tri primjene se mogu dovesti u vezu sa grubom podjelom matematike ");
  500.  
  501.     Printer hp3200; hp3200.Unos("HP 3200");
  502.     /*PRINTER NECE DOZVOLITI PRINTANJE DOKUMENATA U CIJEM SADRZAJU SE NALAZI NEKA OD ZABRANJENIH RIJECI DEFINISANIH FILTERIMA*/
  503.     if (hp3200.DodajFilter("RE", NIZAK)) //VISOK :)
  504.         cout << "Filter dodan!" << endl;
  505.     if (hp3200.DodajFilter("RAT", VISOK))
  506.         cout << "Filter dodan!" << endl;
  507.     if (hp3200.DodajFilter("UBITI", VISOK))
  508.         cout << "Filter dodan!" << endl;
  509.     if (hp3200.DodajFilter("MRZITI", SREDNJI))
  510.         cout << "Filter dodan!" << endl;
  511.     if (!hp3200.DodajFilter("RE", SREDNJI))/* ONEMOGUCITI PONAVLJANJE FILTERA, BEZ OBZIRA STO SU RAZLICITOG PRIORITETA*/
  512.         cout << "Filter nije dodan!" << endl;
  513.  
  514.     /*
  515.     DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA:
  516.     1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA, A EKSTENZIJA MOZE BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
  517.     2. SADRZAJ DOKUMENTA MOZE POSJEDOVATI RIJECI DEFINISANE FILTERIMA, ALI PREMA SLJEDECIM PRAVILIMA:
  518.     - NITI JEDNU RIJEC OZNACENU FILTEROM PRIORITETA VISOK
  519.     - NAJVISE 2 RIJECI OZNACENE FILTEROM PRIORITETA SREDNJI
  520.     - NAJVISE 3 RIJECI OZNACENE FILTEROM PRIORITETA NIZAK
  521.     UKOLIKO NEKI OD NAVEDENIH USLOVA NIJE ZADOVOLJEN FUNKCIJA PRINTAJ DOKUMENT TREBA SACUVATI U NIZ _dokumenti, ALI TAJ DOKUMENT NE TREBA PRINTATI I FUNKCIJA VRACA FALSE.
  522.     UKOLIKO DOKUMENT ISPUNJAVA SVE USLOVE ZA PRINTANJE POTREBNO JE NA KONZOLU ISPISATI SADRZAJ DOKUMENTA KOJI SE PRINTA, A SA CRT LINIJOM ODVAJATI STRANICE DOKUMENTA
  523.     */
  524.     if (hp3200.Printaj(ispitPRII))
  525.         cout << "Printam -> " << ispitPRII._naziv << endl;
  526.     if (hp3200.Printaj(ispitMAT))
  527.         cout << "Printam -> " << ispitMAT._naziv << endl;
  528.     if (hp3200.Printaj(ispitUIT))
  529.         cout << "Printam -> " << ispitUIT._naziv << endl;
  530.     if (hp3200.Printaj(ispitUITDrugiRok))
  531.         cout << "Printam -> " << ispitUITDrugiRok._naziv << endl;
  532.  
  533.     //PROSJECAN BROJ STRANICA = UKUPAN BROJ STRANICA / BROJ PRINTANIH DOKUMENATA
  534.     //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ ISPRINTANIH STRANICA (KOJE SU ZADOVOLJILE POSTAVLJENE FILTERE) U PERIODU OD (npr.prije3Dana) - DO (npr.danas2), UKLJUCUJUCI I TAJ PERIOD
  535.     cout << "Prosjecan broj printanih stranica je -> " << hp3200.GetProsjecanBrojStranicaUPeriodu_Od_Do(/**/) << crt;
  536.     //VRACA SADRZAJ FILTERA KOJI SE NAJCESCE KORISTIO U DOKUMENTIMA
  537.     Filter * f = hp3200.GetNakoristenijiFilter();
  538.     if (f != nullptr && f->_sadrzaj != nullptr)
  539.         cout << "Najcesce koristeni sadrzaj filtera je -> " << f->_sadrzaj << crt;
  540.     //PORED VRIJEDNOSTI SVIH OSTALIH ATRIBUTA, ISPISUJE SAMO ONE DOKUMENTE KOJI ZADOVOLJAVAJU SVA PRETHODNO DEFINISANA PRAVILA
  541.     hp3200.Ispis();
  542.  
  543.     /*NAPISATI LAMBDA FUNKCIJU ZamijeniIPrintaj KOJA U SADRZAJU DOKUMENTA MIJENJA PRVI POSLATI PARAMETAR SA VRIJEDNOSCU DRUGOG PARAMETRA, TE VRACA BROJ ZAMIJENJENIH ZNAKOVA*/
  544.     auto ZamijeniIPrintaj = /**/;
  545.     //RAZMAK MIJENJA ZNAKOM CRTICA U SADRZAJU DOKUMENATA KOJI SU PRINTANI danas1
  546.     int zamijenjeno = ZamijeniIPrintaj(' ', '-', danas1);
  547.     cout << "Zamijenjeno -> " << zamijenjeno << " znakova" << endl;
  548.     hp3200.Ispis();
  549.  
  550.     prije3Dana.Dealociraj(); danas1.Dealociraj(); danas2.Dealociraj(); za10Dana.Dealociraj();
  551.     ispitMAT.Dealociraj(); ispitPRII.Dealociraj(); ispitUIT.Dealociraj(); ispitUITDrugiRok.Dealociraj();
  552.  
  553.     hp3200.Dealociraj();
  554.  
  555.     return 0;
  556. }
  557.  
  558.  
  559. //modifikacije: https://pastebin.com/6QVyCCGw
  560. /*
  561. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA, U SUPROTNOM SE RAD NECE BODOVATI
  562. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  563. 3. KREIRAJTE .DOC FAJL SA VASIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJESENJA VASIH ZADATAKA. NE PREDAVATI .CPP FAJLOVE
  564. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORISTENJE HELP-A
  565. 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI CETE KOPIRATI VASA RJESENJA)
  566. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URADJENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  567. */
  568. #include<iostream>
  569.  
  570. using namespace std;
  571.  
  572. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  573. #pragma warning(disable:4996)
  574.  
  575. const char *crt = "\n-------------------------------------------\n";
  576.  
  577. enum vrstaDokumenta { PDF, DOC, TXT, HTML };
  578. const char * vrstaDokumentaChar[] = { "PDF", "DOC", "TXT", "HTML" };
  579.  
  580. enum vrstaAktivnosti { KREIRANJE, DODAVANJE, ZAMJENA, PRINTANJE };
  581. const char * vrstaAktivnostiChar[] = { "KREIRANJE", "DODAVANJE", "ZAMJENA", "PRINTANJE" };
  582.  
  583. const int BROJ_ZNAKOVA_PO_STRANICI = 30;
  584.  
  585. struct DatumVrijeme {
  586.     int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
  587.     void Unos(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 1, int minuti = 1) {
  588.         _dan = new int(dan);
  589.         _mjesec = new int(mjesec);
  590.         _godina = new int(godina);
  591.         _sati = new int(sati);
  592.         _minuti = new int(minuti);
  593.     }
  594.     void Dealociraj() {
  595.         delete _dan; _dan = nullptr;
  596.         delete _mjesec; _mjesec = nullptr;
  597.         delete _godina; _godina = nullptr;
  598.         delete _sati; _sati = nullptr;
  599.         delete _minuti; _minuti = nullptr;
  600.     }
  601.     void Ispis() {
  602.         cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
  603.     }
  604. };
  605.  
  606. char * AlocirajNizKaraktera(const char * sadrzaj) {
  607.     int vel = strlen(sadrzaj) + 1;
  608.     char * temp = new char[vel];
  609.     strcpy_s(temp, vel, sadrzaj);
  610.     return temp;
  611. }
  612.  
  613. struct Modifikacija {
  614.     char * _korisnicnkoIme;
  615.     vrstaAktivnosti _aktivnost;
  616.     DatumVrijeme _vrijemeModifikacije;
  617.     void Unos(const char * sadrzaj, vrstaAktivnosti aktivnost, DatumVrijeme vm) {
  618.         _korisnicnkoIme = AlocirajNizKaraktera(sadrzaj);
  619.         _aktivnost = aktivnost;
  620.         _vrijemeModifikacije.Unos(*vm._dan, *vm._mjesec, *vm._godina, *vm._dan, *vm._minuti);
  621.     }
  622.     void Dealociraj() {
  623.         delete[] _korisnicnkoIme; _korisnicnkoIme = nullptr;
  624.         _vrijemeModifikacije.Dealociraj();
  625.     }
  626.     void Ispis() { cout << _korisnicnkoIme << " (" << vrstaAktivnostiChar[_aktivnost] << ")"; _vrijemeModifikacije.Ispis(); }
  627. };
  628.  
  629. struct Dokument {
  630.     unique_ptr<vrstaDokumenta> _vrsta;
  631.     char * _naziv;
  632.     char * _sadrzaj;
  633.     Modifikacija * _modifikacije;
  634.     int _brojModifikacija;
  635.     //vrijeme kreiranja dokumenta je ujedno i vrijeme posljednje modifikacije
  636.     void Unos(vrstaDokumenta vrsta, const char * naziv, DatumVrijeme kreiran) {
  637.         _naziv = AlocirajNizKaraktera(naziv);
  638.         _vrsta = make_unique<vrstaDokumenta>(vrsta);
  639.         _brojModifikacija = 0;
  640.         _modifikacije = new Modifikacija[_brojModifikacija + 1];
  641.         _modifikacije->Unos("", KREIRANJE, kreiran);
  642.         _brojModifikacija++;
  643.         _sadrzaj = nullptr;
  644.     }
  645.     void Dealociraj() {
  646.         delete[] _naziv; _naziv = nullptr;
  647.         delete[] _sadrzaj; _sadrzaj = nullptr;
  648.         for (size_t i = 0; i < _brojModifikacija; i++)
  649.             _modifikacije[i].Dealociraj();
  650.         delete[] _modifikacije;
  651.         _modifikacije = nullptr;
  652.     }
  653.     void Ispis() {
  654.         cout << crt << _naziv << " " << vrstaDokumentaChar[*_vrsta] << " kreiran ";
  655.         cout << crt << _sadrzaj << crt;
  656.         for (size_t i = 0; i < _brojModifikacija; i++)
  657.             _modifikacije[i].Ispis();
  658.     }
  659. };
  660. struct Printer {
  661.     char * _model;
  662.     Dokument * _dokumenti;
  663.     int _trenutnoDokumenata;
  664.  
  665.     void Unos(const char * model) {
  666.         _model = AlocirajNizKaraktera(model);
  667.         _dokumenti = nullptr;
  668.         _trenutnoDokumenata = 0;
  669.     }
  670.     void Dealociraj() {
  671.         delete[] _model; _model = nullptr;
  672.         for (size_t i = 0; i < _trenutnoDokumenata; i++)
  673.             _dokumenti[i].Dealociraj();
  674.         delete[]_dokumenti; _dokumenti = nullptr;
  675.     }
  676.     void Ispis() {
  677.         cout << _model << crt;
  678.         for (size_t i = 0; i < _trenutnoDokumenata; i++)
  679.             _dokumenti[i].Ispis();
  680.     }
  681. };
  682.  
  683.  
  684. int main() {
  685.     DatumVrijeme prije3Dana; prije3Dana.Unos(3, 2, 2018, 10, 15);
  686.     DatumVrijeme danas1; danas1.Unos(6, 2, 2018, 10, 15);//U KONTEKSTU MODIFIKACIJE, UNOS PODRAZUMIJEVA KREIRANJE
  687.     DatumVrijeme danas2; danas2.Unos(6, 2, 2018, 10, 16);
  688.     DatumVrijeme za10Dana; za10Dana.Unos(16, 2, 2018, 10, 15);
  689.  
  690.     Dokument ispitPRII, ispitMAT, ispitUIT, ispitUITDrugiRok;
  691.     ispitPRII.Unos(DOC, "ispitPRII.doc", prije3Dana);
  692.     ispitMAT.Unos(DOC, "ispitMAT.doc", danas1);
  693.     ispitUIT.Unos(DOC, "ispitUIT.doc", danas2);
  694.     ispitUITDrugiRok.Unos(PDF, "ispitUITDrugiRok.pdf", za10Dana);
  695.  
  696.     /*DODAJE SADRZAJ U FAJL, ZADRZAVAJUCI POSTOJECI. SVAKO DODAVANJE EVIDENTIRATI KAO MODIFIKACIJU. PARAMETRI:SADRZAJ, KORISNICKO IME, VRIJEME MODIFIKACIJE*/
  697.     ispitPRII.DodajSadrzaj("Programiranje ili racunarsko programiranje (engl. programming) jeste vjestina pomocu koje ", "denis.music", danas1);
  698.     ispitPRII.DodajSadrzaj("korisnik stvara i izvrsava algoritme koristeci odredjene programske jezike da bi ... ", "indira.hamulic", danas2);
  699.  
  700.     ispitPRII.Ispis();//ISPISUJE SVE PODATKE O DOKUMENTU
  701.  
  702.     ispitMAT.DodajSadrzaj("Matematika se razvila iz potrebe da se obavljaju proracuni u trgovini, vrse mjerenja zemljista i predvidjaju ", "jasmin.azemovic", danas1);
  703.     ispitMAT.DodajSadrzaj("astronomski dogadjaji, i ove tri primjene se mogu dovesti u vezu sa grubom podjelom matematike ", "adel.handzic", danas2);
  704.  
  705.     Printer hp3200; hp3200.Unos("HP 3200");
  706.     /*
  707.     DA BI PRINTER ISPRINTAO NEKI DOKUMENT MORAJU BITI ZADOVOLJENA SLJEDECA PRAVILA:
  708.     1. NAZIV DOKUMENTA MOZE SADRZAVATI SAMO SLOVA, A EKSTENZIJA MORA BITI IDENTICNA ONOJ DEFINISANOJ VRIJEDNOSCU ATRIBUTA vrstaDokumenta
  709.     2. NAD DOKUMENTOM MORAJU BITI IZVRSENE SLJEDECE MODIFIKACIJE:
  710.     - 1 KREIRANJE
  711.     - 1 ILI VIŠE DODAVANJA
  712.     - 1 ILI VIŠE ZAMJENA SADRZAJA
  713.     SAMO DOKUMENTI KOJI ZADOVOLJE USLOVE PRINTANJA TREBAJU BITI SACUVANI U NIZ _dokumenti. NA KONZOLU ISPISATI SADRZAJ DOKUMENTA KOJI SE PRINTA, A SA CRT LINIJOM ODVAJATI STRANICE DOKUMENTA.
  714.     BROJ STRANICA DOKUMENTA SE AUTOMATSKI ODREDJUJE PRILIKOM  PRINTANJA, A ZAVISI OD VRIJEDNOSTI BROJ_ZNAKOVA_PO_STRANICI UKLJUCUJUCI RAZMAKE I DRUGE VRSTE ZNAKOVA.
  715.     ONEMOGUCITI PRINTANJE DOKUMENTA OSOBAMA KOJE NISU NAPRAVILE NAJMANJE JEDNU MODIFIKACIJU NA TOM DOKUMENTU. NAKON PRINTANJA SADRZAJA DOKUMENTA, POTREBNO JE DOKUMENTU DODATI I MODIFIKACIJU "PRINTANJE".
  716.     */
  717.     if (hp3200.Printaj(ispitPRII, "denis.music", za10Dana))
  718.         cout << "Printam -> " << ispitPRII._naziv << endl;
  719.     if (hp3200.Printaj(ispitMAT, "denis.music", za10Dana))
  720.         cout << "Printam -> " << ispitMAT._naziv << endl;
  721.     if (hp3200.Printaj(ispitUIT, "iris.memic", za10Dana))
  722.         cout << "Printam -> " << ispitUIT._naziv << endl;
  723.     if (hp3200.Printaj(ispitUITDrugiRok, "goran.skondric", za10Dana))
  724.         cout << "Printam -> " << ispitUITDrugiRok._naziv << endl;
  725.  
  726.     //REKURZIVNA FUNKCIJA VRACA PROSJECAN BROJ MODIFIKACIJA ODREDJENE VRSTE KOJE SU VRSENE NAD PRINTANIM DOKUMENTIMA
  727.     cout << "Prosjecan broj modifikacija odrejdne vrste printanih dokumenata je -> " << hp3200.GetProsjecanBrojModifikacijaByVrsta(DODAVANJE, /**/) << crt;
  728.  
  729.     Modifikacija * pok = nullptr;
  730.     int brojac = 0;
  731.     //FUNKCIJA GetModifikacijeByDatum VRACA SVE MODIFIKACIJE KOJE SU NAPRAVLJENE NA DOKUMENTIMA U PERIODU OD - DO (PROSLIJEDJENOM KAO PARAMETAR)
  732.     tie(pok, brojac) = hp3200.GetModifikacijeByDatum(danas1, za10Dana);
  733.     if (brojac > 0 && pok != nullptr)
  734.         for (size_t i = 0; i < brojac; i++)
  735.             pok[i].Ispis();
  736.  
  737.     //ISPISUJE INFORMACIJE O SVIM DOKUMENTIMA KOJI SU ISPRINTANI
  738.     hp3200.Ispis();
  739.  
  740.     /*NAPISATI LAMBDA FUNKCIJU ZamijeniIPrintaj KOJA U SADRZAJU SVIH PRINTANIH DOKUMENATA MIJENJA PRVI POSLATI PARAMETAR SA VRIJEDNOSCU DRUGOG PARAMETRA, TE VRACA BROJ ZAMIJENJENIH ZNAKOVA*/
  741.     //RAZMAK MIJENJA ZNAKOM CRTICA U SADRZAJU DOKUMENATA KOJI SU PRINTANI danas1. ZAMJENU REGISTROVATI KAO MODIFIKACIJU
  742.     int zamijenjeno = Zamijeni(' ', '-', "denis.music", danas1);
  743.     cout << "Zamijenjeno -> " << zamijenjeno << " znakova" << endl;
  744.     hp3200.Ispis();
  745.  
  746.     prije3Dana.Dealociraj(); danas1.Dealociraj(); danas2.Dealociraj(); za10Dana.Dealociraj();
  747.     ispitMAT.Dealociraj(); ispitPRII.Dealociraj(); ispitUIT.Dealociraj(); ispitUITDrugiRok.Dealociraj();
  748.  
  749.     hp3200.Dealociraj();
  750.  
  751.     return 0;
  752. }
  753.  
  754.  
  755. //***********************************************************septembar I rok
  756. //zapisnik stavka: https://pastebin.com/8JGUcAJq
  757. Grupa A
  758. 1. ZADATAK
  759.  
  760. Izvršiti definiciju funkcija na naèin koji odgovara opisu (komentarima) datom neposredno uz pozive ili nazive funkcija. Možete dati komentar na bilo koju liniju code-a koju smatrate da bi trebalo unaprijediti ili da æe eventualno uzrokovati grešku prilikom kompajliranja. Takoðer, možete dodati dodatne funkcije koje æe vam olakšati implementaciju programa.
  761.  
  762. #include <iostream>
  763. using namespace std;
  764.  
  765. /*
  766. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NEÆE BODOVATI
  767. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  768. 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
  769. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  770. 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI ÆETE KOPIRATI VAŠA RJEŠENJA)
  771. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  772. */
  773. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  774. #pragma warning(disable:4996)
  775.  
  776. /*
  777. u nastavku je prikazan primjer ispitnog zapisnika (izvještaj o održanom ispitu) sa detaljima/stavkama
  778.  
  779. -------------------------------------------
  780. Datum ispita: 07.09.2018
  781. Predmet: Programiranje II
  782. -------------------------------------------
  783. IZVJESTAJ O ODRZANOM ISPITU
  784. -------------------------------------------
  785. Br indeksa  Ime prezime   Komisijsko***  Ocjena
  786. 16001        A. Joldic        DA        5
  787. 15251        D. Music        NE        7 Ponisteno
  788. 16014        E. Babovic        DA        8
  789. -------------------------------------------
  790. UKUPNO POLOZILO:    2
  791. PROSJECNA OCJENA:    6.67
  792. -------------------------------------------
  793. *** komisijski ispit: ako student pristupa èetvrti put i dalje (raèunajuæi i poništene rezultate)
  794. */
  795.  
  796. const char * crt = "\n-------------------------------------------\n";
  797. const int MAX = 100;
  798.  
  799. char * AlocirajNizKaraktera(const char * sadrzaj) {
  800.     if (sadrzaj == nullptr)
  801.         return nullptr;
  802.     int vel = strlen(sadrzaj) + 1;
  803.     char * temp = new char[vel];
  804.     strcpy_s(temp, vel, sadrzaj);
  805.     return temp;
  806. }
  807. struct Datum {
  808.     int _dan, _mjesec, _godina;
  809.     void Unos(int d, int m, int g) {
  810.         _dan = d;
  811.         _mjesec = m;
  812.         _godina = g;
  813.     }
  814.     void Ispis() {
  815.         cout << _dan << "." << _mjesec << "." << _godina << " ";
  816.     }
  817. };
  818. struct Student {
  819.     char * _imePrezime;
  820.     int _brojIndeksa;
  821.     int _polozioECTS;
  822.  
  823.     void Unos(const char* ime, float indeks) {
  824.         _imePrezime = AlocirajNizKaraktera(ime);
  825.         _brojIndeksa = indeks;
  826.         _polozioECTS = 0;
  827.     }
  828.     void Dealociraj() {
  829.         delete[] _imePrezime; _imePrezime = nullptr;
  830.     }
  831.     void DodajECTS(float ects) { _polozioECTS += ects; }
  832.     void UmanjiECTS(float ects) { _polozioECTS -= ects; }
  833.     void Ispis() {
  834.         cout << _imePrezime << ", Indeks: " << _brojIndeksa << ", ECTS: " << _polozioECTS << " " << endl;
  835.     }
  836. };
  837.  
  838. struct ZapisnikStavka {
  839.     int _ocjena;
  840.     //ZapisnikStavka æe pokazivati na objekat tipa student koji se nalazi u instanci tipa Fakultet, pa nije potrebno vršiti nove alokacije
  841.     Student* _student;
  842.     bool _ponisteno;
  843.     bool _komisijskoPolaganje;
  844.  
  845.     void Unos(Student* student, int ocjena, bool komisijskoPolaganje) {
  846.         _ocjena = ocjena;
  847.         _student = student;
  848.         _komisijskoPolaganje = komisijskoPolaganje;
  849.         _ponisteno = false;
  850.     }
  851.     void Ispis() {
  852.         cout << _student->_imePrezime << "\t" << _ocjena << "\t" << _student->_brojIndeksa << "\t";
  853.         if (_ponisteno)
  854.             cout << " Ponisteno";
  855.         cout << endl;
  856.     }
  857. };
  858. struct IspitniZapisnik {
  859.     Datum _datum;
  860.     ZapisnikStavka * _stavke;//svaki put se dodaje po jedna stavka
  861.     int _brojStavki;
  862.     int _ects;
  863.     char * _predmet;
  864.     void Unos(Datum & datum, char* predmet, int ects) {
  865.         _datum = datum;
  866.         _brojStavki = 0;
  867.         _stavke = nullptr;
  868.         _ects = ects;
  869.         _predmet = AlocirajNizKaraktera(predmet);
  870.     }
  871.     void Dealociraj() {
  872.         delete[] _predmet; _predmet = nullptr;
  873.         delete[] _stavke; _stavke = nullptr;
  874.     }
  875.     /*Prosjecnu ocjenu izraèunati koristeæi lambda funkciju. u prosjek raèunati i poništene rezultate (stavke)*/
  876.     float GetProsjecnaOcjena() { return 0; }
  877. };
  878.  
  879. /*unutar objekta tipa Fakultet ce se cuvati podaci o svim studentima i ispitnim zapisnicima, a dodaju se pomocu globalnih funkcija*/
  880. struct Fakultet {
  881.     //umjesto brojaca koristiti default.ne vrijednosti
  882.     Student* _studenti[MAX] = { nullptr };
  883.     IspitniZapisnik* _zapisnici[MAX] = { nullptr };
  884.  
  885.     void Dealociraj() {
  886.         for (size_t i = 0; i < MAX; i++) {          
  887.             _studenti[i]->Dealociraj();
  888.             _zapisnici[i]->Dealociraj();
  889.             delete _studenti[i]; _studenti[i] = NULL;
  890.             delete _zapisnici[i]; _zapisnici[i] = NULL;
  891.         }
  892.     }
  893. };
  894. int main() {
  895.     Fakultet fakultet;
  896.  
  897.     /*dodaje podatke o novom studentu u fakultet */
  898.     //fakultet, imePrezime, broj indeksa
  899.     dodaj_student(fakultet, "A. Joldic", 16001);
  900.     dodaj_student(fakultet, "D. Music", 15251);
  901.     dodaj_student(fakultet, "E. Babovic    ", 16014);
  902.     dodaj_student(fakultet, "E. Junuz", 16015);
  903.     dodaj_student(fakultet, "J. Azemovic", 16014);//ne dodaje studenta jer je broj indeksa zauzet
  904.     /*kraira novi zapisnik*/
  905.      //fakultet, datum, predmet, ects krediti
  906.     kreiraj_zapisnik(fakultet, 6, 9, 2018, "Programiranje II", 7);
  907.  
  908.     /*dodaje stavku na posljednji kreiran zapisnik, a ects studenta (_polozioECTS) uveæa ako je student položio ispit. */
  909.  
  910.     if (dodaj_stavku_na_zapisnik(fakultet, 16001, 5))
  911.         cout << "Stavka (rezultat) uspjesno dodata!" << endl;
  912.  
  913.     /*ako je student vec dodat u zapisnik, onda se vrsi samo modifikacija njegove ocjene*/
  914.     if (!dodaj_stavku_na_zapisnik(fakultet, 16001, 6))
  915.         cout << "Student vec dodat na zapisnik. Ocjena je ispravljena!" << endl;
  916.  
  917.     dodaj_stavku_na_zapisnik(fakultet, 15251, 5);
  918.     dodaj_stavku_na_zapisnik(fakultet, 16015, 6);
  919.     dodaj_stavku_na_zapisnik(fakultet, 16014, 8);
  920.  
  921.     kreiraj_zapisnik(fakultet, 7, 9, 2018, "Raèunarske mreze", 5);
  922.     //naredne stavke se dodaju na novi zapisnik
  923.     dodaj_stavku_na_zapisnik(fakultet, 16015, 5);
  924.     dodaj_stavku_na_zapisnik(fakultet, 16014, 10);
  925.  
  926.  
  927.     /*u posljednjem zapisniku stavku za studenta 16001 ponistiti, a studentu umanjiti ects bodove.
  928.     funkcija vraca false u slucaju da se student ne nalazi na posljednjem zapisniku*/
  929.  
  930.     if (ponisti_stavku_rezultat(fakultet, 16001))
  931.         cout << "Stavka (rezultat) uspjesno ponisten!" << endl;
  932.  
  933.     if (!ponisti_stavku_rezultat(fakultet, 19001))
  934.         cout << "Student nije pronadjen!" << endl;
  935.  
  936.     /* funkcija printaj prikazuje posljednji ispitni zapisnik u formatu prikazanom na pocetku zadatka.
  937.     zapisnik se nece prikazati ukoliko ne posjeduje niti jednu stavku ili su sve stavke poništene. prilikom kreiranja zapisnika
  938.     iskoristiti funkciju GetProsjecnaOcjena i njenu lambda implementaciju*/
  939.     if (fakultet.printaj())
  940.         cout << "Ispitni zapisnik uspjesno prikazan!" << endl;
  941.     fakultet.Dealociraj();
  942.  
  943.     system("pause>0");
  944.     return 0;
  945. }
  946. //add odgovor: https://pastebin.com/iMmTWG5P
  947. Grupa B
  948.  
  949. 1. ZADATAK  
  950.  
  951. Izvršiti definiciju funkcija na naèin koji odgovara opisu (komentarima) datom neposredno uz pozive ili nazive funkcija. Možete dati komentar na bilo koju liniju code-a koju smatrate da bi trebalo unaprijediti ili da æe eventualno uzrokovati grešku prilikom kompajliranja. Takoðer, možete dodati dodatne funkcije koje æe vam olakšati implementaciju programa.
  952.  
  953. #include <iostream>
  954. using namespace std;
  955.  
  956. /*
  957. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NEÆE BODOVATI
  958. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  959. 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
  960. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  961. 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI ÆETE KOPIRATI VAŠA RJEŠENJA)
  962. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  963. */
  964. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  965. #pragma warning(disable:4996)
  966.  
  967. const char * crt = "\n-------------------------------\n";
  968. const int MAX_ODGOVORA = 10;
  969.  
  970. char * AlocirajNizKaraktera(const char * sadrzaj) {
  971.     if (sadrzaj == nullptr)
  972.         return nullptr;
  973.     int vel = strlen(sadrzaj) + 1;
  974.     char * temp = new char[vel];
  975.     strcpy_s(temp, vel, sadrzaj);
  976.     return temp;
  977. }
  978. struct Kandidat {
  979.     char * _imePrezime;
  980.     char _JMBG[14];
  981.     void Unos(const char * ip, const char * jmbg) {
  982.         _imePrezime = AlocirajNizKaraktera(ip);
  983.         strcpy_s(_JMBG, jmbg);
  984.     }
  985.     void Dealociraj() {
  986.         delete[] _imePrezime; _imePrezime = nullptr;
  987.     }
  988.     void Ispis() {
  989.         cout << _imePrezime << " " << _JMBG << " ";
  990.     }
  991. };
  992. struct Pitanje {
  993.     char * _tekstPitanja;
  994.     char * _odgovori[MAX_ODGOVORA];//maksimalno 10 odgovora
  995.                                    /* svako pitanje moze imati jedan ili vise tacnih odgovora, a njihove lokacije se pohranjuju u niz _tacni*/
  996.     int _tacni[MAX_ODGOVORA];
  997.     /*ako pitanje ima vise tacnih odgovora, onda se broj osvojenih bodova (tokom izrade testa) odredjuje na osnovu broj tacnih odgovora (npr. ako pitanje nosi 5 boda i ima 2 tacna odgovora, a student oznaci 1 tacan odgovor onda ce osvojeni broj bodova na tom pitanju iznositi 2.5. drugim rijecima, vrijednost ovog atributa je bitna zbog  odredjivanja uspjeha kandidata prilikom izrade ispita)*/
  998.     int _bodova;
  999.  
  1000.     void Unos(const char * tekstPitanja, int bodova) {
  1001.         _tekstPitanja = AlocirajNizKaraktera(tekstPitanja);
  1002.         /*umjesto dodavanja brojaca iskoristite defaultne vrijednosti clanova niza kako biste
  1003.         manipulisali njihovim vrijednostima (dodavanje, uklanjanje)*/
  1004.         for (size_t i = 0; i < MAX_ODGOVORA; i++) {
  1005.             _odgovori[i] = nullptr;
  1006.             _tacni[i] = -1;
  1007.         }
  1008.         _bodova = bodova;
  1009.     }
  1010.     void Dealociraj() {
  1011.         delete[] _tekstPitanja; _tekstPitanja = nullptr;
  1012.         for (size_t i = 0; i < MAX_ODGOVORA; i++) {
  1013.             if (_odgovori[i] == nullptr)
  1014.                 break;
  1015.             delete[] _odgovori[i]; _odgovori[i] = nullptr;
  1016.         }
  1017.     }
  1018. };
  1019. struct PrijemniIspit {
  1020.     //kandidati prijavljeni za prijemni ispit
  1021.     Kandidat * _prijavljeniKandidati;
  1022.     /*nakon sto urade ispit tj. nakon sto odgovore na pitanja za svakog od kandidata se cuva ostvareni uspjeh u okviru niza _uspjehKandidata. broj elemenata u nizu _uspjehKandidata bi trebao biti identican broju elemenata u nizu _prijavljeniKandidati*/
  1023.     float * _uspjehKandidata;
  1024.     int _trenutnoKandidata;
  1025.     //prag prolaznosti na prijemnom ispitu npr. 60.5 procenata
  1026.     float _pragProlaznosti;
  1027.     float _kazneniBodovi;
  1028.     /*vrijednost kazenog boda (npr. 0.30) se mnozi sa svakim netacnim odgovorom na pitanje i oduzima od osvojenih bodova za to pitanje
  1029.     npr. ako pitanje nosi 5 bodova i ima 2 tacna odgovora, a student odabere 1 tacan i 2 netacna odgovora, broj osvojenih bodova ce biti 1.9
  1030.     (1 tacan = 2.5; 2 netacna * 0.30 kaznenih = 0.6; 2.5 - 0.6 = 1.9)*/
  1031.  
  1032.     void Unos(float pragProlaznosti, float kazneniBodovi) {
  1033.         _pragProlaznosti = pragProlaznosti;
  1034.         _kazneniBodovi = kazneniBodovi;
  1035.         _prijavljeniKandidati = nullptr;
  1036.         _uspjehKandidata = nullptr;
  1037.         _trenutnoKandidata = 0;
  1038.     }
  1039.     void Dealociraj() {
  1040.         for (size_t i = 0; i < _trenutnoKandidata; i++)
  1041.             _prijavljeniKandidati[i].Dealociraj();
  1042.         delete[] _prijavljeniKandidati; _prijavljeniKandidati = nullptr;
  1043.         delete[] _uspjehKandidata; _uspjehKandidata = nullptr;
  1044.     }
  1045. };
  1046. int main() {
  1047.  
  1048.     Kandidat jasmin, adel;
  1049.     jasmin.Unos("Jasmin Azemovic", "1111111111111");
  1050.     adel.Unos("Adel Handzic", "2222222222222");
  1051.  
  1052.     const int brojPitanja = 3;
  1053.     Pitanje * pitanja[brojPitanja];
  1054.     for (size_t i = 0; i < brojPitanja; i++)
  1055.         pitanja[i] = new Pitanje;
  1056.  
  1057.     //parametri: tekstPitanja, brojBodova
  1058.     pitanja[0]->Unos("U kojem gradu se nalazi FIT?", 4);
  1059.  
  1060.     /*dodaje novi odgovor u listu ponudjenih odgovora. onemoguciti ponavljanje odgovora, te voditi racuna da vise odgovora moze biti tacno*/
  1061.     //parametri: tekstOdgovora, daLiJeTacanTajOdgovor
  1062.     if (pitanja[0]->AddOdgovor("Mostar", true))
  1063.         cout << "Odgovor uspjesno dodan!" << crt;
  1064.     if (pitanja[0]->AddOdgovor("Sarajevo", false))
  1065.         cout << "Odgovor uspjesno dodan!" << crt;
  1066.     if (!pitanja[0]->AddOdgovor("Sarajevo", false))//Sarajevo je vec dodano
  1067.         cout << "Odgovor nije uspjesno dodan!" << crt;
  1068.     if (pitanja[0]->AddOdgovor("Tuzla", false))
  1069.         cout << "Odgovor uspjesno dodan!" << crt;
  1070.     if (pitanja[0]->AddOdgovor("Fojnica", false))
  1071.         cout << "Odgovor uspjesno dodan!" << crt;
  1072.     if (pitanja[0]->AddOdgovor("Zenica", false))
  1073.         cout << "Odgovor uspjesno dodan!" << crt;
  1074.     /*na osnovu primljene lokacije uklanja podatke o ponudjenom odgovoru. prilikom uklanjanja ocuvati redoslijed dodavanja odgovora. takodjer, potrebno je onemoguciti uklanjanje svih tacnih odgovora na nacin da se prije njegovog uklanjanja mora unijeti novi tacan odgovor */
  1075.     if (pitanja[0]->RemoveOdgovor(4))//uklanja odgovor Fojnica
  1076.         cout << "Odgovor uspjesno uklonjen!" << crt;
  1077.  
  1078.     /*
  1079.     -------------------------------
  1080.     1. U kojem gradu se nalazi FIT?
  1081.     -------------------------------
  1082.     1. Mostar
  1083.     2. Sarajevo
  1084.     3. Tuzla
  1085.     4. Zenica
  1086.     -------------------------------
  1087.     */
  1088.     pitanja[0]->Ispis();//prethodno je prikazan ocekivani ispis pitanja
  1089.  
  1090.     pitanja[1]->Unos("Odaberite tacne odgovore.", 5);
  1091.  
  1092.     if (pitanja[1]->AddOdgovor("FIT se nalazi u Mostaru", true))
  1093.         cout << "Odgovor uspjesno dodan!" << crt;
  1094.     if (pitanja[1]->AddOdgovor("FIT je clanica UNMO-a", true))
  1095.         cout << "Odgovor uspjesno dodan!" << crt;
  1096.     if (pitanja[1]->AddOdgovor("U Mostaru je uvijek jako vruce", false))
  1097.         cout << "Odgovor uspjesno dodan!" << crt;
  1098.  
  1099.     pitanja[2]->Unos("Studij na FIT-u traje 4 godine?", 3);
  1100.     if (pitanja[2]->AddOdgovor("Ne", true))
  1101.         cout << "Odgovor uspjesno dodan!" << crt;
  1102.     if (pitanja[2]->AddOdgovor("Da", false))
  1103.         cout << "Odgovor uspjesno dodan!" << crt;
  1104.     /*....*/
  1105.  
  1106.  
  1107.     PrijemniIspit prijemni2018;
  1108.     //parametri: pragProlaznosti, kazneniBodovi
  1109.     prijemni2018.Unos(60, 0.30);
  1110.     /*dodaje novog kandidata u listu prijavljenih. onemoguciti dodavanje kandidata sa istim jmbg-om*/
  1111.     if (prijemni2018.DodajKandidata(jasmin))
  1112.         cout << "Kandidat uspjesno dodan" << crt;
  1113.     if (prijemni2018.DodajKandidata(adel))
  1114.         cout << "Kandidat uspjesno dodan" << crt;
  1115.  
  1116.     /*kandidatu sa JMBG 1111111111111 pokrece ispit na nacin da mu se prikazuju pitanja, od njega zahtijevaju odgovori, te izracunava ostvareni uspjeh (da li je polozio ili ne, te sa kojim procentom uspjesnosti). prilikom izracuvanja uspjesnosti voditi racuna o kaznenim bodovima. po okoncanju ispita, uspjeh kandidata se pohranjuje u niz _uspjehKandidata. za pokretanje ispita kandidat prethodno mora biti dodan u listu. po
  1117.     vlastitoj zelji implementirajte nacin oznacavanja veceg broja tacnih odgovoran na postavljeno pitanje (jedno pitanje moze imati vise tacnih odgovora)*/
  1118.     if (prijemni2018.PokreniIspit("1111111111111", pitanja, brojPitanja))
  1119.         cout << "Ispit uspjesno okoncan!" << crt;
  1120.     if (!prijemni2018.PokreniIspit("1111111111111", pitanja, brojPitanja))//kandidat jasmin je vec radio ispit
  1121.         cout << "Kandidat je vec polagao prijemni ispit!" << crt;
  1122.  
  1123.     if (prijemni2018.PokreniIspit("2222222222222", pitanja, brojPitanja))
  1124.         cout << "Ispit uspjesno okoncan!" << crt;
  1125.  
  1126.     Kandidat * najbolji = nullptr;
  1127.     float uspjeh = 0;
  1128.     /*getNajbolji student je lambda funkcija koja treba vratiti podatke o studentu koji je ostvario najbolji uspjeh na prijemnom ispitu*/
  1129.     tie(najbolji, uspjeh) = getNajboljiStudent();
  1130.     if (najbolji != nullptr)
  1131.         cout << "Najbolji uspjeh od " << uspjeh << " % ostvario je kandidat " << najbolji->_imePrezime << "." << endl;
  1132.  
  1133.  
  1134.     jasmin.Dealociraj();
  1135.     adel.Dealociraj();
  1136.     for (size_t i = 0; i < brojPitanja; i++) {
  1137.         pitanja[i]->Dealociraj();
  1138.         pitanja[i] = nullptr;
  1139.     }
  1140.  
  1141.     return 0;
  1142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement