Advertisement
amermo

TP T-11 Z3

May 18th, 2015
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <iomanip>
  5. #include <initializer_list>
  6.  
  7.  
  8. class Tim
  9. {
  10.     char ime_tima[21];
  11.     int broj_odigranih, broj_pobjeda, broj_nerijesenih, broj_poraza, broj_datih, broj_primljenih, broj_poena;
  12. public:
  13.     Tim(const char ime[]);
  14.     void ObradiUtakmicu(int broj_datih, int broj_primljenih);
  15.     const char *DajImeTima() const { return ime_tima; }
  16.     int DajBrojPoena() const { return broj_poena; }
  17.     int DajGolRazliku() const { return broj_datih - broj_primljenih; }
  18.     void IspisiPodatke() const;
  19. };
  20.  
  21. Tim::Tim(const char ime[]) : broj_odigranih(0), broj_pobjeda(0), broj_nerijesenih(0), broj_poraza(0), broj_datih(0), broj_primljenih(0), broj_poena(0)
  22. {
  23.     if (std::strlen(ime) > 20) throw "Predug naziv tima!";
  24.     std::strcpy(ime_tima, ime);
  25. }
  26.  
  27. void Tim::IspisiPodatke() const
  28. {
  29.     std::cout << std::left << std::setw(20) << ime_tima << std::right << std::setw(4) << broj_odigranih << std::setw(4) << broj_pobjeda << std::setw(4) << broj_nerijesenih << std::setw(4) << broj_poraza << std::setw(4) << broj_datih << std::setw(4) << broj_primljenih << std::setw(4) << broj_poena << std::endl;
  30. }
  31.  
  32. void Tim::ObradiUtakmicu(int broj_datih, int broj_primljenih)
  33. {
  34.     if (broj_datih > broj_primljenih)
  35.     {
  36.         broj_pobjeda++; broj_poena += 3;
  37.     }
  38.     else if (broj_datih == broj_primljenih)
  39.     {
  40.         broj_nerijesenih++; broj_poena += 1;
  41.     }
  42.     else
  43.         broj_poraza++;
  44.     Tim::broj_datih += broj_datih; Tim::broj_primljenih += broj_primljenih;
  45.     broj_odigranih++;
  46. }
  47.  
  48. class Liga
  49. {
  50.     std::vector<Tim*> timovi;
  51. public:
  52.     explicit Liga();
  53.     explicit Liga(std::initializer_list<Tim> lista_timova);
  54.     ~Liga();
  55.     Liga(const Liga &l);
  56.     Liga(Liga &&l);
  57.     Liga &operator = (const Liga &l);
  58.     Liga &operator = (Liga &&l);
  59.     void DodajNoviTim(const char ime_tima[]);
  60.     void RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2);
  61.     void IspisiTabelu();
  62.     static bool Kriterij(const Tim *t1, const Tim *t2);
  63. };
  64.  
  65. bool Liga::Kriterij(const Tim *t1, const Tim *t2)
  66. {
  67.     if (t1->DajBrojPoena() == t2->DajBrojPoena())
  68.         return t1->DajGolRazliku() > t2->DajGolRazliku();
  69.     return t1->DajBrojPoena() > t2->DajBrojPoena();
  70. }
  71.  
  72. Liga::Liga() : timovi(timovi.size()) {}
  73.  
  74. Liga::Liga(std::initializer_list<Tim> lista_timova) : timovi(lista_timova.size())
  75. {
  76.     int i(0);
  77.     for (auto p(lista_timova.begin()); p != lista_timova.end(); p++, i++)
  78.         timovi[i] = new Tim(*p);
  79. }
  80.  
  81. Liga::Liga(const Liga &l) : timovi(l.timovi.size())
  82. {
  83.     for (unsigned int i(0); i < timovi.size(); i++)
  84.         timovi[i] = new Tim(*l.timovi[i]);
  85. }
  86.  
  87. Liga::Liga(Liga &&l) : timovi(l.timovi.size())
  88. {
  89.     for (unsigned int i(0); i < timovi.size(); i++)
  90.         timovi[i] = l.timovi[i];
  91.     l.timovi.resize(0);
  92. }
  93.  
  94. Liga &Liga::operator = (const Liga &l)
  95. {
  96.     if (l.timovi.size() != timovi.size()) throw "Nesaglasne velicine liga!";
  97.     if (&l != this)
  98.     {
  99.         for (unsigned int i(0); i < timovi.size(); i++)
  100.             delete timovi[i];
  101.         for (unsigned int i(0); i < timovi.size(); i++)
  102.             timovi[i] = new Tim(*l.timovi[i]);
  103.     }
  104.     return *this;
  105. }
  106.  
  107. Liga &Liga::operator = (Liga &&l)
  108. {
  109.     if (l.timovi.size() != timovi.size()) throw "Nesaglasne velicine liga!";
  110.     if (&l != this)
  111.     {
  112.         for (unsigned int i(0); i < timovi.size(); i++)
  113.             delete timovi[i];
  114.         for (unsigned int i(0); i < timovi.size(); i++)
  115.             timovi[i] = l.timovi[i];
  116.         l.timovi.resize(0);
  117.     }
  118.     return *this;
  119. }
  120.  
  121. void Liga::DodajNoviTim(const char ime_tima[])
  122. {
  123.     timovi.resize(timovi.size() + 1);
  124.     timovi[timovi.size() - 1] = new Tim(ime_tima);
  125. }
  126.  
  127. void Liga::RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2)
  128. {
  129.     int pozicija1(-1), pozicija2(-1);
  130.     for (unsigned int i(0); i < timovi.size(); i++)
  131.     {
  132.         if (strcmp(tim1, timovi[i]->DajImeTima()) == 0)
  133.             pozicija1 = i;
  134.         else if (strcmp(tim2, timovi[i]->DajImeTima()) == 0)
  135.             pozicija2 = i;
  136.     }
  137.     if (pozicija1 == -1 || pozicija2 == -1) throw "Tim ne postoji!";
  138.     else
  139.     {
  140.         timovi[pozicija1]->ObradiUtakmicu(rezultat_1, rezultat_2);
  141.         timovi[pozicija2]->ObradiUtakmicu(rezultat_2, rezultat_1);
  142.     }
  143. }
  144.  
  145. void Liga::IspisiTabelu()
  146. {
  147.     std::sort(timovi.begin(), timovi.end(), Kriterij);
  148.     for (unsigned int i(0); i < timovi.size(); i++)
  149.         timovi[i]->IspisiPodatke();
  150. }
  151.  
  152. Liga::~Liga()
  153. {
  154.     for (unsigned int i(0); i < timovi.size(); i++)
  155.         delete timovi[i];
  156. }
  157.  
  158. int main()
  159. {
  160.     system("PAUSE");
  161.     return 0;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement