OC分数作业


 分数计算:任意的两个分数,对这两个分数的进行加、减、乘、除运算,并输出结果, 注:结果区分正负。
 main.m
#import "Fraction.h"

int main(int argc, const char * argv[])
{
    
    @autoreleasepool {
        
        //第一个分数
        Fraction * f1 = [[Fraction alloc] init];
        f1.numerator = 3;
        f1.denominator = 4;
        
        //第二个分数
        Fraction * f2 = [[Fraction alloc] init];
        f2.numerator = -5;
        f2.denominator = 4;
        
        //加法
        Fraction * addResult = [f1 addFraction:f2];
        [addResult print];
        
        //减法
        Fraction * subtractResult = [f1 subtractFraction:f2];
        [subtractResult print];
        
        //乘法
        Fraction * multiplyResult = [f1 multiplyFraction:f2];
        [multiplyResult print];
        
        //除法
        Fraction * devideResult = [f1 devideFraction:f2];
        [devideResult print];
        
    }
    return 0;
}

  Fraction.h

@interface Fraction : NSObject
{
    BOOL _isNegative; //标记是否是负数
}
@property(nonatomic,assign) int denominator;//分子
@property(nonatomic,assign) int numerator;//分母
/**
 *  加法
 *
 *  @param anotherFraction 加法的第二个分数
 *
 *  @return 返回相加后的结果
 */
- (Fraction *)addFraction:(Fraction *)anotherFraction;

/**
 *  减法
 *
 *  @param anotherFraction 减法的第二个分数
 *
 *  @return 返回相减后的结果
 */
- (Fraction *)subtractFraction:(Fraction *)anotherFraction;

/**
 *  乘法
 *
 *  @param anotherFraction 乘法的第二个分数
 *
 *  @return 返回相乘后的结果
 */
- (Fraction *)multiplyFraction:(Fraction *)anotherFraction;

/**
 *  除法
 *
 *  @param anotherFraction 除法的第二个分数
 *
 *  @return 返回相除后的结果
 */
- (Fraction *)devideFraction:(Fraction *)anotherFraction;

/**
 *  输出结果
 */
- (void)print;

@end

Fraction.m

@implementation Fraction
@synthesize denominator = _denominator,numerator = _numerator;
/**
 *  加法
 *
 *  @param anotherFraction 加法的第二个分数
 *
 *  @return 返回相加后的结果
 */
- (Fraction *)addFraction:(Fraction *)anotherFraction
{
    
    int anotherNumerator = anotherFraction.numerator;//分子
    int anotherDenominator = anotherFraction.denominator;//分母
    
    int resultNumerator = _numerator * anotherDenominator + _denominator * anotherNumerator;
    int resultDenominator = _denominator * anotherDenominator;
    
    
    Fraction * newFraction = [[Fraction alloc] init];
    newFraction.numerator = resultNumerator;
    newFraction.denominator = resultDenominator;
    
    
    
    return newFraction;
}

/**
 *  减法
 *
 *  @param anotherFraction 减法的第二个分数
 *
 *  @return 返回相减后的结果
 */
- (Fraction *)subtractFraction:(Fraction *)anotherFraction
{
    
    int anotherNumerator = anotherFraction.numerator;
    int anotherDenominator = anotherFraction.denominator;
    
    int resultNumerator = _numerator * anotherDenominator - _denominator * anotherNumerator;
    int resultDenominator = _denominator * anotherDenominator;
    
    Fraction * newFraction = [[Fraction alloc] init];
    newFraction.numerator = resultNumerator;
    newFraction.denominator = resultDenominator;
    
    return newFraction;
}

/**
 *  乘法
 *
 *  @param anotherFraction 乘法的第二个分数
 *
 *  @return 返回相乘后的结果
 */
- (Fraction *)multiplyFraction:(Fraction *)anotherFraction
{
    
    int anotherNumerator = anotherFraction -> _numerator;
    int anotherDenominator = anotherFraction -> _denominator;
    
    int resultNumerator = _numerator * anotherNumerator;
    int resultDenominator = _denominator * anotherDenominator;
    
    Fraction * newFraction = [[Fraction alloc] init];
    newFraction.numerator = resultNumerator;
    newFraction.denominator = resultDenominator;
    
    return newFraction;
}

/**
 *  除法
 *
 *  @param anotherFraction 除法的第二个分数
 *
 *  @return 返回相除后的结果
 */
- (Fraction *)devideFraction:(Fraction *)anotherFraction
{
    
    int anotherNumerator = anotherFraction.numerator;
    int anotherDenominator = anotherFraction.denominator;
    
    if (anotherNumerator == 0) {
        
        NSLog(@"分母不能为0");
        return nil;
    }
    
    int resultNumerator = _numerator * anotherDenominator;
    int resultDenominator = _denominator * anotherNumerator;
    
    Fraction * newFraction = [[Fraction alloc] init];
    newFraction.numerator = resultNumerator;
    newFraction.denominator = resultDenominator;
    
    return newFraction;
}

/**
 *  输出结果
 */
- (void)print
{
    [self reduce]; //约分
    NSString * minusString = [self isNegative] ? @"-" : @""; //判断正负
    
    //如果分子能够被分母整除,输出结果为最终结果的整数。
    if (_numerator%_denominator == 0) {
        NSLog(@"%@%d",minusString,abs(_numerator)/abs(_denominator));
    }else{
        NSLog(@"%@%d/%d",minusString,abs(_numerator),abs(_denominator));
    }
}

/**
 *  约分
 */
- (void)reduce
{
    int u = _numerator;//分母
    int v = _denominator;//分子
    int temp;
    while (v != 0) {
        temp = u % v;
        u = v;
        v = temp;
        //        NSLog(@"u = %d,v = %d",u,v);
    }
    _numerator /= u;
    _denominator /= u;
    
}

/**
 *  判断是否是负数
 */
- (BOOL)isNegative
{
    _isNegative = (_numerator * _denominator < 0) ? YES : NO;
    return _isNegative;
}
@end

posted @ 2015-08-22 20:38  奎了个善  阅读(222)  评论(0编辑  收藏  举报