#include #include #include #include using namespace std; // klasa polazak class Polazak{ string odrediste, oznaka; int broj_perona, sati, minute, trajanje, kasnjenje; public: Polazak(string odrediste, string oznaka_voznje, int broj_perona, int sat_polaska, int minute_polaska, int trajanje_voznje); void PostaviKasjenje(int kasnjenje){ if(kasjnenje<0) throw "Neispravan unos"; this->kasnjenje=kasnjenje;} bool DaLiKasni() const{ if(kasnjenje>0) return true; return false; } int DajTrajanje() const{ return trajanje;} void OcekivanoVrijemePolaska (int &sati, int &minute) const; void OcekivanoVrijemeDolaska (int &sati, int &minute) const; void Ispisi() const; }; // klasa polasci class Polasci{ Polazak **polasci; int broj_polazaka; int max_polazaka; public: explicit Polasci(int max_broj_polazaka); ~Polasci(){ for(int i=0; iDaLiKasni()) pom++; return pom;} int DajProsjecnoTrajanjeVoznji() const{int pom(0); for(int i=0; iDajTrajanje(); return pom/broj_polazaka;} Polazak &DajPrviPolazak() const { sort(polasci, polasci+broj_polazaka, Uporedi); return *polasci[0]; } Polazak &DajPosljednjiPolazak() const { sort(polasci, polasci+broj_polazaka, Uporedi); return *polasci[broj_polazaka-1]; } void IsprazniKolekciju(){for(int i=0; i23 || sat_polaska<0) || (minute_polaska>59 || minute_polaska<0)) throw "Neispravno uneseno vrijeme polaska"; if(broj_perona<1 || broj_perona>15) throw "Neispravano unesen broj perona!"; trajanje=trajanje_voznje; minute=minute_polaska; sati=sat_polaska; this->odrediste=odrediste; this->oznaka=oznaka_voznje; this->broj_perona=broj_perona; kasnjenje=0; } void Polazak::OcekivanoVrijemePolaska (int &sati, int &minute) const{ if(kasnjenje>0){ int pom; pom=sati*60+minute; pom=pom+kasnjenje; sati=pom/60; minute=pom-sati*60; } } void Polazak::OcekivanoVrijemeDolaska (int &sati, int &minute) const{ OcekivanoVrijemePolaska(sati, minute); if(kasnjenje>0){ int s(0), m(0); s=(trajanje+kasnjenje)/60; m=(trajanje+kasnjenje)-s*60; if(sati+s>23){ if(sati=23 && s=1)sati=0; if(sati=23 && s>1 && s<23) sati=s-1; else sati=s%24; } } else{ int s(0), m(0); s=trajanje/60; m=trajanje-s*60; if(sati+s>23){ if(sati=23 && s=1)sati=0; if(sati=23 && s>1 && s<23) sati=s-1; else sati=s%24; } } void Polazak::Ispisi()const{ int m1(minute), s1(sati), t1(this->trajanje); if(DaLiKasni){ int s(0), m(0); s=(t1+kasnjenje)/60; m=(t1+kasnjenje)-s*60; if(s1i+s>23){ if(s1=23 && s=1)sati=0; if(s1=23 && s>1 && s<23) s1=s-1; else sati=s%24; cout << setw(10) << oznaka << setw(30) << odrediste << right << setw(5)<< s1<< ":" << right << setw(5)<< m1 << " (Planirano "<23){ if(s1=23 && s=1)s1=0; if(s1=23 && s>1 && s<23) s1=s-1; else s1=s%24; }; cout << left << setw(10)<< oznaka << setw(30) << odrediste << right << setw(5) << sati <<":"<< left << setw(5)<< minute << right << setw(5)<< s1<<":"<< left << setw(5)<< m1 << setw(8) << broj_perona << endl; } } Polasci::Polasci(const Polasci &polasci){ this->polasci=new Polazak*[polasci.max_polazaka]; max_polazaka=polasci.max_polazaka; broj_polazaka=polasci.broj_polazaka; for(int i=0; ipolasci[i]=new Polazak("", "", 1, 0, 0, 0); *(this->polasci[i])=*polasci.polasci[i]; } } void Polasci::RegistrirajPolazak(string odrediste, string oznaka_voznje, int broj_perona, int sat_polaska, int minute_polaska, int trajanje_voznje){ if(broj_polazaka==max_polazaka) throw "Nema mjesta!"; delete polasci[broj_polazaka]; polasci[broj_polazaka]=new Polazak(odrediste, oznaka_voznje, broj_perona, sat_polaska, minute_polaska, trajanje_voznje); broj_polazaka++; } void Polasci::RegistrirajPolazak(Polazak *polazak){ if(broj_polazaka==max_polazaka) throw "Nema mjesta!"; delete polasci[broj_polazaka]; polasci[broj_polazaka]=polazak; broj_polazaka++; } bool Polasci::Uporedi(const Polazak* p1,const Polazak* p2){ int sati1(0),sati2(0), min1(0), min2(0), pom1(0), pom2(0); p1->OcekivanoVrijemePolaska(sati1, min1); p2->OcekivanoVrijemePolaska(sati2, min2); pom1=sati1*60+min1; pom2=sati2*60+min2; if(pom1Ispisi(); } } int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; }