Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2017
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <string>
  5. #include <sstream>
  6. using namespace std;
  7. /*1. ZADATAK
  8. a.Koristeæi primjere pojasniti operatore reinterpret_cast i static_cast.
  9. b.Koristeæi primjere pojasniti razliku izmeðu tipova list i vector.
  10.  
  11.  
  12. 2. ZADATAK
  13. */
  14. char *crt = "\n-------------------------------------------\n";
  15. enum eRazred { PRVI = 1, DRUGI, TRECI, CETVRTI };
  16.  
  17. template<class T1, class T2>
  18. class Kolekcija {
  19. T1 * _elementi1;
  20. T2 * _elementi2;
  21. int * _trenutno;
  22. public:
  23. Kolekcija()
  24. {
  25. _elementi1 = nullptr;
  26. _elementi2 = nullptr;
  27. _trenutno = new int(0);
  28. }
  29. Kolekcija(const Kolekcija & primKolekcija) //konst kopije
  30. {
  31. _trenutno = new int(*primKolekcija._trenutno);
  32.  
  33. _elementi1 = new T1[*_trenutno];
  34. _elementi2 = new T2[*_trenutno];
  35. for (int i = 0; i < (*_trenutno); i++)
  36. {
  37. _elementi1[i] = primKolekcija._elementi1[i];
  38. _elementi2[i] = primKolekcija._elementi2[i];
  39. }
  40. }
  41. ~Kolekcija()
  42. {
  43. delete[]_elementi1; _elementi1 = nullptr;
  44. delete[]_elementi2; _elementi2 = nullptr;
  45. delete _trenutno; _trenutno = nullptr;
  46. }
  47. T1& getElement1(int lokacija) { return _elementi1[lokacija]; }
  48. T2& getElement2(int lokacija) { return _elementi2[lokacija]; }
  49. int getTrenutno() { return *_trenutno; }
  50. friend ostream& operator<< (ostream &COUT, Kolekcija &obj) {
  51. for (size_t i = 0; i < *obj._trenutno; i++)
  52. COUT << obj.getElement1(i) << " " << obj.getElement2(i) << endl;
  53. return COUT;
  54. }
  55. void AddElement(T1 primT1, T2 primT2)
  56. {
  57. if ((*_trenutno) == 0)
  58. {
  59. _elementi1 = new T1[(*_trenutno) + 1];
  60. _elementi2 = new T2[(*_trenutno) + 1];
  61. _elementi1[*_trenutno] = primT1;
  62. _elementi2[*_trenutno] = primT2;
  63. (*_trenutno)++;
  64. return;
  65. }
  66. T1 * pomocna1 = new T1[(*_trenutno) + 1];
  67. T1 * pomocna2 = new T2[(*_trenutno) + 1];
  68. for (int i = 0; i < (*_trenutno); i++)
  69. {
  70. pomocna1[i] = _elementi1[i];
  71. pomocna2[i] = _elementi2[i];
  72. }
  73. pomocna1[*_trenutno] = primT1;
  74. pomocna2[*_trenutno] = primT2;
  75. delete[] _elementi1;
  76. delete[]_elementi2;
  77. _elementi1 = pomocna1;
  78. _elementi2 = pomocna2;
  79. (*_trenutno)++;
  80. }
  81. void operator=(const Kolekcija & primKolekcija)
  82. {
  83.  
  84. (*_trenutno) = (*primKolekcija._trenutno);
  85.  
  86. _elementi1 = new T1[*_trenutno];
  87. _elementi2 = new T2[*_trenutno];
  88. for (int i = 0; i < (*_trenutno); i++)
  89. {
  90. _elementi1[i] = primKolekcija._elementi1[i];
  91. _elementi2[i] = primKolekcija._elementi2[i];
  92. }
  93. }
  94. void SortOpadajuciByT2()
  95. {
  96. for (int i = 0; i < (*_trenutno); i++)
  97. {
  98. for (int j = i+1; j < (*_trenutno); j++)
  99. {
  100. if (_elementi2[i] < _elementi2[j])
  101. {
  102. swap(_elementi1[i], _elementi1[j]);
  103. swap(_elementi2[i], _elementi2[j]);
  104. }
  105. }
  106. }
  107. }
  108. };
  109.  
  110. class DatumVrijeme {
  111. int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
  112. public:
  113. DatumVrijeme(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 0, int minuti = 0) {
  114. _dan = new int(dan);
  115. _mjesec = new int(mjesec);
  116. _godina = new int(godina);
  117. _sati = new int(sati);
  118. _minuti = new int(minuti);
  119. }
  120. DatumVrijeme(const DatumVrijeme & primDatum) // konst kopije
  121. {
  122. _dan = new int(*primDatum._dan);
  123. _mjesec = new int(*primDatum._mjesec);
  124. _godina = new int(*primDatum._godina);
  125. _sati = new int(*primDatum._sati);
  126. _minuti = new int(*primDatum._minuti);
  127. }
  128. ~DatumVrijeme() {
  129. delete _dan; _dan = nullptr;
  130. delete _mjesec; _mjesec = nullptr;
  131. delete _godina; _godina = nullptr;
  132. delete _sati; _sati = nullptr;
  133. delete _minuti; _minuti = nullptr;
  134. }
  135. friend ostream& operator<< (ostream &COUT, DatumVrijeme &obj) {
  136. COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << " " << *obj._sati << ":" << *obj._minuti << endl;
  137. return COUT;
  138. }
  139. char * ToCharArray()
  140. {
  141. stringstream noviObj;
  142. noviObj << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti;
  143. int vel = noviObj.str().length() + 1;
  144. char * charDatum = new char[vel];
  145. strcpy_s(charDatum, vel, noviObj.str().c_str());
  146. return charDatum;
  147. }
  148. void operator =(const DatumVrijeme & primDatum)
  149. {
  150. _dan = new int(*primDatum._dan);
  151. _mjesec = new int(*primDatum._mjesec);
  152. _godina = new int(*primDatum._godina);
  153. _sati = new int(*primDatum._sati);
  154. _minuti = new int(*primDatum._minuti);
  155. }
  156. };
  157.  
  158. class Predmet {
  159. char * _naziv;
  160. int _ocjena;
  161. string _napomena;
  162. public:
  163. Predmet(char * naziv, int ocjena, string napomena = "") {
  164. int vel = strlen(naziv) + 1;
  165. _naziv = new char[vel];
  166. strcpy_s(_naziv, vel, naziv);
  167. _ocjena = ocjena;
  168. _napomena = napomena;
  169. }
  170. ~Predmet() {
  171. delete[] _naziv; _naziv = nullptr;
  172. }
  173. friend ostream& operator<< (ostream &COUT, Predmet &obj) {
  174. COUT << obj._naziv << " (" << obj._ocjena << ") " << obj._napomena << endl;
  175. return COUT;
  176. }
  177. string GetNapomena() { return _napomena; }
  178. void DodajNapomenu(string napomena) {
  179. _napomena += " " + napomena;
  180. }
  181. };
  182. struct Uspjeh {
  183. eRazred _razred;
  184. //datumvrijeme se odnosi na vrijeme evidentiranja predmeta tj. uspjeha
  185. Kolekcija<Predmet*, DatumVrijeme> * _predmeti;
  186. public:
  187. Uspjeh(eRazred razred) {
  188. _razred = razred;
  189. _predmeti = nullptr;
  190. }
  191. ~Uspjeh() {
  192. delete _predmeti; _predmeti = nullptr;
  193. }
  194.  
  195. Kolekcija<Predmet*, DatumVrijeme> * GetPredmeti() { return _predmeti; }
  196.  
  197. friend ostream& operator<< (ostream &COUT, const Uspjeh &obj) {
  198. COUT << obj._razred << *obj._predmeti << endl;
  199. return COUT;
  200. }
  201. };
  202.  
  203. class Kandidat {
  204. char * _imePrezime;
  205. string _emailAdresa;
  206. string _brojTelefona;
  207. vector<Uspjeh *> _uspjeh;
  208. public:
  209. Kandidat(char * imePrezime, string emailAdresa, string brojTelefona) {
  210. int vel = strlen(imePrezime) + 1;
  211. _imePrezime = new char[vel];
  212. strcpy_s(_imePrezime, vel, imePrezime);
  213. _emailAdresa = emailAdresa;
  214. _brojTelefona = brojTelefona;
  215. }
  216. ~Kandidat() {
  217. delete[] _imePrezime; _imePrezime = nullptr;
  218. for (size_t i = 0; i < _uspjeh.size(); i++) {
  219. delete _uspjeh[i];
  220. _uspjeh[i] = nullptr;
  221. }
  222. }
  223. friend ostream& operator<< (ostream &COUT, Kandidat &obj) {
  224. COUT << obj._imePrezime << " " << obj._emailAdresa << " " << obj._brojTelefona << endl;
  225. for (size_t i = 0; i < obj._uspjeh.size(); i++)
  226. COUT << *obj._uspjeh[i] << endl;
  227. return COUT;
  228. }
  229. vector<Uspjeh *> GetUspjeh() { return _uspjeh; }
  230. bool AddPredmet(enum eRazred primRazred, Predmet & primPredmet, DatumVrijeme & primDatum)
  231. {
  232.  
  233. }
  234. };
  235.  
  236. void main() {
  237. /****************************************************************************
  238. 1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
  239. 2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR ÆE BITI OZNACENO KAO "RE"
  240. 3. SPAŠAVAJTE PROJEKAT KAKO BI SE SPRIJEÈILO GUBLJENJE URAÐENOG ZADATKA
  241. 4. PROGRAMSKI CODE SE TAKOÐER NALAZI U FAJLU CODE.TXT
  242. 5. NAZIVI FUNKCIJA, TE BROJ I TIP PARAMETARA MORAJU BITI IDENTIÈNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U, OSIM U SLUÈAJU DA POSTOJI ADEKVATAN RAZLOG ZA NJIHOVU MODIFIKACIJU. OSTALE, POMOÆNE FUNKCIJE MOŽETE IMENOVATI I DODAVATI PO ŽELJI.
  243. 6. IZUZETAK BACITE U FUNKCIJAMA U KOJIMA JE TO NAZNAÈENO.
  244. ****************************************************************************/
  245.  
  246. DatumVrijeme temp,
  247. datum19062017_1015(19, 6, 2017, 10, 15),
  248. datum20062017_1115(20, 6, 2017, 11, 15),
  249. datum30062017_1215(30, 6, 2017, 12, 15),
  250. datum05072017_1231(5, 7, 2017, 12, 31),
  251. datum20062017_1115_Copy(datum20062017_1115);
  252. //funkcija ToCharArray vraca datum i vrijeme kao char *. konverziju izvrsiti koristeci stringstream objekat.
  253. cout << datum19062017_1015.ToCharArray() << endl;//treba ispisati: 19.6.2017 10:15
  254. temp = datum05072017_1231;
  255. cout << temp.ToCharArray() << endl;//treba ispisati: 5.7.2017 12:31
  256. cout << datum20062017_1115_Copy.ToCharArray() << endl;//treba ispisati: 20.6.2017 11:15
  257.  
  258. const int kolekcijaTestSize = 10;
  259. Kolekcija<int, int> kolekcija1;
  260. for (size_t i = 0; i < kolekcijaTestSize; i++)
  261. kolekcija1.AddElement(i + 1, i * i);
  262. cout << kolekcija1 << endl;
  263.  
  264. Kolekcija<int, int> kolekcija2 = kolekcija1;
  265. cout << kolekcija2 << crt;
  266. Kolekcija<int, int> kolekcija3;
  267. kolekcija3 = kolekcija1;
  268. kolekcija3.SortOpadajuciByT2(); //sortira sve clanove na osnovu vrijednosti drugog para (T2) od najvece prema najmanjoj vrijednosti
  269. cout << kolekcija3 << crt;
  270.  
  271. ////napomena se moze dodati i prilikom kreiranja objekta
  272. Predmet Matematika("Matematika", 5, "Ucesce na takmicenju"),
  273. Fizika("Fizika", 5),
  274. Hemija("Hemija", 2),
  275. Engleski("Engleski", 5);
  276. Fizika.DodajNapomenu("Pohvala za ostvareni uspjeh");
  277. cout << Matematika << endl;
  278.  
  279. Kandidat jasmin("Jasmin Azemovic", "jasmin@gmail.com", "033 281 172");
  280. Kandidat adel("Adel Handzic", "adel@edu.fit.ba", "033 281 170");
  281.  
  282. ///*
  283. //uspjeh (tokom srednjoskolskog obrazovanja) se dodaje za svaki predmet na nivou razreda.
  284. //tom prilikom onemoguciti:
  285. //- dodavanje vise od 6 predmeta za jedan razred
  286. //- dodavanje istoimenih predmeta na nivou jednog razreda,
  287. //- dodavanje vise predmeta u kratkom vremenskom periodu (na nivou jednog razreda, razmak izmedju dodavanja pojedinih predmeta mora biti najmanje minut).
  288. //razredi (predmeti ili uspjeh) ne moraju biti dodavani sortiranim redoslijedom (npr. prvo se moze dodati uspjeh za II razred, pa onda za I razred i sl.). Funkcija vraca true ili false u zavisnosti od (ne)uspjesnost izvrsenja
  289. //*/
  290. if (jasmin.AddPredmet(DRUGI, Fizika, datum20062017_1115))
  291. cout << "Predmet uspjesno dodan!" << crt;
  292. if (jasmin.AddPredmet(DRUGI, Hemija, datum30062017_1215))
  293. cout << "Predmet uspjesno dodan!" << crt;
  294. if (jasmin.AddPredmet(PRVI, Engleski, datum19062017_1015))
  295. cout << "Predmet uspjesno dodan!" << crt;
  296. if (jasmin.AddPredmet(PRVI, Matematika, datum20062017_1115))
  297. cout << "Predmet uspjesno dodan!" << crt;
  298. //ne treba dodati Matematiku jer je vec dodana u prvom razredu
  299. if (jasmin.AddPredmet(PRVI, Matematika, datum05072017_1231))
  300. cout << "Predmet uspjesno dodan!" << crt;
  301. //ne treba dodati Fiziku jer nije prosao minut od dodavanja posljednjeg predmeta
  302. if (jasmin.AddPredmet(PRVI, Fizika, datum05072017_1231))
  303. cout << "Predmet uspjesno dodan!" << crt;
  304. ///*pretpostavka je da na nivou jednog razreda kandidati imaju 6 predmeta. upravo zbog toga, nakon evidentiranja 6 predmeta na nivou jednog razreda
  305. //kandidatu se salje mail sa porukom: "evidentirali ste uspjeh za X razred". ukoliko je prosjek na nivou tog razreda veci od 4.5
  306. //kandidatu se salje SMS sa porukom: "svaka cast za uspjeh 4.X". slanje poruka i emailova implemenitrati koristeci zasebne thread-ove. */
  307.  
  308. ////vraca broj ponavljanja odredjene rijeci u napomenama
  309. //cout << "Rijec takmicenje se pojavljuje " << jasmin.BrojPonavljanjaRijeci("takmicenju") << " puta." << endl;
  310.  
  311. ////vraca niz predmeta koji su evidentiranih u periodu izmedju vrijednosti proslijedjenih parametara
  312. //vector<Predmet> jasminUspjeh = jasmin(DatumVrijeme(18, 06, 2017, 10, 15), DatumVrijeme(21, 06, 2017, 10, 10));
  313. //for each (Predmet u in jasminUspjeh)
  314. //{
  315. // cout << u << endl;
  316. //}
  317.  
  318. //Uspjeh * u = jasmin[PRVI];//vraca uspjeh kandidata ostvaren u prvom razredu
  319.  
  320.  
  321. system("pause>0");
  322. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement