Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <set>
- #include <stdexcept>
- struct Dijete {
- std::string ime;
- Dijete* sljedeci;
- };
- int Duzina_imena ( std::string ime)
- {
- if(ime.length() == 0) return 0;
- int brojac = 0;
- for(int i = 0; i < ime.length(); i++) {
- if((ime.at(i) >='a' && ime.at(i)<='z') || (ime.at(i)>='A' && ime.at(i)<='Z') || (ime.at(i)>='0' && ime.at(i)<='9')) brojac++;
- }
- return brojac;
- }
- void Ispisi(std::vector<std::set<std::string>> popunjeni_timovi)
- {
- int brojac = 0;
- for(int i = 0; i < popunjeni_timovi.size(); i++) {
- std::cout<<"Tim "<<i+1<<": ";
- auto poc = popunjeni_timovi.at(i).begin();
- while(poc!=popunjeni_timovi.at(i).end()) {
- if(brojac == popunjeni_timovi.at(i).size() - 1) std::cout<<*poc;
- else std::cout<<*poc<<", ";
- poc++;
- brojac++;
- }
- std::cout<<std::endl;
- brojac = 0;
- }
- }
- std::vector<std::set<std::string>> Razvrstavanje(std::vector<std::string> imena,int broj_timova)
- {
- if(broj_timova < 1 || broj_timova > imena.size()) throw std::logic_error("Razvrstavanje nemoguce");
- int broj_djece = imena.size();
- int vise_clanova = broj_djece % broj_timova;
- std::vector<int> Velicina_Timova (broj_timova);
- int i = 0;
- for( i = 0; i < vise_clanova; i++) {
- Velicina_Timova.at(i) = (broj_djece / broj_timova) +1;
- }
- for(int j = i ; j < Velicina_Timova.size(); j++) {
- Velicina_Timova.at(j) = (broj_djece / broj_timova);
- }
- //kreiramo povezanu listu imena
- Dijete* pocetak = nullptr;
- Dijete* usmjeri = nullptr;
- Dijete* novi = nullptr;
- for(int i = 0; i < imena.size();i++){
- novi = new Dijete{imena.at(i),nullptr};
- if(!pocetak){
- //prvo dijete
- pocetak = novi;
- }
- else if ( i == imena.size()-1){
- usmjeri->sljedeci = novi;
- novi->sljedeci = pocetak;
- }
- else {
- usmjeri->sljedeci = novi;
- }
- usmjeri = novi;
- }
- //std::cout<<pocetak->ime<<" "<<novi->ime<<" "<<novi->sljedeci->ime;
- int duzina_imena = Duzina_imena(pocetak->ime);
- std::vector<std::set<std::string>> popunjeni_timovi(broj_timova);
- int brojac = 1;
- Dijete* pok = pocetak;
- Dijete* izbrisi = nullptr;
- int br = 0;
- //std::cout<<pok->ime<<" "<<novi->ime;
- //pocetak pokazuje na prvi element u listi dok usmjeri pokazuje na jedan element iza pocetka
- for(int i = 0; i < Velicina_Timova.size(); ){
- popunjeni_timovi.at(i).insert(pok->ime);
- br++;
- if(br == imena.size()) break;
- izbrisi = pok;
- std::cout<<pok->ime<<"||"<<usmjeri->ime<<std::endl;
- duzina_imena = Duzina_imena(pok->ime);
- pok = pok->sljedeci;
- usmjeri->sljedeci = pok;
- std::cout<<"Nakon pomjeranja: "<<pok->ime<<"||"<<usmjeri->ime<<std::endl;
- delete izbrisi;
- while(brojac<duzina_imena){
- pok = pok->sljedeci;
- usmjeri = usmjeri->sljedeci;
- brojac++;
- }
- std::cout<<"br: "<<brojac<<std::endl;
- brojac = 1;
- std::cout<<"br: "<<brojac<<std::endl;
- if(popunjeni_timovi.at(i).size() == Velicina_Timova.at(i)){
- i++;
- }
- }
- return popunjeni_timovi;
- }
- int main ()
- {
- try {
- std::vector<std::string> im = {"Damir","Ana","Muhamed","Marko","Ivan","Mirsad","Nikolina","Alen","Jasmina","Merima"};
- // std::vector<std::string> im = {--"Damir","Ana","Muhamed","Marko","Ivan",--"Mirsad","Nikolina","Alen","Jasmina","Merima"};
- std::vector<std::set<std::string>> rez;
- rez = Razvrstavanje(im,3);
- Ispisi(rez);
- } catch(std::logic_error izuzetak) {
- std::cout<<"Izuzetak: "<<izuzetak.what();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement