MeehoweCK

Untitled

Mar 22nd, 2021
577
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Wymierna
  6. {
  7.     friend Wymierna iloczyn(Wymierna, Wymierna);
  8.     friend Wymierna suma(Wymierna, Wymierna);
  9.     friend Wymierna roznica(Wymierna, Wymierna);
  10.     friend Wymierna iloraz(Wymierna, Wymierna);
  11.     friend ostream& operator<<(ostream&, Wymierna);
  12.     friend Wymierna operator+(Wymierna, Wymierna);
  13. private:
  14.     int licznik;
  15.     int mianownik;
  16. public:
  17.     Wymierna();
  18.     Wymierna(int);
  19.     Wymierna(int, int);
  20.     void ustaw_licznik(int);
  21.     void ustaw_mianownik(int);
  22.     int pobierz_licznik();
  23.     int pobierz_mianownik();
  24.     void skroc();
  25.     void wypisz_ulamek();
  26.     double pobierz_wartosc();
  27. };
  28.  
  29. int nwd(int a, int b)
  30. {
  31.     if(a * b == 0)
  32.         return 1;
  33.     if(a < 0)
  34.         a = -a;
  35.     if(b < 0)
  36.         b = -b;
  37.     while(a != b)
  38.     {
  39.         if(a > b)
  40.             a -= b;
  41.         if(b > a)
  42.             b -= a;
  43.     }
  44.     return a;
  45. }
  46.  
  47. Wymierna::Wymierna() : licznik(0), mianownik(1) {}   // konstruktor tworzący obiekt o wartości 0
  48.  
  49. Wymierna::Wymierna(int liczba) : licznik(liczba), mianownik(1) {}
  50.  
  51. Wymierna::Wymierna(int l, int m) : licznik(l), mianownik(m) {}
  52.  
  53. void Wymierna::ustaw_licznik(int l)
  54. {
  55.     licznik = l;
  56. }
  57.  
  58. void Wymierna::ustaw_mianownik(int m)
  59. {
  60.     mianownik = m;
  61. }
  62.  
  63. int Wymierna::pobierz_licznik()
  64. {
  65.     return licznik;
  66. }
  67.  
  68. int Wymierna::pobierz_mianownik()
  69. {
  70.     return mianownik;
  71. }
  72.  
  73. void Wymierna::skroc()
  74. {
  75.     if(mianownik < 0)
  76.     {
  77.         licznik = -licznik;
  78.         mianownik = -mianownik;
  79.     }
  80.     int dzielnik = nwd(licznik, mianownik);
  81.     licznik /= dzielnik;
  82.     mianownik /= dzielnik;
  83. }
  84.  
  85. void Wymierna::wypisz_ulamek()
  86. {
  87.     cout << licznik << '/' << mianownik << endl;
  88. }
  89.  
  90. double Wymierna::pobierz_wartosc()
  91. {
  92.     return 1.0 * licznik / mianownik;
  93. }
  94.  
  95. Wymierna iloczyn(Wymierna A, Wymierna B)
  96. {
  97.     Wymierna wynik(A.licznik * B.licznik, A.mianownik * B.mianownik);
  98.     wynik.skroc();
  99.     return wynik;
  100. }
  101.  
  102. Wymierna suma(Wymierna A, Wymierna B)
  103. {
  104.     Wymierna wynik(A.licznik * B.mianownik + A.mianownik * B.licznik, A.mianownik * B.mianownik);
  105.     wynik.skroc();
  106.     return wynik;
  107. }
  108.  
  109. Wymierna roznica(Wymierna A, Wymierna B)
  110. {
  111.     Wymierna wynik(A.licznik * B.mianownik - A.mianownik * B.licznik, A.mianownik * B.mianownik);
  112.     wynik.skroc();
  113.     return wynik;
  114. }
  115.  
  116. Wymierna iloraz(Wymierna A, Wymierna B)
  117. {
  118.     Wymierna wynik(A.licznik * B.mianownik, B.licznik * A.mianownik);
  119.     wynik.skroc();
  120.     return wynik;
  121. }
  122.  
  123. ostream& operator<<(ostream& os, Wymierna obiekt)
  124. {
  125.     if(obiekt.mianownik == 1)
  126.         os << obiekt.licznik;
  127.     else
  128.         os << obiekt.licznik << '/' << obiekt.mianownik;
  129.     return os;
  130. }
  131.  
  132. Wymierna operator+(Wymierna A, Wymierna B)
  133. {
  134.     Wymierna wynik(A.licznik * B.mianownik + A.mianownik * B.licznik, A.mianownik * B.mianownik);
  135.     wynik.skroc();
  136.     return wynik;
  137. }
  138.  
  139. int main()
  140. {
  141.     Wymierna A(1, 2);
  142.     Wymierna B(2, 3);
  143.  
  144.     Wymierna C = A + B;     // 7/6
  145.     cout << 3 + C << endl;
  146.  
  147.     return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment