Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.58 KB | None | 0 0
  1. *
  2. *Kreirajte .doc fajl sa vašim brojem indeksa ( npr. 1234.doc BEZ IMENA I PREZIMENA), te na kraju ispita u njega kopirajte rješenja vaših zadataka.
  3. **Tokom izrade ispita nije dozvoljeno korištenje help-a
  4. ***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)
  5. ****Bez obzira na to da li su ispitni zadaci urađeni, svi studenti koji su pristupili ispitu moraju predati svoj rad
  6. */
  7. /****************************************************************************
  8. 1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
  9. 2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR CE BITI OZNACENO KAO "RE"
  10. 3. SPASAVAJTE PROJEKAT KAKO BI SE SPRIJECILO GUBLJENJE URADJENOG ZADATKA
  11. 4. PROGRAMSKI CODE SE TAKODJER NALAZI U FAJLU CODE_.TXT
  12. ****************************************************************************/
  13. #include <iostream>
  14. using namespace std;
  15.  
  16. template<class T1, class T2>
  17. class Kolekcija {
  18. T1 * _elementi1;
  19. T2 * _elementi2;
  20. int _trenutnoElemenata;
  21. public:
  22. Kolekcija()
  23. :_elementi1(nullptr), _elementi2(nullptr), _trenutnoElemenata(0) {}
  24. Kolekcija(const Kolekcija & original)
  25. {
  26. _elementi1 = new T1[original._trenutnoElemenata];
  27. _elementi2 = new T2[original._trenutnoElemenata];
  28. for (int i = 0; i < original._trenutnoElemenata; ++i)
  29. AddElement(original._elementi1[i], original._elementi2[i]);
  30. }
  31. void AddElement(const T1& element1, const T2& element2) {
  32. T1 * temp1 = new T1[_trenutnoElemenata + 1];
  33. T2 * temp2 = new T2[_trenutnoElemenata + 1];
  34. for (size_t i = 0; i < _trenutnoElemenata; i++)
  35. {
  36. temp1[i] = _elementi1[i];
  37. temp2[i] = _elementi2[i];
  38. }
  39. temp1[_trenutnoElemenata] = element1;
  40. temp2[_trenutnoElemenata] = element2;
  41. delete[] _elementi1;
  42. delete[] _elementi2;
  43. _elementi1 = temp1;
  44. _elementi2 = temp2;
  45. _trenutnoElemenata++;
  46. }
  47. friend ostream& operator<<(ostream& out, const Kolekcija<T1, T2>& k) {
  48. for (int i = 0; i < k._trenutnoElemenata; i++)
  49. out << k._elementi1[i] << "\t" << k._elementi2[i] << endl;
  50. return out;
  51. }
  52. Kolekcija<T1, T2> & operator=(const Kolekcija<T1, T2> & right)
  53. {
  54. if(this != &right)
  55. {
  56. if (this->_elementi1 != nullptr) delete[] this->_elementi1;
  57. if (this->_elementi2 != nullptr) delete[] this->_elementi2;
  58. this->_elementi1 = new T1[_trenutnoElemenata];
  59. this->_elementi2 = new T2[_trenutnoElemenata];
  60. for (int i = 0; i < right._trenutnoElemenata; i++)
  61. this->AddElement(right._elementi1[i], right._elementi2[i]);
  62. }
  63. return *this;
  64. }
  65. void RemoveElement(int indeks)
  66. {
  67. indeks--;
  68. for (int i = indeks; i < _trenutnoElemenata - 1; ++i)
  69. {
  70. _elementi1[i] = _elementi1[i + 1];
  71. _elementi2[i] = _elementi2[i + 1];
  72. }
  73. _trenutnoElemenata--;
  74. cout << "Element uklonjen!\n";
  75. }
  76. int getTrenutno() const { return _trenutnoElemenata; }
  77. bool VecPostojiT1(const T1& element)
  78. {
  79. for (int i = 0; i < _trenutnoElemenata; ++i)
  80. if (_elementi1[i] == element) return true;
  81. return false;
  82. }
  83. void Sort_T2()
  84. {
  85. bool promjena = true;
  86. while(promjena)
  87. {
  88. promjena = false;
  89. for (int i = 0; i < _trenutnoElemenata - 1; i++)
  90. {
  91. if(_elementi2[i] > _elementi2[i + 1])
  92. {
  93. T2 _temp = _elementi2[i];
  94. _elementi2[i] = _elementi2[i + 1];
  95. _elementi2[i + 1] = _temp;
  96.  
  97. T1 _temp1 = _elementi1[i];
  98. _elementi1[i] = _elementi1[i + 1];
  99. _elementi1[i + 1] = _temp1;
  100.  
  101. promjena = true;
  102. }
  103. }
  104. }
  105. }
  106. T1 & GetElement1(int indeks) const
  107. {
  108. return _elementi1[indeks];
  109. }
  110. T2 & GetElement2(int indeks) const
  111. {
  112. return _elementi2[indeks];
  113. }
  114. void SetElement2(T2 noviElement, int indeks)
  115. {
  116. _elementi2[indeks] = noviElement;
  117. }
  118. void SetElement1(T1 noviElement, int indeks)
  119. {
  120. _elementi1[indeks] = noviElement;
  121. }
  122. ~Kolekcija() {
  123. delete[] _elementi1; _elementi1 = nullptr;
  124. delete[] _elementi2; _elementi2 = nullptr;
  125. }
  126. };
  127. class Datum {
  128. int *_dan, *_mjesec, *_godina;
  129. public:
  130. Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
  131. _dan = new int(dan);
  132. _mjesec = new int(mjesec);
  133. _godina = new int(godina);
  134. }
  135. Datum(const Datum & original)
  136. {
  137. _dan = new int(*original._dan);
  138. _mjesec = new int(*original._mjesec);
  139. _godina = new int(*original._godina);
  140. }
  141. ~Datum() {
  142. delete _dan; _dan = nullptr;
  143. delete _mjesec; _mjesec = nullptr;
  144. delete _godina; _godina = nullptr;
  145. }
  146. friend ostream& operator<< (ostream &COUT, const Datum &obj) {
  147. COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << ".";
  148. return COUT;
  149. }
  150. Datum& operator=(const Datum& right)
  151. {
  152. if(this != &right)
  153. {
  154. _dan = new int(*right._dan);
  155. _mjesec = new int(*right._mjesec);
  156. _godina = new int(*right._godina);
  157. }
  158. return *this;
  159. }
  160. };
  161. class Student {
  162. char * _imePrezime;
  163. Datum * _datumRodjenja;
  164. public:
  165. Student(const char * imePrezime = "---", Datum d = Datum()) {
  166. const int size = strlen(imePrezime) + 1;
  167. _imePrezime = new char[size];
  168. strcpy_s(_imePrezime, size, imePrezime);
  169. _datumRodjenja = new Datum(d);
  170. }
  171. Student& operator=(const Student& right)
  172. {
  173. if(this != &right)
  174. {
  175. this->_imePrezime = new char[strlen(right._imePrezime) + 1];
  176. strcpy_s(this->_imePrezime, strlen(right._imePrezime) + 1, right._imePrezime);
  177. this->_datumRodjenja = new Datum(*right._datumRodjenja);
  178. }
  179. return *this;
  180. }
  181. bool operator==(const Student& right) const
  182. {
  183. return (strcmp(_imePrezime, right._imePrezime) == 0);
  184. }
  185. friend ostream& operator<<(ostream& out, const Student& s)
  186. {
  187. out << s._imePrezime;
  188. return out;
  189. }
  190. ~Student() { delete[] _imePrezime; _imePrezime = nullptr; delete _datumRodjenja; _datumRodjenja = nullptr; }
  191. };
  192. class Ispit {
  193. Datum _datumOdrzavanja;
  194. char * _opisIspita;
  195. Kolekcija<Student, Datum> _prijave;
  196. Kolekcija<Student, int> _rezultati;
  197. public:
  198. Ispit(const char * opis = " - Nema - ", Datum d = Datum()):_datumOdrzavanja(d)
  199. {
  200. _opisIspita = new char[strlen(opis) + 1];
  201. strcpy_s(_opisIspita, strlen(opis) + 1, opis);
  202. }
  203. ~Ispit()
  204. {
  205. delete[]_opisIspita; _opisIspita = nullptr;
  206. }
  207. Ispit(const Ispit& original)
  208. {
  209. _datumOdrzavanja = original._datumOdrzavanja;
  210. _opisIspita = new char[strlen(original._opisIspita) + 1];
  211. strcpy_s(_opisIspita, strlen(original._opisIspita) + 1, original._opisIspita);
  212. _prijave = original._prijave;
  213. _rezultati = original._rezultati;
  214. }
  215.  
  216. bool DodajPrijavu(const Student & student, const Datum & datum)
  217. {
  218. if(_prijave.VecPostojiT1(student))
  219. {
  220. cout << "Student vec postoji!\n";
  221. return false;
  222. }
  223. _prijave.AddElement(student, datum);
  224. return true;
  225. }
  226. void DodajRezultat(const Student & student, int ocjena)
  227. {
  228. if(_prijave.VecPostojiT1(student))
  229. _rezultati.AddElement(student, ocjena);
  230. else cout << "Student nije prijavio ispit!\n";
  231. }
  232. void Sortiraj()
  233. {
  234. _rezultati.Sort_T2();
  235. }
  236. void ZakljuciRezultate()
  237. {
  238. /* ZakljuciRezultate - dodaje ocjenu 5 svim studentima koji su prijavili ispit a nije im evidentirana ocjena */
  239.  
  240. for (int i = 0; i < _prijave.getTrenutno(); ++i)
  241. {
  242. if(!_rezultati.VecPostojiT1(_prijave.GetElement1(i)))
  243. {
  244. int o = 5;
  245. _rezultati.AddElement(_prijave.GetElement1(i), o);
  246. }
  247. if(_rezultati.GetElement2(i) < 5)
  248. {
  249. _rezultati.SetElement2(5, i);
  250. }
  251. }
  252. }
  253.  
  254. friend ostream& operator<<(ostream& out, const Ispit& ispit)
  255. {
  256. out << "Datum odrzavanja ispita: " << ispit._datumOdrzavanja << endl << endl;
  257. out << "\n\n\tPrijavljeni studenti: " << endl;
  258. out << ispit._prijave;
  259. out << "\n\n\tOstvareni rezultati: " << endl;
  260. out << ispit._rezultati;
  261. return out;
  262. }
  263.  
  264. };
  265. const char *crt = "\n--------------------------------------------------\n";
  266. void main() {
  267.  
  268. //REGIONI olaksavaju organizaciju programskog code-a, te ih mozete ukloniti ukoliko vam otezavaju preglednost
  269.  
  270. #pragma region TestiranjeKolekcije
  271. Kolekcija<int, double> kolekcija1;
  272. for (size_t i = 0; i < 50; i++)
  273. kolekcija1.AddElement(i, i + 0.3);
  274. cout << kolekcija1 << endl;
  275. cout << crt;
  276. Kolekcija<int, double> kolekcija2;
  277. kolekcija2 = kolekcija1;
  278. kolekcija1.RemoveElement(2);//UMANJITI VELIČINU NIZA
  279. cout << kolekcija2 << crt;
  280. if (kolekcija1.getTrenutno() == kolekcija2.getTrenutno())
  281. cout << "ISTI BROJ ELEMENATA" << endl;
  282. else cout << "NIJE ISTI BROJ ELEMENATA\n";
  283. Kolekcija<int, double> kolekcija3(kolekcija2);
  284. cout << kolekcija3 << crt;
  285. #pragma endregion
  286.  
  287. #pragma region TestiranjeDatuma
  288. Datum danas(26, 11, 2015);
  289. Datum sutra(danas);
  290. Datum prekosutra;
  291. prekosutra = danas;
  292. cout << danas << endl << sutra << endl << prekosutra << crt;
  293. #pragma endregion
  294.  
  295. #pragma region TestiranjeStudenta
  296. Student denis("Denis Music", Datum(26, 11, 1990));
  297. Student jasmin("Jasmin Azemovic", Datum(22, 11, 1990));
  298. Student goran2("Goran Skondric", Datum(22, 11, 1990));
  299. Student goran;
  300. goran = goran2;
  301. Student adel("Adel Handzic", Datum(25, 8, 1990));
  302. Student marija("Marija Herceg", Datum(15, 6, 1990));
  303. Student ajdin("Ajdin Hukara", Datum(18, 5, 1996));
  304. #pragma endregion
  305.  
  306. #pragma region TestiranjeIspita
  307. Ispit prIII("PRIII::26.11.2015", danas);
  308. // DodajPrijavu - dodaje novog studenta u listu prijavljenih za ispit. onemoguciti dodavanje dva ista studenta
  309. if (prIII.DodajPrijavu(denis, danas));
  310. cout << denis << " DODAT na spisak" << endl;
  311. if (prIII.DodajPrijavu(jasmin, danas));
  312. cout << jasmin << " DODAT na spisak" << endl;
  313. if (prIII.DodajPrijavu(goran, danas));
  314. cout << goran << " DODAT na spisak" << endl;
  315. if (prIII.DodajPrijavu(adel, danas));
  316. cout << adel << " DODAT na spisak" << endl;
  317. if (prIII.DodajPrijavu(marija, danas));
  318. cout << marija << " DODAT na spisak" << endl;
  319. if (prIII.DodajPrijavu(ajdin, danas));
  320. cout << ajdin << " DODAT na spisak" << endl;
  321.  
  322. cout << crt << endl;
  323. /*DodajRezultat - dodaje ocjenu koju je student ostvario na ispitu. za dodavanje ocjene student je prethodno trebao biti prijavljen na ispit
  324. */
  325. prIII.DodajRezultat(goran, 7); // na kraju zadatka je malo konfuzno, ispisuje gorana kao jasmina jer je prethodno
  326. // uradjeno goran = jasmin
  327. prIII.DodajRezultat(jasmin, 6);
  328. prIII.DodajRezultat(adel, 8);
  329. prIII.DodajRezultat(marija, 9);
  330. prIII.DodajRezultat(ajdin, 4); // samo da testiram ove prijave
  331.  
  332. /*Sortiraj - sortira rezultate ispita prema ocjeni*/
  333. prIII.Sortiraj();
  334. /*ZakljuciRezultate - dodaje ocjenu 5 svim studentima koji su prijavili ispit a nije im evidentirana ocjena*/
  335. prIII.ZakljuciRezultate();
  336. //rezultati ispita se smiju ispisivati jedino ukoliko su prethodno zaključeni
  337. cout << prIII << crt;
  338.  
  339. Ispit prIII_2(prIII);
  340. cout << prIII_2 << crt;
  341. #pragma endregion
  342. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement