Advertisement
LegoSosiska

sda

Oct 3rd, 2022
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.57 KB | None | 0 0
  1. #pragma once
  2. #include <exception>
  3.  
  4. int gcd(int first_number, int second_number) {
  5. throw std::logic_error("Not implemented");
  6. }
  7.  
  8. class Fraction {
  9. public:
  10. Fraction() {
  11. num_ = 0;
  12. den_ = 1;
  13. }
  14. Fraction(int num, int den) {
  15. if (den == 0) {
  16. throw den;
  17. }
  18. num_ = num;
  19. den_ = den;
  20. }
  21. explicit Fraction(int num) {
  22. num_ = num;
  23. den_ = 1;
  24. } // explicit here is just for PCF :)
  25. Fraction(const Fraction& other) {
  26. num_ = other.num_;
  27. den_ = other.den_;
  28. }
  29. ~Fraction() {};
  30.  
  31. int num() const {
  32. return num_;
  33. }
  34. int den() const {
  35. return den_;
  36. }
  37.  
  38. Fraction& operator=(Fraction other) {
  39. swap(*this, other);
  40. return *this;
  41. }
  42.  
  43. friend Fraction operator-(Fraction& op);
  44.  
  45. friend Fraction operator+(Fraction& op);
  46.  
  47. friend Fraction operator+(Fraction lhs, Fraction rhs);
  48.  
  49. friend Fraction operator+(Fraction lhs, int rhs);
  50.  
  51. friend Fraction operator+(int lhs, Fraction rhs);
  52.  
  53. friend Fraction operator-(Fraction lhs, Fraction rhs);
  54.  
  55. friend Fraction operator-(Fraction lhs, int rhs);
  56.  
  57. friend Fraction operator-(int lhs, Fraction rhs);
  58.  
  59. friend Fraction operator*(Fraction lhs, Fraction rhs);
  60.  
  61. friend Fraction operator*(Fraction lhs, int rhs);
  62.  
  63. friend Fraction operator*(int lhs, Fraction rhs);
  64.  
  65. friend Fraction operator/(Fraction lhs, Fraction rhs);
  66.  
  67. friend Fraction operator/(Fraction lhs, int rhs);
  68.  
  69. friend Fraction operator/(int lhs, Fraction rhs);
  70.  
  71. friend Fraction operator+=(Fraction& lhs, Fraction rhs);
  72.  
  73. friend Fraction operator+=(Fraction& lhs, int rhs);
  74.  
  75. friend Fraction operator-=(Fraction& lhs, Fraction rhs);
  76.  
  77. friend Fraction operator-=(Fraction& lhs, int rhs);
  78.  
  79. friend Fraction& operator*=(Fraction& lhs, Fraction rhs);
  80.  
  81. friend Fraction& operator*=(Fraction& lhs, int rhs);
  82.  
  83. friend Fraction& operator/=(Fraction& lhs, Fraction rhs);
  84.  
  85. friend Fraction& operator/=(Fraction& lhs, int rhs);
  86.  
  87. friend Fraction operator++(Fraction& op);
  88.  
  89. friend Fraction operator++(Fraction op, int notused);
  90.  
  91. friend Fraction operator--(Fraction& op);
  92.  
  93. friend Fraction operator--(Fraction op, int notused);
  94.  
  95. friend bool operator<(Fraction lhs, Fraction rhs);
  96.  
  97. friend bool operator<(Fraction lhs, int rhs);
  98.  
  99. friend bool operator<(int lhs, Fraction rhs);
  100.  
  101. friend bool operator>(Fraction lhs, Fraction rhs);
  102.  
  103. friend bool operator>(Fraction lhs, int rhs);
  104.  
  105. friend bool operator>(int lhs, Fraction rhs);
  106.  
  107. friend bool operator<=(Fraction lhs, Fraction rhs);
  108.  
  109. friend bool operator<=(Fraction lhs, int rhs);
  110.  
  111. friend bool operator<=(int lhs, Fraction rhs);
  112.  
  113. friend bool operator>=(Fraction lhs, Fraction rhs);
  114.  
  115. friend bool operator>=(Fraction lhs, int rhs);
  116.  
  117. friend bool operator>=(int lhs, Fraction rhs);
  118.  
  119. friend bool operator==(Fraction lhs, Fraction rhs);
  120.  
  121. friend bool operator==(Fraction lhs, int rhs);
  122.  
  123. friend bool operator==(int lhs, Fraction rhs);
  124.  
  125. friend bool operator!=(Fraction lhs, Fraction rhs);
  126.  
  127. friend bool operator!=(Fraction lhs, int rhs);
  128.  
  129. friend bool operator!=(int lhs, Fraction rhs);
  130.  
  131. friend std::ostream& operator<<(std::ostream& out, const Fraction& fract);
  132.  
  133. private:
  134. void swap(Fraction& a, Fraction& b) {
  135. Fraction temp = std::move(a);
  136. a = std::move(b);
  137. b = std::move(temp);
  138. }
  139. int num_, den_;
  140. };
  141.  
  142. std::ostream& operator<<(std::ostream& out, const Fraction& fract) {
  143. throw std::logic_error("Not implemented");
  144. }
  145.  
  146. Fraction operator-(Fraction& op) {
  147. op.num_ = -op.num_;
  148. return op;
  149. }
  150.  
  151. Fraction operator+(Fraction& op) {
  152. return op;
  153. }
  154.  
  155. Fraction operator+(Fraction lhs, Fraction rhs) {
  156. if (lhs.den_ != rhs.den_) {
  157. lhs.num_ = lhs.num_ * rhs.den_ + rhs.num_ * lhs.den_;
  158. lhs.den_ *= rhs.den_;
  159. return lhs;
  160. }
  161. lhs.num_ += rhs.num_;
  162. return lhs;
  163. }
  164.  
  165. Fraction operator+(Fraction lhs, int rhs) {
  166. lhs.num_ += rhs * lhs.den_;
  167. return lhs;
  168. }
  169.  
  170. Fraction operator+(int lhs, Fraction rhs) {
  171. rhs.num_ += lhs * rhs.den_;
  172. return rhs;
  173. }
  174.  
  175. Fraction operator-(Fraction lhs, Fraction rhs) {
  176. if (lhs.den_ != rhs.den_) {
  177. lhs.num_ = lhs.num_ * rhs.den_ - rhs.num_ * lhs.den_;
  178. lhs.den_ *= rhs.den_;
  179. return lhs;
  180. }
  181. lhs.num_ -= rhs.num_;
  182. return lhs;
  183. }
  184.  
  185. Fraction operator-(Fraction lhs, int rhs) {
  186. lhs.num_ -= rhs * lhs.den_;
  187. return lhs;
  188. }
  189.  
  190. Fraction operator-(int lhs, Fraction rhs) {
  191. rhs.num_ -= lhs * rhs.den_;
  192. return rhs;
  193. }
  194.  
  195. Fraction operator*(Fraction lhs, Fraction rhs) {
  196. lhs.num_ *= rhs.num_;
  197. lhs.den_ *= rhs.den_;
  198. return lhs;
  199. }
  200.  
  201. Fraction operator*(Fraction lhs, int rhs) {
  202. lhs.num_ *= rhs;
  203. return lhs;
  204. }
  205.  
  206. Fraction operator*(int lhs, Fraction rhs) {
  207. rhs.num_ *= lhs;
  208. return rhs;
  209. }
  210.  
  211. Fraction operator/(Fraction lhs, Fraction rhs) {
  212. lhs.num_ *= rhs.den_;
  213. lhs.den_ *= rhs.num_;
  214. return lhs;
  215. }
  216.  
  217. Fraction operator/(Fraction lhs, int rhs) {
  218. lhs.den_ *= rhs;
  219. return lhs;
  220. }
  221.  
  222. Fraction operator/(int lhs, Fraction rhs) {
  223. rhs.den_ *= lhs;
  224. return rhs;
  225. }
  226.  
  227. Fraction operator+=(Fraction& lhs, Fraction rhs) {
  228. lhs = lhs + rhs;
  229. return lhs;
  230. }
  231.  
  232. Fraction operator+=(Fraction& lhs, int rhs) {
  233. lhs = lhs + rhs;
  234. return lhs;
  235. }
  236.  
  237. Fraction operator-=(Fraction& lhs, Fraction rhs) {
  238. lhs = lhs - rhs;
  239. return lhs;
  240. }
  241.  
  242. Fraction operator-=(Fraction& lhs, int rhs) {
  243. lhs = lhs - rhs;
  244. return lhs;
  245. }
  246.  
  247. Fraction& operator*=(Fraction& lhs, Fraction rhs) {
  248. lhs = lhs * rhs;
  249. return lhs;
  250. }
  251.  
  252. Fraction& operator*=(Fraction& lhs, int rhs) {
  253. lhs = lhs * rhs;
  254. return lhs;
  255. }
  256.  
  257. Fraction& operator/=(Fraction& lhs, Fraction rhs) {
  258. lhs = lhs / rhs;
  259. return lhs;
  260. }
  261.  
  262. Fraction& operator/=(Fraction& lhs, int rhs) {
  263. lhs = lhs / rhs;
  264. return lhs;
  265. }
  266.  
  267. Fraction operator++(Fraction& op) {
  268. op += 1;
  269. return op;
  270. }
  271.  
  272. Fraction operator++(Fraction op, int notused) {
  273. Fraction temp = op;
  274. op += 1;
  275. return op;
  276. }
  277.  
  278. Fraction operator--(Fraction& op) {
  279. op -= 1;
  280. return op;
  281. }
  282.  
  283. Fraction operator--(Fraction op, int notused) {
  284. Fraction temp = op;
  285. op -= 1;
  286. return op;
  287. }
  288.  
  289. bool operator<(Fraction lhs, Fraction rhs) {
  290. return lhs.num_ * rhs.den_ < rhs.num_* lhs.den_;
  291. }
  292.  
  293. bool operator<(Fraction lhs, int rhs) {
  294. return lhs.num_ < rhs * lhs.den_;
  295. }
  296.  
  297. bool operator<(int lhs, Fraction rhs) {
  298. return lhs < lhs * rhs.den_;
  299. }
  300.  
  301. bool operator>(Fraction lhs, Fraction rhs) {
  302. return rhs < lhs;
  303. }
  304.  
  305. bool operator>(Fraction lhs, int rhs) {
  306. return rhs < lhs;
  307. }
  308.  
  309. bool operator>(int lhs, Fraction rhs) {
  310. return rhs < lhs;
  311. }
  312.  
  313. bool operator<=(Fraction lhs, Fraction rhs) {
  314. return !(lhs > rhs);
  315. }
  316.  
  317. bool operator<=(Fraction lhs, int rhs) {
  318. return !(lhs > rhs);
  319. }
  320.  
  321. bool operator<=(int lhs, Fraction rhs) {
  322. return !(lhs > rhs);
  323. }
  324.  
  325. bool operator>=(Fraction lhs, Fraction rhs) {
  326. return !(lhs < rhs);
  327. }
  328.  
  329. bool operator>=(Fraction lhs, int rhs) {
  330. return !(lhs < rhs);
  331. }
  332.  
  333. bool operator>=(int lhs, Fraction rhs) {
  334. return !(lhs < rhs);
  335. }
  336.  
  337. bool operator==(Fraction lhs, Fraction rhs) {
  338. return rhs >= lhs && rhs <= lhs;
  339. }
  340.  
  341. bool operator==(Fraction lhs, int rhs) {
  342. return rhs >= lhs && rhs <= lhs;
  343. }
  344.  
  345. bool operator==(int lhs, Fraction rhs) {
  346. return rhs >= lhs && rhs <= lhs;
  347. }
  348.  
  349. bool operator!=(Fraction lhs, Fraction rhs) {
  350. return !(lhs == rhs);
  351. }
  352.  
  353. bool operator!=(Fraction lhs, int rhs) {
  354. return !(lhs == rhs);
  355. }
  356.  
  357. bool operator!=(int lhs, Fraction rhs) {
  358. return !(lhs == rhs);
  359. }
  360.  
  361.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement