Advertisement
Guest User

Untitled

a guest
May 19th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <set>
  5. #include <stdexcept>
  6.  
  7. struct Dijete {
  8. std::string ime;
  9. Dijete* sljedeci;
  10.  
  11. };
  12.  
  13. int Duzina_imena ( std::string ime)
  14. {
  15. if(ime.length() == 0) return 0;
  16. int brojac = 0;
  17. for(int i = 0; i < ime.length(); i++) {
  18. 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++;
  19. }
  20.  
  21.  
  22. return brojac;
  23. }
  24.  
  25.  
  26. void Ispisi(std::vector<std::set<std::string>> popunjeni_timovi)
  27. {
  28.  
  29. int brojac = 0;
  30. for(int i = 0; i < popunjeni_timovi.size(); i++) {
  31.  
  32. std::cout<<"Tim "<<i+1<<": ";
  33. auto poc = popunjeni_timovi.at(i).begin();
  34. while(poc!=popunjeni_timovi.at(i).end()) {
  35. if(brojac == popunjeni_timovi.at(i).size() - 1) std::cout<<*poc;
  36. else std::cout<<*poc<<", ";
  37. poc++;
  38. brojac++;
  39. }
  40. std::cout<<std::endl;
  41. brojac = 0;
  42. }
  43.  
  44. }
  45.  
  46. std::vector<std::set<std::string>> Razvrstavanje(std::vector<std::string> imena,int broj_timova)
  47. {
  48.  
  49. if(broj_timova < 1 || broj_timova > imena.size()) throw std::logic_error("Razvrstavanje nemoguce");
  50. int broj_djece = imena.size();
  51. int vise_clanova = broj_djece % broj_timova;
  52. std::vector<int> Velicina_Timova (broj_timova);
  53. int i = 0;
  54.  
  55. for( i = 0; i < vise_clanova; i++) {
  56.  
  57. Velicina_Timova.at(i) = (broj_djece / broj_timova) +1;
  58. }
  59.  
  60. for(int j = i ; j < Velicina_Timova.size(); j++) {
  61. Velicina_Timova.at(j) = (broj_djece / broj_timova);
  62. }
  63.  
  64. //kreiramo povezanu listu imena
  65.  
  66. Dijete* pocetak = nullptr;
  67. Dijete* usmjeri = nullptr;
  68. Dijete* novi = nullptr;
  69.  
  70. for(int i = 0; i < imena.size();i++){
  71.  
  72. novi = new Dijete{imena.at(i),nullptr};
  73. if(!pocetak){
  74. //prvo dijete
  75. pocetak = novi;
  76. }
  77. else if ( i == imena.size()-1){
  78. usmjeri->sljedeci = novi;
  79. novi->sljedeci = pocetak;
  80. }
  81. else {
  82. usmjeri->sljedeci = novi;
  83. }
  84.  
  85.  
  86. usmjeri = novi;
  87.  
  88.  
  89. }
  90. //std::cout<<pocetak->ime<<" "<<novi->ime<<" "<<novi->sljedeci->ime;
  91. int duzina_imena = Duzina_imena(pocetak->ime);
  92. std::vector<std::set<std::string>> popunjeni_timovi(broj_timova);
  93.  
  94. int brojac = 1;
  95. Dijete* pok = pocetak;
  96. Dijete* izbrisi = nullptr;
  97. int br = 0;
  98.  
  99.  
  100. //std::cout<<pok->ime<<" "<<novi->ime;
  101. //pocetak pokazuje na prvi element u listi dok usmjeri pokazuje na jedan element iza pocetka
  102. for(int i = 0; i < Velicina_Timova.size(); ){
  103.  
  104. popunjeni_timovi.at(i).insert(pok->ime);
  105. br++;
  106. if(br == imena.size()) break;
  107. izbrisi = pok;
  108. std::cout<<pok->ime<<"||"<<usmjeri->ime<<std::endl;
  109. duzina_imena = Duzina_imena(pok->ime);
  110. pok = pok->sljedeci;
  111. usmjeri->sljedeci = pok;
  112. std::cout<<"Nakon pomjeranja: "<<pok->ime<<"||"<<usmjeri->ime<<std::endl;
  113.  
  114. delete izbrisi;
  115.  
  116.  
  117. while(brojac<duzina_imena){
  118. pok = pok->sljedeci;
  119. usmjeri = usmjeri->sljedeci;
  120. brojac++;
  121.  
  122. }
  123. std::cout<<"br: "<<brojac<<std::endl;
  124. brojac = 1;
  125. std::cout<<"br: "<<brojac<<std::endl;
  126.  
  127. if(popunjeni_timovi.at(i).size() == Velicina_Timova.at(i)){
  128. i++;
  129. }
  130.  
  131. }
  132.  
  133. return popunjeni_timovi;
  134.  
  135.  
  136.  
  137.  
  138. }
  139.  
  140.  
  141. int main ()
  142. {
  143. try {
  144. std::vector<std::string> im = {"Damir","Ana","Muhamed","Marko","Ivan","Mirsad","Nikolina","Alen","Jasmina","Merima"};
  145. // std::vector<std::string> im = {--"Damir","Ana","Muhamed","Marko","Ivan",--"Mirsad","Nikolina","Alen","Jasmina","Merima"};
  146.  
  147. std::vector<std::set<std::string>> rez;
  148. rez = Razvrstavanje(im,3);
  149. Ispisi(rez);
  150. } catch(std::logic_error izuzetak) {
  151. std::cout<<"Izuzetak: "<<izuzetak.what();
  152. }
  153. return 0;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement