Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- 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 * crt = "\n----------------------------------\n";
- 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;
- }
- bool provjera(Datum datum)
- {
- if (datum._godina > _godina)
- return true;
- else if (datum._godina == _godina && datum._mjesec > _mjesec)
- return true;
- else if (datum._mjesec == _mjesec && datum._dan > _dan)
- return true;
- else return false;
- }
- };
- Datum _datumIzbora;
- struct Osoba
- {
- Datum _datumRodjenja;
- char * _imePrezime;
- char _JMBG[14];
- Opstina _Prebivaliste;
- void unos(Datum d, char * ip, char jmbg[], Opstina p)
- {
- _datumRodjenja = d;
- _imePrezime = new char[strlen(ip) + 1];
- strcpy(_imePrezime, ip);
- strcpy(_JMBG, jmbg);
- _Prebivaliste = p;
- }
- void Dealociraj()
- {
- delete[] _imePrezime; _imePrezime = nullptr;
- }
- /*void Info()
- {
- _datumRodjenja.Ispis();
- cout << _imePrezime << " " << _JMBG << " " <<
- OpstineChar[_Prebivaliste] << endl;
- }*/
- void Info()
- {
- cout << crt;
- cout << "Ime i prezime osobe (glasaca): " << _imePrezime << endl;
- cout << "JMBG: " << _JMBG << endl;
- cout << "Opstina prebivalista: " << OpstineChar[_Prebivaliste] << endl;
- cout << "Datum rodjenja: ";
- _datumRodjenja.Ispis();
- }
- };
- struct Glas
- {
- Osoba * _glasac;
- Kandidati * _glasZa;
- void Unos(Osoba o, Kandidati k)
- {
- _glasac = new Osoba(o);
- _glasac->unos(o._datumRodjenja, o._imePrezime, o._JMBG, o._Prebivaliste);
- _glasZa = new Kandidati(k);
- }
- void Ispis()
- {
- _glasac->Info();
- cout << "Glas ide kandidatu: "<<KandidatiChar[*_glasZa] << endl;
- }
- void Dealociraj()
- {
- _glasac->Dealociraj();
- delete[] _glasac; _glasac = nullptr;
- delete[] _glasZa; _glasZa = nullptr;
- }
- };
- struct Izbori2016
- {
- Opstina * _glasackoMjesto;
- Glas * _glasovi[1000];
- int _doSadaGlasalo;
- void Unos(Opstina opstina)
- {
- //1. Unos - na osnovu vrijednosti primljenih parametara, inicijalizovati vrijednosti atributa strukture.
- _glasackoMjesto = new Opstina(opstina);
- //_datumIzbora = new Datum;
- _doSadaGlasalo = 0;
- }
- bool DodajGlas(Glas glas)
- {
- /*2. DodajGlas - funkcija treba da omoguci dodavanje informacija o novom glasu i tom prilikom onemoguciti :
- da ista osoba glasa vise puta, glasanje osobama mladjim od 18 godina(uzeti u obzir samo mjesec i godinu rodjenja),
- glasanje osobama iz drugih opstina.
- U zavisnosti od uspjesnosti operacije funkcija vraca true ili false*/
- if (_doSadaGlasalo > 1000)
- return false;
- for (int i = 0; i < _doSadaGlasalo; i++)
- {
- if (strcmp(_glasovi[i]->_glasac->_JMBG, glas._glasac->_JMBG) == 0) //ista osoba
- return false;
- if (_glasovi[i]->_glasac->_Prebivaliste != glas._glasac->_Prebivaliste) //ne zivi u istom prebivalistu
- return false;
- if (_datumIzbora._godina - glas._glasac->_datumRodjenja._godina == 18) //u godini izbora glasac ce imati/napuniti 18
- {
- if (_datumIzbora._mjesec - glas._glasac->_datumRodjenja._mjesec < 0)//u mjesecu izbora glasac jos nije napunio 18 godina
- return false;
- }
- else if (_datumIzbora._godina - glas._glasac->_datumRodjenja._godina < 18)//u godini izbora galas nema navrsenih 18 godina
- return false;
- }
- _glasovi[_doSadaGlasalo] = new Glas(glas);
- _glasovi[_doSadaGlasalo]->Unos(*glas._glasac, *glas._glasZa);
- _doSadaGlasalo++;
- return true;
- }
- void brojGlasova()
- {
- int brojacGlasova0 = 0;
- int brojacGlasova1 = 0;
- int brojacGlasova2 = 0;
- int brojacGlasova3 = 0;
- for (int i = 0; i < _doSadaGlasalo; i++)
- {
- if (*_glasovi[i]->_glasZa == Kandidat1)
- {
- brojacGlasova0++;
- }
- if (*_glasovi[i]->_glasZa == Kandidat2)
- {
- brojacGlasova1++;
- }
- if (*_glasovi[i]->_glasZa == Kandidat3)
- {
- brojacGlasova2++;
- }
- if (*_glasovi[i]->_glasZa == Kandidat4)
- {
- brojacGlasova3++;
- }
- }
- //bubble sort
- int nizKandidata[4] = { 1,2,3,4 };
- int nizGlasova[4] = { brojacGlasova0, brojacGlasova1, brojacGlasova2, brojacGlasova3 };
- for (int i = 0; i < 4; i++)
- {
- for (int j = 1; j < 4; j++)
- {
- if (nizGlasova[j] > nizGlasova[j - 1])
- {
- swap(nizGlasova[j], nizGlasova[j - 1]);
- swap(nizKandidata[j], nizKandidata[j - 1]);
- }
- }
- }
- float prosjek0 = 0;
- float prosjek1= 0;
- float prosjek2 = 0;
- float prosjek3 = 0;
- prosjek0 = (brojacGlasova0 * 100) / _doSadaGlasalo;
- prosjek1 = (brojacGlasova1 * 100) / _doSadaGlasalo;
- prosjek2 = (brojacGlasova2 * 100) / _doSadaGlasalo;
- prosjek3 = (brojacGlasova3 * 100) / _doSadaGlasalo;
- for (int i = 0; i < 4; i++)
- {
- cout <<"Kandidat: "<< nizKandidata[i]<<" je osvojio: "<<nizGlasova[i] << endl;
- }
- }
- void Ispis()
- {
- /*3. Ispis - 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, 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*/
- for (int i = 0; i < _doSadaGlasalo; i++)
- {
- cout << crt;
- cout << "-----GLASAC:" <<i+1<< endl;
- //cout<<"Datum rodjenja: "<<_glasovi[i]->_glasac->_datumRodjenja;
- cout<<"Ime i prezime glasaca: "<<_glasovi[i]->_glasac->_imePrezime<<endl;
- cout << "JMBG glasaca: " << _glasovi[i]->_glasac->_JMBG << endl;
- cout << "Prebivaliste glasaca: " << OpstineChar[_glasovi[i]->_glasac->_Prebivaliste] << endl;
- cout<<"Glasac je dao glas kandidatu: "<< KandidatiChar[*_glasovi[i]->_glasZa] << endl;
- cout << endl;
- }
- brojGlasova();
- }
- int BrojGlasacaPoRodjenju(Datum OD, Datum DO)
- {
- /*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)*/
- int temp = 0;
- for (int i = 0; i < _doSadaGlasalo; i++)
- {
- if (OD.provjera(_glasovi[i]->_glasac->_datumRodjenja) == false && DO.provjera(_glasovi[i]->_glasac->_datumRodjenja) == true)
- temp++;
- }
- return temp;
- }
- void Dealociraj()
- {
- delete[] _glasackoMjesto; _glasackoMjesto = nullptr;
- for (int i = 0; i < _doSadaGlasalo; i++)
- {
- _glasovi[i]->Dealociraj();
- delete[] _glasovi[i]; _glasovi[i] = nullptr;
- }
- }
- };
- //3. PretragaRekurzivno - rekurzivna funkcija koja treba da vrati broj glasova koje je na izborima ostvario
- //odredjeni kandidat (kandidat se proslijedjuje kao parametar)
- int PretragaRekurzivno(Kandidati kandidat, Izbori2016 izbor, int doSadaGlasalo, int brojGlasova)
- {
- if (doSadaGlasalo == 0)
- {
- return brojGlasova;
- }
- else
- {
- if (kandidat == *izbor._glasovi[doSadaGlasalo - 1]->_glasZa)
- brojGlasova++;
- PretragaRekurzivno(kandidat, izbor, doSadaGlasalo - 1, brojGlasova);
- }
- }
- void UpisiUBinarniFajl(Izbori2016 izbori)
- {
- /*1. UpisiUBinarniFajl - objekat koji je primljen kao parametar upisuje u binarni fajl. Naziv fajla treba biti identican nazivu opstine
- u kojoj se odrzavaju izbori*/
- char * NazivFajla = OpstineChar[*izbori._glasackoMjesto];
- ofstream upis(NazivFajla, ios::out, ios::binary);
- if (upis.is_open())
- {
- upis.write((char*)(&izbori), sizeof(izbori));
- cout << crt;
- cout << "Fajl: " << NazivFajla << " uspjesno upisan... " << endl;
- }
- else
- cout << "Greska prilikom upisa fajla... " <<NazivFajla<< endl;
- upis.close();
- }
- void UcitajIzBinarnogFajla(Izbori2016 & izbori, char * opstina)
- {
- /*2. UcitajIzBinarnogFajla - u objekat koji je primljen kao parametar ucitava sadrzaj binarnog fajla (naziv fajla je takodjer proslijedjen
- kao parametar)*/
- ifstream ispis(opstina, ios::in, ios::binary);
- if (ispis.is_open())
- {
- ispis.read((char*)(&izbori), sizeof(izbori));
- cout << crt;
- cout << "Fajl: " << opstina << " uspjesno ucitan... " << endl;
- }
- else
- cout << "Greska prilikom ucitavanja fajla... " << opstina << endl;
- ispis.close();
- }
- void main() {
- /*
- 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NEĆE BODOVATI
- 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
- 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
- 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
- 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)
- 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
- */
- Datum datumGlasac1, datumGlasac2, datumGlasac3, datumGlasac4, datumIzbora;
- datumIzbora.Unos(14, 7, 2016);
- datumGlasac1.Unos(18, 5, 1990);
- datumGlasac2.Unos(5, 3, 1982);
- datumGlasac3.Unos(12, 8, 1958);
- datumGlasac4.Unos(22, 6, 2000);
- _datumIzbora = datumIzbora;
- Osoba a, b, c, d, e;
- a.unos(datumGlasac1, "Denis Music", "1111111111111", Opstina1);
- b.unos(datumGlasac2, "Jasmin Azemovic", "1111111111112", Opstina1);
- c.unos(datumGlasac3, "Indira Hamulic", "1111111111113", Opstina1);
- d.unos(datumGlasac4, "Adel Handzic", "1111111111114", Opstina2);
- e.unos(datumGlasac4, "Zanin Vejzovic", "1111111111115", Opstina1);
- Glas g1, g2, g3, g4, g5;
- g1.Unos(a, Kandidat1);
- g2.Unos(b, Kandidat1);
- g3.Unos(c, Kandidat2);
- g4.Unos(d, Kandidat1);
- g5.Unos(e, Kandidat2);
- Izbori2016 izbori, izbori_FromFile;
- izbori.Unos(Opstina1);
- izbori.DodajGlas(g1);
- izbori.DodajGlas(g2);
- izbori.DodajGlas(g3);
- izbori.DodajGlas(g4);
- izbori.DodajGlas(g5);
- izbori.Ispis();
- Datum OD, DO;
- OD.Unos(17, 7, 1998);
- DO.Unos(17, 7, 1986);
- cout << "Glasaca u starost od 18 - 30 godina-> " << izbori.BrojGlasacaPoRodjenju(OD, DO) << endl;
- cout << "Broj glasova za Kandidat1-> " << PretragaRekurzivno(Kandidat1, izbori, izbori._doSadaGlasalo,0) << endl;
- UpisiUBinarniFajl(izbori);
- UcitajIzBinarnogFajla(izbori_FromFile, "Opstina1");
- izbori_FromFile.Ispis();
- //dealokacija
- a.Dealociraj(); b.Dealociraj(); c.Dealociraj(); d.Dealociraj(); e.Dealociraj();
- g1.Dealociraj(); g2.Dealociraj(); g3.Dealociraj(); g4.Dealociraj(); g5.Dealociraj();
- izbori.Dealociraj();
- system("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement