Advertisement
Guest User

2017 1 PARC

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