Advertisement
Guest User

Untitled

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