Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <regex>
- #include <thread>
- #include <string>
- #include <sstream>
- #include <vector>
- #include <algorithm>
- #include <math.h>
- using namespace std;
- //1. ZADATAK
- //a.Koristeæi primjere pojasniti operatore reinterpret_cast i static_cast.
- //b.Koristeæi primjere pojasniti razliku izmeðu tipova list i vector.
- //
- //
- //2. ZADATAK
- //
- char *crt = "\n-------------------------------------------\n";
- enum eRazred { PRVI = 1, DRUGI, TRECI, CETVRTI };
- template<class T1, class T2>
- class Kolekcija {
- T1 * _elementi1;
- T2 * _elementi2;
- int * _trenutno;
- public:
- Kolekcija()
- {
- _elementi1 = nullptr;
- _elementi2 = nullptr;
- _trenutno = new int(0);
- }
- ~Kolekcija()
- {
- delete[]_elementi1; _elementi1 = nullptr;
- delete[]_elementi2; _elementi2 = nullptr;
- delete _trenutno; _trenutno = nullptr;
- }
- Kolekcija(const Kolekcija &obj) {
- _trenutno = new int(*obj._trenutno);
- _elementi1 = new T1[*_trenutno];
- _elementi2 = new T2[*_trenutno];
- for (int i = 0; i < *_trenutno; i++)
- {
- _elementi1[i] = obj._elementi1[i];
- _elementi2[i] = obj._elementi2[i];
- }
- }
- Kolekcija & operator=(const Kolekcija & obj) {
- if (this != &obj) {
- delete[]_elementi1; _elementi1 = nullptr;
- delete[]_elementi2; _elementi2 = nullptr;
- delete _trenutno;
- _trenutno = new int(*obj._trenutno);
- _elementi1 = new T1[*_trenutno];
- _elementi2 = new T2[*_trenutno];
- for (int i = 0; i < *_trenutno; i++)
- {
- _elementi1[i] = obj._elementi1[i];
- _elementi2[i] = obj._elementi2[i];
- }
- }
- return *this;
- }
- void AddElement(T1 e1, T2 e2) {
- T1 * temp1 = new T1[(*_trenutno) + 1];
- T2 * temp2 = new T2[(*_trenutno) + 1];
- for (int i = 0; i < *_trenutno; i++)
- {
- temp1[i] = _elementi1[i];
- temp2[i] = _elementi2[i];
- }
- delete[]_elementi1; delete[]_elementi2;
- _elementi1 = nullptr; _elementi2 = nullptr;
- temp1[*_trenutno] = e1;
- temp2[*_trenutno] = e2;
- _elementi1 = temp1;
- _elementi2 = temp2;
- (*_trenutno)++;
- }
- void SortOpadajuciByT2() {
- int lok;
- cout << "Sortiranje." << endl;
- for (int i = 0; i < *_trenutno - 1; i++)
- {
- lok = i;
- for (int j = i + 1; j < *_trenutno; j++)
- if (_elementi2[j] > _elementi2[lok]) {
- swap(_elementi2[j], _elementi2[lok]);
- swap(_elementi1[j], _elementi1[lok]);
- /*temp2 = _elementi2[j];
- _elementi2[j] = _elementi2[lok];
- _elementi2[lok] = temp2;
- temp = _elementi1[j];
- _elementi1[j] = _elementi1[lok];
- _elementi1[lok] = temp;*/
- }
- }
- }
- T1& getElement1(int lokacija) { return _elementi1[lokacija]; }
- T2& getElement2(int lokacija) { return _elementi2[lokacija]; }
- int getTrenutno() { return *_trenutno; }
- friend ostream& operator<< (ostream &COUT, Kolekcija &obj) {
- for (size_t i = 0; i < *obj._trenutno; i++)
- COUT << obj.getElement1(i) << " " << obj.getElement2(i) << endl;
- return COUT;
- }
- };
- class DatumVrijeme {
- int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
- public:
- DatumVrijeme(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 0, int minuti = 0) {
- _dan = new int(dan);
- _mjesec = new int(mjesec);
- _godina = new int(godina);
- _sati = new int(sati);
- _minuti = new int(minuti);
- }
- ~DatumVrijeme() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- delete _sati; _sati = nullptr;
- delete _minuti; _minuti = nullptr;
- }
- DatumVrijeme(const DatumVrijeme & obj) {
- _dan = new int(*obj._dan);
- _mjesec = new int(*obj._mjesec);
- _godina = new int(*obj._godina);
- _sati = new int(*obj._sati);
- _minuti = new int(*obj._minuti);
- }
- DatumVrijeme & operator=(const DatumVrijeme & obj) {
- if (this != &obj) {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- delete _sati; _sati = nullptr;
- delete _minuti; _minuti = nullptr;
- _dan = new int(*obj._dan);
- _mjesec = new int(*obj._mjesec);
- _godina = new int(*obj._godina);
- _sati = new int(*obj._sati);
- _minuti = new int(*obj._minuti);
- }
- return *this;
- }
- string ToCharArray() {
- stringstream obj;
- obj << to_string(*_dan) + "." + to_string(*_mjesec) + "." + to_string(*_godina) + " " + to_string(*_sati) + ":" + to_string(*_minuti);
- return obj.str();
- }
- friend ostream& operator<< (ostream &COUT, DatumVrijeme &obj) {
- COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << " " << *obj._sati << ":" << *obj._minuti << endl;
- return COUT;
- }
- };
- class Predmet {
- char * _naziv;
- int _ocjena;
- string _napomena;
- public:
- Predmet(char * naziv, int ocjena, string napomena = "") {
- int vel = strlen(naziv) + 1;
- _naziv = new char[vel];
- strcpy_s(_naziv, vel, naziv);
- _ocjena = ocjena;
- _napomena = napomena;
- }
- Predmet(Predmet &o) {//Dodao sam k.kopije jer treba :D
- int vel = strlen(o._naziv) + 1;
- _naziv = new char[vel];
- strcpy_s(_naziv, vel, o._naziv);
- _ocjena = o._ocjena;
- _napomena = o._napomena;
- }
- ~Predmet() {
- delete[] _naziv; _naziv = nullptr;
- }
- friend ostream& operator<< (ostream &COUT, Predmet &obj) {
- COUT << obj._naziv << " (" << obj._ocjena << ") " << obj._napomena << endl;
- return COUT;
- }
- bool Isti(char * naziv) {
- if (strcmp(_naziv, naziv) == 0)
- return true;
- return false;
- }
- char * GetNaziv() { return _naziv; }
- string GetNapomena() { return _napomena; }
- void DodajNapomenu(string napomena) {
- _napomena += " " + napomena;
- }
- };
- struct Uspjeh {
- eRazred _razred;
- //datumvrijeme se odnosi na vrijeme evidentiranja predmeta tj. uspjeha
- Kolekcija<Predmet*, DatumVrijeme> * _predmeti;
- public:
- Uspjeh(eRazred razred) {
- _razred = razred;
- _predmeti = new Kolekcija<Predmet*, DatumVrijeme>();
- }
- ~Uspjeh() {
- delete _predmeti; _predmeti = nullptr;
- }
- Kolekcija<Predmet*, DatumVrijeme> * GetPredmeti() { return _predmeti; }
- eRazred GetRazred() { return _razred; }
- friend ostream& operator<< (ostream &COUT, const Uspjeh &obj) {
- COUT << obj._razred << *obj._predmeti << endl;
- return COUT;
- }
- };
- class Kandidat {
- char * _imePrezime;
- string _emailAdresa;
- string _brojTelefona;
- vector<Uspjeh *> _uspjeh;
- public:
- Kandidat(char * imePrezime, string emailAdresa, string brojTelefona) {
- int vel = strlen(imePrezime) + 1;
- _imePrezime = new char[vel];
- strcpy_s(_imePrezime, vel, imePrezime);
- _emailAdresa = emailAdresa;
- _brojTelefona = brojTelefona;
- }
- ~Kandidat() {
- delete[] _imePrezime; _imePrezime = nullptr;
- for (size_t i = 0; i < _uspjeh.size(); i++) {
- delete _uspjeh[i];
- _uspjeh[i] = nullptr;
- }
- }
- /*
- uspjeh (tokom srednjoskolskog obrazovanja) se dodaje za svaki predmet na nivou razreda.
- tom prilikom onemoguciti:
- - dodavanje vise od 6 predmeta za jedan razred
- - dodavanje istoimenih predmeta na nivou jednog razreda,
- - dodavanje vise predmeta u kratkom vremenskom periodu (na nivou jednog razreda, razmak izmedju dodavanja pojedinih predmeta
- mora biti najmanje minut).
- razredi (predmeti ili uspjeh) ne moraju biti dodavani sortiranim redoslijedom
- (npr. prvo se moze dodati uspjeh za II razred, pa onda za I razred i sl.). Funkcija vraca true ili false u zavisnosti od (ne)uspjesnost izvrsenja
- */
- bool AddPredmet(eRazred razred, Predmet predmet, DatumVrijeme datum) {
- for (int i = 0; i < _uspjeh.size(); i++)
- {
- if (_uspjeh[i]->GetRazred() == razred) {
- if (_uspjeh[i]->_predmeti->getTrenutno() == 6)
- return false;
- else
- {
- _uspjeh[i]->_predmeti->AddElement(new Predmet(predmet), datum);
- return true;
- }
- }
- }
- Uspjeh * novi = new Uspjeh(razred);
- novi->_predmeti->AddElement(new Predmet(predmet), datum);
- _uspjeh.push_back(novi);
- return true;
- }
- friend ostream& operator<< (ostream &COUT, Kandidat &obj) {
- COUT << obj._imePrezime << " " << obj._emailAdresa << " " << obj._brojTelefona << endl;
- for (size_t i = 0; i < obj._uspjeh.size(); i++)
- COUT << *obj._uspjeh[i] << endl;
- return COUT;
- }
- vector<Uspjeh *> GetUspjeh() { return _uspjeh; }
- };
- void main() {
- /****************************************************************************
- 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. PROGRAMSKI CODE SE TAKOÐER NALAZI U FAJLU CODE.TXT
- 5. 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.
- 6. IZUZETAK BACITE U FUNKCIJAMA U KOJIMA JE TO NAZNAÈENO.
- ****************************************************************************/
- DatumVrijeme temp,
- datum19062017_1015(19, 6, 2017, 10, 15),
- datum20062017_1115(20, 6, 2017, 11, 15),
- datum30062017_1215(30, 6, 2017, 12, 15),
- datum05072017_1231(5, 7, 2017, 12, 31),
- datum20062017_1115_Copy(datum20062017_1115);
- //funkcija ToCharArray vraca datum i vrijeme kao char *. konverziju izvrsiti koristeci stringstream objekat.
- cout << datum19062017_1015.ToCharArray() << endl;//treba ispisati: 19.6.2017 10:15
- temp = datum05072017_1231;
- cout << temp.ToCharArray() << endl;//treba ispisati: 5.7.2017 12:31
- cout << datum20062017_1115_Copy.ToCharArray() << endl;//treba ispisati: 20.6.2017 11:15
- const int kolekcijaTestSize = 10;
- Kolekcija<int, int> kolekcija1;
- for (size_t i = 0; i < kolekcijaTestSize; i++)
- kolekcija1.AddElement(i + 1, i * i);
- cout << kolekcija1 << endl;
- Kolekcija<int, int> kolekcija2 = kolekcija1;
- cout << kolekcija2 << crt;
- Kolekcija<int, int> kolekcija3;
- kolekcija3 = kolekcija1;
- kolekcija3.SortOpadajuciByT2(); //sortira sve clanove na osnovu vrijednosti drugog para (T2) od najvece prema najmanjoj vrijednosti
- cout << kolekcija3 << crt;
- //napomena se moze dodati i prilikom kreiranja objekta
- Predmet Matematika("Matematika", 5, "Ucesce na takmicenju"),
- Fizika("Fizika", 5),
- Hemija("Hemija", 2),
- Engleski("Engleski", 5);
- Fizika.DodajNapomenu("Pohvala za ostvareni uspjeh");
- cout << Matematika << endl;
- Kandidat jasmin("Jasmin Azemovic", "jasmin@gmail.com", "033 281 172");
- Kandidat adel("Adel Handzic", "adel@edu.fit.ba", "033 281 170");
- /*
- uspjeh (tokom srednjoskolskog obrazovanja) se dodaje za svaki predmet na nivou razreda.
- tom prilikom onemoguciti:
- - dodavanje vise od 6 predmeta za jedan razred
- - dodavanje istoimenih predmeta na nivou jednog razreda,
- - dodavanje vise predmeta u kratkom vremenskom periodu (na nivou jednog razreda, razmak izmedju dodavanja pojedinih predmeta
- mora biti najmanje minut).
- razredi (predmeti ili uspjeh) ne moraju biti dodavani sortiranim redoslijedom
- (npr. prvo se moze dodati uspjeh za II razred, pa onda za I razred i sl.). Funkcija vraca true ili false u zavisnosti od (ne)uspjesnost izvrsenja
- */
- if (jasmin.AddPredmet(DRUGI, Fizika, datum20062017_1115))
- cout << "Predmet uspjesno dodan!" << crt;
- if (jasmin.AddPredmet(DRUGI, Hemija, datum30062017_1215))
- cout << "Predmet uspjesno dodan!" << crt;
- if (jasmin.AddPredmet(PRVI, Engleski, datum19062017_1015))
- cout << "Predmet uspjesno dodan!" << crt;
- if (jasmin.AddPredmet(PRVI, Matematika, datum20062017_1115))
- cout << "Predmet uspjesno dodan!" << crt;
- //ne treba dodati Matematiku jer je vec dodana u prvom razredu
- if (jasmin.AddPredmet(PRVI, Matematika, datum05072017_1231))
- cout << "Predmet uspjesno dodan!" << crt;
- //ne treba dodati Fiziku jer nije prosao minut od dodavanja posljednjeg predmeta
- if (jasmin.AddPredmet(PRVI, Fizika, datum05072017_1231))
- cout << "Predmet uspjesno dodan!" << crt;
- ///*pretpostavka je da na nivou jednog razreda kandidati imaju 6 predmeta. upravo zbog toga, nakon evidentiranja 6
- //predmeta na nivou jednog razreda kandidatu se salje mail sa porukom: "evidentirali ste uspjeh za X razred".
- //ukoliko je prosjek na nivou tog razreda veci od 4.5
- //kandidatu se salje SMS sa porukom: "svaka cast za uspjeh 4.X". slanje poruka i emailova implemenitrati koristeci zasebne thread-ove. */
- ////vraca broj ponavljanja odredjene rijeci u napomenama
- //cout << "Rijec takmicenje se pojavljuje " << jasmin.BrojPonavljanjaRijeci("takmicenju") << " puta." << endl;
- ////vraca niz predmeta koji su evidentiranih u periodu izmedju vrijednosti proslijedjenih parametara
- //vector<Predmet> jasminUspjeh = jasmin(DatumVrijeme(18, 06, 2017, 10, 15), DatumVrijeme(21, 06, 2017, 10, 10));
- //for each (Predmet u in jasminUspjeh)
- //{
- // cout << u << endl;
- //}
- //Uspjeh * u = jasmin[PRVI];//vraca uspjeh kandidata ostvaren u prvom razredu
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement