Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <iomanip>
- #include <initializer_list>
- class Tim
- {
- char ime_tima[21];
- int broj_odigranih, broj_pobjeda, broj_nerijesenih, broj_poraza, broj_datih, broj_primljenih, broj_poena;
- public:
- Tim(const char ime[]);
- void ObradiUtakmicu(int broj_datih, int broj_primljenih);
- const char *DajImeTima() const { return ime_tima; }
- int DajBrojPoena() const { return broj_poena; }
- int DajGolRazliku() const { return broj_datih - broj_primljenih; }
- void IspisiPodatke() const;
- };
- 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)
- {
- if (std::strlen(ime) > 20) throw "Predug naziv tima!";
- std::strcpy(ime_tima, ime);
- }
- void Tim::IspisiPodatke() const
- {
- 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;
- }
- void Tim::ObradiUtakmicu(int broj_datih, int broj_primljenih)
- {
- if (broj_datih > broj_primljenih)
- {
- broj_pobjeda++; broj_poena += 3;
- }
- else if (broj_datih == broj_primljenih)
- {
- broj_nerijesenih++; broj_poena += 1;
- }
- else
- broj_poraza++;
- Tim::broj_datih += broj_datih; Tim::broj_primljenih += broj_primljenih;
- broj_odigranih++;
- }
- class Liga
- {
- std::vector<Tim*> timovi;
- public:
- explicit Liga();
- explicit Liga(std::initializer_list<Tim> lista_timova);
- ~Liga();
- Liga(const Liga &l);
- Liga(Liga &&l);
- Liga &operator = (const Liga &l);
- Liga &operator = (Liga &&l);
- void DodajNoviTim(const char ime_tima[]);
- void RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2);
- void IspisiTabelu();
- static bool Kriterij(const Tim *t1, const Tim *t2);
- };
- bool Liga::Kriterij(const Tim *t1, const Tim *t2)
- {
- if (t1->DajBrojPoena() == t2->DajBrojPoena())
- return t1->DajGolRazliku() > t2->DajGolRazliku();
- return t1->DajBrojPoena() > t2->DajBrojPoena();
- }
- Liga::Liga() : timovi(timovi.size()) {}
- Liga::Liga(std::initializer_list<Tim> lista_timova) : timovi(lista_timova.size())
- {
- int i(0);
- for (auto p(lista_timova.begin()); p != lista_timova.end(); p++, i++)
- timovi[i] = new Tim(*p);
- }
- Liga::Liga(const Liga &l) : timovi(l.timovi.size())
- {
- for (unsigned int i(0); i < timovi.size(); i++)
- timovi[i] = new Tim(*l.timovi[i]);
- }
- Liga::Liga(Liga &&l) : timovi(l.timovi.size())
- {
- for (unsigned int i(0); i < timovi.size(); i++)
- timovi[i] = l.timovi[i];
- l.timovi.resize(0);
- }
- Liga &Liga::operator = (const Liga &l)
- {
- if (l.timovi.size() != timovi.size()) throw "Nesaglasne velicine liga!";
- if (&l != this)
- {
- for (unsigned int i(0); i < timovi.size(); i++)
- delete timovi[i];
- for (unsigned int i(0); i < timovi.size(); i++)
- timovi[i] = new Tim(*l.timovi[i]);
- }
- return *this;
- }
- Liga &Liga::operator = (Liga &&l)
- {
- if (l.timovi.size() != timovi.size()) throw "Nesaglasne velicine liga!";
- if (&l != this)
- {
- for (unsigned int i(0); i < timovi.size(); i++)
- delete timovi[i];
- for (unsigned int i(0); i < timovi.size(); i++)
- timovi[i] = l.timovi[i];
- l.timovi.resize(0);
- }
- return *this;
- }
- void Liga::DodajNoviTim(const char ime_tima[])
- {
- timovi.resize(timovi.size() + 1);
- timovi[timovi.size() - 1] = new Tim(ime_tima);
- }
- void Liga::RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2)
- {
- int pozicija1(-1), pozicija2(-1);
- for (unsigned int i(0); i < timovi.size(); i++)
- {
- if (strcmp(tim1, timovi[i]->DajImeTima()) == 0)
- pozicija1 = i;
- else if (strcmp(tim2, timovi[i]->DajImeTima()) == 0)
- pozicija2 = i;
- }
- if (pozicija1 == -1 || pozicija2 == -1) throw "Tim ne postoji!";
- else
- {
- timovi[pozicija1]->ObradiUtakmicu(rezultat_1, rezultat_2);
- timovi[pozicija2]->ObradiUtakmicu(rezultat_2, rezultat_1);
- }
- }
- void Liga::IspisiTabelu()
- {
- std::sort(timovi.begin(), timovi.end(), Kriterij);
- for (unsigned int i(0); i < timovi.size(); i++)
- timovi[i]->IspisiPodatke();
- }
- Liga::~Liga()
- {
- for (unsigned int i(0); i < timovi.size(); i++)
- delete timovi[i];
- }
- int main()
- {
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement