rendered paste body#include <cstdlib>
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
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_datih-broj_primljenih;}
void IspisiPodatke() const;
};
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) {
// konstruktorska inicijalizacijska lista, dvotacka, inicijalizacija atributa odvojeni zarezom pa tek tijelo komnstruktora
int i(0);
while(*ime!='\0'){
this->ime[i]=*ime;
ime++;
i++;
}
this->ime[i]='\0';
}
void Tim::ObradiUtakmicu (int broj_datih, int broj_primljenih){
if(broj_datih<0||broj_primljenih<0) throw "Unijeli ste neispravne parametre";
if(broj_datih>0) this->broj_datih+=broj_datih;
if(broj_primljenih>0)this->broj_primljenih+=broj_primljenih;
if(broj_datih>broj_primljenih){ this->broj_pobjeda+=1; this->broj_poena+=3;}
if(broj_datih<broj_primljenih) this->broj_poraza+=1;// moglo je i ovako: TIm::broj_poraza+=1;
if(broj_datih==broj_primljenih){ this->broj_nerijesenih+=1; this->broj_poena+=1;}
this->broj_odigranih+=1;
}
void Tim::IspisiPodatke() const{
int br=0; // br je duzina naziva tima
const char *pom=ime;
while(*pom!='\0') { br++; pom++; }
cout <<left << setw(20-br) << ime << right << setw(4) << broj_odigranih << right << setw(4) << broj_pobjeda
<< right << setw(4) << broj_nerijesenih << right << setw(4) << broj_poraza << right << setw(4) << broj_datih <<
right << setw(4) << broj_primljenih << right << setw(4) << broj_poena << endl;
}
class Liga{
vector <Tim*> timovi;
static bool Uporedi (const Tim* t1, const Tim* t2);
Liga(const Liga &);
Liga &operator =(const Liga &);
public:
~Liga(){for(int i=0; timovi.size()-1; i++) delete timovi[i];}
void DodajNoviTim(const char ime_tima[]);
void RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2);
void IspisiTabelu();
};
void Liga::DodajNoviTim(const char ime_tima[]){
cout << "pozvala se metoda dodaj novi tim" ;
timovi.push_back(new Tim(ime_tima));
cout << "pozvala se metoda dodaj novi tim" ;
cout << endl;
}
void Liga::RegistrirajUtakmicu (const char tim1[], const char tim2[], int rezultat_1, int rezultat_2){
bool ispit1(true), ispit2(true);
int poz1=-1, poz2=-1;
for(int i=0; i<timovi.size(); i++){
const char *pom1=timovi[i]->DajImeTima();
const char *p1=tim1;// kako je ime tima niz znakova, onda *p pokazuje samo na prvo slovo
if (*pom1==*p1) { // provjerava slovo po slovao, pocevsi od prvog
ispit1=true;
while(*pom1!='\0') {
if (*pom1==*p1) { pom1++; p1++; }// ako su slova ista, prelazimo na sljedeci el niza slova
else {ispit1=false; break; } // ako nisu, zaustavljamo for
// if(*pom!=*p) { ispit1=false; break; }
poz1=i;
}
}
const char *pom2=timovi[i]->DajImeTima();
const char *p2=tim2;
if (*pom2==*p2) {
ispit2=true;
while(*pom2!='\0') {
if (*pom2==*p2) { pom2++; p2++; }
else {ispit2=false; break; }
//if(*pom2!=*p2) { ispit2=false; break; }
poz2=i;// cuva redni tima u ligi
}
}
}
if (poz1==poz2) throw "Nemoze tim igrati sam sa sobom!!!";
if (poz1!=-1&&poz2!=-1) {
timovi[poz1]->ObradiUtakmicu(rezultat_1, rezultat_2); timovi[poz2]->ObradiUtakmicu(rezultat_1, rezultat_2);
}
else throw "Ne postoji u bazi jedan od timova!!!";
}
// funkcije kriterija se izvode kao privatne staticke funkcije, jer su zajednicke za sve primjerke neke klase
// staticke funkcije ne sadrze pokazivac this pa ne znaju na koji su objekat pozvane
bool Liga::Uporedi (const Tim* t1, const Tim* t2){
if(t1->DajBrojPoena()>t2->DajBrojPoena()) return true;
if(t1->DajBrojPoena()==t2->DajBrojPoena()){
if(t1->DajGolRazliku()>t2->DajGolRazliku()) return true;
}
return false;
}
void Liga::IspisiTabelu(){
sort(timovi.begin(), timovi.end(), Uporedi);
// timovi je niz pokazivaca pa se funkciji Uporedi mora poslati pokazivac
cout<<"Trenutni poredak lige:"<<endl;
cout <<"---------------------------------------------------------------------"<<endl;
for(int i=0; i<timovi.size(); i++){
timovi[i]->IspisiPodatke();
cout<<endl;
}
}
int main(int argc, char *argv[]){
try{
cout << "radi main" << endl;
Liga *t;
t->DodajNoviTim("Travnik");
cout << "nyx" ;
t->DodajNoviTim("Sarajevo");
cout << "nyx" ;
t->RegistrirajUtakmicu("Travnik","Sarajevo",1,2);
}
catch(const char poruka[]){
cout << poruka << endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}