Advertisement
MeehoweCK

Untitled

Nov 5th, 2020
839
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.43 KB | None | 0 0
  1. // main.cpp
  2. #include <iostream>
  3. #include "wymierne.h"
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     Wymierna A(2, 3);
  10.     int x = 1;
  11.     Wymierna B = x + A;
  12.     cout << B << endl;
  13.  
  14.     cout << A << " + " << B << " = " << A + B << endl;
  15.  
  16.     return 0;
  17. }
  18.  
  19. //wymierne.h
  20. using namespace std;
  21.  
  22. int nwd(int, int);
  23.  
  24. class Wymierna
  25. {
  26.     friend Wymierna suma(Wymierna, Wymierna);
  27.     friend Wymierna roznica(Wymierna, Wymierna);
  28.     friend Wymierna iloczyn(Wymierna, Wymierna);
  29.     friend Wymierna iloraz(Wymierna, Wymierna);
  30.     friend ostream& operator<<(ostream&, const Wymierna&);
  31.     // pola prywatne:
  32.     int licznik;
  33.     int mianownik;
  34. public:     // metody publiczne
  35.     Wymierna();     // konstruktor - metoda tworz¹ca obiekt
  36.     Wymierna(int);
  37.     Wymierna(int, int);
  38.     void set_licznik(int);
  39.     void set_mianownik(int);
  40.     int get_licznik();
  41.     int get_mianownik();
  42.     void wypisz();
  43.     double get_wartosc();
  44. };
  45.  
  46. bool operator>(Wymierna, Wymierna);
  47. bool operator<(Wymierna, Wymierna);
  48. bool operator==(Wymierna, Wymierna);
  49. bool operator>=(Wymierna, Wymierna);
  50. bool operator<=(Wymierna, Wymierna);
  51. bool operator!=(Wymierna, Wymierna);
  52. Wymierna operator+(Wymierna, Wymierna);
  53. Wymierna operator-(Wymierna, Wymierna);
  54. Wymierna operator/(Wymierna, Wymierna);
  55. Wymierna operator*(Wymierna, Wymierna);
  56.  
  57. // wymierne.cpp
  58. #include <iostream>
  59. #include "wymierne.h"
  60.  
  61. using namespace std;
  62.  
  63. int nwd(int a, int b)
  64. {
  65.     if(a < 0) a = -a;
  66.     if(b < 0) b = -b;
  67.  
  68.     while(a != b)
  69.     {
  70.         if(a > b)
  71.             a -= b;
  72.         if(b > a)
  73.             b -= a;
  74.     }
  75.     return a;
  76. }
  77.  
  78. Wymierna::Wymierna()
  79. {
  80.     // konstruktor wype³nia pola prywatne jakimiœ pocz¹tkowymi wartoœciami:
  81.     licznik = 0;
  82.     mianownik = 1;
  83. }
  84.  
  85. Wymierna::Wymierna(int liczba)
  86. {
  87.     licznik = liczba;
  88.     mianownik = 1;
  89. }
  90.  
  91. Wymierna::Wymierna(int l, int m)
  92. {
  93.     int x = nwd(l, m);
  94.     licznik = l/x;
  95.     mianownik = m/x;
  96. }
  97.  
  98. void Wymierna::set_licznik(int l)
  99. {
  100.     licznik = l;
  101.     int x = nwd(licznik, mianownik);
  102.     licznik /= x;
  103.     mianownik /= x;
  104. }
  105.  
  106. void Wymierna::set_mianownik(int m)
  107. {
  108.     if(m == 0)
  109.     {
  110.         cout << "Nie mozna przypisac mianownikowi wartosci 0\n";
  111.         return;
  112.     }
  113.     mianownik = m;
  114.     int x = nwd(licznik, mianownik);
  115.     licznik /= x;
  116.     mianownik /= x;
  117. }
  118.  
  119. int Wymierna::get_licznik()
  120. {
  121.     return licznik;
  122. }
  123.  
  124. int Wymierna::get_mianownik()
  125. {
  126.     return mianownik;
  127. }
  128.  
  129. void Wymierna::wypisz()
  130. {
  131.     if(mianownik == 1)
  132.     {
  133.         cout << licznik << endl;
  134.         return;
  135.     }
  136.     cout << licznik << '/' << mianownik << endl;
  137. }
  138.  
  139. double Wymierna::get_wartosc()
  140. {
  141.     return 1.0 * licznik / mianownik;
  142. }
  143.  
  144. Wymierna suma(Wymierna A, Wymierna B)
  145. {
  146.     int l, m;
  147.  
  148.     l = A.licznik * B.mianownik + A.mianownik * B.licznik;
  149.  
  150.     m = A.mianownik * B.mianownik;
  151.  
  152.     Wymierna wynik (l, m);
  153.  
  154.     return wynik;
  155. }
  156.  
  157. Wymierna roznica(Wymierna A, Wymierna B)
  158. {
  159.     int l, m;
  160.  
  161.     l = A.licznik * B.mianownik - A.mianownik * B.licznik;
  162.  
  163.     m = A.mianownik * B.mianownik;
  164.  
  165.     Wymierna wynik (l, m);
  166.  
  167.     return wynik;
  168. }
  169.  
  170. Wymierna iloczyn(Wymierna A, Wymierna B)
  171. {
  172.     int l, m;
  173.  
  174.     l = A.licznik * B.licznik;
  175.  
  176.     m = A.mianownik * B.mianownik;
  177.  
  178.     Wymierna wynik (l,m);
  179.  
  180.     return wynik;
  181. }
  182.  
  183. Wymierna iloraz (Wymierna A, Wymierna B)
  184. {
  185.     int l, m;
  186.  
  187.     l = A.licznik * B.mianownik;
  188.  
  189.     m = A.mianownik * B.licznik;
  190.  
  191.     Wymierna wynik(l, m);
  192.  
  193.     return wynik;
  194. }
  195.  
  196. Wymierna operator+(Wymierna A, Wymierna B)
  197. {
  198.     return suma(A, B);
  199. }
  200.  
  201. Wymierna operator-(Wymierna A, Wymierna B)
  202. {
  203.     return roznica(A, B);
  204. }
  205.  
  206. Wymierna operator*(Wymierna A, Wymierna B)
  207. {
  208.     return iloczyn(A, B);
  209. }
  210.  
  211. Wymierna operator/(Wymierna A, Wymierna B)
  212. {
  213.     return iloraz(A, B);
  214. }
  215.  
  216. bool operator > (Wymierna A, Wymierna B)
  217. {
  218.     if(A.get_wartosc() > B.get_wartosc())
  219.         return true;
  220.     return false;
  221. }
  222.  
  223. bool operator < (Wymierna A, Wymierna B)
  224. {
  225.     if(A.get_wartosc() < B.get_wartosc())
  226.         return true;
  227.     return false;
  228. }
  229.  
  230. bool operator == (Wymierna A, Wymierna B)
  231. {
  232.     if(A.get_wartosc() == B.get_wartosc())
  233.         return true;
  234.     return false;
  235. }
  236.  
  237. ostream& operator<<(ostream& strumien, const Wymierna& obiekt)
  238. {
  239.     if(obiekt.mianownik == 1)
  240.     {
  241.         strumien << obiekt.licznik;
  242.         return strumien;
  243.     }
  244.     strumien << obiekt.licznik << '/' << obiekt.mianownik;
  245.     return strumien;
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement