Advertisement
Guest User

Untitled

a guest
Aug 29th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.51 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. int pronadjenih = 0;
  4. struct Datum {
  5. int * _dan, *_mjesec, *_godina;
  6. void Unos(int d, int m, int g) {
  7. _dan = new int(d);
  8. _mjesec = new int(m);
  9. _godina = new int(g);
  10. }
  11. void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
  12. void Dealociraj() {
  13. delete _dan; delete _mjesec; delete _godina;
  14. _dan = _mjesec = _godina = nullptr;
  15. }
  16. };
  17. enum VrstaKursa {
  18. HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL,
  19. WindowsSecurity
  20. };
  21. struct Kurs {
  22. VrstaKursa _vrsta;
  23. Datum * _pocetak;
  24. Datum * _kraj;
  25. char * _imePredavaca;
  26. void Unos(VrstaKursa vrsta, Datum pocetak, Datum kraj, char * predavac) {
  27. _vrsta = vrsta;
  28. _pocetak = new Datum();
  29. _pocetak->Unos(*pocetak._dan, *pocetak._mjesec, *pocetak._godina);
  30. _kraj = new Datum();
  31. _kraj->Unos(*kraj._dan, *kraj._mjesec, *kraj._godina);
  32. _imePredavaca = new char[strlen(predavac) + 1];
  33. strcpy_s(_imePredavaca, strlen(predavac) + 1, predavac);
  34. }
  35. void Ispis() {
  36. cout << _vrsta << " (" << _imePredavaca << ")" << endl;
  37. _pocetak->Ispis();
  38. _kraj->Ispis();
  39.  
  40. }
  41. void Dealociraj() {
  42. _pocetak->Dealociraj(); delete _pocetak; _pocetak = nullptr;
  43. _kraj->Dealociraj(); delete _kraj; _kraj = nullptr;
  44. delete[] _imePredavaca; _imePredavaca = nullptr;
  45. }
  46. };
  47. struct Kandidat {
  48. char * _imePrezime;
  49. Kurs * _pohadjaniKursevi;
  50. float * _ostvareniUspjeh;
  51. int _tretnutnoKurseva;
  52. void Unos(char * imePrezime) {
  53. _imePrezime = new char[strlen(imePrezime) + 1];
  54. strcpy_s(_imePrezime, strlen(imePrezime) + 1, imePrezime);
  55. _pohadjaniKursevi = nullptr;
  56. _ostvareniUspjeh = nullptr;
  57. _tretnutnoKurseva = 0;
  58. }
  59. void Dealociraj() {
  60. delete[]_imePrezime; _imePrezime = nullptr;
  61. for (int i = 0; i < _tretnutnoKurseva; i++)
  62. _pohadjaniKursevi[i].Dealociraj();
  63. delete[] _pohadjaniKursevi; _pohadjaniKursevi = nullptr;
  64. delete[] _ostvareniUspjeh; _ostvareniUspjeh = nullptr;
  65. }
  66. void Ispis() {
  67. cout << _imePrezime << endl;
  68. cout << "Trenutno kurseva: \n" << _tretnutnoKurseva << endl;
  69. for (size_t i = 0; i < _tretnutnoKurseva; i++) {
  70. _pohadjaniKursevi[i].Ispis();
  71. cout << " Uspjeh: " << _ostvareniUspjeh[i] << endl;
  72. }
  73. }
  74. 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
  75. kursa. svaki kurs se okončava evidentiranjem ostvarenog uspjeha (0%-100%).ostvareni uspjeh se dodaje tek nakon polaganja, pa neokončani kurs
  76. podrazumijeva onaj kurs kome nije evidentiran uspjeh. prilikom dodavanja kursa voditi računa da kandidat najviše dva puta prijaviti isti kurs,
  77. 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
  78. terminu kao neki od neokončanih kurseva (novi kurs se ne smije dodati dok u tom periodu postoji neokončani kurs). */
  79.  
  80. /*cout << "Dodaje\n";*/
  81.  
  82.  
  83. for (int i = 0; i < _tretnutnoKurseva; i++) {
  84. if (_pohadjaniKursevi[i]._vrsta == k._vrsta && _ostvareniUspjeh[i] >60)
  85. return false;
  86.  
  87. }
  88.  
  89. Kurs *novi = new Kurs[_tretnutnoKurseva + 1];
  90. float *novi2 = new float[_tretnutnoKurseva + 1];
  91.  
  92. for (int i = 0; i < _tretnutnoKurseva; i++) {
  93. novi[i].Unos(_pohadjaniKursevi[i]._vrsta, *_pohadjaniKursevi[i]._pocetak, *_pohadjaniKursevi[i]._kraj, _pohadjaniKursevi[i]._imePredavaca);
  94. novi2[i] = _ostvareniUspjeh[i];
  95. //cout << "Kopiram iz niza u niz da prosirim lokaciju" << i << "\n";
  96. }
  97.  
  98.  
  99. novi[_tretnutnoKurseva].Unos(k._vrsta, *k._pocetak, *k._kraj, k._imePredavaca);
  100. novi2[_tretnutnoKurseva] = 0;
  101.  
  102. /*cout << "----ISPIS dodanog kursa u pola funkcije\n";
  103.  
  104. novi[0].Ispis();*/
  105.  
  106. if (_pohadjaniKursevi != nullptr)
  107. for (int i = 0; i < _tretnutnoKurseva; i++)
  108. _pohadjaniKursevi[i].Dealociraj();
  109. delete[] _pohadjaniKursevi;
  110. delete[] _ostvareniUspjeh;
  111. _pohadjaniKursevi = novi;
  112. /*cout << "----ISPIS dodanog kursa pred kraj funkcije\n";
  113. _pohadjaniKursevi[0].Ispis();*/
  114. _ostvareniUspjeh = novi2;
  115. _tretnutnoKurseva++;
  116. return true;
  117. }
  118. bool DodajUspjeh(Kurs * k, float uspjeh) {
  119. /*dodaje uspjeh ostvaren na kursu k. da bi se uspjeh dodao kurs k treba postojati u listi pohađanih kurseva*/
  120. // Kurs *novi = new Kurs[_tretnutnoKurseva + 1];
  121. //float *novi2 = new float[_tretnutnoKurseva + 1];
  122.  
  123. bool pronadjen = false;
  124.  
  125. for (int i = 0; i < _tretnutnoKurseva; i++) {
  126. if (_pohadjaniKursevi[i]._vrsta == k->_vrsta) {
  127.  
  128. _ostvareniUspjeh[i] = uspjeh;
  129.  
  130. pronadjen = true;
  131.  
  132. }
  133. }
  134. /*_pohadjaniKursevi = novi;
  135. _ostvareniUspjeh = novi2;
  136. _pohadjaniKursevi[_tretnutnoKurseva] = *k;
  137. _ostvareniUspjeh[_tretnutnoKurseva] = uspjeh;
  138. _tretnutnoKurseva++;*/
  139. return pronadjen;
  140. }
  141. int UkloniKurs(VrstaKursa vrsta) {
  142. /*uklanja sve kurseve koji su vrste definisane parametrom. funkcija vraća broj uklonjenih kurseva. u slučaju uklanjanja kursa umanjiti veličinu niza.*/
  143.  
  144.  
  145. }
  146. };
  147. 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)
  148. okončali kurs kod traženog predavača, te ostvarili uspjeh koji je veći od onog definisanog parametrom.
  149. 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
  150. kursa)*/
  151. Kandidat *temp = new Kandidat[k->_tretnutnoKurseva];
  152. int j = 0;
  153. for (int i = 0; i < k->_tretnutnoKurseva; i++) {
  154. if (strcmp(k[i]._pohadjaniKursevi->_imePredavaca, predavac) == 0 && *k[i]._ostvareniUspjeh>60)
  155. temp[j].Unos(k[i]._imePrezime);
  156. for (int s = 0; s < k->_tretnutnoKurseva; s++) {
  157. temp[j].DodajKurs(k[i]._pohadjaniKursevi[s]);
  158. temp[j].DodajUspjeh(&k[i]._pohadjaniKursevi[s],k[i]._ostvareniUspjeh[s]);
  159. }
  160. j++;
  161. }
  162. Kandidat *novi = new Kandidat[j];
  163. for (int l = 0; l <j; l++) {
  164. novi[l] = temp[l];
  165. }
  166. delete[] temp;
  167. temp = nullptr;
  168. pronadjenih = j;
  169. return novi;
  170.  
  171.  
  172. }
  173. void main() {
  174. //izbjegavajte koristenje vlastitog imena i prezimena
  175. //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti
  176. //nije potrebno da korisnik unosi vrijednosti parametara (možete ih predefinisati)
  177. Datum dat, dat2;
  178. dat.Unos(1, 2, 2009);
  179. dat2.Unos(2, 3, 2007);
  180.  
  181. cout << "---TEST KURSA\n";
  182. Kurs prvi, drugi;
  183. prvi.Unos(MasteringSQL, dat, dat2, "Denis");
  184. drugi.Unos(WindowsSecurity, dat, dat2, "Indira");
  185. prvi.Ispis();
  186. drugi.Ispis();
  187.  
  188. cout << "---TEST KANDIDATA\n";
  189. Kandidat jedan, dva;
  190. jedan.Unos("Misala ");
  191. dva.Unos("emir");
  192. jedan.DodajKurs(prvi);
  193. jedan.DodajUspjeh(&prvi, 70.0);
  194. jedan.DodajKurs(drugi);
  195. jedan.DodajUspjeh(&drugi, 75.0);
  196.  
  197. dva.DodajKurs(prvi);
  198. dva.DodajUspjeh(&prvi, 71.0);
  199. dva.DodajKurs(drugi);
  200. dva.DodajUspjeh(&drugi, 72.0);
  201.  
  202. jedan.Ispis();
  203. dva.Ispis();
  204.  
  205. Kandidat *niz = new Kandidat[3];
  206. niz[0].Unos(jedan._imePrezime);
  207. niz[1].Unos(dva._imePrezime);
  208.  
  209. for (int i = 0; i < jedan._tretnutnoKurseva; i++) {
  210. niz[0].DodajKurs(jedan._pohadjaniKursevi[i]);
  211. niz[0].DodajUspjeh(&jedan._pohadjaniKursevi[i], jedan._ostvareniUspjeh[i]);
  212. }
  213.  
  214. for (int i = 0; i < dva._tretnutnoKurseva; i++) {
  215. niz[1].DodajKurs(dva._pohadjaniKursevi[i]);
  216. niz[1].DodajUspjeh(&dva._pohadjaniKursevi[i], dva._ostvareniUspjeh[i]);
  217. }
  218.  
  219. cout << "---TESTIRANJE PRETRAGE\n";
  220. Kandidat *hjhj = Pretraga(niz, 3, "Denis", &dat, &dat2, 60);
  221. for (int o = 0; o < pronadjenih; o++)
  222. {
  223. hjhj[o].Ispis();
  224.  
  225. }
  226. system("pause>0");
  227.  
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement