Advertisement
Guest User

Wymierna.cpp

a guest
Jan 21st, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <cstdlib>
  4. #include "wymierna.h"
  5. #include <conio.h>
  6. //wyjatki!!!!!
  7. using namespace std;
  8.  
  9.     long Wymierna:: nwd(long x, long y)
  10.     {
  11.         if (x<0)
  12.             x=x*-1;
  13.         if (y<0)
  14.             y=y*-1;
  15.         while (x != y)
  16.         {
  17.              if (x > y)
  18.              x -= y;
  19.              else
  20.              y -= x;
  21.         }
  22.          return x;
  23.     };
  24.  
  25.     Wymierna Wymierna:: operator +(const Wymierna &praw)
  26.     {
  27.         if(this->mianownik*praw.mianownik> LONG_MAX || this->licznik*praw.mianownik+praw.licznik*this->mianownik>LONG_MAX )
  28.         {
  29.             cout<<"Zakres zmiennej zostal przekroczony";
  30.             throw "Przekroczenie zakresu zmiennej";
  31.         }
  32.         return Wymierna(this->licznik*praw.mianownik+praw.licznik*this->mianownik,this->mianownik*praw.mianownik);
  33.     };
  34.     Wymierna Wymierna:: operator -(const Wymierna &praw)
  35.     {
  36.         if(this->licznik*praw.mianownik-praw.licznik*this->mianownik<LONG_MIN || this->mianownik*praw.mianownik> LONG_MAX || this->licznik*praw.mianownik-praw.licznik*this->mianownik>LONG_MAX )
  37.         {
  38.             cout<<"Zakres zmiennej zostal przekroczony";
  39.             throw "Przekroczenie zakresu zmiennej";
  40.         }
  41.         return Wymierna(this->licznik*praw.mianownik-praw.licznik*this->mianownik,this->mianownik*praw.mianownik);
  42.     };
  43.     Wymierna Wymierna:: operator *(const Wymierna &praw)
  44.     {
  45.         if(this->licznik*praw.licznik>LONG_MAX || this->mianownik*praw.mianownik>LONG_MAX)
  46.         {
  47.             cout<<"Zakres zmiennej zostal przekroczony";
  48.             throw "Przekroczenie zakresu zmiennej";
  49.         }
  50.         return Wymierna(this->licznik*praw.licznik,this->mianownik*praw.mianownik);
  51.     };
  52.     Wymierna Wymierna:: operator *(const int &praw)
  53.     {
  54.          if(this->licznik*praw>LONG_MAX)
  55.         {
  56.             cout<<"Zakres zmiennej zostal przekroczony";
  57.             throw "Przekroczenie zakresu zmiennej";
  58.         }
  59.         return Wymierna(this->licznik*praw,this->mianownik);
  60.     }
  61.     Wymierna Wymierna:: operator /(const Wymierna &praw)
  62.     {
  63.         Wymierna lic =praw;
  64.         return *this*(!lic);
  65.     };
  66.     Wymierna Wymierna:: operator+=(const Wymierna &praw)
  67.     {
  68.         if(this->mianownik*praw.mianownik> LONG_MAX || this->licznik*praw.mianownik+praw.licznik*this->mianownik>LONG_MAX )
  69.         {
  70.             cout<<"Zakres zmiennej zostal przekroczony";
  71.             throw "Przekroczenie zakresu zmiennej";
  72.         }
  73.         *this= Wymierna(this->licznik*praw.mianownik+praw.licznik*this->mianownik,this->mianownik*praw.mianownik);
  74.         return *this;
  75.     };
  76.     Wymierna Wymierna:: operator -=(const Wymierna &praw)
  77.     {
  78.         if(this->licznik*praw.mianownik-praw.licznik*this->mianownik<LONG_MIN || this->mianownik*praw.mianownik> LONG_MAX || this->licznik*praw.mianownik-praw.licznik*this->mianownik>LONG_MAX )
  79.         {
  80.             cout<<"Zakres zmiennej zostal przekroczony";
  81.             throw "Przekroczenie zakresu zmiennej";
  82.         }
  83.         *this= Wymierna(this->licznik*praw.mianownik-praw.licznik*this->mianownik,this->mianownik*praw.mianownik);
  84.         return *this;
  85.     };
  86.     Wymierna Wymierna:: operator *=(const Wymierna &praw)
  87.     {
  88.         if(this->licznik*praw.licznik>LONG_MAX || this->mianownik*praw.mianownik>LONG_MAX)
  89.         {
  90.             cout<<"Zakres zmiennej zostal przekroczony";
  91.             throw "Przekroczenie zakresu zmiennej";
  92.         }
  93.         *this= Wymierna(this->licznik*praw.licznik,this->mianownik*praw.mianownik);
  94.         return *this;
  95.     };
  96.     Wymierna Wymierna:: operator /=(const Wymierna &praw)
  97.     {
  98.         Wymierna lic =praw;
  99.         *this *= !lic;
  100.         return *this;
  101.     };
  102.     Wymierna Wymierna:: operator=(const Wymierna &praw)
  103.     {
  104.         this->licznik = praw.licznik;
  105.         this->mianownik=praw.mianownik;
  106.         return praw;
  107.     };
  108.     Wymierna Wymierna:: operator!()
  109.     {
  110.         return Wymierna(this->mianownik,this->licznik);
  111.     };
  112. //Konstruktory================================================================================
  113.     Wymierna:: Wymierna(long licznik,long mianownik)
  114.     {
  115.             if (mianownik==0)
  116.             {
  117.                 cout<<endl<<"Pojawilo sie zero w mianowniku";
  118.                 throw "zero w mianowniku";
  119.             }
  120.         if (mianownik<0)
  121.         {
  122.             licznik*=-1;
  123.             mianownik*=-1;
  124.         }
  125.         if (licznik!=0)
  126.         {
  127.             long dzielnik = nwd(licznik,mianownik);
  128.             this->licznik=licznik/dzielnik;
  129.             this->mianownik=mianownik/dzielnik;
  130.         }
  131.         else
  132.         {
  133.             this->licznik=licznik;
  134.             this->mianownik=mianownik;
  135.         }
  136.     }
  137.     Wymierna:: Wymierna(){}
  138.     Wymierna:: Wymierna(const Wymierna &wym)
  139.     {
  140.         this->licznik=wym.licznik;
  141.         (*this).mianownik=wym.mianownik;
  142.     }
  143. //Operatory logiczne===================================================================================
  144.     bool Wymierna:: operator==(const Wymierna &wym)
  145.     {
  146.         if(this->licznik==wym.licznik && wym.mianownik==this->mianownik)
  147.             return true;
  148.         else
  149.             return false;
  150.     }
  151.     bool Wymierna:: operator!=(const Wymierna &wym)
  152.     {
  153.         if(wym.licznik!=this->licznik || wym.mianownik!=this->mianownik)
  154.             return true;
  155.         else
  156.  
  157.       return false;
  158.     }
  159.     bool Wymierna:: operator>(const Wymierna &wym)
  160.     {
  161.         if(wym.licznik*this->mianownik>this->licznik*wym.mianownik)
  162.             return true;
  163.         else
  164.             return false;
  165.     }
  166.     bool Wymierna:: operator<(const Wymierna &wym)
  167.     {
  168.         if(wym.licznik*this->mianownik<this->licznik*wym.mianownik)
  169.             return true;
  170.         else
  171.             return false;
  172.     }
  173.     bool Wymierna:: operator>=(const Wymierna &wym)
  174.     {
  175.         return !(*this<wym);
  176.     }
  177.     bool Wymierna:: operator<=(const Wymierna &wym)
  178.     {
  179.         return !(*this>wym);
  180.     }
  181. //funkcje zaprzyjaznione, porownania logiczne i strumienie
  182.     ostream& operator<<(ostream & cout,const Wymierna &wym)
  183.     {
  184.         cout<<"("<<wym.licznik<<"/"<<wym.mianownik<<")";
  185.         return cout;
  186.     };
  187.  
  188.     istream& operator>>(istream & in,Wymierna &wym)
  189.     {
  190.         wym.licznik=0;
  191.         char a;
  192.         bool poprawna=true;
  193.         int znak=1;
  194.         do
  195.         {
  196.             cout<<"(";
  197.             a = getch();
  198.                 if((a<48 || a>57) && a!=45)
  199.                 {
  200.                     if(a!=13)
  201.                     {
  202.                         system("cls");
  203.                         cout<<"wprowadzony znak nie byl cyfra"<<endl<<"Powtorz wprowadzanie licznika"<<endl;
  204.                         a=13;
  205.                         wym.licznik=0;
  206.                         znak=1;
  207.                         poprawna=false;
  208.                     }
  209.                 }
  210.                 else
  211.                 {
  212.                     if (a==45)
  213.                     {
  214.                         cout<<"-";
  215.                         znak=-1;
  216.                         poprawna=true;
  217.                     }
  218.                     else
  219.                     {
  220.                         cout<<a;
  221.                         wym.licznik=wym.licznik*10+a-48;
  222.                         poprawna=true;
  223.                     }
  224.                 }
  225.             if(poprawna)
  226.             {
  227.                 do
  228.                 {
  229.                     a = getch();
  230.                     if(a<48 || a>57)
  231.                     {
  232.                         if(a!=13)
  233.                         {
  234.                             system("cls");
  235.                             cout<<"wprowadzony znak nie byl cyfra"<<endl<<"Powtorz wprowadzanie licznika"<<endl;
  236.                             a=13;
  237.                             wym.licznik=0;
  238.                             znak=1;
  239.                             poprawna=false;
  240.                         }
  241.                     }
  242.                     else
  243.                     {
  244.                         cout<<a;
  245.                         wym.licznik=wym.licznik*10+a-48;
  246.                         poprawna=true;
  247.                     }
  248.                 }while(a!=13);
  249.             }
  250.         }while(!poprawna);
  251.         wym.licznik=wym.licznik*znak;
  252.         poprawna=true;
  253.         wym.mianownik=0;
  254.         do
  255.         {
  256.             cout<<endl<<"("<<wym.licznik<<"/";
  257.             do
  258.             {
  259.  
  260.                 a = getch();
  261.                 if(a<48 || a>57)
  262.                 {
  263.                     if(a!=13)
  264.                     {
  265.                         system("cls");
  266.                         cout<<endl<<"wprowadzony znak nie byl cyfra"<<endl<<"Powtorz wprowadzanie mianownika";
  267.                         a=13;
  268.                         wym.mianownik=0;
  269.                         poprawna=false;
  270.                     }
  271.                 }
  272.                 else
  273.                 {
  274.                     cout<<a;
  275.                     wym.mianownik=wym.mianownik*10+a-48;
  276.                     poprawna=true;
  277.                 }
  278.             }while(a!=13);
  279.             if(poprawna && wym.mianownik==0)
  280.             {
  281.                 cout<<endl<<"Wartosc mianownika nie moze wynoscic ZERO"<<endl<<"Powtorz wprowadzanie mianownika";
  282.                 poprawna=false;
  283.             }
  284.         }while(!poprawna);
  285.         wym=Wymierna(wym.licznik,wym.mianownik);
  286.         return in;
  287. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement