Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.19 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int NWD(int a, int b)
  7. {
  8.     while(a!=b)
  9.        if(a>b)
  10.            a-=b;
  11.        else
  12.            b-=a;
  13.     return a;
  14. }
  15.  
  16. class Ulamek {
  17.     public:
  18.         int licznik, mianownik;
  19.        
  20.         Ulamek(int licz = 0, int mian = 1){
  21.             licznik = licz;
  22.             mianownik = mian;
  23.         }
  24.        
  25.         Ulamek skroc(Ulamek ul){
  26.             int nwdUlamka = NWD(ul.licznik, ul.mianownik);
  27.            
  28.             ul.licznik /= nwdUlamka;
  29.             ul.mianownik /= nwdUlamka;
  30.            
  31.             return ul;
  32.         }
  33.        
  34.         void setLicznik(int l){
  35.             licznik = l;
  36.         }
  37.        
  38.         void setMianownik(int m){
  39.             mianownik = m;
  40.         }
  41.        
  42.         Ulamek operator + (Ulamek const &prawy){
  43.             Ulamek wynik;
  44.             int ujemne = 0;
  45.            
  46.             wynik.licznik = licznik * prawy.mianownik + prawy.licznik * mianownik;
  47.             wynik.mianownik = mianownik * prawy.mianownik;
  48.            
  49.             if( wynik.licznik < 0 ){
  50.                 wynik.licznik *= -1;
  51.                 ujemne = 1;
  52.             }
  53.             if( wynik.mianownik < 0 ){
  54.                 wynik.mianownik *= -1;
  55.                 ujemne = 1;
  56.             }
  57.             if( wynik.mianownik < 0 && wynik.licznik < 0 ){
  58.                 wynik.mianownik *= -1;
  59.                 wynik.licznik *= -1;
  60.             }
  61.            
  62.             wynik = skroc(wynik);
  63.            
  64.             if( ujemne == 1 ) wynik.licznik *= -1;
  65.            
  66.             return wynik;
  67.         }
  68.        
  69.         Ulamek operator - (Ulamek const &prawy){
  70.             Ulamek wynik;
  71.             int ujemne = 0;
  72.            
  73.             wynik.licznik = licznik * prawy.mianownik - prawy.licznik * mianownik;
  74.             wynik.mianownik = mianownik * prawy.mianownik;
  75.            
  76.             if( wynik.licznik < 0 ){
  77.                 wynik.licznik *= -1;
  78.                 ujemne = 1;
  79.             }
  80.             if( wynik.mianownik < 0 ){
  81.                 wynik.mianownik *= -1;
  82.                 ujemne = 1;
  83.             }
  84.             if( wynik.mianownik < 0 && wynik.licznik < 0 ){
  85.                 wynik.mianownik *= -1;
  86.                 wynik.licznik *= -1;
  87.             }
  88.            
  89.             wynik = skroc(wynik);
  90.            
  91.             if( ujemne == 1 ) wynik.licznik *= -1;
  92.            
  93.             return wynik;
  94.         }
  95.        
  96.         Ulamek operator * (Ulamek const &prawy){
  97.             Ulamek wynik;
  98.             wynik.licznik = licznik * prawy.licznik;
  99.             wynik.mianownik = mianownik * prawy.mianownik;
  100.            
  101.             wynik = skroc(wynik);
  102.            
  103.             return wynik;
  104.         }
  105.        
  106.         Ulamek operator / (Ulamek const &prawy){
  107.             Ulamek wynik;
  108.             wynik.licznik = licznik * prawy.mianownik;
  109.             wynik.mianownik = mianownik * prawy.licznik;
  110.            
  111.             wynik = skroc(wynik);
  112.            
  113.             return wynik;
  114.         }
  115.        
  116.         int operator == (Ulamek const &prawy){
  117.             if( licznik == prawy.licznik && mianownik == prawy.mianownik ){
  118.                 return 1;
  119.             }else{
  120.                 return 0;
  121.             }
  122.         }
  123.        
  124.         friend ostream & operator<<(ostream &out, const Ulamek &ul){
  125.             out << ul.licznik << "/" << ul.mianownik << endl;
  126.             return out;
  127.         }
  128.        
  129.         friend istream & operator>>(istream &in, Ulamek &ul){
  130.             char slash = 0;
  131.             int total = 0;
  132.             int licznik= 0;
  133.             int mianownik = 0;
  134.            
  135.             if (in >> total) {
  136.                 if (!(in >> licznik)) {
  137.                     in.clear();
  138.                     licznik = total;
  139.                     total = 0;
  140.                 }
  141.                 while (in >> slash && std::isspace(slash));
  142.                 if (in && slash == '/') {
  143.                     if (in >> mianownik) {
  144.                         ul.setLicznik(mianownik * total + licznik);
  145.                         ul.setMianownik(mianownik);
  146.                         return in;
  147.                     }
  148.                 }
  149.             }
  150.         }
  151.        
  152. };
  153.  
  154. int main(int argc, char** argv) {
  155.  
  156.     Ulamek u1, u2;
  157.     cin >> u1;
  158.     cout << u1;
  159.    
  160.     return 0;
  161.    
  162.    
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement