Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- /****************************************************************************
- 1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
- 2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR ĆE BITI OZNACENO KAO "RE"
- 3. SPAŠAVAJTE PROJEKAT KAKO BI SE SPRIJEČILO GUBLJENJE URAĐENOG ZADATKA
- 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.
- 5. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
- 6. ZA POTREBE TESTIRANJA, UNUTAR MAIN FUNKCIJE MOZETE DODAVATI NOVE TESTNE PODATKE
- ****************************************************************************/
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- const char * crt = "\n----------------------------------------------------\n";
- class Datum {
- int * _dan, *_mjesec, *_godina;
- public:
- Datum(int d, int m, int g) {
- _dan = new int(d);
- _mjesec = new int(m);
- _godina = new int(g);
- }
- ~Datum() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- }
- Datum(const Datum &obj) {
- _dan = new int(*obj._dan);
- _mjesec = new int(*obj._mjesec);
- _godina = new int(*obj._godina);
- }
- Datum &operator=(const Datum &obj) {
- *_dan = *obj._dan;
- *_mjesec = *obj._mjesec;
- *_godina = *obj._godina;
- return *this;
- }
- bool operator ==(const Datum &obj) {
- return *_dan == *obj._dan && *_mjesec == *obj._mjesec && *_godina == *obj._godina;
- }
- friend ostream & operator<<(ostream & COUT, Datum obj) {
- COUT << *obj._dan << "/" << *obj._mjesec << "/" << *obj._godina;
- return COUT;
- }
- };
- template<class T, int velicina>
- class FITArray {
- T _niz[velicina];
- int _trenutno;
- bool _dozvoliDupliciranje;
- public:
- //OSTALE FUNKCIJE CLANICE DEFINISATI VAN TEMPLATE KLASE
- FITArray(bool dozvoliDupliciranje = true) { _dozvoliDupliciranje = dozvoliDupliciranje; _trenutno = 0; }
- bool operator+=(const T &el);
- bool operator-=(const T &el);
- FITArray operator()(int OD, int DO);
- FITArray &operator = (const FITArray &f);
- friend ostream& operator<< <>(ostream &cout, const FITArray &obj);
- int GetTrenutno()const { return _trenutno; }
- T * GetNiz() { return _niz; }
- T getElement(int i) { return _niz[i]; }
- T &operator[](int i) { return _niz[i]; }
- };
- template<class T, int velicina>
- FITArray<T, velicina> &FITArray<T, velicina>::operator=(const FITArray &f) {
- _trenutno = f._trenutno;
- _dozvoliDupliciranje = f._dozvoliDupliciranje;
- for (size_t i = 0; i < f._trenutno; i++)
- _niz[i] = f._niz[i];
- return *this;
- }
- template<class T, int velicina>
- bool FITArray<T, velicina>::operator+=(const T &el) {
- if (_trenutno == velicina)
- return false;
- if (!_dozvoliDupliciranje) {
- for (size_t i = 0; i < _trenutno; i++)
- {
- if (_niz[i] == el) {
- return false;
- }
- }
- }
- _niz[_trenutno] = el;
- _trenutno++;
- return true;
- }
- template<class T, int velicina>
- bool FITArray<T, velicina>::operator-=(const T &el) {
- for (size_t i = 0; i < _trenutno; i++)
- {
- if (_niz[i] == el) {
- _niz[i] = _niz[_trenutno - 1];
- _trenutno--;
- return true;
- }
- }
- return false;
- }
- template<class T, int velicina>
- FITArray<T, velicina> FITArray<T, velicina>::operator()(int OD, int DO) {
- FITArray<T, velicina>temp;
- if (DO - OD > _trenutno) {
- for (size_t i = OD; i < _trenutno; i++)
- {
- temp += _niz[i];
- }
- }
- else {
- for (size_t i = OD; i < DO; i++)
- {
- temp += _niz[i];
- }
- }
- return temp;
- }
- template<class T, int velicina>
- ostream &operator<<(ostream &cout, const FITArray<T, velicina> &obj) {
- cout << "Trenutno elemenata: " << obj._trenutno << crt;
- for (size_t i = 0; i < obj._trenutno; i++)
- {
- cout << obj._niz[i] << endl;
- }
- cout << crt;
- return cout;
- }
- class PolozeniPredmet {
- char * _naziv;
- int _ocjena;
- Datum _datumPolaganja;
- public:
- PolozeniPredmet() :_datumPolaganja(1, 1, 2011) {
- _naziv = nullptr;
- _ocjena = 5;
- }
- PolozeniPredmet(Datum d, const char *naziv, int ocjena) :_datumPolaganja(d) {
- _naziv = new char[strlen(naziv) + 1];
- strcpy_s(_naziv, strlen(naziv) + 1, naziv);
- _ocjena = ocjena;
- }
- PolozeniPredmet(const PolozeniPredmet &obj) :_ocjena(obj._ocjena), _datumPolaganja(obj._datumPolaganja) {
- _naziv = new char[strlen(obj._naziv) + 1];
- strcpy_s(_naziv, strlen(obj._naziv) + 1, obj._naziv);
- }
- ~PolozeniPredmet() { delete[] _naziv; _naziv = nullptr; }
- PolozeniPredmet &operator=(const PolozeniPredmet &obj) {
- if (this != &obj) {
- delete[]_naziv;
- _naziv = new char[strlen(obj._naziv) + 1];
- strcpy_s(_naziv, strlen(obj._naziv) + 1, obj._naziv);
- _ocjena = obj._ocjena;
- _datumPolaganja = obj._datumPolaganja;
- }
- return *this;
- }
- int getOcjena()const { return _ocjena; }
- bool operator==(const PolozeniPredmet &obj) {
- return strcmp(_naziv, obj._naziv) == 0;
- }
- friend ostream & operator<<(ostream & COUT, const PolozeniPredmet &obj) {
- COUT << obj._naziv << "(" << obj._ocjena << ")" << obj._datumPolaganja << endl;
- return COUT;
- }
- };
- class Student {
- static int _indeksCounter; //sluzi za odredjivanje narednog broja indeksa koji ce biti dodijeljen studentu, pocevsi od 160000
- const int _indeks;
- char * _imePrezime;
- FITArray<PolozeniPredmet*, 40> _polozeniPredmeti;
- public:
- Student(const char *imePrezime) :_indeks(_indeksCounter++) {
- _imePrezime = new char[strlen(imePrezime) + 1];
- strcpy_s(_imePrezime, strlen(imePrezime) + 1, imePrezime);
- }
- ~Student() {
- delete[] _imePrezime; _imePrezime = nullptr;
- for (size_t i = 0; i < _polozeniPredmeti.GetTrenutno(); i++)
- {
- delete _polozeniPredmeti[i];
- _polozeniPredmeti[i] = nullptr;
- }
- }
- void DodajPredmet(PolozeniPredmet &p) {
- PolozeniPredmet *temp = new PolozeniPredmet(p);
- _polozeniPredmeti += temp;
- }
- Student &operator=(Student &obj) {
- if (this != &obj) {
- delete[]_imePrezime;
- _imePrezime = new char[strlen(obj._imePrezime) + 1];
- strcpy_s(_imePrezime, strlen(obj._imePrezime) + 1, obj._imePrezime);
- /*_polozeniPredmeti = obj._polozeniPredmeti;*/
- for (size_t i = 0; i < obj._polozeniPredmeti.GetTrenutno(); i++)
- {
- PolozeniPredmet * temp = new PolozeniPredmet(*obj._polozeniPredmeti.getElement(i));
- _polozeniPredmeti += temp;
- }
- }
- return *this;
- }
- float GetProsjek() {
- float temp = 0;
- for (size_t i = 0; i < _polozeniPredmeti.GetTrenutno(); i++)
- {
- temp += _polozeniPredmeti.getElement(i)->getOcjena();
- }
- temp /= _polozeniPredmeti.GetTrenutno();
- if (temp != 0)
- return temp;
- return 0;
- }
- friend ostream & operator<<(ostream & COUT, Student & obj) {
- COUT << obj._indeks << " " << obj._imePrezime << endl;
- for (size_t i = 0; i < obj._polozeniPredmeti.GetTrenutno(); i++)
- {
- COUT << *obj._polozeniPredmeti.getElement(i);
- }
- return COUT;
- }
- };
- int Student::_indeksCounter = 160000;
- void main() {
- const int max = 20;
- Datum jucer(20, 11, 2017), danas(21, 11, 2017), sutra(22, 11, 2017);
- cout << jucer << danas << sutra << endl;
- jucer = danas;
- cout << jucer << danas << sutra << endl;
- //parametar tipa bool odredjuje da li je u nizu dozvoljeno dupliciranje elemenata
- FITArray<int, max> nizIntegera(false);
- for (size_t i = 0; i < max - 1; i++)
- nizIntegera += i;//dodaje novog clana niza
- if (!(nizIntegera += 6))//pokusavamo dodati dupli clan niza
- cout << "Element nije dodan u niz" << endl;
- cout << crt << nizIntegera << crt; //ispisuje sve clanove niza
- nizIntegera -= 9; //uklanja clan niza sa vrijednoscu 9
- nizIntegera -= 17;
- FITArray<int, max> noviNizIntegera(nizIntegera);
- cout << crt << noviNizIntegera << crt;
- /*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 */
- cout << "Clanovi niza od lokacije 2 do lokacije 5 su -> " << noviNizIntegera(2, 5) << crt;
- Student adel("Adel Handzic"), jasmin("Jasmin Azemovic");
- PolozeniPredmet prII(jucer, "PRII", 8), prIII(sutra, "PRIII", 7);
- adel.DodajPredmet(prII);
- adel.DodajPredmet(prIII);
- //Fakultet Informacijskih tehnologija
- cout << adel << endl;
- ////vraca prosjecnu ocjenu studenta
- cout << "Prosjecna ocjena -> " << adel.GetProsjek() << crt;
- jasmin = adel;
- cout << jasmin << endl;
- cout << "Prosjecna ocjena -> " << jasmin.GetProsjek() << crt;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement