Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Rational {
- var numerator: Int?
- var denominator: Int?
- var common: Int? {
- if let n = numerator, let d = denominator {
- return gcd(a: n, b: d)
- }
- else {
- return nil
- }
- }
- var simple: Rational {
- get {
- if let n = numerator, let d = denominator, let c = common {
- return Rational(n: n / c, d: d / c)
- }
- else {
- return Rational(n: nil, d: nil)
- }
- }
- }
- var reciprocal: Rational {
- get {
- return Rational(n: denominator, d: numerator)
- }
- set(reci) {
- numerator = reci.denominator
- denominator = reci.numerator
- }
- }
- init(n: Int?, d: Int?) {
- if let validNumerator = n, let validDenominator = d {
- if validDenominator != 0 {
- self.numerator = validNumerator
- self.denominator = validDenominator
- }
- else {
- self.numerator = nil
- self.denominator = nil
- }
- }
- else {
- self.numerator = nil
- self.denominator = nil
- }
- }
- func isBigger(than comparison: Rational) -> Bool {
- if let n = numerator, let cn = comparison.denominator, let d = denominator, let cd = denominator {
- return n * cd > d * cn
- }
- else {
- return false
- }
- }
- func isEqual(to comparison: Rational) -> Bool {
- if let n = numerator, let cn = comparison.denominator, let d = denominator, let cd = denominator {
- return n * cd == d * cn
- }
- else {
- return false
- }
- }
- func isSmaller(than comparison: Rational) -> Bool {
- if let n = numerator, let cn = comparison.denominator, let d = denominator, let cd = denominator {
- return n * cd < d * cn
- }
- else {
- return false
- }
- }
- func added(to addition: Rational) -> Rational {
- if let n = numerator, let an = addition.numerator, let d = denominator, let ad = addition.denominator {
- return Rational(n: n * ad + d * an ,d: d * ad) // 2/3 + 5/6 = 12/18 + 15/18
- }
- else{
- return Rational(n: nil, d: nil)
- }
- }
- func subtracted(from subtraction: Rational) -> Rational {
- if let n = numerator, let sn = subtraction.numerator, let d = denominator, let sd = subtraction.denominator {
- return Rational(n: n * sd - d * sn,d: d * sd)
- }
- else {
- return Rational(n: nil, d: nil)
- }
- }
- func multiplied(by multiplier: Rational) -> Rational {
- if let n = numerator, let mn = multiplier.numerator, let d = denominator, let md = multiplier.denominator {
- return Rational(n: n * mn ,d: d * md)
- }
- else {
- return Rational(n: nil, d: nil)
- }
- }
- func devided(by devider: Rational) -> Rational {
- if let n = numerator, let dn = devider.numerator, let d = denominator, let dd = devider.denominator {
- return Rational(n: n * dd ,d: d * dn)
- }
- else {
- return Rational(n: nil, d: nil)
- }
- }
- }
- func gcd(a: Int, b: Int) -> Int {
- var i = a
- var j = b
- while true {
- i %= j
- (i, j) = (j, i)
- if j == 0 {
- return i
- }
- }
- }
- func lcm(a: Int, b: Int) -> Int {
- return a * b / gcd(a: a, b: b)
- }
Add Comment
Please, Sign In to add comment