Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *
- *Kreirajte .doc fajl sa vašim brojem indeksa ( npr. 1234.doc BEZ IMENA I PREZIMENA), te na kraju ispita u njega kopirajte rješenja vaših zadataka.
- **Tokom izrade ispita nije dozvoljeno korištenje help-a
- ***Tokom izrade ispita mogu biti pokrenuta samo tri programa: PDF Reader (ispitni zadaci), MS Visual Studio, MS Word (u koji ćete kopirati vaša rješenja)
- ****Bez obzira na to da li su ispitni zadaci urađeni, svi studenti koji su pristupili ispitu moraju predati svoj rad
- */
- /****************************************************************************
- 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
- ****************************************************************************/
- #include <iostream>
- using namespace std;
- template<class T1, class T2>
- class Kolekcija {
- T1 * _elementi1;
- T2 * _elementi2;
- int _trenutnoElemenata;
- public:
- Kolekcija()
- :_elementi1(nullptr), _elementi2(nullptr), _trenutnoElemenata(0) {}
- Kolekcija(const Kolekcija & original)
- {
- _elementi1 = new T1[original._trenutnoElemenata];
- _elementi2 = new T2[original._trenutnoElemenata];
- for (int i = 0; i < original._trenutnoElemenata; ++i)
- AddElement(original._elementi1[i], original._elementi2[i]);
- }
- void AddElement(const T1& element1, const T2& element2) {
- 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] = element1;
- temp2[_trenutnoElemenata] = element2;
- delete[] _elementi1;
- delete[] _elementi2;
- _elementi1 = temp1;
- _elementi2 = temp2;
- _trenutnoElemenata++;
- }
- friend ostream& operator<<(ostream& out, const Kolekcija<T1, T2>& k) {
- for (int i = 0; i < k._trenutnoElemenata; i++)
- out << k._elementi1[i] << "\t" << k._elementi2[i] << endl;
- return out;
- }
- Kolekcija<T1, T2> & operator=(const Kolekcija<T1, T2> & right)
- {
- if(this != &right)
- {
- if (this->_elementi1 != nullptr) delete[] this->_elementi1;
- if (this->_elementi2 != nullptr) delete[] this->_elementi2;
- this->_elementi1 = new T1[_trenutnoElemenata];
- this->_elementi2 = new T2[_trenutnoElemenata];
- for (int i = 0; i < right._trenutnoElemenata; i++)
- this->AddElement(right._elementi1[i], right._elementi2[i]);
- }
- return *this;
- }
- void RemoveElement(int indeks)
- {
- indeks--;
- for (int i = indeks; i < _trenutnoElemenata - 1; ++i)
- {
- _elementi1[i] = _elementi1[i + 1];
- _elementi2[i] = _elementi2[i + 1];
- }
- _trenutnoElemenata--;
- cout << "Element uklonjen!\n";
- }
- int getTrenutno() const { return _trenutnoElemenata; }
- bool VecPostojiT1(const T1& element)
- {
- for (int i = 0; i < _trenutnoElemenata; ++i)
- if (_elementi1[i] == element) return true;
- return false;
- }
- void Sort_T2()
- {
- bool promjena = true;
- while(promjena)
- {
- promjena = false;
- for (int i = 0; i < _trenutnoElemenata - 1; i++)
- {
- if(_elementi2[i] > _elementi2[i + 1])
- {
- T2 _temp = _elementi2[i];
- _elementi2[i] = _elementi2[i + 1];
- _elementi2[i + 1] = _temp;
- T1 _temp1 = _elementi1[i];
- _elementi1[i] = _elementi1[i + 1];
- _elementi1[i + 1] = _temp1;
- promjena = true;
- }
- }
- }
- }
- T1 & GetElement1(int indeks) const
- {
- return _elementi1[indeks];
- }
- T2 & GetElement2(int indeks) const
- {
- return _elementi2[indeks];
- }
- void SetElement2(T2 noviElement, int indeks)
- {
- _elementi2[indeks] = noviElement;
- }
- void SetElement1(T1 noviElement, int indeks)
- {
- _elementi1[indeks] = noviElement;
- }
- ~Kolekcija() {
- delete[] _elementi1; _elementi1 = nullptr;
- delete[] _elementi2; _elementi2 = nullptr;
- }
- };
- 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(const Datum & original)
- {
- _dan = new int(*original._dan);
- _mjesec = new int(*original._mjesec);
- _godina = new int(*original._godina);
- }
- ~Datum() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- }
- friend ostream& operator<< (ostream &COUT, const Datum &obj) {
- COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << ".";
- return COUT;
- }
- Datum& operator=(const Datum& right)
- {
- if(this != &right)
- {
- _dan = new int(*right._dan);
- _mjesec = new int(*right._mjesec);
- _godina = new int(*right._godina);
- }
- return *this;
- }
- };
- class Student {
- char * _imePrezime;
- Datum * _datumRodjenja;
- public:
- Student(const char * imePrezime = "---", Datum d = Datum()) {
- const int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, imePrezime);
- _datumRodjenja = new Datum(d);
- }
- Student& operator=(const Student& right)
- {
- if(this != &right)
- {
- this->_imePrezime = new char[strlen(right._imePrezime) + 1];
- strcpy_s(this->_imePrezime, strlen(right._imePrezime) + 1, right._imePrezime);
- this->_datumRodjenja = new Datum(*right._datumRodjenja);
- }
- return *this;
- }
- bool operator==(const Student& right) const
- {
- return (strcmp(_imePrezime, right._imePrezime) == 0);
- }
- friend ostream& operator<<(ostream& out, const Student& s)
- {
- out << s._imePrezime;
- return out;
- }
- ~Student() { delete[] _imePrezime; _imePrezime = nullptr; delete _datumRodjenja; _datumRodjenja = nullptr; }
- };
- class Ispit {
- Datum _datumOdrzavanja;
- char * _opisIspita;
- Kolekcija<Student, Datum> _prijave;
- Kolekcija<Student, int> _rezultati;
- public:
- Ispit(const char * opis = " - Nema - ", Datum d = Datum()):_datumOdrzavanja(d)
- {
- _opisIspita = new char[strlen(opis) + 1];
- strcpy_s(_opisIspita, strlen(opis) + 1, opis);
- }
- ~Ispit()
- {
- delete[]_opisIspita; _opisIspita = nullptr;
- }
- Ispit(const Ispit& original)
- {
- _datumOdrzavanja = original._datumOdrzavanja;
- _opisIspita = new char[strlen(original._opisIspita) + 1];
- strcpy_s(_opisIspita, strlen(original._opisIspita) + 1, original._opisIspita);
- _prijave = original._prijave;
- _rezultati = original._rezultati;
- }
- bool DodajPrijavu(const Student & student, const Datum & datum)
- {
- if(_prijave.VecPostojiT1(student))
- {
- cout << "Student vec postoji!\n";
- return false;
- }
- _prijave.AddElement(student, datum);
- return true;
- }
- void DodajRezultat(const Student & student, int ocjena)
- {
- if(_prijave.VecPostojiT1(student))
- _rezultati.AddElement(student, ocjena);
- else cout << "Student nije prijavio ispit!\n";
- }
- void Sortiraj()
- {
- _rezultati.Sort_T2();
- }
- void ZakljuciRezultate()
- {
- /* ZakljuciRezultate - dodaje ocjenu 5 svim studentima koji su prijavili ispit a nije im evidentirana ocjena */
- for (int i = 0; i < _prijave.getTrenutno(); ++i)
- {
- if(!_rezultati.VecPostojiT1(_prijave.GetElement1(i)))
- {
- int o = 5;
- _rezultati.AddElement(_prijave.GetElement1(i), o);
- }
- if(_rezultati.GetElement2(i) < 5)
- {
- _rezultati.SetElement2(5, i);
- }
- }
- }
- friend ostream& operator<<(ostream& out, const Ispit& ispit)
- {
- out << "Datum odrzavanja ispita: " << ispit._datumOdrzavanja << endl << endl;
- out << "\n\n\tPrijavljeni studenti: " << endl;
- out << ispit._prijave;
- out << "\n\n\tOstvareni rezultati: " << endl;
- out << ispit._rezultati;
- return out;
- }
- };
- 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 << kolekcija2 << crt;
- if (kolekcija1.getTrenutno() == kolekcija2.getTrenutno())
- cout << "ISTI BROJ ELEMENATA" << endl;
- else cout << "NIJE ISTI BROJ ELEMENATA\n";
- 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 goran2("Goran Skondric", Datum(22, 11, 1990));
- Student goran;
- goran = goran2;
- Student adel("Adel Handzic", Datum(25, 8, 1990));
- Student marija("Marija Herceg", Datum(15, 6, 1990));
- Student ajdin("Ajdin Hukara", Datum(18, 5, 1996));
- #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;
- if (prIII.DodajPrijavu(ajdin, danas));
- cout << ajdin << " 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); // na kraju zadatka je malo konfuzno, ispisuje gorana kao jasmina jer je prethodno
- // uradjeno goran = jasmin
- prIII.DodajRezultat(jasmin, 6);
- prIII.DodajRezultat(adel, 8);
- prIII.DodajRezultat(marija, 9);
- prIII.DodajRezultat(ajdin, 4); // samo da testiram ove prijave
- /*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
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement