Advertisement
extrica

Untitled

May 19th, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  1. //TP 2018/2019: Zadaća 3, Zadatak 5
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5. #include <stdexcept>
  6. #include <set>
  7. #include <new>
  8.  
  9. using namespace std;
  10.  
  11. struct Dijete {
  12.  
  13. string ime;
  14. Dijete *sljedeci = nullptr;
  15. };
  16.  
  17. int BrojSlova (string s) {
  18.  
  19. int brojac {};
  20.  
  21. for(int i=0; i<s.size(); i++) {
  22. 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')) brojac++;
  23. }
  24.  
  25. return brojac;
  26. }
  27.  
  28. vector<set<string>> Razvrstavanje(vector<string> v, int br_timova) {
  29.  
  30. if(br_timova < 1 || br_timova > v.size()) throw logic_error ("Razvrstavanje nemoguce");
  31.  
  32. vector<set<string>> razvrstani;
  33. int broj_djece = v.size();
  34.  
  35. vector<int> vel_timova; // Broj clanova svakog tima smjestimo u vektor
  36. for(int i=0; i<br_timova; i++) {
  37.  
  38. if(broj_djece%br_timova == 0) {
  39.  
  40. vel_timova.push_back(broj_djece/br_timova);
  41.  
  42.  
  43. }else{
  44.  
  45. int ostatak = broj_djece%br_timova;
  46.  
  47. if(i<ostatak) vel_timova.push_back((broj_djece/br_timova)+1);
  48. else vel_timova.push_back(broj_djece/br_timova);
  49.  
  50. }
  51. }
  52.  
  53. Dijete *pocetak (nullptr), *zadnji (nullptr); // Kreiranje povezane liste
  54.  
  55. for(int i=0; i<v.size(); i++) {
  56.  
  57. Dijete *novi (new Dijete);
  58. novi -> ime = v.at(i);
  59. novi -> sljedeci = nullptr;
  60.  
  61. if(!pocetak) pocetak = novi;
  62. else zadnji -> sljedeci = novi;
  63.  
  64. zadnji = novi;
  65. if(i == v.size() - 1) zadnji -> sljedeci = pocetak;
  66. }
  67.  
  68. cout << "Lista imena: ";
  69. Dijete *p = pocetak;
  70. for(int i=0; i<v.size(); i++) {
  71.  
  72. cout << p->ime << endl;
  73. p = p -> sljedeci;
  74. }
  75.  
  76.  
  77. Dijete *pomocni_pok (pocetak), *izbrisi, *preusmjeri;
  78.  
  79. for(int i=0; i<br_timova; i++) {
  80.  
  81. set<string> pomocni_set;
  82.  
  83. for(int j=0; j<vel_timova[i]; j++) {
  84.  
  85. pomocni_set.insert(pomocni_pok -> ime);
  86. int pomak = BrojSlova(pomocni_pok -> ime);
  87.  
  88. if(pomocni_pok == pocetak) {
  89.  
  90. zadnji -> sljedeci = pomocni_pok -> sljedeci;
  91. izbrisi = pomocni_pok;
  92. pocetak = pomocni_pok -> sljedeci;
  93. pomocni_pok = pomocni_pok -> sljedeci;
  94. delete izbrisi;
  95.  
  96. }else{
  97.  
  98.  
  99.  
  100. }
  101.  
  102. for(int i=0; i<(pomak-1); i++) pomocni_pok = pomocni_pok -> sljedeci;
  103. }
  104.  
  105. razvrstani.push_back(pomocni_set);
  106. }
  107.  
  108. return razvrstani;
  109. }
  110.  
  111. int main ()
  112. {
  113. int n;
  114.  
  115. cout << "Unesite broj djece: ";
  116. cin >> n;
  117.  
  118. cout << "Unesite imena djece: " << endl;
  119.  
  120. vector<string> imena (n);
  121.  
  122. cin.ignore(10000, '\n');
  123. for(int i=0; i<n; i++) getline(cin, imena[i]);
  124.  
  125. int br_timova;
  126. cout << "Unesite broj timova: ";
  127. cin >> br_timova;
  128.  
  129. try {
  130.  
  131. vector<set<string>> v (Razvrstavanje(imena, br_timova));
  132.  
  133. for(int i=0; i<v.size(); i++) {
  134.  
  135. set<string> pom = v.at(i);
  136.  
  137. cout << "Tim " << i+1 << ": ";
  138.  
  139. for(auto it = pom.begin(); it != pom.end(); it++) {
  140.  
  141. if(distance(it, pom.end()) == 1) cout << *it << endl;
  142. else cout << *it << ", ";
  143. }
  144. }
  145. }
  146. catch(logic_error izuzetak) {
  147. cout << "Izuzetak: " << izuzetak.what() << endl;
  148. return 0;
  149. }
  150.  
  151. return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement