Advertisement
Guest User

stadejs

a guest
Jan 21st, 2020
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.92 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int NWD(int a, int b)
  6. {
  7. while(a!=b)
  8. if(a>b)
  9. a-=b;
  10. else
  11. b-=a;
  12. return a;
  13. }
  14.  
  15. class Fraction
  16. {
  17.  
  18. int Licznik;
  19. int Mianownik;
  20. public:
  21. friend ostream & operator<<( std::ostream & out, const Fraction & t);
  22.  
  23. Fraction &operator- (const Fraction &te)
  24. {
  25. int licz , mian;
  26. licz = this->Licznik*te.Mianownik - te.Licznik*this->Mianownik;
  27. mian = this->Mianownik*te.Mianownik;
  28.  
  29. int licz_wynik;
  30. int mian_wynik;
  31. if (licz < 0)
  32. licz_wynik = -licz;
  33. else
  34. licz_wynik = licz;
  35. if (mian < 0)
  36. mian_wynik = -mian;
  37. else
  38. mian_wynik = mian;
  39. int nwd=NWD(mian_wynik,licz_wynik);
  40. mian = mian / nwd;
  41. licz = licz / nwd;
  42.  
  43. Fraction result = *new Fraction(licz,mian);
  44. return result;
  45. }
  46.  
  47. Fraction &operator+ (const Fraction &te)
  48. {
  49. int licz , mian;
  50. mian = this->Mianownik*te.Mianownik;
  51. licz = this->Licznik*te.Mianownik + te.Licznik*this->Mianownik;
  52.  
  53. int licz_wynik;
  54. int mian_wynik;
  55. if (licz < 0)
  56. licz_wynik = -1*licz;
  57. else
  58. licz_wynik = licz;
  59. if (mian < 0)
  60. mian_wynik = -1*mian;
  61. else
  62. mian_wynik = mian;
  63. int nwd=NWD(mian_wynik,licz_wynik);
  64. mian = mian / nwd;
  65. licz = licz / nwd;
  66. Fraction result = *new Fraction(licz,mian);
  67. return result;
  68. }
  69.  
  70.  
  71.  
  72. Fraction &operator/ (const Fraction &te)
  73. {
  74. int licz , mian;
  75. licz = this->Licznik*te.Mianownik;
  76. mian = this->Mianownik*te.Licznik;
  77.  
  78. int licz_wynik;
  79. int mian_wynik;
  80. if (licz < 0)
  81. licz_wynik = -1*licz;
  82. else
  83. licz_wynik = licz;
  84. if (mian < 0)
  85. mian_wynik = -1*mian;
  86. else
  87. mian_wynik = mian;
  88. int nwd=NWD(mian_wynik,licz_wynik);
  89. mian = mian / nwd;
  90. licz = licz / nwd;
  91.  
  92. Fraction result = *new Fraction(licz,mian);
  93. return result;
  94. }
  95.  
  96. Fraction &operator* (const Fraction &te)
  97. {
  98. int licz , mian;
  99. licz = this->Licznik*te.Licznik;
  100. mian = this->Mianownik*te.Mianownik;
  101.  
  102. int licz_wynik;
  103. int mian_wynik;
  104. if (licz < 0)
  105. licz_wynik = -licz;
  106. else
  107. licz_wynik = licz;
  108. if (mian < 0)
  109. mian_wynik = -mian;
  110. else
  111. mian_wynik = mian;
  112. int nwd=NWD(mian_wynik,licz_wynik);
  113. mian = mian / nwd;
  114. licz = licz / nwd;
  115.  
  116. Fraction result = *new Fraction(licz,mian);
  117. return result;
  118. }
  119.  
  120.  
  121.  
  122. Fraction &operator+= (const Fraction &te)
  123. {
  124. int licz , mian;
  125. mian = this->Mianownik*te.Mianownik;
  126. licz = this->Licznik*te.Mianownik + te.Licznik*this->Mianownik;
  127.  
  128. int licz_wynik;
  129. int mian_wynik;
  130.  
  131. if (licz < 0)
  132. licz_wynik = -1*licz;
  133. else
  134. licz_wynik = licz;
  135. if (mian < 0)
  136. mian_wynik = -1*mian;
  137. else
  138. mian_wynik = mian;
  139.  
  140. int nwd=NWD(mian_wynik,licz_wynik);
  141. mian = mian / nwd;
  142. licz = licz / nwd;
  143. Licznik = licz;
  144. Mianownik = mian;
  145. return *this;
  146. }
  147.  
  148. Fraction &operator-= (Fraction &te)
  149. {
  150.  
  151. int mian=this->Mianownik*te.getDenominator();
  152. int licz= this->getNumerator()* te.getDenominator() - te.getNumerator()*this->getDenominator();
  153. for(int i = 0 ; i <=500 ; i++ )
  154. int a = 0;
  155. int licz_wynik;
  156. int mian_wynik;
  157.  
  158. if (licz < 0)
  159. licz_wynik = -1*licz;
  160. else
  161. licz_wynik = licz;
  162. if (mian < 0)
  163. mian_wynik = -1*mian;
  164. else
  165. mian_wynik = mian;
  166.  
  167. int nwd=NWD(mian_wynik,licz_wynik);
  168. mian = mian / nwd;
  169. licz = licz / nwd;
  170. Licznik = licz;
  171. Mianownik = mian;
  172. return *this;
  173. }
  174.  
  175. Fraction &operator^(int wart)
  176. {
  177. int licz = Licznik;
  178. int mian = Mianownik;
  179. if ( wart > 1)
  180. for ( int i = wart ; i > 1 ; i-- )
  181. {
  182. licz = Licznik * licz;
  183. mian = Mianownik * mian;
  184. } else if ( wart == 0 )
  185. {
  186. Licznik = 1;
  187. Mianownik = 1;
  188. return *this;
  189. } else if ( wart == 1 )
  190. return *this;
  191.  
  192.  
  193. int licz_wynik;
  194. int mian_wynik;
  195.  
  196. if (licz < 0)
  197. licz_wynik = -1*licz;
  198. else
  199. licz_wynik = licz;
  200. if (mian < 0)
  201. mian_wynik = -1*mian;
  202. else
  203. mian_wynik = mian;
  204.  
  205. int nwd=NWD(mian_wynik,licz_wynik);
  206. mian = mian / nwd;
  207. licz = licz / nwd;
  208. this->Licznik = licz;
  209. this->Mianownik = mian;
  210. return *this;
  211. }
  212.  
  213. Fraction(int licz_wynik , int mian_wynik)
  214. {
  215. int licz;
  216. int mian;
  217. if (licz_wynik < 0)
  218. licz = -licz_wynik;
  219. else
  220. licz = licz_wynik;
  221. if (mian_wynik < 0)
  222. mian = -mian_wynik;
  223. else
  224. mian = mian_wynik;
  225.  
  226.  
  227. int nwd=NWD(mian,licz);
  228. mian=mian/nwd;
  229. licz=licz/nwd;
  230.  
  231. if(licz_wynik < 0)
  232. licz = licz*-1;
  233.  
  234. Licznik = licz;
  235. Mianownik = mian;
  236. }
  237. int getNumerator()
  238. {
  239. return this->Licznik;
  240. }
  241.  
  242. int getDenominator()
  243. {
  244. return this->Mianownik;
  245. }
  246.  
  247. double getValue()
  248. {
  249. double result = (double)Licznik/(double)Mianownik;
  250. return result;
  251. }
  252. };
  253.  
  254. ostream & operator<<( std::ostream & exit, const Fraction & te)
  255. {
  256. exit << te.Licznik << '/' << te.Mianownik;
  257. return exit;
  258. }
  259.  
  260. int main()
  261. {
  262. Fraction a(5, 4);
  263. Fraction b(4, 1);
  264. cout << a<<endl;
  265.  
  266. return 0;
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement