Advertisement
MeehoweCK

Untitled

Jul 4th, 2023
626
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.59 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Wymierna
  6. {
  7.     friend ostream& operator<<(ostream&, const Wymierna&);      // nagłówek zaprzyjaźnienia funkcji
  8.     friend Wymierna operator+(const Wymierna& A, const Wymierna& B);
  9.     friend Wymierna operator-(const Wymierna& A, const Wymierna& B);
  10.     friend Wymierna operator*(const Wymierna& A, const Wymierna& B);
  11.     friend Wymierna operator/(const Wymierna& A, const Wymierna& B);
  12. private:
  13.     int licznik;
  14.     int mianownik;
  15.     void skroc();
  16. public:
  17.     Wymierna();
  18.     Wymierna(int a, int b);
  19.     Wymierna(int calkowita);
  20.     Wymierna(double ulamek);
  21.     double wartosc() const;
  22.     void print() const;
  23.     int get_licznik() const { return licznik; }
  24.     int get_mianownik() const { return mianownik; }
  25. };
  26.  
  27. int nwd(int a, int b)
  28. {
  29.     if (a * b == 0)
  30.         return 1;
  31.     if (a < 0)
  32.         a = -a;
  33.     if (b < 0)
  34.         b = -b;
  35.     while (a != b)
  36.     {
  37.         if (a > b)
  38.             a -= b;
  39.         if (b > a)
  40.             b -= a;
  41.     }
  42.     return a;
  43. }
  44.  
  45. Wymierna::Wymierna(int a, int b) : licznik(a), mianownik(b) { skroc(); }
  46.  
  47. Wymierna::Wymierna(int calkowita) : Wymierna(calkowita, 1) {}
  48.  
  49. Wymierna::Wymierna() : Wymierna(0) {}
  50.  
  51. Wymierna::Wymierna(double ulamek)
  52. {
  53.     double l = ulamek;
  54.     mianownik = 1;
  55.     while (1.0 * static_cast<int>(l) / mianownik != ulamek)
  56.     {
  57.         l *= 10;
  58.         mianownik *= 10;
  59.     }
  60.     licznik = static_cast<int>(l);
  61.     skroc();
  62. }
  63.  
  64. double Wymierna::wartosc() const
  65. {
  66.     return 1.0 * licznik / mianownik;
  67. }
  68.  
  69. void Wymierna::print() const
  70. {
  71.     if (mianownik == 1)
  72.         cout << licznik << endl;
  73.     else
  74.         cout << licznik << "/" << mianownik << endl;
  75. }
  76.  
  77. ostream& operator<<(ostream& os, const Wymierna& liczba)
  78. {
  79.     if (liczba.mianownik == 1)
  80.         os << liczba.licznik;
  81.     else
  82.         os << liczba.licznik << '/' << liczba.mianownik;
  83.     return os;
  84. }
  85.  
  86. Wymierna operator+(const Wymierna& A, const Wymierna& B)
  87. {
  88.     Wymierna wynik;
  89.     wynik.licznik = A.licznik * B.mianownik + B.licznik * A.mianownik;
  90.     wynik.mianownik = A.mianownik * B.mianownik;
  91.  
  92.     wynik.skroc();
  93.  
  94.     return wynik;
  95. }
  96.  
  97. Wymierna operator*(const Wymierna& A, const Wymierna& B)
  98. {
  99.     Wymierna wynik;
  100.     wynik.licznik = A.licznik * B.licznik;
  101.     wynik.mianownik = A.mianownik * B.mianownik;
  102.     wynik.skroc();
  103.     return wynik;
  104.  
  105. }
  106.  
  107. Wymierna operator-(const Wymierna& A, const Wymierna& B)
  108. {
  109.     Wymierna wynik;
  110.     wynik.licznik = A.licznik * B.mianownik - B.licznik * A.mianownik;
  111.     wynik.mianownik = A.mianownik * B.mianownik;
  112.     wynik.skroc();
  113.  
  114.     return wynik;
  115. }
  116.  
  117. Wymierna operator/(const Wymierna& A, const Wymierna& B)
  118. {
  119.     Wymierna wynik;
  120.     wynik.licznik = A.licznik * B.mianownik;
  121.     wynik.mianownik = A.mianownik * B.licznik;
  122.     wynik.skroc();
  123.  
  124.     return wynik;
  125. }
  126.  
  127.  
  128.  
  129. void Wymierna::skroc()
  130. {
  131.     int dzielnik = nwd(licznik, mianownik);
  132.     licznik /= dzielnik;
  133.     mianownik /= dzielnik;
  134.     if (mianownik < 0)
  135.     {
  136.         licznik = -licznik;
  137.         mianownik = -mianownik;
  138.     }
  139. }
  140.  
  141.  
  142.  
  143.  
  144. int main()
  145. {
  146.     const Wymierna ulamek(8, 4);
  147.     Wymierna B(1, -3);
  148.     cout << ulamek << endl;
  149.     cout << B << endl;
  150.  
  151.     cout << ulamek << " + " << B << " = " << ulamek + B << endl;
  152.  
  153.     Wymierna C{ ulamek + B };       // nowszy sposób inicjalizacji obiektu
  154.  
  155.     cout << 7.3 + C << endl;
  156.     cout << ulamek - B << endl;
  157.     cout << ulamek * B << endl;
  158.     cout << ulamek / B << endl;
  159.  
  160.     cout << 1.5 > C << endl;
  161.     cout << ulamek += 2.4 << endl;
  162.     cout << 2.5 == ulamek << endl;
  163.  
  164.  
  165.  
  166.     return 0;
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement