All pastes #2065976 Raw Edit

Mine

public text v1 · immutable
#2065976 ·published 2011-05-20 20:07 UTC
rendered paste body
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <algorithm>
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; i<max_polazaka; i++) delete polasci[i];
                delete[] polasci;}  
    Polasci(const Polasci &polasci);
    Polasci &operator =(const Polasci &polasci);
    void RegistrirajPolazak(string odrediste, string oznaka_voznje,
    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 pom(0);
                                          for(int i=0; i<broj_polazaka; i++)
                                          if(polasci[i]->DaLiKasni()) pom++;
                                          return pom;}
    
    int DajProsjecnoTrajanjeVoznji() const{int pom(0);
                                           for(int i=0; i<broj_polazaka; i++)
                                           pom=pom+polasci[i]->DajTrajanje();
                                           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; i<broj_polazaka_max; i++){delete polasci[i];polasci[i]=0;}
                             delete[] polasci;
                             broj_polazaka=0;}
    void Ispisi() const;
    bool Uporedi(const Polazak* p1,const Polazak* p2); // dodata metoda??'

};
Polazak::Polazak(string odrediste, string oznaka_voznje, int broj_perona, int sat_polaska, int minute_polaska, int trajanje_voznje){
    if(trajanje_voznje<0) throw "Neispravno uneseno trajanje voznje!";
    if((sat_polaska>23 || 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 "<<sati<<":"<<minute
             << ",Kasni "<<kasnjenje<<"min) "
             << setw(8) << broj_perona << endl;
         else {
              s=t1/60;
              m=t1-s*60;
              if(s1+s>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; i<broj_polazaka; i++){
        this->polasci[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(pom1<pom2)return true;
    return false;
}
void Polasci::Ispisi() const {
    sort(polasci, polasci+broj_polazaka, Uporedi);
     cout << left << setw(10)<< "Vožnja: "
             << setw(30) << "Odredište: "
             << setw(10) <<"Polazak: "
             << setw(10) << "Dolazak: "
             << setw(8) <<"Peron: " << endl;
     cout <<"--------------------------------------------------------------------" << endl;
    for(int i=0; i<broj_polazaka; i++){
        polasci[i]->Ispisi();
    }
}
     


int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}