Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <initializer_list>
- #include <cstring>
- #include <iomanip>
- #include <ctime>
- #include <algorithm>
- 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
- {
- int broj_timova;
- const int max_br_timova;
- Tim **timovi;
- public:
- explicit Liga(int velicina_lige) : max_br_timova(velicina_lige), broj_timova(0), timovi(new Tim*[velicina_lige]) {}
- 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(std::initializer_list<Tim> lista_timova) : max_br_timova(lista_timova.size()), broj_timova(lista_timova.size())
- {
- timovi = new Tim*[lista_timova.size()];
- int i(0);
- for (auto p(lista_timova.begin()); p != lista_timova.end(); p++)
- {
- timovi[i] = new Tim(*p);
- i++;
- }
- }
- Liga::Liga(const Liga &l) : broj_timova(l.broj_timova), max_br_timova(l.max_br_timova), timovi(new Tim*[l.max_br_timova])
- {
- for (int i(0); i < l.broj_timova; i++)
- timovi[i] = new Tim(*l.timovi[i]);
- }
- Liga::Liga(Liga &&l) : broj_timova(l.broj_timova), max_br_timova(l.max_br_timova)
- {
- timovi = l.timovi;
- l.broj_timova = 0;
- l.timovi = nullptr;
- }
- Liga &Liga::operator = (const Liga &l)
- {
- if (l.max_br_timova != max_br_timova) throw "Nesaglasne velicine liga!";
- if (&l != this)
- {
- for (int i(0); i < broj_timova; i++)
- delete timovi[i];
- for (int i(0); i < l.broj_timova; i++)
- timovi[i] = new Tim(*l.timovi[i]);
- broj_timova = l.broj_timova;
- }
- return *this;
- }
- Liga &Liga::operator = (Liga &&l)
- {
- if (l.max_br_timova != max_br_timova) throw "Nesaglasne velicine liga!";
- if (&l != this)
- {
- for (int i(0); i < broj_timova; i++)
- delete timovi[i];
- timovi = l.timovi;
- broj_timova = l.broj_timova;
- l.timovi = nullptr;
- l.broj_timova = 0;
- }
- return *this;
- }
- void Liga::DodajNoviTim(const char ime_tima[])
- {
- if (broj_timova == max_br_timova) throw "Liga popunjena!";
- timovi[broj_timova++] = 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 (int i(0); i < broj_timova; 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, timovi + broj_timova, Kriterij);
- for (int i(0); i < broj_timova; i++)
- timovi[i]->IspisiPodatke();
- }
- Liga::~Liga()
- {
- for (int i(0); i < broj_timova; i++)
- delete timovi[i];
- delete[] timovi;
- }
- int main()
- {
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement