Advertisement
Guest User

Untitled

a guest
Jul 24th, 2016
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.40 KB | None | 0 0
  1. //Zadatak::Izbori 2016
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. enum Opstina{ Opstina1, Opstina2, Opstina3, Opstina4 };
  6. char * OpstineChar[] = { "Opstina1", "Opstina2", "Opstina3", "Opstina4" };
  7. enum Kandidati{ Kandidat1, Kandidat2, Kandidat3, Kandidat4 };
  8. char * KandidatiChar[] = { "Kandidat1", "Kandidat2", "Kandidat3", "Kandidat4" };
  9. char crtice[] = "-------------------------------------------------------------";
  10.  
  11. struct Datum{
  12. int _dan, _mjesec, _godina;
  13. void Unos(int d, int m, int g){ _dan = d; _mjesec = m; _godina = g; }
  14. void Ispis(){
  15. cout << _dan << "/" << _mjesec << "/" << _godina << "." << endl;
  16. }
  17. };
  18.  
  19. struct Osoba{
  20. Datum _datumRodjenja;
  21. char *_imePrezime;
  22. char _JMBG[14];
  23. Opstina _Prebivaliste;
  24. void Unos(Datum d, char *ip, char jmbg[], Opstina p){
  25. _imePrezime = new char[strlen(ip) + 1];
  26. strcpy_s(_imePrezime, strlen(ip) + 1, ip);
  27. _Prebivaliste = p;
  28. _datumRodjenja.Unos(d._dan, d._mjesec, d._godina);
  29. strcpy_s(_JMBG, 14, jmbg);
  30. }
  31. void Dealociraj(){
  32. delete[]_imePrezime;
  33. _imePrezime = nullptr;
  34. }
  35. void Info(){
  36. cout << crtice << endl;
  37. cout << "Ime prezime:\t" << _imePrezime << endl;
  38. cout << "Maticni broj:\t" << _JMBG << endl;
  39. cout << "Datum rodjenja:\t";
  40. _datumRodjenja.Ispis();
  41. cout << "Prebivaliste:\t" << OpstineChar[_Prebivaliste] << endl;
  42. }
  43. };
  44.  
  45. struct Glas{
  46. Osoba *_glasac;
  47. Kandidati *_glasZa;
  48. void Unos(Osoba o, Kandidati k){
  49. _glasac = new Osoba;
  50. _glasac->Unos(o._datumRodjenja, o._imePrezime, o._JMBG, o._Prebivaliste);
  51. _glasZa = new Kandidati;
  52. *_glasZa = k;
  53. }
  54. void Ispis(){
  55. _glasac->Info();
  56. cout << "Glas za\t" << KandidatiChar[*_glasZa] << endl;
  57. }
  58. void Dealociraj(){
  59. _glasac->Dealociraj();
  60. delete _glasac;
  61. _glasac = nullptr;
  62. delete _glasZa;
  63. _glasZa = nullptr;
  64. }
  65. };
  66.  
  67. bool starijiOd18(Datum d){
  68. if (d._godina + 17 > 2014)
  69. return false;
  70. else if (d._godina + 17 && d._mjesec >= 7)
  71. return false;
  72. else
  73. return true;
  74. }
  75.  
  76. struct Izbori2016{
  77. Opstina *_glasackoMjesto;
  78. Glas *_glasovi[1000];
  79. int _doSadaGlasalo;
  80.  
  81. void Unos(Opstina o){
  82. _glasackoMjesto = new Opstina;
  83. *_glasackoMjesto = o;
  84. _doSadaGlasalo = 0;
  85. /*na osnovu vrijednosti primljenih parametara, inicijalizovati vrijednosti atributa strukture.*/
  86. }
  87. bool DodajGlas(Glas noviGlas){
  88. /*funkcija treba da omoguci dodavanje informacija o novom glasu i tom prilikom:
  89. - onemoguciti da ista osoba glasa vise puta
  90. - onemoguciti glasanje osobama mladjim od 18 godina (uzeti u obzir
  91. samo mjesec i godinu rodjenja)
  92. - onemoguciti glasanje osobama iz drugih opstina
  93. - u zavisnosti od uspjesnosti operacije funkcija vraca true ili false
  94. */
  95. if (!(starijiOd18(noviGlas._glasac->_datumRodjenja))){
  96. cout << noviGlas._glasac->_imePrezime << " je mladji/a od 18 godina." << endl;
  97. return false;
  98. }
  99. if (*_glasackoMjesto != noviGlas._glasac->_Prebivaliste){
  100. cout << noviGlas._glasac->_imePrezime << " je iz druge opstine." << endl;
  101. return false;
  102. }
  103. for (int i = 0; i < _doSadaGlasalo; i++){
  104. if (strcmp(noviGlas._glasac->_imePrezime, _glasovi[i]->_glasac->_imePrezime) == 0){
  105. cout << noviGlas._glasac->_imePrezime << " je vec glasao." << endl;
  106. return false;
  107. }
  108. }
  109. _glasovi[_doSadaGlasalo] = new Glas;
  110. _glasovi[_doSadaGlasalo++]->Unos(*noviGlas._glasac, *noviGlas._glasZa);
  111. return true;
  112. }
  113. void Dealociraj(){
  114. delete _glasackoMjesto;
  115. _glasackoMjesto = nullptr;
  116.  
  117. for (int i = 0; i < _doSadaGlasalo; i++){
  118. _glasovi[i]->Dealociraj();
  119. delete _glasovi[i];
  120. _glasovi[i] = nullptr;
  121. }
  122. delete[]_glasovi;
  123. }
  124. };
  125.  
  126. struct BrojGlasova{//Pomocna struktura za prebrojavanje glasova po opstinama i sortiranje
  127. Kandidati k;
  128. int _o[4];
  129. int _brojGlasova;
  130. };
  131.  
  132. Opstina ProglasiPobjednika(Izbori2016*izbornaMjesta, int brojIzbornihMjesta){
  133. /*
  134. u zavisnosti od postignutog uspjeha:
  135. - funkcija treba ispisati listu kandidata sortiranu opadajucim redoslijedom, a uz
  136. svakog kandidata je potrebno ispisati i osvojeni procenat glasova
  137. - funkcija vraca opstinu u kojoj je pobjednicki kandidat ostvario najveci broj
  138. glasova
  139. - ukoliko je pobjednicki kandidat ostvario podjednak broj glasova u vise opstina,
  140. funkcija vraca prvu koja se nalazi u nizu na koji pokazuje pokazivac
  141. izbornaMjesta
  142. */
  143. BrojGlasova kandidatiBroj[4];
  144. float ukupanBrojGlasova = 0;
  145. for (int i = 0; i < 4; i++){
  146. kandidatiBroj[i].k = (Kandidati)i;
  147. kandidatiBroj[i]._brojGlasova = 0;
  148. for (int j = 0; j < 4; j++){
  149. kandidatiBroj[i]._o[j] = 0;
  150. }
  151. }
  152. //BROJANJE GLASOVA
  153. for (int i = 0; i < brojIzbornihMjesta; i++){
  154. for (int j = 0; j < izbornaMjesta[i]._doSadaGlasalo; j++){
  155. if (*izbornaMjesta[i]._glasovi[j]->_glasZa == kandidatiBroj[0].k){
  156. kandidatiBroj[0]._brojGlasova++;
  157. kandidatiBroj[0]._o[*izbornaMjesta[i]._glasackoMjesto]++;
  158. ukupanBrojGlasova++;
  159. }
  160. if (*izbornaMjesta[i]._glasovi[j]->_glasZa == kandidatiBroj[1].k){
  161. kandidatiBroj[1]._brojGlasova++;
  162. kandidatiBroj[1]._o[*izbornaMjesta[i]._glasackoMjesto]++;
  163. ukupanBrojGlasova++;
  164. }
  165. if (*izbornaMjesta[i]._glasovi[j]->_glasZa == kandidatiBroj[2].k){
  166. kandidatiBroj[2]._brojGlasova++;
  167. kandidatiBroj[2]._o[*izbornaMjesta[i]._glasackoMjesto]++;
  168. ukupanBrojGlasova++;
  169. }
  170. if (*izbornaMjesta[i]._glasovi[j]->_glasZa == kandidatiBroj[3].k){
  171. kandidatiBroj[3]._brojGlasova++;
  172. kandidatiBroj[3]._o[*izbornaMjesta[i]._glasackoMjesto]++;
  173. ukupanBrojGlasova++;
  174. }
  175. }
  176. }
  177. cout << " ukupan broj glasova " << ukupanBrojGlasova << endl;
  178. //SORTIRANJE
  179. int lokacija = 0;
  180. BrojGlasova spremi;
  181. for (int i = 0; i < 3; i++){
  182. for (int j = i + 1; j < 4; j++){
  183. if (kandidatiBroj[j]._brojGlasova>kandidatiBroj[lokacija]._brojGlasova)
  184. lokacija = j;
  185. }
  186. if (kandidatiBroj[i]._brojGlasova < kandidatiBroj[lokacija]._brojGlasova){
  187. spremi.k = kandidatiBroj[i].k;
  188. spremi._brojGlasova = kandidatiBroj[i]._brojGlasova;
  189. spremi._o[4] = kandidatiBroj[i]._o[4];
  190. for (int j = 0; j < 4; j++){
  191. spremi._o[j] = kandidatiBroj[i]._o[j];
  192. }
  193. kandidatiBroj[i].k = kandidatiBroj[lokacija].k;
  194. kandidatiBroj[i]._brojGlasova = kandidatiBroj[lokacija]._brojGlasova;
  195. for (int j = 0; j < 4; j++){
  196. kandidatiBroj[i]._o[j] = kandidatiBroj[lokacija]._o[j];
  197. }
  198. kandidatiBroj[lokacija].k = spremi.k;
  199. kandidatiBroj[lokacija]._brojGlasova = spremi._brojGlasova;
  200. for (int j = 0; j < 4; j++){
  201. kandidatiBroj[lokacija]._o[j] = spremi._o[j];
  202. }
  203. }
  204. }
  205. //ISPIS
  206. cout << crtice << endl;
  207. for (int i = 0; i < 4; i++){
  208. cout << KandidatiChar[kandidatiBroj[i].k] << " sa brojem glasova " << kandidatiBroj[i]._brojGlasova << " sto je " <<
  209. (kandidatiBroj[i]._brojGlasova / ukupanBrojGlasova * 100) << " % od ukupnog broja glasova." << endl;
  210. for (int j = 0; j < 4; j++){
  211. cout << "U mjestu " << OpstineChar[j] << " je osvojio " << kandidatiBroj[i]._o[j] << endl;
  212. }
  213. cout << endl;
  214. }
  215. //PROVJERA U KOJOJ JE OPSTINI POBJEDNICKI KANDIDAT OSTVARIO NAJVECI BROJ GLASOVA
  216. lokacija = 0;
  217. for (int i = 0; i < 3; i++){
  218. if (kandidatiBroj[0]._o[i] < kandidatiBroj[0]._o[i + 1])
  219. lokacija = i + 1;
  220. }
  221. cout << KandidatiChar[kandidatiBroj[0].k] << " je u mjestu " << OpstineChar[lokacija] <<
  222. " osvojio " << kandidatiBroj[0]._o[lokacija] << " glasova." << endl;
  223. return (Opstina)kandidatiBroj[0]._o[lokacija];
  224. }
  225.  
  226. void main(){
  227.  
  228. Datum d1, d2, d3, d4, d5;
  229. d1.Unos(27, 8, 1948);
  230. d2.Unos(3, 4, 1988);
  231. d3.Unos(17, 7, 1798);
  232. d4.Unos(16, 9, 2000);
  233. d5.Unos(9, 9, 1997);
  234.  
  235. Osoba o1, o2, o3, o4, o5;
  236. o1.Unos(d1, "Glasac 1", "2308348173527", Opstina1);
  237. o2.Unos(d2, "Glasac 2", "2308677543527", Opstina1);
  238. o3.Unos(d3, "Glasac 3", "2345348173527", Opstina1);
  239. o4.Unos(d4, "Glasac 4", "5334348173527", Opstina1);
  240. o5.Unos(d5, "Glasac 5", "2308348174566", Opstina2);
  241.  
  242. Glas g1, g2, g3, g4, g5, g6;
  243. g1.Unos(o1, Kandidat1);
  244. g2.Unos(o2, Kandidat3);
  245. g3.Unos(o3, Kandidat3);
  246. g4.Unos(o4, Kandidat2);
  247. g5.Unos(o5, Kandidat3);
  248.  
  249. g1.Ispis();
  250. g2.Ispis();
  251. g3.Ispis();
  252. g4.Ispis();
  253. g5.Ispis();
  254.  
  255. Izbori2016 izbornaMjesta[4];
  256.  
  257. izbornaMjesta[0].Unos(Opstina1);
  258. izbornaMjesta[1].Unos(Opstina2);
  259. izbornaMjesta[2].Unos(Opstina3);
  260. izbornaMjesta[3].Unos(Opstina4);
  261.  
  262. izbornaMjesta[0].DodajGlas(g1);
  263. izbornaMjesta[0].DodajGlas(g2);
  264. izbornaMjesta[0].DodajGlas(g3);
  265. izbornaMjesta[0].DodajGlas(g4);
  266. izbornaMjesta[1].DodajGlas(g5);
  267.  
  268. izbornaMjesta[0].DodajGlas(g5);//Glasac je vec glasao
  269.  
  270. ProglasiPobjednika(izbornaMjesta, 4);
  271.  
  272. system("pause>0");
  273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement