Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <string>
- #include <sstream>
- 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(const Kolekcija & primKolekcija) //konst kopije
- {
- _trenutno = new int(*primKolekcija._trenutno);
- _elementi1 = new T1[*_trenutno];
- _elementi2 = new T2[*_trenutno];
- for (int i = 0; i < (*_trenutno); i++)
- {
- _elementi1[i] = primKolekcija._elementi1[i];
- _elementi2[i] = primKolekcija._elementi2[i];
- }
- }
- ~Kolekcija()
- {
- delete[]_elementi1; _elementi1 = nullptr;
- delete[]_elementi2; _elementi2 = nullptr;
- delete _trenutno; _trenutno = nullptr;
- }
- 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;
- }
- void AddElement(T1 primT1, T2 primT2)
- {
- if ((*_trenutno) == 0)
- {
- _elementi1 = new T1[(*_trenutno) + 1];
- _elementi2 = new T2[(*_trenutno) + 1];
- _elementi1[*_trenutno] = primT1;
- _elementi2[*_trenutno] = primT2;
- (*_trenutno)++;
- return;
- }
- T1 * pomocna1 = new T1[(*_trenutno) + 1];
- T1 * pomocna2 = new T2[(*_trenutno) + 1];
- for (int i = 0; i < (*_trenutno); i++)
- {
- pomocna1[i] = _elementi1[i];
- pomocna2[i] = _elementi2[i];
- }
- pomocna1[*_trenutno] = primT1;
- pomocna2[*_trenutno] = primT2;
- delete[] _elementi1;
- delete[]_elementi2;
- _elementi1 = pomocna1;
- _elementi2 = pomocna2;
- (*_trenutno)++;
- }
- void operator=(const Kolekcija & primKolekcija)
- {
- (*_trenutno) = (*primKolekcija._trenutno);
- _elementi1 = new T1[*_trenutno];
- _elementi2 = new T2[*_trenutno];
- for (int i = 0; i < (*_trenutno); i++)
- {
- _elementi1[i] = primKolekcija._elementi1[i];
- _elementi2[i] = primKolekcija._elementi2[i];
- }
- }
- void SortOpadajuciByT2()
- {
- for (int i = 0; i < (*_trenutno); i++)
- {
- for (int j = i+1; j < (*_trenutno); j++)
- {
- if (_elementi2[i] < _elementi2[j])
- {
- swap(_elementi1[i], _elementi1[j]);
- swap(_elementi2[i], _elementi2[j]);
- }
- }
- }
- }
- };
- 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(const DatumVrijeme & primDatum) // konst kopije
- {
- _dan = new int(*primDatum._dan);
- _mjesec = new int(*primDatum._mjesec);
- _godina = new int(*primDatum._godina);
- _sati = new int(*primDatum._sati);
- _minuti = new int(*primDatum._minuti);
- }
- ~DatumVrijeme() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- delete _sati; _sati = nullptr;
- delete _minuti; _minuti = nullptr;
- }
- friend ostream& operator<< (ostream &COUT, DatumVrijeme &obj) {
- COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << " " << *obj._sati << ":" << *obj._minuti << endl;
- return COUT;
- }
- char * ToCharArray()
- {
- stringstream noviObj;
- noviObj << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti;
- int vel = noviObj.str().length() + 1;
- char * charDatum = new char[vel];
- strcpy_s(charDatum, vel, noviObj.str().c_str());
- return charDatum;
- }
- void operator =(const DatumVrijeme & primDatum)
- {
- _dan = new int(*primDatum._dan);
- _mjesec = new int(*primDatum._mjesec);
- _godina = new int(*primDatum._godina);
- _sati = new int(*primDatum._sati);
- _minuti = new int(*primDatum._minuti);
- }
- };
- 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() {
- delete[] _naziv; _naziv = nullptr;
- }
- friend ostream& operator<< (ostream &COUT, Predmet &obj) {
- COUT << obj._naziv << " (" << obj._ocjena << ") " << obj._napomena << endl;
- return COUT;
- }
- 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 = nullptr;
- }
- ~Uspjeh() {
- delete _predmeti; _predmeti = nullptr;
- }
- Kolekcija<Predmet*, DatumVrijeme> * GetPredmeti() { return _predmeti; }
- 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;
- }
- }
- 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; }
- bool AddPredmet(enum eRazred primRazred, Predmet & primPredmet, DatumVrijeme & primDatum)
- {
- }
- };
- 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>0");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement