Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <stdexcept>
- #include <iomanip>
- class Sat{
- int sati,minute,sekunde;
- public:
- Sat(){
- sati=0;
- minute=0;
- sekunde=0;
- }
- Sat(int h, int m, int s){
- auto k=h*3600+m*60+s;
- if(k>86400){
- k =abs( k-86400);
- Sat::sati=k/3600;
- int ost1=k%3600;
- Sat::minute = ost1/60;
- Sat::sekunde =ost1%60;
- }
- else{
- sati=h;
- minute=m;
- sekunde=s;
- }
- }
- friend Sat operator ++(Sat &s,int){
- Sat pomocni(s);
- s.sekunde++;
- if(s.sekunde>59) {
- s.sekunde = s.sekunde-60;
- s.minute++;
- }
- if(s.minute>59){
- s.minute = s.minute-60;
- s.sati++;
- }
- return pomocni;
- }
- friend Sat &operator ++(Sat &s){
- s.sekunde++;
- if(s.sekunde>59) {
- s.sekunde = s.sekunde-60;
- s.minute++;
- }
- if(s.minute>59){
- s.minute = s.minute-60;
- s.sati++;
- }
- return s;
- }
- friend Sat operator --(Sat &s,int){
- Sat pomocni(s);
- s.sekunde--;
- if(s.sekunde<0){
- s.sekunde=60+s.sekunde;
- s.minute--;
- }
- if(s.minute<0){
- s.minute=60+s.minute;
- s.sati--;
- }
- return pomocni;
- }
- friend Sat &operator --(Sat &s){
- s.sekunde--;
- if(s.sekunde<0){
- s.sekunde=60+s.sekunde;
- s.minute--;
- }
- if(s.minute<0){
- s.minute=60+s.minute;
- s.sati--;
- }
- return s;
- }
- friend Sat &operator +=( Sat &s, int broj){
- int ss=s.sati*3600+s.minute*60+s.sekunde+broj;
- s.sati=ss/3600;
- int ost1=ss%3600;
- s.minute=ost1/60;
- s.sekunde=ost1%60;
- return s;
- }
- friend Sat&operator -=( Sat &s, int broj){
- int ss=s.sati*3600+s.minute*60+s.sekunde-broj;
- s.sati=ss/3600;
- int ost1=ss%3600;
- s.minute=ost1/60;
- s.sekunde=ost1%60;
- return s;
- }
- friend Sat operator +( Sat&s, int broj) {
- Sat s1(s);
- int ss=s1.sati*3600+s1.minute*60+s1.sekunde+broj;
- s1.sati=ss/3600;
- int ost1=ss%3600;
- s1.minute=ost1/60;
- s1.sekunde=ost1%60;
- return s1;
- }
- friend Sat operator -( const Sat &s, int broj){
- Sat s1(s);
- int ss=s1.sati*3600+s1.minute*60+s1.sekunde-broj;
- s1.sati=ss/3600;
- int ost1=ss%3600;
- s1.minute=ost1/60;
- s1.sekunde=ost1%60;
- return s1;
- }
- friend int operator -(const Sat &s1, const Sat &s2){
- auto ss1=s1.sati*3600+s1.minute*60+s1.sekunde;
- auto ss2=s2.sati*3600+s2.minute*60+s2.sekunde;
- ss1 = ss1-ss2;
- return ss1;
- }
- friend std::ostream &operator <<(std::ostream &tok, const Sat &s){
- 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; }
- static bool DaLiJeIspravno(int h, int m, int s){
- if(h<0 || h>23 || m<0 || m>59 || s<0 || s>59) return false;
- return true;
- }
- void Postavi(int h, int m, int s);
- int PostaviNormalizirano(int h, int m, int s);
- Sat &Sljedeci();
- Sat &Prethodni();
- Sat &PomjeriZa(int tmp);
- void Ispisi() const{
- std::cout<<std::setfill('0')<<std::setw(2)<<sati<<":"<<std::setfill('0')<<std::setw(2)<<minute<<":"<<std::setfill('0')<<std::setw(2)<<sekunde;
- }
- int DajSate() const{return sati;}
- int DajMinute() const{return minute;}
- int DajSekunde() const{return sekunde;}
- friend int BrojSekundiIzmedju( Sat &v1, Sat &v2);
- static int Razmak( Sat &v1, Sat &v2);
- };
- int Sat::PostaviNormalizirano(int h, int m, int s){
- if(h<-1000){
- h=h*(-1);
- if(m<0){
- m=m*(-1);
- }
- if(s<0){
- s=s*(-1);
- }
- int sek=h*3600+m*60+s;
- if(sek>86400){
- while(sek>86400){
- sek -=86400;
- }
- }
- int n_h=sek/3600;
- int ost1=sek%3600;
- int n_m=ost1/60;
- int n_s=ost1%60;
- Sat::sati=n_h;
- Sat::minute=n_m;
- Sat::sekunde=n_s;
- }
- else if(h<0 && h>-24){
- h=24+h;
- Sat::sati=h;
- Sat::minute=m;
- Sat::sekunde=s;}
- else if(m<0){
- m=60+m;
- h=h-1;
- Sat::sati=h;
- Sat::minute=m;
- Sat::sekunde=s;
- }
- else if(s<0){
- s=60+s;
- m=m-1;
- Sat::sati=h;
- Sat::minute=m;
- Sat::sekunde=s;
- }
- else if(m>59){
- m=m-60;
- h=h+1;
- Sat::sati=h;
- Sat::minute=m;
- Sat::sekunde=s;
- }
- else if(s>59){
- s=s/60;
- m=m+s;
- s=0;
- Sat::sati=h;
- Sat::minute=m;
- Sat::sekunde=s;
- }
- else{
- int sekunde=h*3600+m*60+s;
- int ost_od_sek=abs(86400-sekunde);
- int h_n=ost_od_sek/3600;
- int ost1=ost_od_sek%3600;
- int m_n=ost1/60;
- int s_n=ost1%60;
- Sat::sati=h_n;
- Sat::minute=m_n;
- Sat::sekunde=s_n;
- }
- }
- void Sat::Postavi(int h, int m, int s){
- if(h<0 || h>23) throw std::domain_error("Neispravno vrijeme");
- else Sat::sati=h;
- if(m<0 || m>59) throw std::domain_error("Neispravno vrijeme");
- else Sat::minute=m;
- if(s<0 || s>59) throw std::domain_error("Neispravno vrijeme");
- else Sat::sekunde=s;
- }
- Sat &Sat::Sljedeci(){
- sekunde=sekunde+1;
- if(sekunde>59){
- sekunde=sekunde-60;
- minute++;
- }
- if(minute>59) {
- minute=minute-60;
- sati++;
- }
- if(sati>=24) sati=sati-24;
- return *this;
- }
- Sat &Sat::Prethodni(){
- sekunde=sekunde-1;
- if(sekunde<0){
- sekunde=sekunde*(-1);
- sekunde=60-sekunde;
- minute--;
- if(minute<0){
- minute=minute*(-1);
- minute=60-minute;
- sati--;
- }
- if(sati<0){
- sati = sati*(-1);
- sati=24-sati;
- }
- }
- return *this;
- }
- Sat &Sat::PomjeriZa( int tmp){
- int tmp1 = sati*3600+minute*60+sekunde+tmp;
- if(tmp1 >=86400){
- int tmp2 = abs(86400-tmp1);
- sati=tmp2/3600;
- int ost1=tmp2%3600;
- minute=ost1/60;
- sekunde=ost1%60;
- }
- else{
- sati=tmp1/3600;
- int ost1=tmp1%3600;
- minute=ost1/60;
- sekunde=ost1%60;
- }
- if(sekunde<0){
- sekunde=sekunde*(-1);
- sekunde=60-sekunde;
- minute--;
- if(minute<0){
- minute=minute*(-1);
- minute=60-minute;
- sati--;
- }
- if(sati<0){
- sati=sati*(-1);
- sati=24-sati;
- }
- }
- return *this;
- }
- int BrojSekundiIzmedju( Sat&v1, Sat &v2){
- int sekunde1 = v1.sati*3600+v1.minute*60+v1.sekunde;
- int sekunde2 = v2.sati*3600+v2.minute*60+v2.sekunde;
- return sekunde1-sekunde2;
- }
- int Sat::Razmak( Sat &v1, Sat &v2){
- int sekunde1 = v1.sati*3600+v1.minute*60+v1.sekunde;
- int sekunde2 = v2.sati*3600+v2.minute*60+v2.sekunde;
- return sekunde1-sekunde2;
- }
- int main ()
- {
- Sat s1(11, 4, 39);
- std::cout << s1 << std::endl;
- Sat s2(25, 150, 1000);
- std::cout << s2 << std::endl;
- std::cout << s1 - s2 << std::endl;
- std::cout << s1 + 100 << std::endl;
- std::cout << s1 << std::endl;
- std::cout << s1 - 100 << std::endl;
- std::cout << s1 << std::endl;
- s2 = s1 += 100;
- std::cout << s2 << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement