Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <stdexcept>
- #include <string>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- class Tim {
- char ime_tima[20];
- int broj_odigranih, broj_pobjeda, broj_nerijesenih, broj_poraza, broj_datih, broj_primljenih, broj_poena;
- public:
- Tim(const char ime[]) {strcpy(ime_tima, ime);broj_odigranih=0; broj_pobjeda=0; broj_nerijesenih=0; broj_poraza=0; broj_datih=0;
- broj_primljenih=0; broj_poena=0; }
- 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;
- };
- class Liga {
- int broj_timova;
- const int max_br_timova;
- Tim **timovi;
- static bool Kriterij (const Tim *t1, const Tim *t2);
- public:
- explicit Liga(int velicina_lige): broj_timova(0), max_br_timova(velicina_lige), timovi(nullptr){
- timovi = new Tim*[max_br_timova];
- fill(timovi, timovi + max_br_timova, nullptr);
- }
- 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();
- };
- Liga::~Liga() {
- if (timovi!=nullptr) {
- for (int i=0; i<broj_timova; i++)
- delete[] timovi[i];
- delete [] timovi;
- }}
- Liga::Liga(std::initializer_list<Tim> lista_timova) : broj_timova(lista_timova.size()), max_br_timova(lista_timova.size()),
- timovi(nullptr) {
- int i(0);
- for (const auto &x: lista_timova) {
- timovi[i]=new Tim(x);
- i++;
- }
- }
- Liga::Liga(const Liga &l) : max_br_timova(l.max_br_timova), broj_timova(l.broj_timova) {
- timovi=new Tim*[max_br_timova];
- fill(timovi,timovi+max_br_timova, nullptr);
- for (int i=0; i<max_br_timova; i++)
- timovi[i]=new Tim(*l.timovi[i]);
- }
- Liga::Liga(Liga &&l) : max_br_timova(l.max_br_timova), broj_timova(l.broj_timova), timovi(l.timovi) {
- l.timovi=nullptr;
- }
- Liga &Liga::operator =(const Liga &l) {
- if (this==&l) return *this;
- if (l.max_br_timova!=this->max_br_timova) throw "Ne moze!";
- for (int i=0; i<max_br_timova; i++) delete [] timovi [i];
- fill(timovi, timovi+max_br_timova, nullptr);
- broj_timova=l.broj_timova;
- for (int i=0; i<broj_timova; i++) {
- timovi[i]=new Tim(*l.timovi[i]);
- }
- return *this;
- }
- Liga &Liga::operator=(Liga &&l) {
- if (this==&l) return *this;
- if (l.max_br_timova!=this->max_br_timova) throw "Ne moze!";
- for (int i=0; i<max_br_timova; i++)
- delete [] timovi [i];
- fill(timovi,timovi+max_br_timova, nullptr);
- broj_timova=l.broj_timova;
- timovi=l.timovi;
- l.timovi=nullptr;
- return *this;
- }
- void Liga::DodajNoviTim(const char ime_tima[]) {
- if (broj_timova==max_br_timova) throw "Ne moze vise stati u niz!";
- timovi[broj_timova]= new Tim (ime_tima);
- broj_timova++;
- }
- void Liga::RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2) {
- int prvi(-1), drugi (-1);
- for (int i=0; i<broj_timova; i++)
- {
- if (strcmp(tim1, timovi[i]->DajImeTima())==0) prvi=i;
- if (strcmp(tim2,timovi[i]->DajImeTima())==0) drugi=i;
- }
- if (prvi==-1) throw "Prvi tim ne postoji.";
- if (drugi==-1) throw "Drugi tim ne postoji.";
- timovi[prvi]->ObradiUtakmicu(rezultat_1,rezultat_2);
- timovi[drugi]->ObradiUtakmicu(rezultat_2, rezultat_1);
- }
- bool Liga::Kriterij(const Tim *t1, const Tim *t2) {
- if (t1->DajBrojPoena()>t2->DajBrojPoena()) return true;
- else if (t2->DajBrojPoena()>t1->DajBrojPoena()) return false;
- else if (t2->DajBrojPoena()==t1->DajBrojPoena()) return t1->DajGolRazliku()>t2->DajGolRazliku();
- }
- void Liga::IspisiTabelu() {
- sort(timovi,timovi+broj_timova, Kriterij);
- for (int i=0; i<broj_timova; i++) {
- timovi[i]->IspisiPodatke();
- cout<<endl; }
- }
- void Tim::ObradiUtakmicu(int broj_datih, int broj_primljenih) {
- Tim::broj_datih=broj_datih; Tim::broj_primljenih=broj_primljenih;
- broj_odigranih++;
- if (broj_datih>broj_primljenih) {
- broj_pobjeda++;
- broj_poena+=3;
- }
- if (broj_datih==broj_primljenih) {
- broj_nerijesenih++;
- broj_poena+=1;
- }
- if (broj_datih<broj_primljenih) {
- broj_poraza++;
- }
- }
- void Tim::IspisiPodatke() const {
- cout<<setw(20)<<left<<ime_tima<<right<<setw(4)<<broj_odigranih<<setw(4)<<broj_pobjeda<<setw(4)<<broj_nerijesenih<<setw(4)<<broj_poraza<<setw(4)<<broj_datih<<setw(4)<<broj_primljenih<<setw(4)<<broj_poena;
- }
- int main () {
- Liga Li(6);
- Li.DodajNoviTim("Celik");
- Li.DodajNoviTim("Jedinstvo");
- Li.DodajNoviTim("Zeljeznicar");
- Li.DodajNoviTim("Velez");
- Li.DodajNoviTim("Sarajevo");
- Li.DodajNoviTim("Zvijezda");
- Li.RegistrirajUtakmicu("Celik", "Jedinstvo", 3,2);
- Li.RegistrirajUtakmicu("Zeljeznicar", "Zvijezda",1,2);
- Li.RegistrirajUtakmicu("Velez", "Sarajevo",2,3);
- Li.RegistrirajUtakmicu("Jedinstvo","Zeljeznicar",1,1);
- Li.RegistrirajUtakmicu("Celik","Velez",0,1);
- Li.RegistrirajUtakmicu("Zvijezda", "Sarajevo",0,2);
- Li.IspisiTabelu();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement