Advertisement
MeehoweCK

Untitled

Nov 25th, 2020
483
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int nwd(int a, int b)
  6. {
  7.     if(a * b == 0)
  8.         return 1;
  9.     if(a < 0)
  10.         a = -a;
  11.     if(b < 0)
  12.         b = -b;
  13.     while(a != b)
  14.     {
  15.         if(a > b)
  16.             a -= b;
  17.         if(b > a)
  18.             b -= a;
  19.     }
  20.     return a;
  21. }
  22.  
  23. class Wymierna
  24. {
  25.     friend Wymierna operator+(Wymierna, Wymierna);
  26.     friend Wymierna operator*(Wymierna, Wymierna);
  27.     friend ostream& operator<<(ostream&, const Wymierna&);
  28.     int licznik;
  29.     int mianownik;
  30. public:
  31.     Wymierna();
  32.     Wymierna(int);
  33.     Wymierna(int, int);
  34.     double wartosc();
  35.     void skracaj();
  36. };
  37.  
  38. Wymierna::Wymierna() : licznik(0), mianownik(1) {}
  39. Wymierna::Wymierna(int x) : licznik(x), mianownik(1) {}
  40. Wymierna::Wymierna(int l, int m) : licznik(l), mianownik(m) {}
  41.  
  42. double Wymierna::wartosc()
  43. {
  44.     return 1.0 * licznik / mianownik;
  45. }
  46.  
  47. void Wymierna::skracaj()
  48. {
  49.     int d = nwd(licznik, mianownik);
  50.     licznik /= d;
  51.     mianownik /= d;
  52. }
  53.  
  54. Wymierna operator+(Wymierna A, Wymierna B)
  55. {
  56.     Wymierna wynik(A.licznik * B.mianownik + A.mianownik * B.licznik, A.mianownik * B.mianownik);
  57.     wynik.skracaj();
  58.     return wynik;
  59. }
  60.  
  61. Wymierna operator*(Wymierna A, Wymierna B)
  62. {
  63.     Wymierna wynik(A.licznik * B.licznik, A.mianownik * B.mianownik);
  64.     wynik.skracaj();
  65.     return wynik;
  66. }
  67.  
  68. ostream& operator<<(ostream& str, const Wymierna& ob)
  69. {
  70.     if(ob.mianownik == 1)
  71.     {
  72.         str << ob.licznik;
  73.         return str;
  74.     }
  75.     str << ob.licznik << '/' << ob.mianownik;
  76.     return str;
  77. }
  78.  
  79. int main()
  80. {
  81.     Wymierna A(1,2);
  82.     Wymierna B(3,4);
  83.     cout << A << " + " << B << " = " << A + B << endl;
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement