Created
September 15, 2012 09:53
-
-
Save dblandin/3727148 to your computer and use it in GitHub Desktop.
Fraction class
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Fraction.h | |
// FractionCalculator | |
// | |
// Created by Devon Blandin on 9/15/12. | |
// Copyright (c) 2012 Devon Code Shop. All rights reserved. | |
// | |
#import <Foundation/Foundation.h> | |
@interface Fraction : NSObject | |
@property int numerator; | |
@property int denominator; | |
-(Fraction *) add: (Fraction *) f; | |
-(Fraction *) subtract: (Fraction *) f; | |
-(Fraction *) multiply: (Fraction *) f; | |
-(Fraction *) divide: (Fraction *) f; | |
-(void) print; | |
-(NSString *) toString; | |
+(int) gcd: (int) num1:(int) num2; | |
+(int) lcm: (int) num1:(int) num2; | |
@end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Fraction.m | |
// FractionCalculator | |
// | |
// Created by Devon Blandin on 9/15/12. | |
// Copyright (c) 2012 Devon Code Shop. All rights reserved. | |
// | |
#import "Fraction.h" | |
@implementation Fraction | |
@synthesize numerator; | |
@synthesize denominator; | |
// instance methods | |
// adds self to f | |
-(Fraction *) add:(Fraction *)f | |
{ | |
Fraction *result = [[Fraction alloc] init]; | |
int gcd = [Fraction gcd:denominator :[f denominator]]; | |
[result setNumerator:((numerator * [f denominator]) + ([f numerator] * denominator)) / gcd]; | |
[result setDenominator:(denominator * [f denominator]) / gcd]; | |
return result; | |
} | |
// subtracts f from self | |
-(Fraction *) subtract:(Fraction *)f | |
{ | |
Fraction *result = [[Fraction alloc] init]; | |
int gcd = [Fraction gcd:denominator :[f denominator]]; | |
[result setNumerator:abs((numerator * [f denominator]) - ([f numerator] * denominator)) / gcd]; | |
[result setDenominator:abs(denominator * [f denominator]) / gcd]; | |
return result; | |
} | |
// multiplies self and f | |
-(Fraction *) multiply:(Fraction *)f | |
{ | |
Fraction *result = [[Fraction alloc] init]; | |
int gcd = [Fraction gcd:numerator * [f numerator] :denominator * [f denominator]]; | |
[result setNumerator:(numerator * [f numerator]) / gcd]; | |
[result setDenominator:(denominator * [f denominator]) / gcd]; | |
return result; | |
} | |
// divides self and f | |
-(Fraction *) divide:(Fraction *)f | |
{ | |
Fraction *result = [[Fraction alloc] init]; | |
Fraction *f_flipped = [[Fraction alloc] init]; | |
[f_flipped setNumerator:[f denominator]]; | |
[f_flipped setDenominator:[f numerator]]; | |
int gcd = [Fraction gcd:numerator * [f_flipped numerator] :denominator * [f_flipped denominator]]; | |
[result setNumerator:(numerator * [f_flipped numerator]) / gcd]; | |
[result setDenominator:(denominator * [f_flipped denominator]) / gcd]; | |
return result; | |
} | |
// prints self to NSLog | |
-(void) print | |
{ | |
NSLog (@"%i/%i", numerator, denominator); | |
} | |
-(NSString *) toString | |
{ | |
NSString *string = [[NSString alloc] init]; | |
string = [NSString stringWithFormat:@"%i/%i", numerator, denominator]; | |
return string; | |
} | |
// class methods | |
+(int) gcd:(int)num1:(int)num2 | |
{ | |
if (num2 == 0) { | |
return num1; | |
} | |
return [Fraction gcd:num2:num1 % num2]; | |
} | |
+(int) lcm:(int)num1:(int)num2 | |
{ | |
return abs((num1 * num2) / [Fraction gcd:num1:num2]); | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment