Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- class Polazak
- {
- string odrediste;
- bool brzi_voz;
- int broj_voza, broj_perona, sat_polaska, minute_polaska, trajanje_voznje, kasnjenje;
- public:
- Polazak(string odrediste, int broj_voza, int broj_perona, bool brzi_voz,
- int sat_polaska, int minute_polaska, int trajanje_voznje);
- void PostaviKasnjenje(int kasnjenje)
- {
- Polazak::kasnjenje=kasnjenje;
- }
- bool DaLiKasni() const
- {
- return kasnjenje>0;
- }
- int DajSatPolaska() const { return sat_polaska; }
- int DajMinutePolaska() const { return minute_polaska; }
- int DajTrajanjeVoznje() const
- {
- return trajanje_voznje;
- }
- void OcekivanoVrijemePolaska(int &sati, int &minute) const;
- void OcekivanoVrijemeDolaska(int &sati, int &minute) const;
- void Ispisi() const;
- };
- class RedVoznje
- {
- int max_broj_polazaka, broj_polazaka;
- Polazak **polasci;
- public:
- RedVoznje (const RedVoznje &red_voznje);
- RedVoznje &operator = (const RedVoznje &red_voznje);
- explicit RedVoznje (int max_broj_polazaka) : max_broj_polazaka(max_broj_polazaka), broj_polazaka(0), polasci(new Polazak*[max_broj_polazaka]){}
- ~RedVoznje ();
- void RegistrirajPolazak(string odrediste, int broj_voza, bool brzi_voz, int broj_perona, int sat_polaska,
- int minute_polaska, int trajanje_voznje);
- void RegistrirajPolazak(Polazak *polazak);
- int DajBrojPolazaka() const
- {
- return broj_polazaka;
- }
- int DajBrojPolazakaKojiKasne() const;
- int DajProsjecnoTrajanjeVoznji() const;
- Polazak &DajPrviPolazak() const;
- Polazak &DajPosljednjiPolazak() const;
- void IsprazniKolekciju();
- void Ispisi(int sati, int minute) const;
- };
- int main()
- {
- try
- {
- int n(0);
- cout<<"Unesi maksimalan broj voznji: ";
- cin>>n;
- if (!cin) throw 0;
- RedVoznje voznje(n);
- int broj(0);
- cout<<"Unesi broj voznji: ";
- cin>>broj;
- for (int i=0;i<broj;i++)
- {
- string naziv;
- cout<<"Unesi mjesto: ";
- cin>>naziv;
- int voz(0), peron(0), s_polaska(0), min_polaska(0), trajanje(0), kasnjenje(0);
- cout<<"Unesite broj voza, broj perona, sat polaska, minute polaska, kao i trajanje voznje: \n";
- cin>>voz>>peron>>s_polaska>>min_polaska>>trajanje;
- cout<<"Unesite koliko ce polazak kasniti od predvidjenog vremena (0 ako nema kasnjenja):\n";
- cin>>kasnjenje;
- try
- {
- Polazak *p = new Polazak(naziv, voz, true, peron, s_polaska, min_polaska, trajanje);
- voznje.RegistrirajPolazak(p);
- p->PostaviKasnjenje(kasnjenje);
- }
- catch (const char poruka[])
- {
- i--;
- cout<<poruka<<"Unesi ponovo!\n";
- }
- }
- voznje.Ispisi(2,3);
- }
- catch (...)
- {
- cout<<"Problemi sa memorijom...\n";
- }
- return 0;
- }
- Polazak::Polazak(string odrediste, int broj_voza, int broj_perona, bool brzi_voz, int sat_polaska,
- int minute_polaska, int trajanje_voznje) : odrediste(odrediste), brzi_voz(brzi_voz), kasnjenje(0)
- {
- if (broj_voza<0 || broj_voza>99999 || broj_perona<1 || broj_perona>6 || sat_polaska<0 || sat_polaska>24
- || minute_polaska<0 || minute_polaska>59 || trajanje_voznje<0) throw "Neispravni parametri.\n";
- Polazak::broj_voza=broj_voza;
- Polazak::broj_perona=broj_perona;
- Polazak::sat_polaska=sat_polaska;
- Polazak::minute_polaska=minute_polaska;
- Polazak::trajanje_voznje=trajanje_voznje;
- }
- void Polazak::OcekivanoVrijemePolaska(int &sati, int &minute) const
- {
- minute+=minute_polaska;
- if (Polazak::DaLiKasni())
- {
- minute+=kasnjenje;
- }
- if (minute>60)
- {
- while (minute>60) minute-=60;
- sati++;
- }
- if (minute==60)
- {
- minute=0;
- sati++;
- }
- sati+=sat_polaska;
- if (sati>24) while (sati>24)
- {
- sati-=24;
- }
- }
- void Polazak::OcekivanoVrijemeDolaska(int &sati, int &minute) const
- {
- minute=minute_polaska+trajanje_voznje;
- if (Polazak::DaLiKasni())
- {
- minute+=kasnjenje;
- }
- if (minute>60)
- {
- while (minute>60)
- {
- sati++;
- minute-=60;
- }
- }
- if (minute==60)
- {
- minute=0;
- sati++;
- }
- sati+=sat_polaska;
- if (sati>24) while (sati>24)
- {
- sati-=24;
- }
- if (sati==24) sati=0;
- }
- void Polazak::Ispisi() const
- {
- int s1(0), s2(0), m1(0), m2(0);
- OcekivanoVrijemePolaska(s1, m1);
- if (brzi_voz) cout<<"Brzi ";
- else cout<<"Lokalni ";
- cout<<"voz broj "<<broj_voza<<", odrediste "<<odrediste;
- if (DaLiKasni())
- {
- cout<<" sa predvidjenim vremenom polaska u ";
- if (sat_polaska>=0 && sat_polaska<=9) cout<<"0";
- cout<<sat_polaska<<":";
- if (minute_polaska>=0 && minute_polaska<=9) cout<<"0";
- cout<<minute_polaska;
- cout<<"\n, kasni oko "<<kasnjenje<<" minuta, te ce poci oko";
- if (s1>=0 && s1<=9) cout<<"0";
- cout<<s1<<":";
- if (m1>=0 && m1<=9) cout<<"0";
- cout<<m1;
- cout<<". \nOcekuje se da voz stigne na odrediste oko ";
- OcekivanoVrijemeDolaska(s2, m2);
- if (s2>=0 && s2<=9) cout<<"0";
- cout<<s2<<":";
- if (m2>=0 && m2<=9) cout<<"0";
- cout<<m2;
- cout<<". Izvinjavamo se putnicima zbog eventualnih neugodnosti.\n";
- }
- else
- {
- cout<<" polazi sa perona "<<broj_perona<<" u ";
- if (s1>=0 && s1<=9) cout<<"0";
- cout<<s1<<":";
- if (m1>=0 && m1<=9) cout<<"0";
- cout<<m1;
- cout<<", a na \nodrediste stize u ";
- OcekivanoVrijemeDolaska(s2, m2);
- if (s2>=0 && s2<=9) cout<<"0";
- cout<<s2<<":";
- if (m2>=0 && m2<=9) cout<<"0";
- cout<<m2;
- cout<<". \nPutnicima i voznom osoblju zelimo ugodno putovanje.\n\n";
- }
- }
- RedVoznje::~RedVoznje()
- {
- for (int i=0;i<broj_polazaka;i++) delete polasci[i];
- delete[] polasci;
- }
- RedVoznje::RedVoznje(const RedVoznje &red_voznje) : max_broj_polazaka(red_voznje.max_broj_polazaka),
- broj_polazaka(red_voznje.broj_polazaka), polasci(new Polazak*[red_voznje.max_broj_polazaka]) {
- for(int i=0;i<broj_polazaka;i++){
- polasci[i]=new Polazak(*red_voznje.polasci[i]);
- }
- }
- RedVoznje &RedVoznje::operator =(const RedVoznje &red_voznje){
- for(int i=0;i<broj_polazaka;i++){
- delete polasci[i];
- }
- delete polasci;
- max_broj_polazaka=red_voznje.max_broj_polazaka;
- polasci = new Polazak*[max_broj_polazaka];
- broj_polazaka=red_voznje.broj_polazaka;
- for(int i=0;i<broj_polazaka;i++){
- polasci[i]=new Polazak(*red_voznje.polasci[i]);
- }
- return *this;
- }
- int RedVoznje::DajBrojPolazakaKojiKasne() const
- {
- int brojac(0);
- for (int i=0;i<broj_polazaka;i++)
- {
- if (polasci[i]->DaLiKasni()) brojac++;
- }
- return brojac;
- }
- int RedVoznje::DajProsjecnoTrajanjeVoznji() const
- {
- int suma(0);
- for (int i=0;i<broj_polazaka;i++)
- {
- suma+=polasci[i]->DajTrajanjeVoznje();
- }
- return suma/broj_polazaka;
- }
- void RedVoznje::RegistrirajPolazak(Polazak *polazak)
- {
- if (broj_polazaka>=max_broj_polazaka) throw "Previse polazaka.\n";
- polasci[broj_polazaka++] = polazak;
- }
- void RedVoznje::RegistrirajPolazak(string odrediste, int broj_voza, bool brzi_voz, int broj_perona, int sat_polaska,
- int minute_polaska, int trajanje_voznje)
- {
- if (broj_polazaka>=max_broj_polazaka) throw "Previse polazaka.\n";
- if (broj_voza<0 || broj_voza>99999 || broj_perona<1 || broj_perona>6 || sat_polaska<0 || sat_polaska>24
- || minute_polaska<0 || minute_polaska>59 || trajanje_voznje<0) throw "Neispravni parametri.\n";
- Polazak *polazak(new Polazak(odrediste, broj_voza, broj_perona, brzi_voz, sat_polaska, minute_polaska, trajanje_voznje));
- polasci[broj_polazaka++]=polazak;
- }
- Polazak &RedVoznje::DajPrviPolazak() const
- {
- int prvi(0);
- for (int i=1;i<broj_polazaka;i++)
- {
- if (polasci[i]->DajSatPolaska()<polasci[prvi]->DajSatPolaska() ||
- (polasci[i]->DajSatPolaska()==polasci[prvi]->DajSatPolaska() &&
- polasci[i]->DajMinutePolaska()<polasci[prvi]->DajMinutePolaska())) prvi=i;
- }
- return *polasci[prvi];
- }
- Polazak &RedVoznje::DajPosljednjiPolazak() const {
- int zadnji(0);
- for(int i=1;i<broj_polazaka;i++){
- if(polasci[i]->DajSatPolaska() > polasci[zadnji]->DajSatPolaska() ||
- (polasci[i]->DajSatPolaska() == polasci[zadnji]->DajSatPolaska() &&
- polasci[i]->DajMinutePolaska() > polasci[zadnji]->DajMinutePolaska())) zadnji=i;
- }
- return *polasci[zadnji];
- }
- void RedVoznje::IsprazniKolekciju(){
- for(int i=0;i<broj_polazaka;i++){
- delete polasci[i];
- }
- broj_polazaka=0;
- }
- void RedVoznje::Ispisi(int sati, int minute) const
- {
- cout<<endl;
- for (int i=0;i<broj_polazaka;i++) {
- if(polasci[i]->DajSatPolaska()>sati || (polasci[i]->DajSatPolaska()==sati && polasci[i]->DajMinutePolaska()>minute)){
- polasci[i]->Ispisi(); }
- }
- }
- /*Napomene:
- 3. Preklapanje i konstruktor kopije zabranjeni (u private) u redu voznje.
- 4. metode dajprvi i dajposljednji polazak napraviti!
- */
Add Comment
Please, Sign In to add comment