Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5.  
  6. /****************************************************************************
  7. 1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
  8. 2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR ÆE BITI OZNACENO KAO "RE"
  9. 3. SPAŠAVAJTE PROJEKAT KAKO BI SE SPRIJEÈILO GUBLJENJE URAÐENOG ZADATKA
  10. 4. 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.
  11. 5. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  12. 6. ZA POTREBE TESTIRANJA, UNUTAR MAIN FUNKCIJE MOZETE DODAVATI NOVE TESTNE PODATKE
  13. ****************************************************************************/
  14. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  15. #pragma warning(disable:4996)
  16.  
  17. const char* crt = "\n----------------------------------------------------\n";
  18. class Datum
  19. {
  20. int* _dan, * _mjesec, * _godina;
  21. public:
  22. Datum(int d, int m, int g)
  23. {
  24. _dan = new int(d);
  25. _mjesec = new int(m);
  26. _godina = new int(g);
  27. }
  28. Datum(const Datum& d)
  29. {
  30. _dan = new int(*d._dan);
  31. _mjesec = new int(*d._mjesec);
  32. _godina = new int(*d._godina);
  33. }
  34. ~Datum()
  35. {
  36. delete _dan; _dan = nullptr;
  37. delete _mjesec; _mjesec = nullptr;
  38. delete _godina; _godina = nullptr;
  39. }
  40. friend ostream& operator<<(ostream& COUT, Datum obj)
  41. {
  42. COUT << *obj._dan << "/" << *obj._mjesec << "/" << *obj._godina << endl;
  43. return COUT;
  44. }
  45. Datum& operator=(const Datum& drugi);
  46. };
  47. Datum& Datum::operator=(const Datum& drugi)
  48. {
  49. if (this != &drugi)
  50. {
  51. delete _dan;
  52. _dan = new int(*drugi._dan);
  53. delete _mjesec;
  54. _mjesec = new int(*drugi._mjesec);
  55. delete _godina;
  56. _godina = new int(*drugi._godina);
  57. }
  58. return *this;
  59. }
  60. template<class T, int velicina>
  61. class FITArray
  62. {
  63. T _niz[velicina];
  64. int _trenutno;
  65. bool _dozvoliDupliciranje; // nizIntegera ovo je false
  66. public:
  67. //OSTALE FUNKCIJE CLANICE DEFINISATI VAN TEMPLATE KLASE
  68. FITArray(bool dozvoliDupliciranje = true) { _dozvoliDupliciranje = dozvoliDupliciranje; _trenutno = 0; }
  69. FITArray(const FITArray& obj);
  70. int GetTrenutno() { return _trenutno; }
  71. T* GetNiz() { return _niz; }
  72. template<typename T, int velicina>
  73. friend ostream& operator<<(ostream& COUT, const FITArray<T, velicina>& obj);
  74. bool operator += (T vrijednost);
  75. bool operator -= (T vrijednost);
  76. FITArray<T, velicina>& operator=(FITArray<T, velicina>& drugi);
  77. FITArray<T, velicina> operator()(int, int);
  78. };
  79. template<typename T, int velicina>
  80. FITArray<T, velicina>& FITArray<T, velicina>::operator=(FITArray<T, velicina>& drugi)
  81. {
  82. _trenutno = drugi._trenutno;
  83. _dozvoliDupliciranje = drugi._dozvoliDupliciranje;
  84. for (int i = 0; i < _trenutno; i++)
  85. {
  86. _niz[i] = drugi._niz[i];
  87. }
  88. return *this;
  89.  
  90. }
  91. template<typename T, int velicina>
  92. ostream& operator<<(ostream& COUT, const FITArray<T,velicina>& obj)
  93. {
  94. for (int i = 0; i < obj._trenutno; i++)
  95. COUT << obj._niz[i] << " ";
  96. return COUT;
  97. }
  98. template<class T, int velicina>
  99. bool FITArray<T, velicina>::operator+=(T vrijednost)
  100. {
  101. if (_trenutno == velicina) return false;
  102. if (!_dozvoliDupliciranje)
  103. for (int i = 0; i < _trenutno; i++)
  104. if (_niz[i] == vrijednost)
  105. return false;
  106. _niz[_trenutno++] = vrijednost;
  107. return true;
  108. }
  109. template<class T, int velicina>
  110. bool FITArray<T, velicina>::operator-=(T vrijednost)
  111. {
  112. for (int i = 0; i < _trenutno; i++)
  113. {
  114. if (_niz[i] == vrijednost)
  115. {
  116. for (int j = i; j < _trenutno - 1; j++)
  117. _niz[j] = _niz[j + 1];
  118. _trenutno--;
  119. return true;
  120. }
  121. }
  122. return false;
  123. }
  124. template<class T, int velicina>
  125. FITArray<T, velicina>::FITArray(const FITArray<T, velicina>& obj) : _trenutno(obj._trenutno), _dozvoliDupliciranje(obj._dozvoliDupliciranje)
  126. {
  127. for (int i = 0; i < _trenutno; i++)
  128. _niz[i] = obj._niz[i];
  129. }
  130. template<class T, int velicina>
  131. FITArray<T, velicina> FITArray<T, velicina>::operator ()(int OD, int DO)
  132. {
  133. FITArray<T, velicina> temp(_dozvoliDupliciranje);
  134. if (OD >= 0 && OD < _trenutno)
  135. {
  136. if (DO > _trenutno) DO = _trenutno;
  137. for (int i = OD; i < DO; i++)
  138. temp += _niz[i];
  139.  
  140. }
  141. return temp;
  142. }
  143. class PolozeniPredmet
  144. {
  145. char* _naziv;
  146. int _ocjena;
  147. Datum _datumPolaganja;
  148. public:
  149. PolozeniPredmet() : _naziv(nullptr), _ocjena(5), _datumPolaganja(1, 1, 2000) {}
  150. PolozeniPredmet(const Datum& d, const char* naziv, int ocjena);
  151. PolozeniPredmet(const PolozeniPredmet& p);
  152. PolozeniPredmet& operator =(const PolozeniPredmet& p);
  153. ~PolozeniPredmet() { delete[] _naziv; _naziv = nullptr; }
  154. int GetOcjena() const { return _ocjena; }
  155. friend bool operator ==(const PolozeniPredmet& p1, const PolozeniPredmet& p2);
  156. friend ostream& operator<<(ostream& COUT, const PolozeniPredmet& obj)
  157. {
  158. COUT << obj._naziv << "(" << obj._ocjena << ")" << obj._datumPolaganja << endl;
  159. return COUT;
  160. }
  161. };
  162. PolozeniPredmet::PolozeniPredmet(const Datum& d, const char* naziv, int ocjena) : _datumPolaganja(d)
  163. {
  164.  
  165.  
  166. _ocjena = ocjena;
  167. _naziv = new char[strlen(naziv) + 1];
  168. strcpy_s(_naziv, strlen(naziv) + 1, naziv);
  169.  
  170. }
  171. PolozeniPredmet::PolozeniPredmet(const PolozeniPredmet& p) : _naziv(new char[strlen(p._naziv) + 1]), _ocjena(p._ocjena), _datumPolaganja(p._datumPolaganja)
  172. {
  173. strcpy_s(_naziv, strlen(p._naziv) + 1, p._naziv);
  174. }
  175. PolozeniPredmet& PolozeniPredmet::operator=(const PolozeniPredmet& p)
  176. {
  177. if (this != &p)
  178. {
  179. delete [] _naziv ;
  180. _naziv = new char[strlen(p._naziv) + 1];
  181. strcpy_s(_naziv, strlen(p._naziv) + 1, p._naziv);
  182. _ocjena = p._ocjena;
  183. _datumPolaganja = p._datumPolaganja;
  184.  
  185. }
  186.  
  187. return *this;
  188.  
  189. }
  190. bool operator==(const PolozeniPredmet& p1, const PolozeniPredmet& p2)
  191. {
  192. return (strcmp(p1._naziv, p2._naziv) == 0) ;
  193.  
  194. }
  195.  
  196.  
  197. class Student
  198. {
  199. static int _indeksCounter; //sluzi za odredjivanje narednog broja indeksa koji ce biti dodijeljen studentu, pocevsi od 160000
  200. const int _indeks;
  201. char* _imePrezime;
  202. FITArray<PolozeniPredmet, 40> _polozeniPredmeti;
  203. public:
  204. Student(const char* imePrezime);
  205. ~Student()
  206. {
  207. delete[] _imePrezime; _imePrezime = nullptr;
  208. }
  209. void DodajPredmet(const PolozeniPredmet& predmet);
  210. double GetProsjek();
  211. friend ostream& operator<<(ostream& COUT, Student& obj)
  212. {
  213. COUT << obj._indeks << " " << obj._imePrezime << endl << obj._polozeniPredmeti;
  214. return COUT;
  215. }
  216. Student& operator=(Student& s);
  217. };
  218. int Student::_indeksCounter(160000);
  219. void Student::DodajPredmet(const PolozeniPredmet& predmet)
  220. {
  221. _polozeniPredmeti += predmet;
  222. }
  223. double Student::GetProsjek()
  224. {
  225. double prosjek=0,suma=0;
  226.  
  227. for (int i = 0; i < _polozeniPredmeti.GetTrenutno(); i++)
  228. {
  229. suma += _polozeniPredmeti.GetNiz()[i].GetOcjena();
  230. }
  231. prosjek = suma / _polozeniPredmeti.GetTrenutno();
  232. return prosjek;
  233. }
  234.  
  235.  
  236. Student::Student(const char* imePrezime) : _indeks(_indeksCounter++)
  237. {
  238. if (!imePrezime) return;
  239.  
  240. int size = strlen(imePrezime) + 1;
  241. _imePrezime = new char[size];
  242. strcpy_s(_imePrezime, size, imePrezime);
  243. }
  244. Student& Student::operator=(Student& s)
  245. {
  246. if (this != &s)
  247. {
  248. _polozeniPredmeti = s._polozeniPredmeti;
  249. }
  250. return *this;
  251. }
  252. int main()
  253. {
  254. const int max = 20;
  255.  
  256. Datum jucer(20, 11, 2017), danas(21, 11, 2017), sutra(22, 11, 2017);
  257. cout << jucer << danas << sutra << endl;
  258. jucer = danas;
  259. cout << jucer << danas << sutra << endl;
  260. ////parametar tipa bool odredjuje da li je u nizu dozvoljeno dupliciranje elemenata
  261. FITArray<int, max> nizIntegera(false);
  262.  
  263. for (size_t i = 0; i < max - 1; i++)
  264. nizIntegera += i;//dodaje novog clana niza
  265. if (!(nizIntegera += 6))//pokusavamo dodati dupli clan niza
  266. cout << "Element nije dodan u niz" << endl;
  267.  
  268. cout << crt << nizIntegera << crt; //ispisuje sve clanove niza
  269.  
  270. nizIntegera -= 9; //uklanja clan niza sa vrijednoscu 9
  271. nizIntegera -= 17;
  272. FITArray<int, max> noviNizIntegera(nizIntegera);
  273.  
  274. cout << crt << noviNizIntegera << crt;
  275.  
  276. ////// parametri odredjuju lokacije (indekse u nizu) elemenata OD - DO koje je potrebno vratiti. u
  277. ////// slucaju da u nizu ne postoji trazeni broj elemenata funkcija treba da vrati sve element od lokacije
  278. ////// OD pa do posljednje dostupnog elementa
  279. cout << "Clanovi niza od lokacije 2 do lokacije 5 su -> " << noviNizIntegera(2, 5) << crt;
  280. Student adel("Adel Handzic"), jasmin("Jasmin Azemovic");
  281. cout << adel << " " << jasmin << endl;
  282. PolozeniPredmet prII(jucer, "PRII", 8), prIII(sutra, "PRIII", 7);
  283. cout << prII << endl;
  284. adel.DodajPredmet(prII);
  285. adel.DodajPredmet(prIII);
  286. cout << adel << endl;
  287. //////vraca prosjecnu ocjenu studenta
  288. cout << "Prosjecna ocjena -> " << adel.GetProsjek() << crt;
  289.  
  290. jasmin = adel;
  291. cout << jasmin << endl;
  292. cout << "Prosjecna ocjena -> " << jasmin.GetProsjek() << crt;
  293. return 0;
  294. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement