Advertisement
MeehoweCK

Untitled

Dec 8th, 2022
586
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Wymierna
  6. {
  7.     friend ostream& operator<<(ostream& os, const Wymierna& liczba);
  8.     friend Wymierna operator*(Wymierna A, Wymierna B);
  9.     //friend Wymierna iloczyn(Wymierna A, Wymierna B);
  10.     int licznik;
  11.     int mianownik;
  12. public:
  13.     Wymierna();     // konstruktor domyślny (bezargumentowy) - tworzy liczbę wymierną 0
  14.     Wymierna(int l);    // konstruktor jednoargumentowy - tworzy liczbę całkowitą o podanej wartości
  15.     Wymierna(int l, int m);
  16.     double wartosc() const;
  17.     void wypisz() const;
  18.     void ustaw_licznik(int l);
  19.     void ustaw_mianownik(int m);
  20.     int pobierz_licznik() const;
  21.     int pobierz_mianownik() const;
  22. };
  23.  
  24. int nwd(int a, int b)
  25. {
  26.     if(a * b == 0)
  27.         return 0;
  28.     if(a < 0) a = -a;
  29.     if(b < 0) b = -b;
  30.     while(a != b)
  31.     {
  32.         if(a > b)
  33.             a -= b;
  34.         if(b > a)
  35.             b -= a;
  36.     }
  37.     return a;
  38. }
  39.  
  40. Wymierna operator*(Wymierna A, Wymierna B)
  41. {
  42.     int licznik = A.licznik * B.licznik;
  43.     int mianownik = A.mianownik * B.mianownik;
  44.     Wymierna wynik(licznik, mianownik);
  45.     return wynik;
  46. }
  47.  
  48. /*Wymierna iloczyn(Wymierna A, Wymierna B)
  49. {
  50.     int licznik = A.licznik * B.licznik;
  51.     int mianownik = A.mianownik * B.mianownik;
  52.     Wymierna wynik(licznik, mianownik);
  53.     return wynik;
  54. }*/
  55.  
  56. Wymierna::Wymierna() : licznik(0), mianownik(1) {}
  57. Wymierna::Wymierna(int l) : licznik(l), mianownik(1) {}
  58.  
  59. Wymierna::Wymierna(int l, int m)
  60. {
  61.     int dzielnik = nwd(l, m);
  62.  
  63.     if(m < 0)
  64.     {
  65.         l = -l;
  66.         m = -m;
  67.     }
  68.  
  69.     licznik = l / dzielnik;
  70.     mianownik = m / dzielnik;
  71. }
  72.  
  73. double Wymierna::wartosc() const
  74. {
  75.     return 1.0 * licznik / mianownik;
  76. }
  77.  
  78. void Wymierna::wypisz() const
  79. {
  80.     if(mianownik == 1)
  81.         cout << licznik << endl;
  82.     else
  83.         cout << licznik << '/' << mianownik << endl;
  84. }
  85.  
  86. ostream& operator<<(ostream& os, const Wymierna& liczba)
  87. {
  88.     if(liczba.mianownik == 1)
  89.         os << liczba.licznik;
  90.     else
  91.         os << liczba.licznik << '/' << liczba.mianownik;
  92.     return os;
  93. }
  94.  
  95. void Wymierna::ustaw_licznik(int l)
  96. {
  97.     licznik = l;
  98. }
  99.  
  100. void Wymierna::ustaw_mianownik(int m)
  101. {
  102.     mianownik = m;
  103. }
  104.  
  105. int Wymierna::pobierz_licznik() const
  106. {
  107.     return licznik;
  108. }
  109.  
  110. int Wymierna::pobierz_mianownik() const
  111. {
  112.     return mianownik;
  113. }
  114.  
  115. int main()
  116. {
  117.     const Wymierna B(7, 5);
  118.     Wymierna A(3, 4);
  119.     cout << A << " * " << B << " = " << A * B << endl;
  120.     return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement