Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.13 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4.  
  5. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  6. #pragma warning(disable:4996)
  7.  
  8. enum Opstina { Opstina1, Opstina2, Opstina3, Opstina4 };
  9. char * OpstineChar[] = { "Opstina1", "Opstina2", "Opstina3", "Opstina4" };
  10. enum Kandidati { Kandidat1, Kandidat2, Kandidat3, Kandidat4 };
  11. char * KandidatiChar[] = { "Kandidat1", "Kandidat2", "Kandidat3", "Kandidat4" };
  12.  
  13. struct Datum {
  14. int _dan, _mjesec, _godina;
  15. void Unos(int d, int m, int g) { _dan = d; _mjesec = m; _godina = g; }
  16. void Ispis() { cout << _dan << "/" << _mjesec << "/" << _godina << endl; }
  17. };
  18. struct Osoba {
  19. Datum _datumRodjenja;
  20. char * _imePrezime;
  21. char _JMBG[14];
  22. Opstina _Prebivaliste;
  23. void unos(Datum d, char * ip, char jmbg[], Opstina p) {
  24. _datumRodjenja = d;
  25. _imePrezime = new char[strlen(ip) + 1];
  26. strcpy(_imePrezime, ip);
  27. strcpy(_JMBG, jmbg);
  28. _Prebivaliste = p;
  29. }
  30. void Dealociraj() { delete[] _imePrezime; _imePrezime = nullptr; }
  31. void Info() {
  32. _datumRodjenja.Ispis();
  33. cout << _imePrezime << " " << _JMBG << " " <<
  34. OpstineChar[_Prebivaliste] << endl;
  35. }
  36. };
  37. struct Glas {
  38. Osoba * _glasac;
  39. Kandidati * _glasZa;
  40. void Unos(Osoba o, Kandidati k) {
  41. _glasac =new Osoba(o);
  42. _glasac->unos(o._datumRodjenja, o._imePrezime, o._JMBG, o._Prebivaliste);
  43. _glasZa = new Kandidati(k);
  44. }
  45. void Ispis() {
  46. _glasac->Info();
  47. cout << KandidatiChar[*_glasZa] << endl;
  48. }
  49. void Dealociraj() { _glasac->Dealociraj(); }
  50. };
  51. struct KandidatBrojGlasova {
  52. Kandidati k;
  53. int brojGlasova = 0;
  54. void Unos(Kandidati kan) {
  55. k = kan;
  56. brojGlasova = 0;
  57.  
  58. }
  59. };
  60. struct Izbori2016 {
  61. Opstina * _glasackoMjesto=nullptr;
  62. Glas * _glasovi[1000];
  63. int _doSadaGlasalo=0;
  64. void Unos(Opstina o) {
  65. _glasackoMjesto = new Opstina(o);
  66. }
  67.  
  68. bool DodajGlas(Glas g,Datum d) {
  69. for (size_t i = 0; i < _doSadaGlasalo; i++)
  70. {
  71. if (strcmp(_glasovi[i]->_glasac->_imePrezime, g._glasac->_imePrezime) == 0)
  72. {
  73. cout << "( Greska )::Isti glasac se ponavlja" << endl;
  74. return false;
  75. }
  76. }
  77. if (d._godina - g._glasac->_datumRodjenja._godina < 18)
  78. {
  79. cout << "(GRESKA ) : Maloljetna Osoba " << endl;
  80. return false;
  81. }
  82.  
  83. if (d._godina - g._glasac->_datumRodjenja._godina == 18) {
  84. if (d._mjesec < g._glasac->_datumRodjenja._mjesec)
  85. {
  86. cout << "(GRESKA ) : Maloljetna Osoba " << endl;
  87. return false;
  88. }
  89. }
  90. if (g._glasac->_Prebivaliste != *_glasackoMjesto)
  91. {
  92. cout << "(GRESKA ) : Nije odgovarajuce Prebivaliste " << endl;
  93. return false;
  94. }
  95. _glasovi[_doSadaGlasalo] = new Glas;
  96. _glasovi[_doSadaGlasalo]->Unos(*g._glasac, *g._glasZa);
  97. cout << ":: GLAS USPJESNO DODAN :: " << endl;
  98. _doSadaGlasalo++;
  99. return true;
  100. }
  101. /*
  102. 1. Unos - na osnovu vrijednosti primljenih parametara, inicijalizovati vrijednosti atributa strukture.
  103. 2. DodajGlas - funkcija treba da omoguci dodavanje informacija o novom glasu i tom prilikom onemoguciti:
  104. da ista osoba glasa vise puta, glasanje osobama mladjim od 18 godina
  105. (uzeti u obzir samo mjesec i godinu rodjenja), glasanje osobama iz drugih opstina.
  106. U zavisnosti od uspjesnosti operacije funkcija vraca true ili false
  107. 3. Ispis - u zavisnosti od postignutog uspjeha funkcija treba ispisati listu kandidata
  108. sortiranu opadajucim redoslijedom, a uz svakog kandidata je potrebno ispisati i osvojeni procenat glasova.
  109. Funkcija vraca opstinu u kojoj je pobjednicki kandidat ostvario najveci broj glasova, a ukoliko je pobjednicki kandidat ostvario podjednak broj glasova u vise opstina, funkcija vraca prvu koja se nalazi u nizu na koji pokazuje pokazivac izbornaMjesta
  110. 4. BrojGlasacaPoRodjenju - funkcija vraca broj glasaca koji su do tog momenta glasali, a koji su rodjeni u parametrima definisanom periodu (parametri su tipa datum, period OD i DO)
  111. */
  112. void Ispis() {
  113. KandidatBrojGlasova kandidat[4];
  114. kandidat[0].Unos(Kandidat1);
  115. kandidat[1].Unos(Kandidat2);
  116. kandidat[2].Unos(Kandidat3);
  117. kandidat[3].Unos(Kandidat4);
  118. for (size_t i = 0; i < _doSadaGlasalo; i++)
  119. {
  120. if (*_glasovi[i]->_glasZa == Kandidat1)
  121. kandidat[0].brojGlasova++;
  122.  
  123. if (*_glasovi[i]->_glasZa == Kandidat2)
  124. kandidat[1].brojGlasova++;
  125.  
  126. if (*_glasovi[i]->_glasZa == Kandidat3)
  127. kandidat[2].brojGlasova++;
  128.  
  129. if (*_glasovi[i]->_glasZa == Kandidat4)
  130. kandidat[3].brojGlasova++;
  131.  
  132. }
  133. cout << ":: OPSTINA ::" << OpstineChar[*_glasackoMjesto] << endl;
  134.  
  135. bool zamjena=false;
  136. do
  137. {
  138. zamjena = false;
  139. KandidatBrojGlasova temp;
  140.  
  141. for (size_t i = 0; i < 3; i++)
  142. {
  143. if (kandidat[i].brojGlasova > kandidat[i + 1].brojGlasova)
  144. {
  145. /*swap(kandidat[i], kandidat[i + 1]);
  146. swap(kandidat[i].brojGlasova, kandidat[i + 1].brojGlasova);
  147. zamjena = true;*/
  148. temp = kandidat[i];
  149. kandidat[i] = kandidat[i + 1];
  150. kandidat[i + 1] = temp;
  151. zamjena = true;
  152.  
  153. }
  154. }
  155.  
  156. } while (zamjena==true);
  157.  
  158. for (size_t i = 0; i < 4; i++) {
  159. cout << "Kandidati :: " << KandidatiChar[kandidat[i].k];
  160. cout << "Ima Glasova :: " << kandidat[i].brojGlasova << endl;
  161. cout << "Procenat : " << kandidat[i].brojGlasova / (float)_doSadaGlasalo << "%" << endl;
  162. }
  163.  
  164. }
  165. };
  166. void UpisiUBinarniFajl(Izbori2016 izbori) {
  167. ofstream upis(OpstineChar[*izbori._glasackoMjesto], ios::binary);
  168. upis.write((char*)(&izbori), sizeof(izbori));
  169. upis.close();
  170. }
  171. void UcitajIzBinarnogFajla(Izbori2016 &izbori_FromFile, char*niz) {
  172. fstream ispis(niz, ios::in);
  173. ispis.read((char*)(&izbori_FromFile), sizeof(izbori_FromFile));
  174. ispis.close();
  175. }
  176. /*
  177. 1. UpisiUBinarniFajl - objekat koji je primljen kao parametar upisuje u binarni fajl. Naziv fajla treba biti identican nazivu opstine u kojoj se odrzavaju izbori
  178. 2. UcitajIzBinarnogFajla - u objekat koji je primljen kao parametar ucitava sadrzaj binarnog fajla (naziv fajla je takodjer proslijedjen kao parametar)
  179. 3. PretragaRekurzivno - rekurzivna funkcija koja treba da vrati broj glasova koje je na izborima ostvario odredjeni kandidat (kandidat se proslijedjuje kao parametar)
  180. */
  181.  
  182. void main() {
  183. /*
  184. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NEĆE BODOVATI
  185. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  186. 3. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE
  187. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  188. 5. 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)
  189. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  190. */
  191.  
  192. Datum datumGlasac1, datumGlasac2, datumGlasac3, datumGlasac4, datumIzbora;
  193. datumIzbora.Unos(14, 7, 2016);
  194. datumGlasac1.Unos(18, 5, 1990);
  195. datumGlasac2.Unos(5, 3, 1982);
  196. datumGlasac3.Unos(12, 8, 1958);
  197. datumGlasac4.Unos(22, 6, 2000);
  198.  
  199. Osoba a, b, c, d, e;
  200. a.unos(datumGlasac1, "Denis Music", "1111111111111", Opstina1);
  201. b.unos(datumGlasac2, "Jasmin Azemovic", "1111111111112", Opstina1);
  202. c.unos(datumGlasac3, "Indira Hamulic", "1111111111113", Opstina1);
  203. d.unos(datumGlasac4, "Adel Handzic", "1111111111114", Opstina2);
  204. e.unos(datumGlasac4, "Zanin Vejzovic", "1111111111115", Opstina1);
  205.  
  206.  
  207. Glas g1, g2, g3, g4, g5;
  208. g1.Unos(a, Kandidat1);
  209. g2.Unos(b, Kandidat1);
  210. g3.Unos(c, Kandidat2);
  211. g4.Unos(d, Kandidat1);
  212. g5.Unos(e, Kandidat2);
  213.  
  214. Izbori2016 izbori, izbori_FromFile;
  215. izbori.Unos(Opstina1);
  216.  
  217. izbori.DodajGlas(g1,datumIzbora);
  218. izbori.DodajGlas(g2,datumIzbora);
  219. izbori.DodajGlas(g3,datumIzbora);
  220. izbori.DodajGlas(g4,datumIzbora);
  221. izbori.DodajGlas(g5,datumIzbora);
  222. izbori.Ispis();
  223.  
  224. //Datum OD, DO;
  225. //OD.Unos(17, 7, 1998);
  226. //DO.Unos(17, 7, 1986);
  227. //cout << "Glasaca u starost od 18 - 30 godina->" << izbori.BrojGlasacaPoRodjenju(OD, DO) << endl;
  228. //cout << "Broj glasova za Kandidat1->" << PretragaRekurzivno(/*potrebni parametri*/) << endl;
  229. UpisiUBinarniFajl(izbori);
  230. UcitajIzBinarnogFajla(izbori_FromFile, "Opstina1");
  231. izbori_FromFile.Ispis();
  232.  
  233. system("Pause>0");
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement