Advertisement
Guest User

Untitled

a guest
May 19th, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. //TP 2018/2019: Zadaća 3, Zadatak 5
  2. #include <iostream>
  3. #include <new>
  4. #include <string>
  5. #include <vector>
  6. #include <stdexcept>
  7. #include <set>
  8.  
  9. typedef std::vector<std::set<std::string>> povratni_tip;
  10.  
  11. struct Dijete{
  12. std::string ime;
  13. Dijete *sljedeci;
  14. };
  15.  
  16. Dijete *Kreiraj(std::vector<std::string> stringovi)
  17. {
  18. Dijete *pocetak = nullptr, *prethodni; Dijete *novi;
  19. for(int i = 0; i < stringovi.size(); i++)
  20. {
  21. novi = new Dijete{stringovi.at(i), nullptr};
  22. if(!pocetak) pocetak = novi;
  23. else prethodni->sljedeci = novi;
  24.  
  25. prethodni = novi;
  26. }
  27. prethodni->sljedeci = pocetak;
  28.  
  29. return pocetak;
  30. }
  31.  
  32. int vrati_duzinu(std::string s)
  33. {
  34. int vrati = 0;
  35.  
  36. for(int i = 0; i < s.length(); i++)
  37. {
  38. if( (s.at(i) >= 'a' && s.at(i) <= 'z') || (s.at(i) >= 'A' && s.at(i) <= 'Z') || (s.at(i) >= '0' && s.at(i) <= '9'))
  39. vrati++;
  40. }
  41.  
  42. return vrati;
  43. }
  44. povratni_tip Razvrstavanje(std::vector<std::string> vektor_stringova, int broj_timova)
  45. {
  46. if( broj_timova < 1 || broj_timova > vektor_stringova.size())
  47. throw std::logic_error("Razvrstavanje nemoguce");
  48.  
  49. auto pok = Kreiraj(vektor_stringova);
  50.  
  51. int timovi = 0, broj_djece = vektor_stringova.size();
  52. bool logicka;
  53.  
  54. int po_timu = broj_djece / broj_timova;
  55. if(broj_djece % broj_timova == 0)
  56. logicka = false;
  57. else logicka = true;
  58.  
  59. povratni_tip vrati;
  60. int strpano = 1;
  61. while(timovi < broj_timova)
  62. {
  63. int poslano = 0; std::set<std::string> skup;
  64. while(poslano < po_timu + logicka)
  65. {
  66.  
  67. skup.insert(pok->ime);
  68.  
  69. int duzina = vrati_duzinu(pok->ime);
  70. // trazenje prethodnika
  71. Dijete *klizni = pok->sljedeci;
  72. while( klizni->sljedeci != pok)
  73. {
  74. klizni = klizni->sljedeci;
  75. }
  76.  
  77.  
  78. klizni->sljedeci = pok->sljedeci;
  79. Dijete *brisi = pok; pok = pok->sljedeci;
  80. delete brisi;
  81. if( strpano == broj_djece) break;
  82. for(int i = 0; i < duzina - 1 ; i++)
  83. {
  84. if( pok->sljedeci )
  85. pok = pok->sljedeci;
  86. else continue;
  87. }
  88. strpano++;
  89. poslano++;
  90.  
  91. }
  92. vrati.push_back(skup);
  93. timovi++;
  94.  
  95. if( timovi == broj_djece % broj_timova) logicka = false;
  96. }
  97.  
  98. return vrati;
  99. }
  100.  
  101. void Ispisi_Skup(std::set<std::string> skup)
  102. {
  103. auto it = skup.begin();
  104.  
  105. for(int i = 0; i < skup.size(); i++)
  106. {
  107. if( i != skup.size() - 1)
  108. std:: cout << *it << ", ";
  109. else std:: cout << *it;
  110.  
  111. it++;
  112. }
  113. }
  114.  
  115. int main ()
  116. {
  117.  
  118. std:: cout << "Unesite broj djece: ";
  119. int broj_djece; std:: cin >> broj_djece;
  120. std:: cout << "Unesite imena djece: ";
  121. std::cin.ignore(1000,'\n');
  122. try
  123. {
  124. std::vector<std::string> vektor_stringova(broj_djece);
  125. for(int i = 0; i < vektor_stringova.size(); i++)
  126. {
  127. std::string unos; std::getline(std::cin, unos);
  128. vektor_stringova.at(i) = unos;
  129. }
  130. std:: cout << std::endl;
  131. std:: cout << "Unesite broj timova: ";
  132. int broj_timova; std:: cin >> broj_timova;
  133.  
  134. povratni_tip pokupi = Razvrstavanje(vektor_stringova, broj_timova);
  135.  
  136. for(int i = 0; i < pokupi.size(); i++)
  137. {
  138. std:: cout << "Tim " << i + 1 << ": "; Ispisi_Skup(pokupi.at(i)); std:: cout << std::endl;
  139. }
  140. }
  141. catch(std::logic_error greska)
  142. {
  143. std:: cout << "Izuzetak: " << greska.what() << std::endl;
  144. }
  145.  
  146. /* auto pok = Kreiraj(stringovi);
  147. Dijete *pomocni;
  148. auto pamti = pok;
  149.  
  150. za brisanje cijele liste
  151. {
  152. for(int i = 0; i < stringovi.size(); i++)
  153. {
  154. if ( i != stringovi.size() - 1)
  155. {
  156. pomocni = pok->sljedeci;
  157. delete pok;
  158. pok = pomocni;
  159. }
  160. else
  161. {
  162. delete pok;
  163. }
  164. }
  165. }
  166. for(int i = 0; i < stringovi.size() - 1; i++)
  167. {
  168.  
  169. if( i == 1)
  170. {
  171. pomocni->sljedeci = pok->sljedeci;
  172. Dijete *brisi = pok;
  173. pok = pok->sljedeci;
  174. delete brisi;
  175.  
  176. }
  177. pomocni = pok;
  178. std:: cout << pok->ime << " ";
  179. pok = pok->sljedeci;
  180.  
  181. }
  182. pok = pamti;
  183. for(int i = 0; i < stringovi.size() - 1; i++)
  184. {
  185. if ( i != stringovi.size() - 1)
  186. {
  187. pomocni = pok->sljedeci;
  188. delete pok;
  189. pok = pomocni;
  190. }
  191. else
  192. {
  193. delete pok;
  194. }
  195. }
  196. */
  197.  
  198. return 0;
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement