Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- int pronadjenih = 0;
- struct Datum {
- int * _dan, *_mjesec, *_godina;
- void Unos(int d, int m, int g) {
- _dan = new int(d);
- _mjesec = new int(m);
- _godina = new int(g);
- }
- void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
- void Dealociraj() {
- delete _dan; delete _mjesec; delete _godina;
- _dan = _mjesec = _godina = nullptr;
- }
- };
- enum VrstaKursa {
- HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL,
- WindowsSecurity
- };
- struct Kurs {
- VrstaKursa _vrsta;
- Datum * _pocetak;
- Datum * _kraj;
- char * _imePredavaca;
- void Unos(VrstaKursa vrsta, Datum pocetak, Datum kraj, char * predavac) {
- _vrsta = vrsta;
- _pocetak = new Datum();
- _pocetak->Unos(*pocetak._dan, *pocetak._mjesec, *pocetak._godina);
- _kraj = new Datum();
- _kraj->Unos(*kraj._dan, *kraj._mjesec, *kraj._godina);
- _imePredavaca = new char[strlen(predavac) + 1];
- strcpy_s(_imePredavaca, strlen(predavac) + 1, predavac);
- }
- void Ispis() {
- cout << _vrsta << " (" << _imePredavaca << ")" << endl;
- _pocetak->Ispis();
- _kraj->Ispis();
- }
- void Dealociraj() {
- _pocetak->Dealociraj(); delete _pocetak; _pocetak = nullptr;
- _kraj->Dealociraj(); delete _kraj; _kraj = nullptr;
- delete[] _imePredavaca; _imePredavaca = nullptr;
- }
- };
- struct Kandidat {
- char * _imePrezime;
- Kurs * _pohadjaniKursevi;
- float * _ostvareniUspjeh;
- int _tretnutnoKurseva;
- void Unos(char * imePrezime) {
- _imePrezime = new char[strlen(imePrezime) + 1];
- strcpy_s(_imePrezime, strlen(imePrezime) + 1, imePrezime);
- _pohadjaniKursevi = nullptr;
- _ostvareniUspjeh = nullptr;
- _tretnutnoKurseva = 0;
- }
- void Dealociraj() {
- delete[]_imePrezime; _imePrezime = nullptr;
- for (int i = 0; i < _tretnutnoKurseva; i++)
- _pohadjaniKursevi[i].Dealociraj();
- delete[] _pohadjaniKursevi; _pohadjaniKursevi = nullptr;
- delete[] _ostvareniUspjeh; _ostvareniUspjeh = nullptr;
- }
- void Ispis() {
- cout << _imePrezime << endl;
- cout << "Trenutno kurseva: \n" << _tretnutnoKurseva << endl;
- for (size_t i = 0; i < _tretnutnoKurseva; i++) {
- _pohadjaniKursevi[i].Ispis();
- cout << " Uspjeh: " << _ostvareniUspjeh[i] << endl;
- }
- }
- bool DodajKurs(Kurs k) { /*dodaje podatke o novom kursu (nizove povećavati prilikom dodavanja svakog novog kursa). u jednom trenutku kandidat može prijaviti najviše 2
- kursa. svaki kurs se okončava evidentiranjem ostvarenog uspjeha (0%-100%).ostvareni uspjeh se dodaje tek nakon polaganja, pa neokončani kurs
- podrazumijeva onaj kurs kome nije evidentiran uspjeh. prilikom dodavanja kursa voditi računa da kandidat najviše dva puta prijaviti isti kurs,
- te nije moguće ponovo prijaviti kurs na kome je kandidat ostvario uspjeh veći od 60%. onemogućiti dodavanja kurseva koji se održavaju u istom
- terminu kao neki od neokončanih kurseva (novi kurs se ne smije dodati dok u tom periodu postoji neokončani kurs). */
- /*cout << "Dodaje\n";*/
- for (int i = 0; i < _tretnutnoKurseva; i++) {
- if (_pohadjaniKursevi[i]._vrsta == k._vrsta && _ostvareniUspjeh[i] >60)
- return false;
- }
- Kurs *novi = new Kurs[_tretnutnoKurseva + 1];
- float *novi2 = new float[_tretnutnoKurseva + 1];
- for (int i = 0; i < _tretnutnoKurseva; i++) {
- novi[i].Unos(_pohadjaniKursevi[i]._vrsta, *_pohadjaniKursevi[i]._pocetak, *_pohadjaniKursevi[i]._kraj, _pohadjaniKursevi[i]._imePredavaca);
- novi2[i] = _ostvareniUspjeh[i];
- //cout << "Kopiram iz niza u niz da prosirim lokaciju" << i << "\n";
- }
- novi[_tretnutnoKurseva].Unos(k._vrsta, *k._pocetak, *k._kraj, k._imePredavaca);
- novi2[_tretnutnoKurseva] = 0;
- /*cout << "----ISPIS dodanog kursa u pola funkcije\n";
- novi[0].Ispis();*/
- if (_pohadjaniKursevi != nullptr)
- for (int i = 0; i < _tretnutnoKurseva; i++)
- _pohadjaniKursevi[i].Dealociraj();
- delete[] _pohadjaniKursevi;
- delete[] _ostvareniUspjeh;
- _pohadjaniKursevi = novi;
- /*cout << "----ISPIS dodanog kursa pred kraj funkcije\n";
- _pohadjaniKursevi[0].Ispis();*/
- _ostvareniUspjeh = novi2;
- _tretnutnoKurseva++;
- return true;
- }
- bool DodajUspjeh(Kurs * k, float uspjeh) {
- /*dodaje uspjeh ostvaren na kursu k. da bi se uspjeh dodao kurs k treba postojati u listi pohađanih kurseva*/
- // Kurs *novi = new Kurs[_tretnutnoKurseva + 1];
- //float *novi2 = new float[_tretnutnoKurseva + 1];
- bool pronadjen = false;
- for (int i = 0; i < _tretnutnoKurseva; i++) {
- if (_pohadjaniKursevi[i]._vrsta == k->_vrsta) {
- _ostvareniUspjeh[i] = uspjeh;
- pronadjen = true;
- }
- }
- /*_pohadjaniKursevi = novi;
- _ostvareniUspjeh = novi2;
- _pohadjaniKursevi[_tretnutnoKurseva] = *k;
- _ostvareniUspjeh[_tretnutnoKurseva] = uspjeh;
- _tretnutnoKurseva++;*/
- return pronadjen;
- }
- int UkloniKurs(VrstaKursa vrsta) {
- /*uklanja sve kurseve koji su vrste definisane parametrom. funkcija vraća broj uklonjenih kurseva. u slučaju uklanjanja kursa umanjiti veličinu niza.*/
- }
- };
- Kandidat * Pretraga(Kandidat * k, int brojKandidata, char * predavac, Datum * OD, Datum * DO, float uspjeh) { /*vraća listu kandidata koji su u određenom periodu (OD - DO)
- okončali kurs kod traženog predavača, te ostvarili uspjeh koji je veći od onog definisanog parametrom.
- iz liste isključiti one koji su kod traženog predavača poništavali uspjeh (ostvarili uspjeh manji od 60%) tj. ponovo prijavljivali kurs (ne mora se raditi o istoj vrsti
- kursa)*/
- Kandidat *temp = new Kandidat[k->_tretnutnoKurseva];
- int j = 0;
- for (int i = 0; i < k->_tretnutnoKurseva; i++) {
- if (strcmp(k[i]._pohadjaniKursevi->_imePredavaca, predavac) == 0 && *k[i]._ostvareniUspjeh>60)
- temp[j].Unos(k[i]._imePrezime);
- for (int s = 0; s < k->_tretnutnoKurseva; s++) {
- temp[j].DodajKurs(k[i]._pohadjaniKursevi[s]);
- temp[j].DodajUspjeh(&k[i]._pohadjaniKursevi[s],k[i]._ostvareniUspjeh[s]);
- }
- j++;
- }
- Kandidat *novi = new Kandidat[j];
- for (int l = 0; l <j; l++) {
- novi[l] = temp[l];
- }
- delete[] temp;
- temp = nullptr;
- pronadjenih = j;
- return novi;
- }
- void main() {
- //izbjegavajte koristenje vlastitog imena i prezimena
- //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti
- //nije potrebno da korisnik unosi vrijednosti parametara (možete ih predefinisati)
- Datum dat, dat2;
- dat.Unos(1, 2, 2009);
- dat2.Unos(2, 3, 2007);
- cout << "---TEST KURSA\n";
- Kurs prvi, drugi;
- prvi.Unos(MasteringSQL, dat, dat2, "Denis");
- drugi.Unos(WindowsSecurity, dat, dat2, "Indira");
- prvi.Ispis();
- drugi.Ispis();
- cout << "---TEST KANDIDATA\n";
- Kandidat jedan, dva;
- jedan.Unos("Misala ");
- dva.Unos("emir");
- jedan.DodajKurs(prvi);
- jedan.DodajUspjeh(&prvi, 70.0);
- jedan.DodajKurs(drugi);
- jedan.DodajUspjeh(&drugi, 75.0);
- dva.DodajKurs(prvi);
- dva.DodajUspjeh(&prvi, 71.0);
- dva.DodajKurs(drugi);
- dva.DodajUspjeh(&drugi, 72.0);
- jedan.Ispis();
- dva.Ispis();
- Kandidat *niz = new Kandidat[3];
- niz[0].Unos(jedan._imePrezime);
- niz[1].Unos(dva._imePrezime);
- for (int i = 0; i < jedan._tretnutnoKurseva; i++) {
- niz[0].DodajKurs(jedan._pohadjaniKursevi[i]);
- niz[0].DodajUspjeh(&jedan._pohadjaniKursevi[i], jedan._ostvareniUspjeh[i]);
- }
- for (int i = 0; i < dva._tretnutnoKurseva; i++) {
- niz[1].DodajKurs(dva._pohadjaniKursevi[i]);
- niz[1].DodajUspjeh(&dva._pohadjaniKursevi[i], dva._ostvareniUspjeh[i]);
- }
- cout << "---TESTIRANJE PRETRAGE\n";
- Kandidat *hjhj = Pretraga(niz, 3, "Denis", &dat, &dat2, 60);
- for (int o = 0; o < pronadjenih; o++)
- {
- hjhj[o].Ispis();
- }
- system("pause>0");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement