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" };
- 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) {
- _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;
- }
- };
- 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 << KandidatiChar[*_glasZa] << endl;
- }
- void Dealociraj() { _glasac->Dealociraj(); }
- };
- struct KandidatBrojGlasova {
- Kandidati k;
- int brojGlasova = 0;
- void Unos(Kandidati kan) {
- k = kan;
- brojGlasova = 0;
- }
- };
- struct Izbori2016 {
- Opstina * _glasackoMjesto=nullptr;
- Glas * _glasovi[1000];
- int _doSadaGlasalo=0;
- void Unos(Opstina o) {
- _glasackoMjesto = new Opstina(o);
- }
- bool DodajGlas(Glas g,Datum d) {
- for (size_t i = 0; i < _doSadaGlasalo; i++)
- {
- if (strcmp(_glasovi[i]->_glasac->_imePrezime, g._glasac->_imePrezime) == 0)
- {
- cout << "( Greska )::Isti glasac se ponavlja" << endl;
- return false;
- }
- }
- if (d._godina - g._glasac->_datumRodjenja._godina < 18)
- {
- cout << "(GRESKA ) : Maloljetna Osoba " << endl;
- return false;
- }
- if (d._godina - g._glasac->_datumRodjenja._godina == 18) {
- if (d._mjesec < g._glasac->_datumRodjenja._mjesec)
- {
- cout << "(GRESKA ) : Maloljetna Osoba " << endl;
- return false;
- }
- }
- if (g._glasac->_Prebivaliste != *_glasackoMjesto)
- {
- cout << "(GRESKA ) : Nije odgovarajuce Prebivaliste " << endl;
- return false;
- }
- _glasovi[_doSadaGlasalo] = new Glas;
- _glasovi[_doSadaGlasalo]->Unos(*g._glasac, *g._glasZa);
- cout << ":: GLAS USPJESNO DODAN :: " << endl;
- _doSadaGlasalo++;
- return true;
- }
- /*
- 1. Unos - na osnovu vrijednosti primljenih parametara, inicijalizovati vrijednosti atributa strukture.
- 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
- 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
- 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)
- */
- void Ispis() {
- KandidatBrojGlasova kandidat[4];
- kandidat[0].Unos(Kandidat1);
- kandidat[1].Unos(Kandidat2);
- kandidat[2].Unos(Kandidat3);
- kandidat[3].Unos(Kandidat4);
- for (size_t i = 0; i < _doSadaGlasalo; i++)
- {
- if (*_glasovi[i]->_glasZa == Kandidat1)
- kandidat[0].brojGlasova++;
- if (*_glasovi[i]->_glasZa == Kandidat2)
- kandidat[1].brojGlasova++;
- if (*_glasovi[i]->_glasZa == Kandidat3)
- kandidat[2].brojGlasova++;
- if (*_glasovi[i]->_glasZa == Kandidat4)
- kandidat[3].brojGlasova++;
- }
- cout << ":: OPSTINA ::" << OpstineChar[*_glasackoMjesto] << endl;
- bool zamjena=false;
- do
- {
- zamjena = false;
- KandidatBrojGlasova temp;
- for (size_t i = 0; i < 3; i++)
- {
- if (kandidat[i].brojGlasova > kandidat[i + 1].brojGlasova)
- {
- /*swap(kandidat[i], kandidat[i + 1]);
- swap(kandidat[i].brojGlasova, kandidat[i + 1].brojGlasova);
- zamjena = true;*/
- temp = kandidat[i];
- kandidat[i] = kandidat[i + 1];
- kandidat[i + 1] = temp;
- zamjena = true;
- }
- }
- } while (zamjena==true);
- for (size_t i = 0; i < 4; i++) {
- cout << "Kandidati :: " << KandidatiChar[kandidat[i].k];
- cout << "Ima Glasova :: " << kandidat[i].brojGlasova << endl;
- cout << "Procenat : " << kandidat[i].brojGlasova / (float)_doSadaGlasalo << "%" << endl;
- }
- }
- };
- void UpisiUBinarniFajl(Izbori2016 izbori) {
- ofstream upis(OpstineChar[*izbori._glasackoMjesto], ios::binary);
- upis.write((char*)(&izbori), sizeof(izbori));
- upis.close();
- }
- void UcitajIzBinarnogFajla(Izbori2016 &izbori_FromFile, char*niz) {
- fstream ispis(niz, ios::in);
- ispis.read((char*)(&izbori_FromFile), sizeof(izbori_FromFile));
- ispis.close();
- }
- /*
- 1. UpisiUBinarniFajl - objekat koji je primljen kao parametar upisuje u binarni fajl. Naziv fajla treba biti identican nazivu opstine u kojoj se odrzavaju izbori
- 2. UcitajIzBinarnogFajla - u objekat koji je primljen kao parametar ucitava sadrzaj binarnog fajla (naziv fajla je takodjer proslijedjen kao parametar)
- 3. PretragaRekurzivno - rekurzivna funkcija koja treba da vrati broj glasova koje je na izborima ostvario odredjeni kandidat (kandidat se proslijedjuje kao parametar)
- */
- 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);
- 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,datumIzbora);
- izbori.DodajGlas(g2,datumIzbora);
- izbori.DodajGlas(g3,datumIzbora);
- izbori.DodajGlas(g4,datumIzbora);
- izbori.DodajGlas(g5,datumIzbora);
- 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(/*potrebni parametri*/) << endl;
- UpisiUBinarniFajl(izbori);
- UcitajIzBinarnogFajla(izbori_FromFile, "Opstina1");
- izbori_FromFile.Ispis();
- system("Pause>0");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement