Guest User

Untitled

a guest
Dec 16th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. struct Rational {
  2. var numerator: Int?
  3. var denominator: Int?
  4.  
  5. var common: Int? {
  6. if let n = numerator, let d = denominator {
  7. return gcd(a: n, b: d)
  8. }
  9. else {
  10. return nil
  11. }
  12. }
  13.  
  14. var simple: Rational {
  15. get {
  16. if let n = numerator, let d = denominator, let c = common {
  17. return Rational(n: n / c, d: d / c)
  18. }
  19. else {
  20. return Rational(n: nil, d: nil)
  21. }
  22. }
  23. }
  24.  
  25. var reciprocal: Rational {
  26. get {
  27. return Rational(n: denominator, d: numerator)
  28. }
  29. set(reci) {
  30. numerator = reci.denominator
  31. denominator = reci.numerator
  32. }
  33. }
  34.  
  35. init(n: Int?, d: Int?) {
  36. if let validNumerator = n, let validDenominator = d {
  37. if validDenominator != 0 {
  38. self.numerator = validNumerator
  39. self.denominator = validDenominator
  40. }
  41. else {
  42. self.numerator = nil
  43. self.denominator = nil
  44. }
  45. }
  46. else {
  47. self.numerator = nil
  48. self.denominator = nil
  49. }
  50. }
  51.  
  52. func isBigger(than comparison: Rational) -> Bool {
  53. if let n = numerator, let cn = comparison.denominator, let d = denominator, let cd = denominator {
  54. return n * cd > d * cn
  55. }
  56. else {
  57. return false
  58. }
  59. }
  60.  
  61. func isEqual(to comparison: Rational) -> Bool {
  62. if let n = numerator, let cn = comparison.denominator, let d = denominator, let cd = denominator {
  63. return n * cd == d * cn
  64. }
  65. else {
  66. return false
  67. }
  68. }
  69.  
  70. func isSmaller(than comparison: Rational) -> Bool {
  71. if let n = numerator, let cn = comparison.denominator, let d = denominator, let cd = denominator {
  72. return n * cd < d * cn
  73. }
  74. else {
  75. return false
  76. }
  77. }
  78.  
  79. func added(to addition: Rational) -> Rational {
  80. if let n = numerator, let an = addition.numerator, let d = denominator, let ad = addition.denominator {
  81. return Rational(n: n * ad + d * an ,d: d * ad) // 2/3 + 5/6 = 12/18 + 15/18
  82. }
  83. else{
  84. return Rational(n: nil, d: nil)
  85. }
  86. }
  87.  
  88. func subtracted(from subtraction: Rational) -> Rational {
  89. if let n = numerator, let sn = subtraction.numerator, let d = denominator, let sd = subtraction.denominator {
  90. return Rational(n: n * sd - d * sn,d: d * sd)
  91. }
  92. else {
  93. return Rational(n: nil, d: nil)
  94. }
  95. }
  96.  
  97. func multiplied(by multiplier: Rational) -> Rational {
  98. if let n = numerator, let mn = multiplier.numerator, let d = denominator, let md = multiplier.denominator {
  99. return Rational(n: n * mn ,d: d * md)
  100. }
  101. else {
  102. return Rational(n: nil, d: nil)
  103. }
  104. }
  105.  
  106. func devided(by devider: Rational) -> Rational {
  107. if let n = numerator, let dn = devider.numerator, let d = denominator, let dd = devider.denominator {
  108. return Rational(n: n * dd ,d: d * dn)
  109. }
  110. else {
  111. return Rational(n: nil, d: nil)
  112. }
  113. }
  114. }
  115.  
  116. func gcd(a: Int, b: Int) -> Int {
  117. var i = a
  118. var j = b
  119. while true {
  120. i %= j
  121. (i, j) = (j, i)
  122. if j == 0 {
  123. return i
  124. }
  125. }
  126. }
  127.  
  128. func lcm(a: Int, b: Int) -> Int {
  129. return a * b / gcd(a: a, b: b)
  130. }
Add Comment
Please, Sign In to add comment