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 CE BITI OZNACENO KAO "RE"
- 3. SPASAVAJTE PROJEKAT KAKO BI SE SPRIJECILO GUBLJENJE URADJENOG ZADATKA
- 4. PROGRAMSKI CODE SE TAKODJER NALAZI U FAJLU CODE_.TXT
- ****************************************************************************/
- template<class T1, class T2>
- class Kolekcija {
- T1 * _elementi1;
- T2 * _elementi2;
- int _trenutnoElemenata;
- public:
- Kolekcija()
- {
- _elementi1 = nullptr;
- _elementi2 = nullptr;
- _trenutnoElemenata = 0;
- }
- ~Kolekcija()
- {
- delete[]_elementi1;
- _elementi1 = nullptr;
- delete[]_elementi2;
- _elementi2 = nullptr;
- }
- void AddElement(T1 prvi, T2 drugi)
- {
- T1 *temp1 = new T1[_trenutnoElemenata + 1];
- T2 *temp2 = new T2[_trenutnoElemenata + 1];
- for (size_t i = 0; i < _trenutnoElemenata; i++)
- {
- temp1[i] = _elementi1[i];
- temp2[i] = _elementi2[i];
- }
- temp1[_trenutnoElemenata] = prvi;
- temp2[_trenutnoElemenata] = drugi;
- delete[]_elementi1;
- delete[]_elementi2;
- _elementi1 = temp1;
- _elementi2 = temp2;
- _trenutnoElemenata++;
- }
- Kolekcija(Kolekcija<T1, T2> & k)
- {
- _trenutnoElemenata = k._trenutnoElemenata;
- _elementi1 = new T1[_trenutnoElemenata];
- _elementi2 = new T2[_trenutnoElemenata];
- for (size_t i = 0; i < _trenutnoElemenata; i++)
- {
- _elementi1[i] = k._elementi1[i];
- _elementi2[i] = k._elementi2[i];
- }
- }
- int getTrenutno()
- {
- return _trenutnoElemenata;
- }
- void SortirajPremaOcjeni()
- {
- int minIndex;
- for (int i = 0; i < _trenutnoElemenata-1; i++)
- {
- minIndex = i;
- for (size_t j = i+1; j < _trenutnoElemenata; j++)
- {
- if (_elementi2[j] > _elementi2[minIndex])
- minIndex = j;
- }
- if (i != minIndex)
- {
- T1 element;
- T2 ocjena;
- element = _elementi1[i];
- _elementi1[i] = _elementi1[minIndex];
- _elementi1[minIndex] = element;
- ocjena = _elementi2[i];
- _elementi2[i] = _elementi2[minIndex];
- _elementi2[minIndex] = ocjena;
- }
- }
- }
- void RemoveElement(int lokacija)
- {
- if (lokacija >= _trenutnoElemenata)
- return;
- if (lokacija == _trenutnoElemenata - 1) {
- _trenutnoElemenata--;
- return;
- }
- for (size_t i = lokacija; i < _trenutnoElemenata-1; i++)
- {
- _elementi1[i] = _elementi1[i + 1];
- _elementi2[i] = _elementi2[i + 1];
- }
- _trenutnoElemenata--;
- }
- void operator =(Kolekcija<T1, T2> & k)
- {
- _trenutnoElemenata = k._trenutnoElemenata;
- _elementi1 = new T1[_trenutnoElemenata];
- _elementi2 = new T2[_trenutnoElemenata];
- for (size_t i = 0; i < _trenutnoElemenata; i++)
- {
- _elementi1[i] = k._elementi1[i];
- _elementi2[i] = k._elementi2[i];
- }
- }
- T1 & operator [](int lokacija)
- {
- return _elementi1[lokacija];
- }
- friend ostream& operator<< <>(ostream &, Kolekcija &);
- };
- template<class T1, class T2>
- ostream& operator<< (ostream &COUT,Kolekcija<T1,T2> & obj) {
- for (size_t i = 0; i < obj._trenutnoElemenata; i++)
- {
- cout << obj._elementi1[i] << " " << obj._elementi2[i] << endl;
- }
- return COUT;
- }
- class Datum {
- int *_dan, *_mjesec, *_godina;
- public:
- Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
- _dan = new int(dan);
- _mjesec = new int(mjesec);
- _godina = new int(godina);
- }
- ~Datum() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- }
- Datum(const Datum & d)
- {
- _dan = new int(*d._dan);
- _mjesec = new int(*d._mjesec);
- _godina = new int(*d._godina);
- }
- void operator=(Datum & d)
- {
- if (this != &d) {
- _dan = new int(*d._dan);
- _mjesec = new int(*d._mjesec);
- _godina = new int(*d._godina);
- }
- }
- bool operator==(Datum & d)
- {
- return(*_dan == *d._dan&&*_mjesec == *d._mjesec&&*_godina == *d._godina);
- }
- friend ostream& operator<< (ostream &COUT, Datum &obj) {
- COUT << *obj._dan << " " << *obj._mjesec << " " << *obj._godina;
- return COUT;
- }
- };
- class Student {
- char * _imePrezime;
- Datum * _datumRodjenja;
- public:
- Student(const char * imePrezime = "---", Datum d = Datum()) {
- int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, imePrezime);
- _datumRodjenja = new Datum(d);
- }
- ~Student() { delete[] _imePrezime; delete _datumRodjenja; }
- Student(const Student &obj)
- {
- _imePrezime = new char[strlen(obj._imePrezime) + 1];
- strcpy_s(_imePrezime, strlen(obj._imePrezime) + 1, obj._imePrezime);
- _datumRodjenja = new Datum(*obj._datumRodjenja);
- }
- //Student( Student &&obj) //MOVE KONSTRUKTOR
- //{
- // this->_imePrezime = obj._imePrezime;
- // this->_datumRodjenja = obj._datumRodjenja;
- // obj._datumRodjenja = nullptr;
- // obj._imePrezime = nullptr;
- //}
- void operator =(Student & obj)
- {
- if (this != &obj) {
- _imePrezime = new char[strlen(obj._imePrezime) + 1];
- strcpy_s(_imePrezime, strlen(obj._imePrezime) + 1, obj._imePrezime);
- _datumRodjenja = new Datum(*obj._datumRodjenja);
- }
- }
- bool operator==(Student& obj)
- {
- return (strcmp(_imePrezime, obj._imePrezime) == 0 && *_datumRodjenja == *obj._datumRodjenja);
- }
- friend ostream& operator<< (ostream &COUT, Student &obj);
- };
- ostream & operator<<(ostream & COUT, Student & obj)
- {
- COUT << obj._imePrezime << " " << *obj._datumRodjenja << endl;
- return COUT;
- }
- class Ispit {
- Datum _datumOdrzavanja;
- char * _opisIspita;
- Kolekcija<Student, Datum> _prijave;
- Kolekcija<Student, int> _rezultati;
- public:
- Ispit(const char * opisIspita, Datum &d)
- {
- _opisIspita = new char[strlen(opisIspita) + 1];
- strcpy_s(_opisIspita, strlen(opisIspita) + 1, opisIspita);
- _datumOdrzavanja = d;
- }
- ~Ispit()
- {
- delete[]_opisIspita; _opisIspita = nullptr;
- }
- Ispit(Ispit & obj)
- {
- _datumOdrzavanja = obj._datumOdrzavanja;
- _opisIspita = new char[strlen(obj._opisIspita) + 1];
- strcpy_s(_opisIspita, strlen(obj._opisIspita) + 1, obj._opisIspita);
- _prijave = obj._prijave;
- _rezultati = obj._rezultati;
- }
- void operator =(Ispit & obj)
- {
- if (this != &obj) {
- _datumOdrzavanja = obj._datumOdrzavanja;
- _opisIspita = new char[strlen(obj._opisIspita) + 1];
- strcpy_s(_opisIspita, strlen(obj._opisIspita) + 1, obj._opisIspita);
- _prijave = obj._prijave;
- _rezultati = obj._rezultati;
- }
- }
- bool DodajPrijavu(Student & student, Datum & datum)
- {
- for (size_t i = 0; i < _prijave.getTrenutno(); i++)
- {
- if (student == _prijave[i])
- return false;
- }
- _prijave.AddElement(student, datum);
- return true;
- }
- bool DodajRezultat(Student & student, int ocjena)
- {
- for (size_t i = 0; i < _rezultati.getTrenutno(); i++)
- {
- if (student == _rezultati[i])
- {
- return false;
- }
- }
- for (size_t i = 0; i < _prijave.getTrenutno(); i++)
- {
- if (student == _prijave[i])
- {
- _rezultati.AddElement(student, ocjena);
- return true;
- }
- }
- return false;
- }
- void ZakljuciRezultate()
- {
- bool evidentiran = false;
- for (size_t i = 0; i < _prijave.getTrenutno(); i++)
- {
- evidentiran = false;
- for (size_t j = 0; j < _rezultati.getTrenutno(); j++)
- {
- if (_prijave[i] == _rezultati[j])
- evidentiran = true;
- }
- if (!evidentiran)
- _rezultati.AddElement(_prijave[i], 5);
- }
- }
- void Sortiraj()
- {
- _rezultati.SortirajPremaOcjeni();
- }
- friend ostream& operator<< (ostream &COUT, Ispit &obj);
- };
- ostream& operator<< (ostream &cout, Ispit &obj)
- {
- if (obj._prijave.getTrenutno() == obj._rezultati.getTrenutno())
- {
- /*cout << obj._prijave << endl;*/
- cout << obj._rezultati << endl;
- }
- return cout;
- }
- const char *crt = "\n--------------------------------------------------\n";
- void main() {
- //REGIONI olaksavaju organizaciju programskog code-a, te ih mozete ukloniti ukoliko vam otezavaju preglednost
- #pragma region TestiranjeKolekcije
- Kolekcija<int, double> kolekcija1;
- for (size_t i = 0; i < 50; i++)
- kolekcija1.AddElement(i, i + 0.3);
- cout << kolekcija1 << endl;
- cout << crt;
- Kolekcija<int, double> kolekcija2;
- kolekcija2 = kolekcija1;
- kolekcija1.RemoveElement(2);//UMANJITI VELIČINU NIZA
- cout << kolekcija1 << crt;
- kolekcija2.RemoveElement(2);
- cout << kolekcija2 << crt;
- if (kolekcija1.getTrenutno() == kolekcija2.getTrenutno())
- cout << "ISTI BROJ ELEMENATA" << endl;
- Kolekcija<int, double> kolekcija3(kolekcija2);
- cout << kolekcija3 << crt;
- #pragma endregion
- #pragma region TestiranjeDatuma
- Datum danas(26, 11, 2015);
- Datum sutra(danas);
- Datum prekosutra;
- prekosutra = danas;
- cout << danas << endl << sutra << endl << prekosutra << crt;
- #pragma endregion
- #pragma region TestiranjeStudenta
- Student denis("Denis Music", Datum(26, 11, 1990));
- Student jasmin("Jasmin Azemovic", Datum(22, 11, 1990));
- Student goran;
- goran = jasmin;
- /*Student ahmed = move(jasmin);*/ //poziv move konstruktora
- Student adel("Adel Handzic", Datum(25, 8, 1990));
- Student marija("Marija Herceg", Datum(15, 6, 1990));
- cout << denis << jasmin << goran << adel << marija << crt;
- #pragma endregion
- #pragma region TestiranjeIspita
- Ispit prIII("PRIII::26.11.2015", danas);
- //DodajPrijavu - dodaje novog studenta u listu prijavljenih za ispit. onemoguciti dodavanje dva ista studenta
- if (prIII.DodajPrijavu(denis, danas))
- cout << denis << " DODAT na spisak" << endl;
- if (prIII.DodajPrijavu(jasmin, danas))
- cout << jasmin << " DODAT na spisak" << endl;
- if (prIII.DodajPrijavu(goran, danas))
- cout << goran << " DODAT na spisak" << endl;
- if (prIII.DodajPrijavu(adel, danas))
- cout << adel << " DODAT na spisak" << endl;
- if (prIII.DodajPrijavu(marija, danas))
- cout << marija << " DODAT na spisak" << endl;
- cout << crt << endl;
- /*DodajRezultat - dodaje ocjenu koju je student ostvario na ispitu. za dodavanje ocjene student je prethodno trebao biti prijavljen na ispit
- */
- prIII.DodajRezultat(goran, 7);
- prIII.DodajRezultat(jasmin, 6);
- prIII.DodajRezultat(adel, 8);
- prIII.DodajRezultat(marija, 9);
- //
- /*Sortiraj - sortira rezultate ispita prema ocjeni*/
- prIII.Sortiraj();
- /*ZakljuciRezultate - dodaje ocjenu 5 svim studentima koji su prijavili ispit a nije im evidentirana ocjena*/
- prIII.ZakljuciRezultate();
- //rezultati ispita se smiju ispisivati jedino ukoliko su prethodno zaključeni
- cout << prIII << crt;
- //
- Ispit prIII_2(prIII);
- cout << prIII_2 << crt;
- //#pragma endregion
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement