Advertisement
Guest User

ispitni2017

a guest
Nov 14th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.42 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
  6. RUNTIME ERROR CE BITI OZNACENO KAO "RE"
  7. 3. SPAŠAVAJTE PROJEKAT KAKO BI SE SPRIJECILO GUBLJENJE URAÐENOG ZADATKA
  8. 4. NAZIVI FUNKCIJA, TE BROJ I TIP PARAMETARA MORAJU BITI IDENTICNI ONIMA KOJI SU KORIŠTENI U
  9. TESTNOM CODE-U, OSIM U SLUCAJU DA POSTOJI ADEKVATAN RAZLOG ZA NJIHOVU MODIFIKACIJU. OSTALE,
  10. POMOCNE FUNKCIJE MOŽETE IMENOVATI I DODAVATI PO ŽELJI.
  11. 5. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU
  12. MORAJU PREDATI SVOJ RAD
  13. 6. ZA POTREBE TESTIRANJA, UNUTAR MAIN FUNKCIJE MOZETE DODAVATI NOVE TESTNE PODATKE
  14. ****************************************************************************/
  15. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  16. #pragma warning(disable:4996)
  17. const char * crt = "\n----------------------------------------------------\n";
  18. class Datum {
  19. int * _dan, *_mjesec, *_godina;
  20. public:
  21. Datum(int d = 0, int m = 0, int g= 0) {
  22. _dan = new int(d);
  23. _mjesec = new int(m);
  24. _godina = new int(g);
  25. }
  26. ~Datum() {
  27. delete _dan; _dan = nullptr;
  28. delete _mjesec; _mjesec = nullptr;
  29. delete _godina; _godina = nullptr;
  30. }
  31. Datum& operator=(const Datum &d) {
  32. _dan = new int(*d._dan);
  33. _mjesec = new int(*d._mjesec);
  34. _godina = new int(*d._godina);
  35.  
  36. return *this;
  37. }
  38. Datum(const Datum&d) {
  39. _dan = new int(*d._dan);
  40. _mjesec = new int(*d._mjesec);
  41. _godina = new int(*d._godina);
  42. }
  43. friend ostream & operator<<(ostream & COUT, Datum obj) {
  44. COUT << *obj._dan << "/" << *obj._mjesec << "/" << *obj._godina<<" ";
  45. return COUT;
  46. }
  47. };
  48. template<class T, int velicina>
  49. class FITArray {
  50. T _niz[velicina];
  51. int _trenutno;
  52. bool _dozvoliDupliciranje;
  53. public:
  54. //OSTALE FUNKCIJE CLANICE DEFINISATI VAN TEMPLATE KLASE
  55. FITArray(bool dozvoliDupliciranje = true);
  56. FITArray(const FITArray &fit);
  57. int GetTrenutno();
  58. //Trajanje: 120 minFakultet Informacijskih tehnologija
  59. T GetObjekat(int index) {
  60. return _niz[index];
  61. }
  62. T * GetNiz() { return _niz; }
  63. bool operator += (T element);
  64.  
  65. FITArray<T, velicina> operator()(const int &a, const int &b);
  66. bool operator -=(T element);
  67. friend ostream& operator<< <>(ostream &, const FITArray &);
  68. };
  69. template<class T, int velicina>
  70. FITArray<T, velicina>::FITArray(bool dozvoliDupliciranje) {
  71. _dozvoliDupliciranje =
  72. dozvoliDupliciranje; _trenutno = 0;
  73. }
  74. template<class T, int velicina>
  75. int FITArray<T, velicina>::GetTrenutno() {
  76. return _trenutno;
  77. }
  78. template<class T, int velicina>
  79. //jeeeeeeeeeeeeeeeeeeeeeeeeees
  80. bool FITArray<T, velicina>::operator += (T element) {
  81. for (int i = 0; i < _trenutno; i++)
  82. {
  83. if (_niz[i] == element && _dozvoliDupliciranje == false) {
  84. return false;
  85. }
  86. }
  87. _niz[_trenutno++] = element;
  88. return true;
  89. }
  90. template<class T, int velicina>
  91. ostream & operator <<(ostream &cout, const FITArray<T, velicina> &fit) {
  92. if (fit._trenutno == 0)
  93. cout << "Nema elemenata u nizu " << endl;
  94. for (int i = 0; i < fit._trenutno; i++)
  95. {
  96. cout << fit._niz[i] << " ";
  97. }
  98. return cout;
  99. }
  100. template<class T, int velicina>
  101. bool FITArray<T, velicina>::operator -=(T element) {
  102. int c = 0 ;
  103. for (int i = 0; i < _trenutno; i++)
  104. {
  105. if (element != _niz[i]) {
  106. _niz[c++] = _niz[i];
  107. }
  108. }
  109. _trenutno--;
  110. return true;
  111. }
  112. template<class T, int velicina>
  113. FITArray<T, velicina>::FITArray(const FITArray& fit) {
  114.  
  115. _trenutno = fit._trenutno;
  116. _dozvoliDupliciranje = fit._dozvoliDupliciranje;
  117. for (int i = 0; i < _trenutno; i++)
  118. {
  119. _niz[i] = fit._niz[i];
  120. }
  121. }
  122. template<class T, int velicina>
  123. FITArray<T, velicina> FITArray<T, velicina>::operator()(const int &a, const int &b) {
  124. FITArray<T, b- a + 1> temp(false);
  125. for (int i = a; i <= b; i++)
  126. {
  127. temp[i] += _niz[i];
  128. }
  129. return temp;
  130. }
  131. char *AlocirajNizKaraktera(const char *sadrzaj) {
  132. if (sadrzaj == nullptr)
  133. return nullptr;
  134. int size = strlen(sadrzaj) + 1;
  135. char *temp = new char[size];
  136. strcpy_s(temp, size, sadrzaj);
  137. return temp;
  138. }
  139. class PolozeniPredmet {
  140. char * _naziv;
  141. int _ocjena;
  142. Datum _datumPolaganja;
  143. public:
  144. PolozeniPredmet(Datum d = Datum(), const char *naziv= "---", int ocjena = 0) {
  145. _naziv = AlocirajNizKaraktera(naziv);
  146. _ocjena = ocjena;
  147. _datumPolaganja = d;
  148. }
  149. int ocjena() {
  150. return _ocjena;
  151. }
  152.  
  153. ~PolozeniPredmet() { delete[] _naziv; _naziv = nullptr; }
  154. friend ostream & operator<<(ostream & COUT, PolozeniPredmet * obj) {
  155. COUT << obj->_naziv << "(" << obj->_ocjena << ")" << obj->_datumPolaganja << endl;
  156. return COUT;
  157. }
  158. };
  159.  
  160.  
  161. class Student {
  162. static int _indeksCounter; //sluzi za odredjivanje narednog broja indeksa koji ce biti dodijeljen studentu,
  163. //pocevsi od 160000
  164. const int _indeks;
  165. char * _imePrezime;
  166. FITArray<PolozeniPredmet*, 40> _polozeniPredmeti;
  167. public:
  168. Student(const char *imePrezime): _indeks(_indeksCounter++){
  169. _imePrezime = AlocirajNizKaraktera(imePrezime);
  170. }
  171. ~Student() {
  172. delete[] _imePrezime; _imePrezime = nullptr;
  173. }
  174. bool DodajPredmet(const PolozeniPredmet & p) {
  175. PolozeniPredmet * temp = new PolozeniPredmet(p);
  176. if (_polozeniPredmeti += temp)
  177. return true;
  178. return false;
  179. }
  180. float GetProsjek() {
  181. float prosjek = 0;
  182. for (int i = 0; i < _polozeniPredmeti.GetTrenutno(); i++)
  183. {
  184. prosjek += _polozeniPredmeti.GetObjekat(i)->ocjena();
  185. }
  186. return prosjek / _polozeniPredmeti.GetTrenutno();
  187. }
  188. Student& operator =(const Student &s) {
  189. _imePrezime = AlocirajNizKaraktera(s._imePrezime);
  190. _polozeniPredmeti = s._polozeniPredmeti;
  191. return *this;
  192. }
  193. friend ostream & operator<<(ostream & COUT, Student & obj) {
  194. COUT << obj._indeks << " " << obj._imePrezime << endl << obj._polozeniPredmeti;
  195. return COUT;
  196. }
  197.  
  198. };
  199. int Student ::_indeksCounter = 160000;
  200. void main() {
  201. const int max = 20;
  202. Datum jucer(20, 11, 2017), danas(21, 11, 2017), sutra(22, 11, 2017);
  203. cout << jucer << danas << sutra << endl;
  204. jucer = danas;
  205. cout << jucer << danas << sutra << endl;
  206. //parametar tipa bool odredjuje da li je u nizu dozvoljeno dupliciranje elemenata
  207. FITArray<int, max> nizIntegera(false);
  208. for (size_t i = 0; i < max - 1; i++)
  209. nizIntegera += i;//dodaje novog clana niza
  210. if (!(nizIntegera += 6))//pokusavamo dodati dupli clan niza
  211. cout << "Element nije dodan u niz" << endl;
  212. cout << crt << nizIntegera << crt; //ispisuje sve clanove niza
  213. nizIntegera -= 9; //uklanja clan niza sa vrijednoscu 9
  214. nizIntegera -= 17;
  215. FITArray<int, max> noviNizIntegera(nizIntegera);
  216. cout << crt << noviNizIntegera << crt;
  217. /*parametri odredjuju lokacije (indekse u nizu) elemenata OD - DO koje je potrebno vratiti. u
  218. slucaju da u nizu ne postoji trazeni broj elemenata funkcija treba da vrati sve element od
  219. lokacije OD pa do posljednje dostupnog elementa */
  220. /*cout << "Clanovi niza od lokacije 2 do lokacije 5 su -> " << noviNizIntegera(2, 5) <<
  221. crt;*/
  222. Student adel("Adel Handzic"), jasmin("Jasmin Azemovic");
  223. PolozeniPredmet prII(jucer, "PRII", 8), prIII(sutra, "PRIII", 7);
  224. adel.DodajPredmet(prII);
  225. adel.DodajPredmet(prIII);
  226. //Fakultet Informacijskih tehnologija
  227. cout << adel << endl;
  228. //vraca prosjecnu ocjenu studenta
  229. cout << "Prosjecna ocjena -> " << adel.GetProsjek() << crt;
  230. jasmin = adel;
  231. cout << jasmin << endl;
  232. cout << "Prosjecna ocjena -> " << jasmin.GetProsjek() << crt;
  233.  
  234. system("pause");
  235. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement