Molim sve ljude dobre volje da pomognu i molim vas nemojte me kritikovati Dakle, dobio sam zadacu koju trebam predati do odredjenog roka i zapeo sam na zadnjem zadatku. Tako da trazim mali savjet ili neke smjernice kako ga rijesiti (da ne mislite da mi treba uradjena zadaca ) Dat je problem sa dva tekstualna fajla. Za izbore se kandidovalo 10 kandidata i njihovi maticni brojevi, imena, datum rodjenja su u fajlu kandidati.txt U drugom fajlu izbori.txt su datum rodjenja kandidata i broj osvojenih bodova. U fajlu izbori.txt se nalazi 10 linija i po jedna za svakog kandidata, isto i u fajlu kandidati.txt Npr. za jednog: kandidati.txt 050597413456 Meho Mehic 05.05.1974 izbori.txt 050597413456 3456 Potrebno je napisati program koji ce procitati sve podatke iz ulaznih fajlova, a zatim tabelarno prikazati podatke u opadajucem redoslijedu (po broju osvojenih glasova), a onda izvan tabele napisati ime prezime i broj osvojenih glasova u % i ukupan broj glasova. Odabrati pogodnu strukturu podataka za pohranu podataka o kandidatima kao i o rezultatima izbora, a za sortiranje u opadajucem redoslijedu koristiti heapsort. Moje pitanje je slijedece: da li je dobra ideja napraviti recimo neki struct koji sadrzi jedan int i dva stringa za pohranu jmbg imena i datuma rodjenja iz kandidati.txt, jos jedan sa dva inta za izbori.txt i kako ocitati sekvencu po sekvencu svake linije a ne da mi uzima citavu liniju (ifstream). Ili ima neka skroz drugacija varijanta? Dakle, ono sto mi je nejasno je kako mogu ove ulazne podatke smjestiti. Hvala unaprijed.
Napravi klasu u koju ćeš smjestit sve podatke o jednom kandidatu, ali joj odradi overload operatora <, > i ostalih koji budu neophodni za sortiranje.
Eo odradio sam ga ja iz dosade, nadam se da ce pomoci i da nije kasno EDIT: eo na forumu kod, posto pastebin nece da otvori: "Under heavy load". http://pastebin.com/gUdec3pN Spoiler Code: #include <iostream> #include <string> #include <fstream> #include <vector> #include <algorithm> using namespace std; class datum{ private: int _d; int _m; int _g; public: datum(int d=1,int m=1,int g=1900){ _d = d; _m = m; _g = g; } datum(const datum& d){ _d = d._d; _m = d._m; _g = d._g; } datum& operator=(datum d){ if (this != &d){ _d = d._d; _m = d._m; _g = d._g; } return *this; } friend ostream& operator<<(ostream& out, datum& d){ out << d._d << "." << d._m << "." << d._g; return out; } bool dodajdan(int d){ _d = d; return true; } bool dodajmjesec(int m){ _m = m; return true; } bool dodajgodinu(int g){ _g = g; return true; } }; class kandidat { private: string ime; string mat; datum d; public: kandidat(string i = "<nepoznato_ime>", string m = "<maticni_nepoznat>", datum d = datum(1, 1, 1900)){ ime = i; mat = m; this->d = d; } kandidat(const kandidat& obj){ ime = obj.ime; mat = obj.mat; d = obj.d; } string getime(){ return ime; } string getmat(){ return mat; } datum getdat(){ return d; } kandidat& operator=(kandidat& obj){ ime = obj.ime; mat = obj.mat; d = obj.d; } friend ostream& operator<<(ostream& out, kandidat& d){ out << "Kandidat: \t\t" << d.ime << endl << "JMBG: \t\t\t" << d.mat << endl << "Datum rodjenja:\t\t" << d.d<<endl; return out; } }; class izbori{ private: string mat; int bodovi; public: izbori(string m="<nepoznato>",int b=0){ mat = m; bodovi = b; } izbori(const izbori& obj){ mat = obj.mat; bodovi = obj.bodovi; } string getmat(){ return mat; } int getbod(){ return bodovi; } izbori& operator=(izbori& obj){ mat = obj.mat; bodovi = obj.bodovi; return *this; } bool operator<(izbori& obj){ if (this->bodovi < obj.bodovi) return true; return false; } friend ostream& operator<<(ostream& out, izbori& d){ out << "Broj osvojenih bodova:\t" << d.bodovi << endl; return out; } }; bool strtodat(string dat, datum &d){ int br = 0; string dio = ""; for (string::iterator it = dat.begin(); it != dat.end(); it++){ if (br < 2){ dio += *it; } if (br == 2){ d.dodajdan(atoi(dio.c_str())); dio.erase(); dio = ""; } if (br > 2 && br < 5){ dio += *it; } if (br == 5){ d.dodajmjesec(atoi(dio.c_str())); dio.erase(); dio = ""; } if (br>5 && br < 10){ dio += *it; } if (br == 9){ d.dodajgodinu(atoi(dio.c_str())); dio.erase(); dio = ""; } br++; } br = 0; return true; } bool dodajkandidate(vector<kandidat> &kand){ char* i = "kandidati.txt"; string mat = ""; string ime = ""; string dat; datum d; int b = 0; bool nn = false; ifstream ispis(i); int x = 0; bool p = false; if (ispis.fail()){ cout << "Greska: Provjerite destinaciju i ime fajla. (Fajl se mora nalaziti u istom folderu gdje se nalazi i program)" << endl; return false; } else{ char znak; while (ispis.get(znak)){ if (znak == '\n') nn = true; if (znak == ' ') b++; if (nn){ strtodat(dat, d); kandidat kan(ime, mat, d); kand.push_back(kan); ime.erase(); ime = ""; mat.erase(); mat = ""; dat.erase(); dat = ""; nn = false; b = 0; } if (b == 0){ if (znak != '\n') mat += znak; } if (b == 1){ if (znak!=' ') ime += znak; } if (b == 2){ ime += znak; } if (b == 3){ if (znak != ' ') dat += znak; } } } return true; } bool dodajizbore(vector<izbori> &izb){ char* i = "izbori.txt"; string mat = ""; string bodova = ""; int bod = 0; ifstream ispis(i); if (ispis.fail()){ cout << "Greska: Provjerite destinaciju i ime fajla. (Fajl se mora nalaziti u istom folderu gdje se nalazi i program)" << endl; return false; } else{ char znak; while (ispis.get(znak)){ if (znak == ' '){ while (ispis.get(znak)){ if (znak != ' ') bodova += znak; if (znak == '\n'){ bod = atoi(bodova.c_str()); izbori iz(mat, bod); izb.push_back(iz); mat.erase(); bodova.erase(); break; } } } if (znak != '\n') mat += znak; } } return true; } class povezano{ public: vector<kandidat>_kand; vector<izbori>_izb; bool dodati(vector<kandidat>&__kand, vector<izbori>__izb){ for (vector<kandidat>::iterator it = __kand.begin(); it != __kand.end(); it++){ kandidat kan(it->getime(), it->getmat(), it->getdat()); _kand.push_back(kan); for (vector<izbori>::iterator it2 = __izb.begin(); it2 != __izb.end(); it2++){ if (it->getmat().compare(it2->getmat()) == 0){ izbori izb(it2->getmat(), it2->getbod()); _izb.push_back(izb); } } } return true; } bool poredi(izbori obj, izbori obj1){ return(obj < obj1); } bool sortirati(){ sort(_izb.begin(), _izb.end()); return true; } friend ostream& operator<<(ostream& out, povezano& obj){ for (vector<kandidat>::iterator it = obj._kand.begin(); it != obj._kand.end(); it++){ for (vector<izbori>::iterator it2 = obj._izb.begin(); it2 != obj._izb.end(); it2++){ if (it->getmat().compare(it2->getmat()) == 0) out << "============================================"<<endl<<*it << *it2<<"============================================"<<endl<<endl; } } return out; } }; int main(){ vector<kandidat> kand; vector<izbori> izb; povezano pov; float bodovi = 0; int trbodovi = 0; float lokacija = 0; int trlokacija = 0; char* kandidati = "kandidati.txt"; dodajkandidate(kand); dodajizbore(izb); pov.dodati(kand, izb); pov.sortirati(); cout << pov; for (vector<izbori>::iterator it = pov._izb.begin(); it != pov._izb.end(); it++){ bodovi+=it->getbod(); if (it->getbod() > trbodovi){ trbodovi = it->getbod(); trlokacija = lokacija; } lokacija++; } vector<izbori>::iterator it = pov._izb.begin() + trlokacija; vector<kandidat>::iterator it2 = pov._kand.begin(); cout << "Pobjednik: "<<endl<<*it2<<*it<<"Broj osvojenih glasova:\t"<<it->getbod()/bodovi*100<<"%"<<endl<<"Ukupan broj glasova:\t"<<bodovi<<endl; system("pause>0"); return 0; } (Kandidati moraju imati 3 space-a i odvojeni enterom, izbori 1 space, odvojeni enterom, oba fajla u root-u programa) Nisam stigao sve testirati niti dealocirati alociranu memoriju...
Zakasnio si ali hvala u svakom slucaju, rok je bio do cetvrtka do 17:00, dobio sam na toj zadaci 5 od 6 bodova. Takodjer je trebalo tu napraviti svoju strukturu podataka, u koju ce se sve smjestiti, vector i drugi kontejneri se nisu mogli koristiti.