Advertisement
sellmmaahh

tut11-zad2

Aug 2nd, 2015
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.31 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <stdexcept>
  4. #include <string>
  5. #include <cstring>
  6. #include <algorithm>
  7.  
  8. using namespace std;
  9.  
  10. class Tim {
  11.     char ime_tima[20];
  12.     int broj_odigranih, broj_pobjeda, broj_nerijesenih, broj_poraza, broj_datih, broj_primljenih, broj_poena;
  13.  
  14. public:
  15.  
  16. Tim(const char ime[]) {strcpy(ime_tima, ime);broj_odigranih=0; broj_pobjeda=0; broj_nerijesenih=0; broj_poraza=0; broj_datih=0;
  17. broj_primljenih=0; broj_poena=0; }
  18.  
  19. void ObradiUtakmicu(int broj_datih, int broj_primljenih);
  20. const char *DajImeTima() const { return ime_tima; }
  21. int DajBrojPoena() const { return broj_poena; }
  22. int DajGolRazliku() const {return broj_datih-broj_primljenih; }
  23. void IspisiPodatke() const;
  24. };
  25. class Liga {
  26.     int broj_timova;
  27.     const int max_br_timova;
  28.     Tim **timovi;
  29.     static bool Kriterij (const Tim *t1, const Tim *t2);
  30.  
  31.  
  32. public:
  33.      explicit Liga(int velicina_lige):  broj_timova(0), max_br_timova(velicina_lige), timovi(nullptr){
  34.  
  35.         timovi = new Tim*[max_br_timova];
  36.         fill(timovi, timovi + max_br_timova, nullptr);
  37.     }
  38. explicit Liga(std::initializer_list<Tim> lista_timova);
  39. ~Liga();
  40. Liga(const Liga &l);
  41. Liga(Liga &&l);
  42. Liga &operator =(const Liga &l);
  43. Liga &operator =(Liga &&l);
  44. void DodajNoviTim(const char ime_tima[]);
  45. void RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2);
  46. void IspisiTabelu();
  47. };
  48.  
  49. Liga::~Liga() {
  50.     if (timovi!=nullptr) {
  51. for (int i=0; i<broj_timova; i++)
  52.     delete[] timovi[i];
  53.     delete [] timovi;
  54. }}
  55.  
  56. Liga::Liga(std::initializer_list<Tim> lista_timova) : broj_timova(lista_timova.size()), max_br_timova(lista_timova.size()),
  57. timovi(nullptr) {
  58.  
  59.     int i(0);
  60.     for (const auto &x: lista_timova) {
  61.         timovi[i]=new Tim(x);
  62.          i++;
  63.          }
  64. }
  65. Liga::Liga(const Liga &l) : max_br_timova(l.max_br_timova), broj_timova(l.broj_timova) {
  66.     timovi=new Tim*[max_br_timova];
  67.     fill(timovi,timovi+max_br_timova, nullptr);
  68.     for (int i=0; i<max_br_timova; i++)
  69.         timovi[i]=new Tim(*l.timovi[i]);
  70. }
  71. Liga::Liga(Liga &&l) : max_br_timova(l.max_br_timova), broj_timova(l.broj_timova), timovi(l.timovi) {
  72.     l.timovi=nullptr;
  73.  
  74. }
  75.  
  76. Liga &Liga::operator =(const Liga &l) {
  77.     if (this==&l) return *this;
  78.         if (l.max_br_timova!=this->max_br_timova) throw "Ne moze!";
  79.     for (int i=0; i<max_br_timova; i++) delete [] timovi [i];
  80.     fill(timovi, timovi+max_br_timova, nullptr);
  81.     broj_timova=l.broj_timova;
  82.     for (int i=0; i<broj_timova; i++) {
  83.             timovi[i]=new Tim(*l.timovi[i]);
  84.     }
  85.     return *this;
  86. }
  87. Liga &Liga::operator=(Liga &&l) {
  88.     if (this==&l) return *this;
  89.     if (l.max_br_timova!=this->max_br_timova) throw "Ne moze!";
  90.     for (int i=0; i<max_br_timova; i++)
  91.         delete [] timovi [i];
  92.     fill(timovi,timovi+max_br_timova, nullptr);
  93.     broj_timova=l.broj_timova;
  94.     timovi=l.timovi;
  95.     l.timovi=nullptr;
  96.     return *this;
  97. }
  98. void Liga::DodajNoviTim(const char ime_tima[]) {
  99.     if (broj_timova==max_br_timova) throw "Ne moze vise stati u niz!";
  100.  
  101.     timovi[broj_timova]= new Tim (ime_tima);
  102.     broj_timova++;
  103. }
  104. void Liga::RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2) {
  105.     int prvi(-1), drugi (-1);
  106.     for (int i=0; i<broj_timova; i++)
  107.     {
  108.         if (strcmp(tim1, timovi[i]->DajImeTima())==0) prvi=i;
  109.         if (strcmp(tim2,timovi[i]->DajImeTima())==0) drugi=i;
  110.     }
  111.  
  112.        if (prvi==-1) throw "Prvi tim ne postoji.";
  113.        if (drugi==-1) throw "Drugi tim ne postoji.";
  114.        timovi[prvi]->ObradiUtakmicu(rezultat_1,rezultat_2);
  115.        timovi[drugi]->ObradiUtakmicu(rezultat_2, rezultat_1);
  116. }
  117.  
  118. bool Liga::Kriterij(const Tim *t1, const Tim *t2) {
  119.     if (t1->DajBrojPoena()>t2->DajBrojPoena()) return true;
  120.     else if (t2->DajBrojPoena()>t1->DajBrojPoena()) return false;
  121.     else if (t2->DajBrojPoena()==t1->DajBrojPoena()) return t1->DajGolRazliku()>t2->DajGolRazliku();
  122. }
  123.  
  124. void Liga::IspisiTabelu() {
  125.     sort(timovi,timovi+broj_timova, Kriterij);
  126.     for (int i=0; i<broj_timova; i++) {
  127.         timovi[i]->IspisiPodatke();
  128.         cout<<endl; }
  129. }
  130.  
  131. void Tim::ObradiUtakmicu(int broj_datih, int broj_primljenih) {
  132.     Tim::broj_datih=broj_datih; Tim::broj_primljenih=broj_primljenih;
  133.     broj_odigranih++;
  134.     if (broj_datih>broj_primljenih) {
  135.         broj_pobjeda++;
  136.         broj_poena+=3;
  137.     }
  138.     if (broj_datih==broj_primljenih) {
  139.         broj_nerijesenih++;
  140.         broj_poena+=1;
  141.     }
  142.     if (broj_datih<broj_primljenih) {
  143.         broj_poraza++;
  144.     }
  145. }
  146.  
  147. void Tim::IspisiPodatke() const {
  148.     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;
  149. }
  150.  
  151. int main () {
  152. Liga Li(6);
  153. Li.DodajNoviTim("Celik");
  154. Li.DodajNoviTim("Jedinstvo");
  155. Li.DodajNoviTim("Zeljeznicar");
  156. Li.DodajNoviTim("Velez");
  157. Li.DodajNoviTim("Sarajevo");
  158. Li.DodajNoviTim("Zvijezda");
  159. Li.RegistrirajUtakmicu("Celik", "Jedinstvo", 3,2);
  160. Li.RegistrirajUtakmicu("Zeljeznicar", "Zvijezda",1,2);
  161. Li.RegistrirajUtakmicu("Velez", "Sarajevo",2,3);
  162. Li.RegistrirajUtakmicu("Jedinstvo","Zeljeznicar",1,1);
  163. Li.RegistrirajUtakmicu("Celik","Velez",0,1);
  164. Li.RegistrirajUtakmicu("Zvijezda", "Sarajevo",0,2);
  165.  
  166.  
  167. Li.IspisiTabelu();
  168. return 0;
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement