Advertisement
amermo

TP T-11 Z2

May 18th, 2015
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.58 KB | None | 0 0
  1. #include <iostream>
  2. #include <initializer_list>
  3. #include <cstring>
  4. #include <iomanip>
  5. #include <ctime>
  6. #include <algorithm>
  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.     int broj_timova;
  51.     const int max_br_timova;
  52.     Tim **timovi;
  53. public:
  54.     explicit Liga(int velicina_lige) : max_br_timova(velicina_lige), broj_timova(0), timovi(new Tim*[velicina_lige]) {}
  55.     explicit Liga(std::initializer_list<Tim> lista_timova);
  56.     ~Liga();
  57.     Liga(const Liga &l);
  58.     Liga(Liga &&l);
  59.     Liga &operator = (const Liga &l);
  60.     Liga &operator = (Liga &&l);
  61.     void DodajNoviTim(const char ime_tima[]);
  62.     void RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2);
  63.     void IspisiTabelu();
  64.     static bool Kriterij(const Tim *t1, const Tim *t2);
  65. };
  66.  
  67. bool Liga::Kriterij(const Tim *t1, const Tim *t2)
  68. {
  69.     if (t1->DajBrojPoena() == t2->DajBrojPoena())
  70.         return t1->DajGolRazliku() > t2->DajGolRazliku();
  71.     return t1->DajBrojPoena() > t2->DajBrojPoena();
  72. }
  73.  
  74. Liga::Liga(std::initializer_list<Tim> lista_timova) : max_br_timova(lista_timova.size()), broj_timova(lista_timova.size())
  75. {
  76.     timovi = new Tim*[lista_timova.size()];
  77.     int i(0);
  78.     for (auto p(lista_timova.begin()); p != lista_timova.end(); p++)
  79.     {
  80.         timovi[i] = new Tim(*p);
  81.         i++;
  82.     }
  83. }
  84.  
  85. Liga::Liga(const Liga &l) : broj_timova(l.broj_timova), max_br_timova(l.max_br_timova), timovi(new Tim*[l.max_br_timova])
  86. {
  87.     for (int i(0); i < l.broj_timova; i++)
  88.         timovi[i] = new Tim(*l.timovi[i]);
  89. }
  90.  
  91. Liga::Liga(Liga &&l) : broj_timova(l.broj_timova), max_br_timova(l.max_br_timova)
  92. {
  93.     timovi = l.timovi;
  94.     l.broj_timova = 0;
  95.     l.timovi = nullptr;
  96. }
  97.  
  98. Liga &Liga::operator = (const Liga &l)
  99. {
  100.     if (l.max_br_timova != max_br_timova) throw "Nesaglasne velicine liga!";
  101.     if (&l != this)
  102.     {
  103.         for (int i(0); i < broj_timova; i++)
  104.             delete timovi[i];
  105.         for (int i(0); i < l.broj_timova; i++)
  106.             timovi[i] = new Tim(*l.timovi[i]);
  107.         broj_timova = l.broj_timova;
  108.     }
  109.     return *this;
  110. }
  111.  
  112. Liga &Liga::operator = (Liga &&l)
  113. {
  114.     if (l.max_br_timova != max_br_timova) throw "Nesaglasne velicine liga!";
  115.     if (&l != this)
  116.     {
  117.         for (int i(0); i < broj_timova; i++)
  118.             delete timovi[i];
  119.         timovi = l.timovi;
  120.         broj_timova = l.broj_timova;
  121.         l.timovi = nullptr;
  122.         l.broj_timova = 0;
  123.     }
  124.     return *this;
  125. }
  126.  
  127. void Liga::DodajNoviTim(const char ime_tima[])
  128. {
  129.     if (broj_timova == max_br_timova) throw "Liga popunjena!";
  130.     timovi[broj_timova++] = new Tim(ime_tima);
  131. }
  132.  
  133. void Liga::RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2)
  134. {
  135.     int pozicija1(-1), pozicija2(-1);
  136.     for (int i(0); i < broj_timova; i++)
  137.     {
  138.         if (strcmp(tim1, timovi[i]->DajImeTima()) == 0)
  139.             pozicija1 = i;
  140.         else if (strcmp(tim2, timovi[i]->DajImeTima()) == 0)
  141.             pozicija2 = i;
  142.     }
  143.     if (pozicija1 == -1 || pozicija2 == -1) throw "Tim ne postoji!";
  144.     else
  145.     {
  146.         timovi[pozicija1]->ObradiUtakmicu(rezultat_1, rezultat_2);
  147.         timovi[pozicija2]->ObradiUtakmicu(rezultat_2, rezultat_1);
  148.     }
  149. }
  150.  
  151. void Liga::IspisiTabelu()
  152. {
  153.     std::sort(timovi, timovi + broj_timova, Kriterij);
  154.     for (int i(0); i < broj_timova; i++)
  155.         timovi[i]->IspisiPodatke();
  156. }
  157.  
  158. Liga::~Liga()
  159. {
  160.     for (int i(0); i < broj_timova; i++)
  161.         delete timovi[i];
  162.     delete[] timovi;
  163. }
  164.  
  165.  
  166. int main()
  167. {
  168.     system("PAUSE");
  169.     return 0;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement