Skip to content

Instantly share code, notes, and snippets.

@dblandin
Created September 15, 2012 09:53
Show Gist options
  • Save dblandin/3727148 to your computer and use it in GitHub Desktop.
Save dblandin/3727148 to your computer and use it in GitHub Desktop.
Fraction class
//
// 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
//
// 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