Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <algorithm>
- #include <cstring>
- #include <new>
- #include <stdexcept>
- class Tim
- {
- char ime[20];
- 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; }
- int DajBrojPoena() const { return broj_poena; }
- int DajGolRazliku() const { return broj_primljenih-broj_datih; }
- void IspisiPodatke() const;
- };
- class Liga
- {
- std::vector<*Tim> timovi;
- static bool Kriterij(Tim* tim1, Tim* tim2){
- return tim1->DajBrojPoena()>tim2->DajBrojPoena();}
- public:
- explicit Liga();
- explicit Liga(std::initializer_list<Tim> lista_timova);
- 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();
- };
- int main()
- {
- try {
- Liga l(5);
- l.DodajNoviTim("Sarajevo");
- l.DodajNoviTim("Zeljeznicar");
- l.DodajNoviTim("Velez");
- l.RegistrirajUtakmicu("Sarajevo","Zeljeznicar",5,0);
- l.RegistrirajUtakmicu("Sarajevo","Velez",5,1);
- l.RegistrirajUtakmicu("Sarajevo","Zeljeznicar",7,0);
- l.RegistrirajUtakmicu("Velez","Zeljeznicar",1,1);
- l.RegistrirajUtakmicu("Sarajevo","Velez",5,0);
- l.RegistrirajUtakmicu("Velez","Zeljeznicar",2,0);
- Liga l2(5);
- l2=std::move(l);
- }
- catch(const char poruka[]) {
- std::cout<<std::endl << poruka << std::endl;
- }
- return 0;
- }
- //IMPLEMENTACIJE ZA KLASU LIGA//
- Liga::Liga() : timovi(new Tim*[timovi.size()]){}
- Liga::Liga(std::initializer_list<Tim> lista_timova):
- timovi(new Tim*[lista_timova.size()]){}
- //KOPIRAJUCI KONSTRUKTORI:
- Liga::Liga(const Liga &l): timovi(new Tim*[timovi.size()])
- {
- for(int i=0; i<timovi.size(); i++) timovi[i]=new Tim(*l.timovi[i]);
- //za svaki pokazivac u nizu dinamicki alociramo klasu tim
- //u koju kopiramo sadrzaj klase tim iz onog cime smo inicijalizirali
- }
- Liga::Liga(Liga &&l): timovi(l.timovi)
- {
- l.timovi=nullptr; //prijasnji vise ne pokazuje ninasta
- //dok novi pokazuje na niz pokazivaca od ovog prijasnjeg
- l.broj_timova=0;
- }
- //OPERATORI DODJELE:
- Liga &Liga::operator =(const Liga &l){
- for(int i=0; i<l.size(); i++) timovi[i]=l.timovi[i]; //kopirali
- for(int i=l.size; i<timovi.size(); i++)
- delete timovi[i];} //brisemo ostatak
- if (broj_timova<l.broj_timova){
- for(int i=0; i<broj_timova; i++) timovi[i]=l.timovi[i]; //kopirali
- for(int i=broj_timova; i<l.broj_timova; i++)
- timovi[i]=new Tim(*l.timovi[i]);} //alociramo onoliko koliko fali
- broj_timova=l.broj_timova; return *this;
- }
- Liga &Liga::operator =(Liga &&l){
- //ako imamo A=std::move(B), izbrisacemo sadrzaj od A,
- //pa cemo sadrzaj od B kopirati u A,
- //zatim sve iz B izbrisati tako da ostane prazan
- if (broj_timova>l.broj_timova){
- for(int i=0; i<l.broj_timova; i++) timovi[i]=l.timovi[i]; //kopirali
- for(int i=l.broj_timova; i<broj_timova; i++)
- delete timovi[i];} //brisemo ostatak
- if (broj_timova<l.broj_timova){
- for(int i=0; i<broj_timova; i++) timovi[i]=l.timovi[i]; //kopirali
- for(int i=broj_timova; i<l.broj_timova; i++)
- timovi[i]=new Tim(*l.timovi[i]);} //alociramo onoliko koliko fali
- broj_timova=l.broj_timova;
- l.timovi=nullptr; l.broj_timova=0; return *this;
- }
- //OSTALE FUNKCIJE
- void Liga::DodajNoviTim(const char ime_tima[]){
- for(int i = 0; i < timovi.size(); i++)
- {
- if (std::strcmp(ime_tima, timovi[i]->DajImeTima()) == 0)
- throw "Imena timova se ne smiju ponavljati!";
- }
- timovi.resize(timovi.size()++)
- timovi[timovi.size()]=new Tim(ime_tima);}
- void Liga::RegistrirajUtakmicu(const char tim1[], const char tim2[],
- int rezultat_1, int rezultat_2){
- Tim* ptim1(nullptr);
- Tim* ptim2(nullptr);
- for(int i = 0; i < broj_timova; i++){
- if (std::strcmp(tim1, timovi[i]->DajImeTima()) == 0) ptim1 = timovi[i];
- if (std::strcmp(tim2, timovi[i]->DajImeTima()) == 0) ptim2 = timovi[i];
- }
- if (ptim1 == 0) throw "Ne postoji tim1!";
- if (ptim2 == 0) throw "Ne postoji tim2!";
- if(ptim1 == ptim2) throw "Imena timova ne smiju biti jednaka!";
- ptim1->ObradiUtakmicu(rezultat_1, rezultat_2);
- ptim2->ObradiUtakmicu(rezultat_2, rezultat_1);
- }
- void Liga::IspisiTabelu()
- {
- std::sort(timovi, timovi+timovi.size(), Liga::Kriterij);
- std::cout << std::endl << "Rezultati lige: " << std::endl;
- for(int i = 0; i < timovi.size(); i++)
- {timovi[i]->IspisiPodatke();
- std::cout << std::endl;}
- }
- //IMPLEMENTACIJE ZA KLASU TIM //
- 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)
- { std::strcpy(Tim::ime,ime);}
- void Tim::ObradiUtakmicu(int broj_datih, int broj_primljenih)
- {
- broj_odigranih++;
- if(broj_datih==broj_primljenih)
- { broj_nerijesenih++; broj_poena+=1; }
- if(broj_datih>broj_primljenih)
- { broj_pobjeda++; broj_poena+=3; }
- if(broj_datih<broj_primljenih)
- broj_poraza++;
- Tim::broj_datih += broj_datih;
- Tim::broj_primljenih += broj_primljenih;
- }
- void Tim::IspisiPodatke() const
- {
- std::cout<<std::left<<std::setw(20)<<ime<<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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement