Advertisement
Guest User

Untitled

a guest
May 27th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <stdexcept>
  4. #include <iomanip>
  5. class Sat{
  6.     int sati,minute,sekunde;
  7.     public:
  8.     Sat(){
  9.         sati=0;
  10.         minute=0;
  11.         sekunde=0;
  12.     }
  13.     Sat(int h, int m, int s){
  14.                 auto k=h*3600+m*60+s;
  15.        
  16.         if(k>86400){
  17.             k =abs( k-86400);
  18.         Sat::sati=k/3600;
  19.         int ost1=k%3600;
  20.         Sat::minute = ost1/60;
  21.         Sat::sekunde =ost1%60;
  22.     }
  23.     else{
  24.         sati=h;
  25.         minute=m;
  26.         sekunde=s;
  27.     }
  28.     }
  29.     friend Sat operator ++(Sat &s,int){
  30.         Sat pomocni(s);
  31.         s.sekunde++;
  32.         if(s.sekunde>59) {
  33.             s.sekunde = s.sekunde-60;
  34.             s.minute++;
  35.         }
  36.         if(s.minute>59){
  37.                 s.minute = s.minute-60;
  38.                 s.sati++;
  39.             }
  40.         return pomocni;
  41.     }
  42.     friend Sat &operator ++(Sat &s){
  43.         s.sekunde++;
  44.         if(s.sekunde>59) {
  45.             s.sekunde = s.sekunde-60;
  46.             s.minute++;
  47.         }
  48.         if(s.minute>59){
  49.                 s.minute = s.minute-60;
  50.                 s.sati++;
  51.             }
  52.         return s;
  53.     }
  54.     friend Sat operator --(Sat &s,int){
  55.         Sat pomocni(s);
  56.         s.sekunde--;
  57.         if(s.sekunde<0){
  58.             s.sekunde=60+s.sekunde;
  59.             s.minute--;
  60.         }
  61.         if(s.minute<0){
  62.             s.minute=60+s.minute;
  63.             s.sati--;
  64.         }
  65.         return pomocni;
  66.     }
  67.     friend Sat &operator --(Sat &s){
  68.         s.sekunde--;
  69.         if(s.sekunde<0){
  70.             s.sekunde=60+s.sekunde;
  71.             s.minute--;
  72.         }
  73.         if(s.minute<0){
  74.             s.minute=60+s.minute;
  75.             s.sati--;
  76.         }
  77.         return s;
  78.     }
  79.     friend Sat &operator +=( Sat &s, int broj){
  80.         int ss=s.sati*3600+s.minute*60+s.sekunde+broj;
  81.         s.sati=ss/3600;
  82.         int ost1=ss%3600;
  83.         s.minute=ost1/60;
  84.         s.sekunde=ost1%60;
  85.         return s;
  86.     }
  87.     friend Sat&operator -=( Sat &s, int broj){
  88.         int ss=s.sati*3600+s.minute*60+s.sekunde-broj;
  89.         s.sati=ss/3600;
  90.         int ost1=ss%3600;
  91.         s.minute=ost1/60;
  92.         s.sekunde=ost1%60;
  93.         return s;
  94.     }
  95.     friend Sat operator +(  Sat&s, int broj) {
  96.         Sat s1(s);
  97.         int ss=s1.sati*3600+s1.minute*60+s1.sekunde+broj;
  98.         s1.sati=ss/3600;
  99.         int ost1=ss%3600;
  100.         s1.minute=ost1/60;
  101.         s1.sekunde=ost1%60;
  102.         return s1;
  103.     }
  104.    
  105.     friend Sat operator -( const Sat &s, int broj){
  106.         Sat s1(s);
  107.         int ss=s1.sati*3600+s1.minute*60+s1.sekunde-broj;
  108.         s1.sati=ss/3600;
  109.         int ost1=ss%3600;
  110.         s1.minute=ost1/60;
  111.         s1.sekunde=ost1%60;
  112.         return s1;
  113.     }
  114.     friend int operator -(const Sat &s1, const Sat &s2){
  115.         auto ss1=s1.sati*3600+s1.minute*60+s1.sekunde;
  116.         auto ss2=s2.sati*3600+s2.minute*60+s2.sekunde;
  117.         ss1 = ss1-ss2;
  118.         return  ss1;
  119.     }
  120.     friend std::ostream &operator <<(std::ostream &tok, const Sat &s){
  121.    
  122.         return tok<<std::setfill('0')<<std::setw(2)<<s.sati<<":"<<std::setfill('0')<<std::setw(2)<<s.minute<<":"<<std::setfill('0')<<std::setw(2)<<s.sekunde;   }
  123.     static  bool DaLiJeIspravno(int  h, int m, int s){
  124.         if(h<0 || h>23 || m<0 || m>59 || s<0 || s>59) return false;
  125.         return true;
  126.     }
  127.     void Postavi(int h, int m, int s);
  128.         int PostaviNormalizirano(int h, int m, int s);
  129.    
  130.     Sat &Sljedeci();
  131.     Sat &Prethodni();
  132.     Sat &PomjeriZa(int tmp);
  133.     void Ispisi() const{
  134.         std::cout<<std::setfill('0')<<std::setw(2)<<sati<<":"<<std::setfill('0')<<std::setw(2)<<minute<<":"<<std::setfill('0')<<std::setw(2)<<sekunde;
  135.     }
  136.     int DajSate() const{return sati;}
  137.     int DajMinute() const{return minute;}
  138.     int DajSekunde() const{return sekunde;}
  139.     friend int BrojSekundiIzmedju( Sat &v1, Sat &v2);
  140.     static int Razmak( Sat &v1, Sat &v2);
  141.     };
  142.    
  143.         int Sat::PostaviNormalizirano(int h, int m, int s){
  144.        
  145.             if(h<-1000){
  146.                 h=h*(-1);
  147.                 if(m<0){
  148.                     m=m*(-1);
  149.                 }
  150.                 if(s<0){
  151.                     s=s*(-1);
  152.                 }
  153.                 int sek=h*3600+m*60+s;
  154.                 if(sek>86400){
  155.                     while(sek>86400){
  156.                         sek -=86400;
  157.                     }
  158.                 }
  159.                 int n_h=sek/3600;
  160.                 int ost1=sek%3600;
  161.                 int n_m=ost1/60;
  162.                 int n_s=ost1%60;
  163.                 Sat::sati=n_h;
  164.                 Sat::minute=n_m;
  165.                 Sat::sekunde=n_s;
  166.             }
  167.             else if(h<0 && h>-24){
  168.         h=24+h;
  169.         Sat::sati=h;
  170.         Sat::minute=m;
  171.         Sat::sekunde=s;}
  172.        
  173.         else if(m<0){
  174.             m=60+m;
  175.             h=h-1;
  176.             Sat::sati=h;
  177.             Sat::minute=m;
  178.             Sat::sekunde=s;
  179.         }
  180.         else if(s<0){
  181.             s=60+s;
  182.             m=m-1;
  183.             Sat::sati=h;
  184.             Sat::minute=m;
  185.             Sat::sekunde=s;
  186.         }
  187.         else if(m>59){
  188.             m=m-60;
  189.             h=h+1;
  190.             Sat::sati=h;
  191.             Sat::minute=m;
  192.             Sat::sekunde=s;
  193.         }
  194.         else if(s>59){
  195.             s=s/60;
  196.             m=m+s;
  197.             s=0;
  198.             Sat::sati=h;
  199.             Sat::minute=m;
  200.             Sat::sekunde=s;
  201.         }
  202.         else{
  203.         int sekunde=h*3600+m*60+s;
  204.         int ost_od_sek=abs(86400-sekunde);
  205.          int h_n=ost_od_sek/3600;
  206.         int ost1=ost_od_sek%3600;
  207.          int m_n=ost1/60;
  208.         int s_n=ost1%60;
  209.         Sat::sati=h_n;
  210.         Sat::minute=m_n;
  211.         Sat::sekunde=s_n;
  212.         }
  213.     }
  214.     void Sat::Postavi(int h, int m, int s){
  215.         if(h<0 || h>23) throw std::domain_error("Neispravno vrijeme");
  216.         else Sat::sati=h;
  217.         if(m<0 || m>59) throw std::domain_error("Neispravno vrijeme");
  218.         else Sat::minute=m;
  219.         if(s<0 || s>59) throw std::domain_error("Neispravno vrijeme");
  220.         else Sat::sekunde=s;
  221.        
  222.     }
  223.  
  224.     Sat &Sat::Sljedeci(){
  225.          sekunde=sekunde+1;
  226.         if(sekunde>59){
  227.             sekunde=sekunde-60;
  228.             minute++;
  229.         }
  230.         if(minute>59) {
  231.             minute=minute-60;
  232.             sati++;
  233.         }
  234.         if(sati>=24) sati=sati-24;
  235.         return *this;
  236.     }
  237.     Sat &Sat::Prethodni(){
  238.         sekunde=sekunde-1;
  239.         if(sekunde<0){
  240.             sekunde=sekunde*(-1);
  241.             sekunde=60-sekunde;
  242.             minute--;
  243.             if(minute<0){
  244.                 minute=minute*(-1);
  245.                 minute=60-minute;
  246.                 sati--;
  247.             }
  248.             if(sati<0){
  249.                 sati = sati*(-1);
  250.                 sati=24-sati;
  251.             }
  252.         }
  253.        
  254.         return *this;
  255.     }
  256.      Sat &Sat::PomjeriZa( int tmp){
  257.         int tmp1 = sati*3600+minute*60+sekunde+tmp;
  258.         if(tmp1 >=86400){
  259.             int tmp2 = abs(86400-tmp1);
  260.             sati=tmp2/3600;
  261.             int ost1=tmp2%3600;
  262.             minute=ost1/60;
  263.             sekunde=ost1%60;
  264.         }
  265.         else{
  266.             sati=tmp1/3600;
  267.             int ost1=tmp1%3600;
  268.             minute=ost1/60;
  269.             sekunde=ost1%60;
  270.            
  271.         }
  272.         if(sekunde<0){
  273.             sekunde=sekunde*(-1);
  274.             sekunde=60-sekunde;
  275.             minute--;
  276.             if(minute<0){
  277.                 minute=minute*(-1);
  278.                 minute=60-minute;
  279.                 sati--;
  280.             }
  281.             if(sati<0){
  282.                 sati=sati*(-1);
  283.                 sati=24-sati;
  284.             }
  285.         }
  286.         return *this;
  287.     }
  288.     int BrojSekundiIzmedju( Sat&v1,  Sat &v2){
  289.         int sekunde1 = v1.sati*3600+v1.minute*60+v1.sekunde;
  290.         int sekunde2 = v2.sati*3600+v2.minute*60+v2.sekunde;
  291.         return sekunde1-sekunde2;
  292.     }
  293.     int Sat::Razmak( Sat &v1,  Sat &v2){
  294.         int sekunde1 = v1.sati*3600+v1.minute*60+v1.sekunde;
  295.         int sekunde2 = v2.sati*3600+v2.minute*60+v2.sekunde;
  296.         return sekunde1-sekunde2;
  297.     }
  298.    
  299.  
  300. int main ()
  301. {
  302.   Sat s1(11, 4, 39);
  303.   std::cout << s1 << std::endl;
  304.   Sat s2(25, 150, 1000);
  305.   std::cout << s2 << std::endl;
  306.   std::cout << s1 - s2 << std::endl;
  307.   std::cout << s1 + 100 << std::endl;
  308.   std::cout << s1 << std::endl;        
  309.   std::cout << s1 - 100 << std::endl;
  310.   std::cout << s1 << std::endl;
  311.   s2 = s1 += 100;
  312.   std::cout << s2 << std::endl;
  313.     return 0;
  314. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement