Advertisement
Guest User

Untitled

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