Advertisement
MeehoweCK

Untitled

Jan 28th, 2021
840
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.85 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int nwd(int a, int b)
  6. {
  7.     if(a < 0) a = -a;
  8.     if(b < 0) b = -b;
  9.  
  10.     while(a != b)
  11.     {
  12.         if(a > b)
  13.             a -= b;
  14.         if(b > a)
  15.             b -= a;
  16.     }
  17.     return a;
  18. }
  19.  
  20. class Wymierna
  21. {
  22.     friend Wymierna roznica(Wymierna, Wymierna);
  23.     friend Wymierna iloraz(Wymierna, Wymierna);
  24.     friend Wymierna iloczyn(Wymierna, Wymierna);
  25.     friend Wymierna suma(Wymierna, Wymierna);
  26.     friend Wymierna operator+(Wymierna A, Wymierna B)       // funkcja operatorowa, dzięki której możemy używać znaku + przy działaniach na liczbach wymiernych
  27.     {
  28.         return suma(A,B);
  29.     }
  30.     friend ostream& operator<<(ostream&, const Wymierna&);
  31. private:            // pola prywatne
  32.     int licznik;
  33.     int mianownik;
  34. public:             // metody publiczne
  35.     Wymierna();     // konstruktor domyœlny (bezargumentowy)
  36.     Wymierna(int);
  37.     Wymierna(int, int);
  38.     void wypisz();
  39.     double value()
  40.     {
  41.         return 1.0 * licznik / mianownik;
  42.     }
  43.     // metody dostêpowe:
  44.     void set_licznik(int l)
  45.     {
  46.         licznik = l;
  47.     }
  48.     void set_mianownik(int m)
  49.     {
  50.         mianownik = m;
  51.     }
  52.     int get_licznik()
  53.     {
  54.         return licznik;
  55.     }
  56.     int get_mianownik()
  57.     {
  58.         return mianownik;
  59.     }
  60.     void skracaj();
  61. };
  62.  
  63. Wymierna::Wymierna() : licznik(0), mianownik(1) {}
  64.  
  65. Wymierna::Wymierna(int liczba) : licznik(liczba), mianownik(1) {}
  66.  
  67. Wymierna::Wymierna(int l, int m) : licznik(l), mianownik(m) {}
  68.  
  69. void Wymierna::wypisz()
  70. {
  71.     cout << licznik << '/' << mianownik;
  72. }
  73.  
  74. void Wymierna::skracaj()
  75. {
  76.     if(licznik * mianownik == 0)
  77.     {
  78.         licznik = 0;
  79.         mianownik = 1;
  80.     }
  81.     else
  82.     {
  83.         int dzielnik = nwd(licznik, mianownik);
  84.         licznik /= dzielnik;
  85.         mianownik /= dzielnik;
  86.     }
  87. }
  88.  
  89. Wymierna iloczyn(Wymierna A, Wymierna B)
  90. {
  91.     Wymierna wynik(A.licznik * B.licznik, A.mianownik * B.mianownik);
  92.     wynik.skracaj();
  93.     return wynik;
  94. }
  95. Wymierna suma(Wymierna A, Wymierna B)
  96. {
  97.     Wymierna wynik(A.licznik * B.mianownik + B.licznik * A.mianownik, A.mianownik * B.mianownik);
  98.     wynik.skracaj();
  99.     return wynik;
  100. }
  101. Wymierna roznica (Wymierna A, Wymierna B)
  102. {
  103.     Wymierna wynik(A.licznik * B.mianownik - B.licznik * A.mianownik, A.mianownik * B.mianownik);
  104.     wynik.skracaj();
  105.     return wynik;
  106.  
  107.  
  108. }
  109. Wymierna iloraz(Wymierna A, Wymierna B)
  110. {
  111.     Wymierna wynik(A.licznik / B.licznik, A.mianownik / B.mianownik);
  112.     wynik.skracaj();
  113.     return wynik;
  114. }
  115.  
  116. ostream& operator<<(ostream& str, const Wymierna& ob)
  117. {
  118.     if(ob.mianownik == 1)
  119.     {
  120.         str << ob.licznik;
  121.         return str;
  122.     }
  123.     str << ob.licznik << '/' << ob.mianownik;
  124.     return str;
  125. }
  126.  
  127. int main()
  128. {
  129.     Wymierna A(7,3);
  130.     Wymierna B(3,7);
  131.     cout << A + 10;
  132.     return 0;
  133. }
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement