Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Zadatak::Izbori 2016
- #include <iostream>
- using namespace std;
- enum Opstina{ Opstina1, Opstina2, Opstina3, Opstina4 };
- char * OpstineChar[] = { "Opstina1", "Opstina2", "Opstina3", "Opstina4" };
- enum Kandidati{ Kandidat1, Kandidat2, Kandidat3, Kandidat4 };
- char * KandidatiChar[] = { "Kandidat1", "Kandidat2", "Kandidat3", "Kandidat4" };
- char crtice[] = "-------------------------------------------------------------";
- struct Datum{
- int _dan, _mjesec, _godina;
- void Unos(int d, int m, int g){ _dan = d; _mjesec = m; _godina = g; }
- void Ispis(){
- cout << _dan << "/" << _mjesec << "/" << _godina << "." << endl;
- }
- };
- struct Osoba{
- Datum _datumRodjenja;
- char *_imePrezime;
- char _JMBG[14];
- Opstina _Prebivaliste;
- void Unos(Datum d, char *ip, char jmbg[], Opstina p){
- _imePrezime = new char[strlen(ip) + 1];
- strcpy_s(_imePrezime, strlen(ip) + 1, ip);
- _Prebivaliste = p;
- _datumRodjenja.Unos(d._dan, d._mjesec, d._godina);
- strcpy_s(_JMBG, 14, jmbg);
- }
- void Dealociraj(){
- delete[]_imePrezime;
- _imePrezime = nullptr;
- }
- void Info(){
- cout << crtice << endl;
- cout << "Ime prezime:\t" << _imePrezime << endl;
- cout << "Maticni broj:\t" << _JMBG << endl;
- cout << "Datum rodjenja:\t";
- _datumRodjenja.Ispis();
- cout << "Prebivaliste:\t" << OpstineChar[_Prebivaliste] << endl;
- }
- };
- struct Glas{
- Osoba *_glasac;
- Kandidati *_glasZa;
- void Unos(Osoba o, Kandidati k){
- _glasac = new Osoba;
- _glasac->Unos(o._datumRodjenja, o._imePrezime, o._JMBG, o._Prebivaliste);
- _glasZa = new Kandidati;
- *_glasZa = k;
- }
- void Ispis(){
- _glasac->Info();
- cout << "Glas za\t" << KandidatiChar[*_glasZa] << endl;
- }
- void Dealociraj(){
- _glasac->Dealociraj();
- delete _glasac;
- _glasac = nullptr;
- delete _glasZa;
- _glasZa = nullptr;
- }
- };
- bool starijiOd18(Datum d){
- if (d._godina + 17 > 2014)
- return false;
- else if (d._godina + 17 && d._mjesec >= 7)
- return false;
- else
- return true;
- }
- struct Izbori2016{
- Opstina *_glasackoMjesto;
- Glas *_glasovi[1000];
- int _doSadaGlasalo;
- void Unos(Opstina o){
- _glasackoMjesto = new Opstina;
- *_glasackoMjesto = o;
- _doSadaGlasalo = 0;
- /*na osnovu vrijednosti primljenih parametara, inicijalizovati vrijednosti atributa strukture.*/
- }
- bool DodajGlas(Glas noviGlas){
- /*funkcija treba da omoguci dodavanje informacija o novom glasu i tom prilikom:
- - onemoguciti da ista osoba glasa vise puta
- - onemoguciti glasanje osobama mladjim od 18 godina (uzeti u obzir
- samo mjesec i godinu rodjenja)
- - onemoguciti glasanje osobama iz drugih opstina
- - u zavisnosti od uspjesnosti operacije funkcija vraca true ili false
- */
- if (!(starijiOd18(noviGlas._glasac->_datumRodjenja))){
- cout << noviGlas._glasac->_imePrezime << " je mladji/a od 18 godina." << endl;
- return false;
- }
- if (*_glasackoMjesto != noviGlas._glasac->_Prebivaliste){
- cout << noviGlas._glasac->_imePrezime << " je iz druge opstine." << endl;
- return false;
- }
- for (int i = 0; i < _doSadaGlasalo; i++){
- if (strcmp(noviGlas._glasac->_imePrezime, _glasovi[i]->_glasac->_imePrezime) == 0){
- cout << noviGlas._glasac->_imePrezime << " je vec glasao." << endl;
- return false;
- }
- }
- _glasovi[_doSadaGlasalo] = new Glas;
- _glasovi[_doSadaGlasalo++]->Unos(*noviGlas._glasac, *noviGlas._glasZa);
- return true;
- }
- void Dealociraj(){
- delete _glasackoMjesto;
- _glasackoMjesto = nullptr;
- for (int i = 0; i < _doSadaGlasalo; i++){
- _glasovi[i]->Dealociraj();
- delete _glasovi[i];
- _glasovi[i] = nullptr;
- }
- delete[]_glasovi;
- }
- };
- struct BrojGlasova{//Pomocna struktura za prebrojavanje glasova po opstinama i sortiranje
- Kandidati k;
- int _o[4];
- int _brojGlasova;
- };
- Opstina ProglasiPobjednika(Izbori2016*izbornaMjesta, int brojIzbornihMjesta){
- /*
- u zavisnosti od postignutog uspjeha:
- - funkcija treba ispisati listu kandidata sortiranu opadajucim redoslijedom, a uz
- svakog kandidata je potrebno ispisati i osvojeni procenat glasova
- - funkcija vraca opstinu u kojoj je pobjednicki kandidat ostvario najveci broj
- glasova
- - ukoliko je pobjednicki kandidat ostvario podjednak broj glasova u vise opstina,
- funkcija vraca prvu koja se nalazi u nizu na koji pokazuje pokazivac
- izbornaMjesta
- */
- BrojGlasova kandidatiBroj[4];
- float ukupanBrojGlasova = 0;
- for (int i = 0; i < 4; i++){
- kandidatiBroj[i].k = (Kandidati)i;
- kandidatiBroj[i]._brojGlasova = 0;
- for (int j = 0; j < 4; j++){
- kandidatiBroj[i]._o[j] = 0;
- }
- }
- //BROJANJE GLASOVA
- for (int i = 0; i < brojIzbornihMjesta; i++){
- for (int j = 0; j < izbornaMjesta[i]._doSadaGlasalo; j++){
- if (*izbornaMjesta[i]._glasovi[j]->_glasZa == kandidatiBroj[0].k){
- kandidatiBroj[0]._brojGlasova++;
- kandidatiBroj[0]._o[*izbornaMjesta[i]._glasackoMjesto]++;
- ukupanBrojGlasova++;
- }
- if (*izbornaMjesta[i]._glasovi[j]->_glasZa == kandidatiBroj[1].k){
- kandidatiBroj[1]._brojGlasova++;
- kandidatiBroj[1]._o[*izbornaMjesta[i]._glasackoMjesto]++;
- ukupanBrojGlasova++;
- }
- if (*izbornaMjesta[i]._glasovi[j]->_glasZa == kandidatiBroj[2].k){
- kandidatiBroj[2]._brojGlasova++;
- kandidatiBroj[2]._o[*izbornaMjesta[i]._glasackoMjesto]++;
- ukupanBrojGlasova++;
- }
- if (*izbornaMjesta[i]._glasovi[j]->_glasZa == kandidatiBroj[3].k){
- kandidatiBroj[3]._brojGlasova++;
- kandidatiBroj[3]._o[*izbornaMjesta[i]._glasackoMjesto]++;
- ukupanBrojGlasova++;
- }
- }
- }
- cout << " ukupan broj glasova " << ukupanBrojGlasova << endl;
- //SORTIRANJE
- int lokacija = 0;
- BrojGlasova spremi;
- for (int i = 0; i < 3; i++){
- for (int j = i + 1; j < 4; j++){
- if (kandidatiBroj[j]._brojGlasova>kandidatiBroj[lokacija]._brojGlasova)
- lokacija = j;
- }
- if (kandidatiBroj[i]._brojGlasova < kandidatiBroj[lokacija]._brojGlasova){
- spremi.k = kandidatiBroj[i].k;
- spremi._brojGlasova = kandidatiBroj[i]._brojGlasova;
- spremi._o[4] = kandidatiBroj[i]._o[4];
- for (int j = 0; j < 4; j++){
- spremi._o[j] = kandidatiBroj[i]._o[j];
- }
- kandidatiBroj[i].k = kandidatiBroj[lokacija].k;
- kandidatiBroj[i]._brojGlasova = kandidatiBroj[lokacija]._brojGlasova;
- for (int j = 0; j < 4; j++){
- kandidatiBroj[i]._o[j] = kandidatiBroj[lokacija]._o[j];
- }
- kandidatiBroj[lokacija].k = spremi.k;
- kandidatiBroj[lokacija]._brojGlasova = spremi._brojGlasova;
- for (int j = 0; j < 4; j++){
- kandidatiBroj[lokacija]._o[j] = spremi._o[j];
- }
- }
- }
- //ISPIS
- cout << crtice << endl;
- for (int i = 0; i < 4; i++){
- cout << KandidatiChar[kandidatiBroj[i].k] << " sa brojem glasova " << kandidatiBroj[i]._brojGlasova << " sto je " <<
- (kandidatiBroj[i]._brojGlasova / ukupanBrojGlasova * 100) << " % od ukupnog broja glasova." << endl;
- for (int j = 0; j < 4; j++){
- cout << "U mjestu " << OpstineChar[j] << " je osvojio " << kandidatiBroj[i]._o[j] << endl;
- }
- cout << endl;
- }
- //PROVJERA U KOJOJ JE OPSTINI POBJEDNICKI KANDIDAT OSTVARIO NAJVECI BROJ GLASOVA
- lokacija = 0;
- for (int i = 0; i < 3; i++){
- if (kandidatiBroj[0]._o[i] < kandidatiBroj[0]._o[i + 1])
- lokacija = i + 1;
- }
- cout << KandidatiChar[kandidatiBroj[0].k] << " je u mjestu " << OpstineChar[lokacija] <<
- " osvojio " << kandidatiBroj[0]._o[lokacija] << " glasova." << endl;
- return (Opstina)kandidatiBroj[0]._o[lokacija];
- }
- void main(){
- Datum d1, d2, d3, d4, d5;
- d1.Unos(27, 8, 1948);
- d2.Unos(3, 4, 1988);
- d3.Unos(17, 7, 1798);
- d4.Unos(16, 9, 2000);
- d5.Unos(9, 9, 1997);
- Osoba o1, o2, o3, o4, o5;
- o1.Unos(d1, "Glasac 1", "2308348173527", Opstina1);
- o2.Unos(d2, "Glasac 2", "2308677543527", Opstina1);
- o3.Unos(d3, "Glasac 3", "2345348173527", Opstina1);
- o4.Unos(d4, "Glasac 4", "5334348173527", Opstina1);
- o5.Unos(d5, "Glasac 5", "2308348174566", Opstina2);
- Glas g1, g2, g3, g4, g5, g6;
- g1.Unos(o1, Kandidat1);
- g2.Unos(o2, Kandidat3);
- g3.Unos(o3, Kandidat3);
- g4.Unos(o4, Kandidat2);
- g5.Unos(o5, Kandidat3);
- g1.Ispis();
- g2.Ispis();
- g3.Ispis();
- g4.Ispis();
- g5.Ispis();
- Izbori2016 izbornaMjesta[4];
- izbornaMjesta[0].Unos(Opstina1);
- izbornaMjesta[1].Unos(Opstina2);
- izbornaMjesta[2].Unos(Opstina3);
- izbornaMjesta[3].Unos(Opstina4);
- izbornaMjesta[0].DodajGlas(g1);
- izbornaMjesta[0].DodajGlas(g2);
- izbornaMjesta[0].DodajGlas(g3);
- izbornaMjesta[0].DodajGlas(g4);
- izbornaMjesta[1].DodajGlas(g5);
- izbornaMjesta[0].DodajGlas(g5);//Glasac je vec glasao
- ProglasiPobjednika(izbornaMjesta, 4);
- system("pause>0");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement