Advertisement
Guest User

cetvrti

a guest
May 21st, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.60 KB | None | 0 0
  1. #include <iostream>
  2. #include<iomanip>
  3. #include<initializer_list>
  4. #include<stdexcept>
  5. #include<algorithm>
  6. #include<cstring>
  7. #include<cstdio>
  8. class Tim {
  9.  
  10. char ime[20];
  11. int brojOdigranih;
  12. int brojPobjeda;
  13. int brojNerijesenih;
  14. int brojPoraza;
  15. int brojDatih;
  16. int brojPrimljenih;
  17. int brojPoena;
  18.  
  19. public:
  20.  
  21. Tim(const char ime[]);
  22. void ObradiUtakmicu(int broj_datih, int broj_primljenih);
  23. const char *DajImeTima() const { return ime; }
  24. int DajBrojPoena() const { return brojPoena;}
  25. int DajGolRazliku() const { return brojDatih- brojPrimljenih;}
  26. void IspisiPodatke() const;
  27.  
  28.  
  29. };
  30. Tim::Tim(const char ime[]) :brojOdigranih(0),brojPobjeda(0),brojNerijesenih(0), brojPoraza(0), brojDatih(0),brojPrimljenih(0),brojPoena(0){
  31. if(std::strlen(ime)>19)
  32. throw std::domain_error("Predugo ime");
  33.  
  34. std::strcpy(Tim::ime,ime);
  35.  
  36. }
  37. void Tim::ObradiUtakmicu(int broj_datih,int broj_primljenih){
  38.  
  39. if(broj_datih<0 || broj_primljenih<0)
  40. throw std::domain_error("broj golova mora biti veci ili jednak nuli");
  41. brojOdigranih++;
  42. brojDatih+=broj_datih;
  43. brojPrimljenih+=broj_primljenih;
  44. if(broj_datih>broj_primljenih){
  45. brojPobjeda++;
  46. brojPoena+=3;
  47.  
  48. }
  49.  
  50. else if (broj_datih==broj_primljenih){
  51. brojNerijesenih++;
  52. brojPoena+=1;
  53. }
  54. else brojPoraza++;
  55. }
  56.  
  57.  
  58. void Tim::IspisiPodatke() const {
  59. std::cout<<std::setw(20)<<std::left<<ime
  60. <<std::setw(4)<<std::right<<brojOdigranih
  61. <<std::setw(4)<<std::right<<brojPobjeda
  62. <<std::setw(4)<<std::right<<brojNerijesenih
  63. <<std::setw(4)<<std::right<<brojPoraza
  64. <<std::setw(4)<<std::right<<brojDatih
  65. <<std::setw(4)<<std::right<<brojPrimljenih
  66. <<std::setw(4)<<std::right<<brojPoena<<std::endl;
  67.  
  68. }
  69. /*
  70. class Liga {
  71. int broj_timova;
  72. const int max_br_timova;
  73. Tim **timovi;
  74. void Alocira(int br);
  75. void Dealociraj();
  76. int PronadjiTim(const char* ime_tima)const;
  77. public:
  78. explicit Liga(int velicina_lige);
  79. explicit Liga(std::initializer_list<Tim> lista_timova);
  80. ~Liga() { Dealociraj(); };
  81. Liga(const Liga &l);
  82. Liga(Liga &&l);
  83. Liga &operator =(const Liga &l);
  84. Liga &operator =(Liga &&l);
  85. void DodajNoviTim(const char ime_tima[]);
  86. void RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int r);
  87. void IspisiTabelu();
  88. };
  89.  
  90. Liga::Liga(int velicina_lige) : max_br_timova(velicina_lige), broj_timova(0), timovi(new Tim*[velicina_lige]) {}
  91. 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()]) {
  92. int indeks = 0;
  93. for(auto it= lista_timova.begin(); it != lista_timova.end(); it++) {
  94. timovi[indeks] = new Tim(*it); indeks++;
  95. }
  96. }
  97.  
  98. void Liga::Alocira(int br) {
  99. try {
  100. timovi = new Tim *[br];
  101. }catch(...) {
  102. Dealociraj();
  103. }
  104. }
  105.  
  106. void Liga::Dealociraj() {
  107. if (timovi == (nullptr)) return;
  108. for(int i = 0; i<broj_timova; i++) delete timovi[i];
  109. delete [] timovi;
  110. }
  111.  
  112.  
  113.  
  114. Liga::Liga(const Liga &l): broj_timova(l.broj_timova), max_br_timova(l.max_br_timova), timovi(new Tim *[l.broj_timova]) {
  115. for(int i=0; i<broj_timova; i++) timovi[i] = new Tim (l.timovi[i]);
  116. }
  117.  
  118. Liga::Liga(Liga &&l) : broj_timova(l.broj_timova), max_br_timova(l.max_br_timova), timovi(l.timovi) {
  119. l.timovi = nullptr;
  120. }
  121.  
  122. Liga &Liga:: operator=(const Liga &l){
  123.  
  124. if(max_br_timova != l.max_br_timova)
  125. throw std::logic_error("Nesaglasni kapaciteti liga");
  126. for(int i=0; i<broj_timova; i++) delete timovi[i];
  127. for(int i=0; i<broj_timova; i++) timovi[i] = new Tim(*l.timovi[i]);
  128. return *this;
  129. }
  130.  
  131.  
  132. Liga &Liga::operator=(Liga &&l){
  133. std::swap(broj_timova, l.broj_timova);
  134. std::swap(max_br_timova, l.max_br_timova);
  135. std::swap(broj_timova, l.broj_timova);
  136. std::swap(timovi, l.timovi);
  137. return *this;
  138. }
  139.  
  140. void Liga::DodajNoviTim(const char ime_tima[]) {
  141. if(broj_timova==max_br_timova)
  142. throw std::range_error("Liga popunjena");
  143. if(PronadjiTim(ime_tima)!=-1)
  144. throw std::logic_error("tim je vec u ligi");
  145. try {
  146. timovi[broj_timova++] = new Tim(ime_tima);
  147. } catch(std::bad_alloc){
  148. broj_timova--;
  149. throw std::domain_error("neuspjesno dodavanje tima u ligu");
  150. }
  151. }
  152.  
  153. void Liga::RegistrirajUtakmicu(const char tim1[],const char tim2[],int rezultat_1, int rezultat_2){
  154. if(PronadjiTim(tim1)==-1 || PronadjiTim(tim2)==-1)
  155. throw std::domain_error("Tim nije nadjen");
  156. timovi[PronadjiTim(tim1)]->ObradiUtakmicu(rezultat_1,rezultat_2);
  157. timovi[PronadjiTim(tim2)]->ObradiUtakmicu(rezultat_2,rezultat_1);
  158. }
  159.  
  160. void Liga::IspisiTabelu(){
  161. std::sort(timovi,timovi+broj_timova, [](Tim *t1, Tim *t2){ return t1->DajBrojPoena() > t2->DajBrojPoena();});
  162. for(int i=0;i<broj_timova;i++)
  163. timovi[i]->IspisiPodatke();
  164. }
  165.  
  166.  
  167. int Liga::PronadjiTim(const char* ime_tima) const {
  168. for(int i=0;i<broj_timova;i++)
  169. if(std::strcmp(ime_tima,timovi[i]->DajImeTima())==0) return i;
  170.  
  171. return -1;
  172. }*/
  173.  
  174.  
  175. class Liga{
  176. int broj_timova;
  177. const int max_br_timova;
  178. Tim** timovi;
  179. void AlocirajNiz(int br);
  180. void OslobodiTimove();
  181. int PronadjiTim(const char* ime_tima)const;
  182. static bool FunKriterija(Tim* t1,Tim* t2);
  183.  
  184. public:
  185.  
  186. explicit Liga(int velicina_lige);
  187. explicit Liga(std::initializer_list<Tim> lista_timova);
  188. ~Liga();
  189. Liga(const Liga &l);
  190. Liga(Liga &&l);
  191. Liga &operator =(const Liga &l);
  192. Liga &operator =(Liga &&l);
  193. void DodajNoviTim(const char ime_tima[]);
  194. void RegistrirajUtakmicu(const char tim1[],const char tim2[],int rezultat_1,int rezultat_2);
  195. void IspisiTabelu();
  196.  
  197. };
  198.  
  199. void Liga::AlocirajNiz(int broj){
  200. timovi=nullptr;
  201. try{
  202. timovi=new Tim*[broj];
  203.  
  204. }
  205. catch(...){
  206.  
  207. OslobodiTimove();
  208. throw;
  209. }
  210. }
  211.  
  212. void Liga::OslobodiTimove(){
  213. if(timovi==nullptr) return;
  214. for(int i=0;i<broj_timova;i++){
  215. delete timovi[i];
  216. }
  217. delete [] timovi;
  218. }
  219.  
  220.  
  221. int Liga::PronadjiTim(const char* ime_tima) const {
  222. for(int i=0;i<broj_timova;i++)
  223. if(std::strcmp(ime_tima,timovi[i]->DajImeTima())==0) return i;
  224.  
  225. return -1;
  226. }
  227.  
  228. bool Liga::FunKriterija(Tim* t1, Tim* t2) {
  229. if(t1->DajBrojPoena()!=t2->DajBrojPoena()) return (t1->DajBrojPoena() > t2->DajBrojPoena());
  230.  
  231. if(t1->DajBrojPoena()==t2->DajBrojPoena())
  232. return t1->DajGolRazliku()>t2->DajGolRazliku();
  233.  
  234. // if(t1->DajImeTima() != t2->DajImeTima()))
  235. return (((strcmp(t1->DajImeTima(), t2->DajImeTima())) < 0));
  236. }
  237.  
  238. Liga::Liga(int velicina_lige): broj_timova(0),max_br_timova(velicina_lige), timovi(nullptr) {
  239. AlocirajNiz(max_br_timova);
  240. }
  241.  
  242. Liga::Liga(std::initializer_list<Tim> lista_timova) : broj_timova(lista_timova.size()), max_br_timova(lista_timova.size()), timovi(nullptr) {
  243. timovi = new Tim*[lista_timova.size()];
  244. for(auto i = 0; i < lista_timova.size(); i++) {
  245. timovi[i]=nullptr;
  246. }
  247. int indeks(0);
  248. for(auto it = lista_timova.begin(); it != lista_timova.end(); it++) {
  249. timovi[indeks]=new Tim(*it);
  250. indeks++;
  251. }
  252. }
  253.  
  254. Liga::~Liga() {
  255. OslobodiTimove();
  256. }
  257.  
  258. Liga::Liga(const Liga &l) : broj_timova(l.broj_timova), max_br_timova(l.max_br_timova),timovi(nullptr) {
  259. AlocirajNiz(max_br_timova);
  260. try {
  261.  
  262. for( int i=0;i<broj_timova;i++)
  263. this->timovi[i]=new Tim(*l.timovi[i]);
  264.  
  265.  
  266. }
  267. catch(...){
  268. OslobodiTimove();
  269. throw;
  270. }
  271. }
  272.  
  273. Liga::Liga(Liga &&l) : broj_timova(l.broj_timova), max_br_timova(l.max_br_timova),timovi(nullptr){
  274.  
  275. timovi=l.timovi;
  276. l.timovi=nullptr;
  277. }
  278.  
  279.  
  280. Liga &Liga:: operator=(const Liga &l){
  281.  
  282. if(max_br_timova != l.max_br_timova)
  283. throw std::logic_error("Nesaglasni kapaciteti liga");
  284. if(&l==this) return *this;
  285.  
  286. for(int i=0;i<broj_timova;i++)
  287. delete timovi[i];
  288.  
  289. broj_timova=l.broj_timova;
  290. try{
  291. for(int i=0;i<broj_timova;i++)
  292. timovi[i]=new Tim(*l.timovi[i]);
  293. }
  294. catch(...){
  295. OslobodiTimove();
  296. throw;
  297.  
  298. }
  299.  
  300. return *this;
  301.  
  302. }
  303.  
  304. Liga &Liga::operator =(Liga &&l){
  305. if(max_br_timova!= l.max_br_timova)
  306. throw std::logic_error("Nesaglasni kapaciteti liga");
  307. if(&l==this) return *this;
  308.  
  309. timovi=l.timovi;
  310. broj_timova=l.broj_timova;
  311. l.timovi=nullptr;
  312. return *this;
  313. }
  314.  
  315. void Liga::DodajNoviTim(const char ime_tima[]){
  316. if(broj_timova==max_br_timova)
  317. throw std::range_error("Liga popunjena");
  318. if(PronadjiTim(ime_tima)!=-1)
  319. throw std::logic_error("tim je vec u ligi");
  320. try{
  321. timovi[broj_timova++]= new Tim(ime_tima);
  322. }
  323. catch(std::bad_alloc){
  324. broj_timova--;
  325. throw std::domain_error("neuspjesno dodavanje tima u ligu");
  326.  
  327. }
  328. catch(...){
  329. broj_timova--;
  330. throw;
  331. }
  332. }
  333.  
  334. void Liga::RegistrirajUtakmicu(const char tim1[],const char tim2[],int rezultat_1, int rezultat_2){
  335. if(PronadjiTim(tim1)==-1 || PronadjiTim(tim2)==-1)
  336. throw std::domain_error("Tim nije nadjen");
  337. timovi[PronadjiTim(tim1)]->ObradiUtakmicu(rezultat_1,rezultat_2);
  338. timovi[PronadjiTim(tim2)]->ObradiUtakmicu(rezultat_2,rezultat_1);
  339. }
  340.  
  341. void Liga::IspisiTabelu(){
  342. std::sort(timovi,timovi+broj_timova,FunKriterija);
  343. for(int i=0;i<broj_timova;i++)
  344. timovi[i]->IspisiPodatke();
  345.  
  346.  
  347.  
  348. }
  349. int main() {
  350.  
  351. return 0;
  352. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement