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 };
- const char * OpstineChar[] = { "Opstina1", "Opstina2", "Opstina3", "Opstina4" };
- enum Kandidati { Kandidat1, Kandidat2, Kandidat3, Kandidat4 };
- const char * KandidatiChar[] = { "Kandidat1", "Kandidat2", "Kandidat3", "Kandidat4" };
- const char* crt= { "-------------------------------------------------" };
- 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, const char * ip, const char jmbg[], Opstina p)
- {
- _datumRodjenja = d;
- _imePrezime = new char[strlen(ip) + 1];
- strcpy_s(_imePrezime,strlen(ip)+1, ip);
- strcpy(_JMBG, jmbg);
- _Prebivaliste = p;
- }
- void Dealociraj()
- { delete[] _imePrezime; _imePrezime = nullptr; }
- void Info()
- {
- cout << "Datum rodjenja: ";
- _datumRodjenja.Ispis();
- cout <<"Ime i prezime: "<< _imePrezime << "\nJMBG: " << _JMBG << "\nNaziv opstine: " <<
- 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(k);
- }
- void Ispis()
- {
- _glasac->Info();
- cout <<"Glasao za: "<< KandidatiChar[*_glasZa] << endl;
- cout << crt << endl;
- }
- void Dealociraj()
- {
- _glasac->Dealociraj();
- delete[]_glasZa;
- _glasZa = nullptr;
- }
- };
- bool Mladjiod18(Datum Datumrodjenja, Datum DatumIzbora)
- {
- if (DatumIzbora._godina - Datumrodjenja._godina < 18)
- return true;
- else if (DatumIzbora._godina - Datumrodjenja._godina == 18)
- {
- if (DatumIzbora._mjesec < Datumrodjenja._mjesec)
- return true;
- else
- return false;
- }
- else
- return false;
- }
- struct BrojGlasova
- {
- Kandidati _kand;
- int brojGlasova=0;
- void Unos(Kandidati k)
- {
- _kand = k;
- }
- };
- struct Izbori2016
- {
- Opstina * _glasackoMjesto;
- Glas * _glasovi[1000];
- int _doSadaGlasalo;
- void Dealociraj()
- {
- delete[]_glasackoMjesto; _glasackoMjesto = nullptr;
- for (int i = 0; i < _doSadaGlasalo; i++)
- _glasovi[i]->Dealociraj();
- }
- void Unos(Opstina o)
- {
- _glasackoMjesto = new Opstina(o);
- _doSadaGlasalo = 0;
- }
- bool DodajGlas(Glas g, Datum datumIzbora)
- {
- if (_doSadaGlasalo >= 1000)
- return false;
- for (int i = 0; i < _doSadaGlasalo; i++)
- {
- if (strcmp(_glasovi[i]->_glasac->_JMBG, g._glasac->_JMBG) == 0)
- return false;
- }
- if (*_glasackoMjesto != g._glasac->_Prebivaliste)
- return false;
- else if (Mladjiod18(g._glasac->_datumRodjenja, datumIzbora))
- return false;
- _glasovi[_doSadaGlasalo] = new Glas;
- _glasovi[_doSadaGlasalo]->Unos(*g._glasac, *g._glasZa);
- _doSadaGlasalo++;
- return true;
- }
- bool ManjiDatum(Datum d1, Datum d2)
- {
- if (d1._godina < d2._godina)
- return true;
- else if (d1._godina == d2._godina)
- {
- if (d1._mjesec < d2._mjesec)
- return true;
- else if (d1._mjesec == d2._mjesec)
- {
- if (d1._dan < d2._dan)
- return true;
- else
- return false;
- }
- }
- else
- return false;
- }
- int BrojGlasacaPoRodjenju(Datum Od, Datum Do)
- {
- Datum temp;
- if (ManjiDatum(Do, Od))
- {
- temp = Od;
- Od = Do;
- Do = temp;
- }
- int brojac = 0;
- for (int i = 0; i < _doSadaGlasalo; i++)
- {
- if (ManjiDatum(Od, _glasovi[i]->_glasac->_datumRodjenja) && ManjiDatum(_glasovi[i]->_glasac->_datumRodjenja, Do))
- brojac++;
- }
- return brojac;
- }
- void Ispis()
- {
- //brojanje glasova
- BrojGlasova niz[4];
- niz[0].Unos(Kandidat1);
- niz[1].Unos(Kandidat2);
- niz[2].Unos(Kandidat3);
- niz[3].Unos(Kandidat4);
- for (int i = 0; i < _doSadaGlasalo; i++)
- {
- if (*_glasovi[i]->_glasZa == Kandidat1)
- niz[0].brojGlasova++;
- else if (*_glasovi[i]->_glasZa == Kandidat2)
- niz[1].brojGlasova++;
- else if (*_glasovi[i]->_glasZa == Kandidat3)
- niz[2].brojGlasova++;
- else if (*_glasovi[i]->_glasZa == Kandidat4)
- niz[3].brojGlasova++;
- }
- //sortiranje
- bool promjena = true;
- BrojGlasova temp;
- while (promjena)
- {
- promjena = false;
- for (int i = 0; i < _doSadaGlasalo; i++)
- {
- if (niz[i + 1].brojGlasova > niz[i].brojGlasova)
- {
- temp = niz[i];
- niz[i] = niz[i + 1];
- niz[i + 1] = temp;
- promjena = true;
- }
- }
- }
- //ispis
- cout << "Glasacko mjesto: " << OpstineChar[*_glasackoMjesto] << endl;
- for (int i = 0; i < _doSadaGlasalo; i++)
- {
- cout << KandidatiChar[niz[i]._kand] << " -> broj glasova: " << niz[i].brojGlasova << " ( " << (niz[i].brojGlasova * 100)/(float)_doSadaGlasalo << " % )" << endl;
- }
- }
- /*
- 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)
- */
- };
- /*
- 1. UpisiUBinarniFajl - objekat koji je primljen kao parametar upisuje u binarni fajl.
- Naziv fajla treba biti identican nazivu opstine u kojoj se odrzavaju izbori */
- void UpisiUBinarniFajl(Izbori2016 &izbori)
- {
- char *nazivFajla = new char[strlen(OpstineChar[*izbori._glasackoMjesto]) + 1];
- strcpy_s(nazivFajla, strlen(OpstineChar[*izbori._glasackoMjesto]) + 1, (OpstineChar[*izbori._glasackoMjesto]));
- ofstream fajlUpis;
- fajlUpis.open(nazivFajla, ios::binary);
- fajlUpis.write((char*)(&izbori), sizeof(izbori));
- fajlUpis.close();
- }
- /*2. UcitajIzBinarnogFajla - u objekat koji je primljen kao parametar ucitava sadrzaj binarnog fajla
- (naziv fajla je takodjer proslijedjen kao parametar)
- */
- void UcitajIzBinarnogFajla(Izbori2016 &izbori, const char*naziv)
- {
- ifstream fajlIspis;
- fajlIspis.open(naziv, ios::binary);
- fajlIspis.read((char*)(&izbori), sizeof(izbori));
- fajlIspis.close();
- }
- /*
- 3. PretragaRekurzivno - rekurzivna funkcija koja treba da vrati broj glasova koje je na izborima ostvario odredjeni kandidat (kandidat se proslijedjuje kao parametar)
- */
- int PretragaRekurzivno(Izbori2016 izbori, Kandidati kandidat, int i=0, int brojacGlasova=0)
- {
- if (i == izbori._doSadaGlasalo)
- return brojacGlasova;
- else if (*izbori._glasovi[i]->_glasZa == kandidat)
- {
- brojacGlasova += 1;
- }
- PretragaRekurzivno(izbori, kandidat,i+1,brojacGlasova);
- }
- void main() {
- /*
- 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NECE 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 CETE 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;
- // nije dobro formulisano ovo glasaca u starosti od.. jer se ovo trazi u funckiji
- //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)
- cout << "Broj glasova za Kandidat1->" << PretragaRekurzivno(izbori,Kandidat1) << endl;
- cout << crt << endl;
- UpisiUBinarniFajl(izbori);
- UcitajIzBinarnogFajla(izbori_FromFile, "Opstina1");
- cout << "ISPIS IZ FAJLA" << endl;
- cout << crt << endl;
- izbori_FromFile.Ispis();
- izbori.Dealociraj();
- a.Dealociraj();
- b.Dealociraj();
- c.Dealociraj();
- d.Dealociraj();
- e.Dealociraj();
- g1.Dealociraj();
- g2.Dealociraj();
- g3.Dealociraj();
- g4.Dealociraj();
- g5.Dealociraj();
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement