Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<iomanip>
- #include<initializer_list>
- #include<stdexcept>
- #include<algorithm>
- #include<cstring>
- #include<cstdio>
- class Tim {
- char ime[20];
- int brojOdigranih;
- int brojPobjeda;
- int brojNerijesenih;
- int brojPoraza;
- int brojDatih;
- int brojPrimljenih;
- int brojPoena;
- public:
- Tim(const char ime[]);
- void ObradiUtakmicu(int broj_datih, int broj_primljenih);
- const char *DajImeTima() const { return ime; }
- int DajBrojPoena() const { return brojPoena;}
- int DajGolRazliku() const { return brojDatih- brojPrimljenih;}
- void IspisiPodatke() const;
- };
- Tim::Tim(const char ime[]) :brojOdigranih(0),brojPobjeda(0),brojNerijesenih(0), brojPoraza(0), brojDatih(0),brojPrimljenih(0),brojPoena(0){
- if(std::strlen(ime)>19)
- throw std::domain_error("Predugo ime");
- std::strcpy(Tim::ime,ime);
- }
- void Tim::ObradiUtakmicu(int broj_datih,int broj_primljenih){
- if(broj_datih<0 || broj_primljenih<0)
- throw std::domain_error("broj golova mora biti veci ili jednak nuli");
- brojOdigranih++;
- brojDatih+=broj_datih;
- brojPrimljenih+=broj_primljenih;
- if(broj_datih>broj_primljenih){
- brojPobjeda++;
- brojPoena+=3;
- }
- else if (broj_datih==broj_primljenih){
- brojNerijesenih++;
- brojPoena+=1;
- }
- else brojPoraza++;
- }
- void Tim::IspisiPodatke() const {
- std::cout<<std::setw(20)<<std::left<<ime
- <<std::setw(4)<<std::right<<brojOdigranih
- <<std::setw(4)<<std::right<<brojPobjeda
- <<std::setw(4)<<std::right<<brojNerijesenih
- <<std::setw(4)<<std::right<<brojPoraza
- <<std::setw(4)<<std::right<<brojDatih
- <<std::setw(4)<<std::right<<brojPrimljenih
- <<std::setw(4)<<std::right<<brojPoena<<std::endl;
- }
- /*
- class Liga {
- int broj_timova;
- const int max_br_timova;
- Tim **timovi;
- void Alocira(int br);
- void Dealociraj();
- int PronadjiTim(const char* ime_tima)const;
- public:
- explicit Liga(int velicina_lige);
- explicit Liga(std::initializer_list<Tim> lista_timova);
- ~Liga() { Dealociraj(); };
- 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 r);
- void IspisiTabelu();
- };
- Liga::Liga(int velicina_lige) : max_br_timova(velicina_lige), broj_timova(0), timovi(new Tim*[velicina_lige]) {}
- 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 indeks = 0;
- for(auto it= lista_timova.begin(); it != lista_timova.end(); it++) {
- timovi[indeks] = new Tim(*it); indeks++;
- }
- }
- void Liga::Alocira(int br) {
- try {
- timovi = new Tim *[br];
- }catch(...) {
- Dealociraj();
- }
- }
- void Liga::Dealociraj() {
- if (timovi == (nullptr)) return;
- for(int i = 0; i<broj_timova; i++) delete timovi[i];
- delete [] timovi;
- }
- Liga::Liga(const Liga &l): broj_timova(l.broj_timova), max_br_timova(l.max_br_timova), timovi(new Tim *[l.broj_timova]) {
- for(int i=0; i<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.timovi = nullptr;
- }
- Liga &Liga:: operator=(const Liga &l){
- if(max_br_timova != l.max_br_timova)
- throw std::logic_error("Nesaglasni kapaciteti liga");
- for(int i=0; i<broj_timova; i++) delete timovi[i];
- for(int i=0; i<broj_timova; i++) timovi[i] = new Tim(*l.timovi[i]);
- return *this;
- }
- Liga &Liga::operator=(Liga &&l){
- std::swap(broj_timova, l.broj_timova);
- std::swap(max_br_timova, l.max_br_timova);
- std::swap(broj_timova, l.broj_timova);
- std::swap(timovi, l.timovi);
- return *this;
- }
- void Liga::DodajNoviTim(const char ime_tima[]) {
- if(broj_timova==max_br_timova)
- throw std::range_error("Liga popunjena");
- if(PronadjiTim(ime_tima)!=-1)
- throw std::logic_error("tim je vec u ligi");
- try {
- timovi[broj_timova++] = new Tim(ime_tima);
- } catch(std::bad_alloc){
- broj_timova--;
- throw std::domain_error("neuspjesno dodavanje tima u ligu");
- }
- }
- void Liga::RegistrirajUtakmicu(const char tim1[],const char tim2[],int rezultat_1, int rezultat_2){
- if(PronadjiTim(tim1)==-1 || PronadjiTim(tim2)==-1)
- throw std::domain_error("Tim nije nadjen");
- timovi[PronadjiTim(tim1)]->ObradiUtakmicu(rezultat_1,rezultat_2);
- timovi[PronadjiTim(tim2)]->ObradiUtakmicu(rezultat_2,rezultat_1);
- }
- void Liga::IspisiTabelu(){
- std::sort(timovi,timovi+broj_timova, [](Tim *t1, Tim *t2){ return t1->DajBrojPoena() > t2->DajBrojPoena();});
- for(int i=0;i<broj_timova;i++)
- timovi[i]->IspisiPodatke();
- }
- int Liga::PronadjiTim(const char* ime_tima) const {
- for(int i=0;i<broj_timova;i++)
- if(std::strcmp(ime_tima,timovi[i]->DajImeTima())==0) return i;
- return -1;
- }*/
- class Liga{
- int broj_timova;
- const int max_br_timova;
- Tim** timovi;
- void AlocirajNiz(int br);
- void OslobodiTimove();
- int PronadjiTim(const char* ime_tima)const;
- static bool FunKriterija(Tim* t1,Tim* t2);
- public:
- explicit Liga(int 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();
- };
- void Liga::AlocirajNiz(int broj){
- timovi=nullptr;
- try{
- timovi=new Tim*[broj];
- }
- catch(...){
- OslobodiTimove();
- throw;
- }
- }
- void Liga::OslobodiTimove(){
- if(timovi==nullptr) return;
- for(int i=0;i<broj_timova;i++){
- delete timovi[i];
- }
- delete [] timovi;
- }
- int Liga::PronadjiTim(const char* ime_tima) const {
- for(int i=0;i<broj_timova;i++)
- if(std::strcmp(ime_tima,timovi[i]->DajImeTima())==0) return i;
- return -1;
- }
- bool Liga::FunKriterija(Tim* t1, Tim* t2) {
- if(t1->DajBrojPoena()!=t2->DajBrojPoena()) return (t1->DajBrojPoena() > t2->DajBrojPoena());
- if(t1->DajBrojPoena()==t2->DajBrojPoena())
- return t1->DajGolRazliku()>t2->DajGolRazliku();
- // if(t1->DajImeTima() != t2->DajImeTima()))
- return (((strcmp(t1->DajImeTima(), t2->DajImeTima())) < 0));
- }
- Liga::Liga(int velicina_lige): broj_timova(0),max_br_timova(velicina_lige), timovi(nullptr) {
- AlocirajNiz(max_br_timova);
- }
- Liga::Liga(std::initializer_list<Tim> lista_timova) : broj_timova(lista_timova.size()), max_br_timova(lista_timova.size()), timovi(nullptr) {
- timovi = new Tim*[lista_timova.size()];
- for(auto i = 0; i < lista_timova.size(); i++) {
- timovi[i]=nullptr;
- }
- int indeks(0);
- for(auto it = lista_timova.begin(); it != lista_timova.end(); it++) {
- timovi[indeks]=new Tim(*it);
- indeks++;
- }
- }
- Liga::~Liga() {
- OslobodiTimove();
- }
- Liga::Liga(const Liga &l) : broj_timova(l.broj_timova), max_br_timova(l.max_br_timova),timovi(nullptr) {
- AlocirajNiz(max_br_timova);
- try {
- for( int i=0;i<broj_timova;i++)
- this->timovi[i]=new Tim(*l.timovi[i]);
- }
- catch(...){
- OslobodiTimove();
- throw;
- }
- }
- Liga::Liga(Liga &&l) : broj_timova(l.broj_timova), max_br_timova(l.max_br_timova),timovi(nullptr){
- timovi=l.timovi;
- l.timovi=nullptr;
- }
- Liga &Liga:: operator=(const Liga &l){
- if(max_br_timova != l.max_br_timova)
- throw std::logic_error("Nesaglasni kapaciteti liga");
- if(&l==this) return *this;
- for(int i=0;i<broj_timova;i++)
- delete timovi[i];
- broj_timova=l.broj_timova;
- try{
- for(int i=0;i<broj_timova;i++)
- timovi[i]=new Tim(*l.timovi[i]);
- }
- catch(...){
- OslobodiTimove();
- throw;
- }
- return *this;
- }
- Liga &Liga::operator =(Liga &&l){
- if(max_br_timova!= l.max_br_timova)
- throw std::logic_error("Nesaglasni kapaciteti liga");
- if(&l==this) return *this;
- timovi=l.timovi;
- broj_timova=l.broj_timova;
- l.timovi=nullptr;
- return *this;
- }
- void Liga::DodajNoviTim(const char ime_tima[]){
- if(broj_timova==max_br_timova)
- throw std::range_error("Liga popunjena");
- if(PronadjiTim(ime_tima)!=-1)
- throw std::logic_error("tim je vec u ligi");
- try{
- timovi[broj_timova++]= new Tim(ime_tima);
- }
- catch(std::bad_alloc){
- broj_timova--;
- throw std::domain_error("neuspjesno dodavanje tima u ligu");
- }
- catch(...){
- broj_timova--;
- throw;
- }
- }
- void Liga::RegistrirajUtakmicu(const char tim1[],const char tim2[],int rezultat_1, int rezultat_2){
- if(PronadjiTim(tim1)==-1 || PronadjiTim(tim2)==-1)
- throw std::domain_error("Tim nije nadjen");
- timovi[PronadjiTim(tim1)]->ObradiUtakmicu(rezultat_1,rezultat_2);
- timovi[PronadjiTim(tim2)]->ObradiUtakmicu(rezultat_2,rezultat_1);
- }
- void Liga::IspisiTabelu(){
- std::sort(timovi,timovi+broj_timova,FunKriterija);
- for(int i=0;i<broj_timova;i++)
- timovi[i]->IspisiPodatke();
- }
- int main() {
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement