5.20 一个混合算法与面向对象思想的例子
2015-05-20 20:04
288 查看
1,被动申明
2,方法的封装
3,方法的调用
2,方法的封装
3,方法的调用
/ // Fraction.h // 5.19_0C_property_HW // // Created by rimi on 15/5/19. // Copyright (c) 2015年 rectinajh. All rights reserved. // #import <Foundation/Foundation.h> //枚举类型,限制算法的加减乘除 typedef enum _Operation { Plus = -1, Substration , Multiplocation , Dividing , }Operation; @interface Fraction : NSObject @property (assign,nonatomic)NSInteger molecular; //分子 @property (assign,nonatomic)NSInteger denominator;//分母 //- (instancetype)initWithmolecular :(NSInteger)molecular1 // andDenominator:(NSInteger)denominator1; // // //- (void)print; //显示分数 //- (void)add : (Fraction *) Frac;//分数的相加 //- (Fraction *)substrate :(Fraction *)Frac;//分数的减法 //- (Fraction *)multiply :(Fraction *)Frac;//乘法 //- (Fraction *)divide :(Fraction *)Frac;//除法 - (Fraction *)commonDenominator:(Fraction *)other; - (Fraction *) plus:(Fraction *)other; - (Fraction *)substration:(Fraction *)other; - (Fraction *)multiplocation:(Fraction *)other; - (Fraction *)dividing:(Fraction *)other; - (Fraction *)calculationWithFraction:(Fraction *)other Operation:(Operation)operation; @end
// // Fraction.m // 5.19_0C_property_HW // // Created by rimi on 15/5/19. // Copyright (c) 2015年 rectinajh. All rights reserved. // #import "Fraction.h" @implementation Fraction /***********************************************************************/ //通分:将2个分数分母变成一样,取最小公倍数 - (Fraction *)commonDenominator:(Fraction *)other { Fraction *result = [[Fraction alloc] init]; //求最小公倍数的分母 for (NSInteger i = self.denominator ;i <= self.denominator*other.denominator; i ++) { if (i % self.denominator == 0 && i % other.denominator == 0) { result.denominator = i; //通分结果的分母设置为这个最小公倍数i break; } } result.molecular = self.molecular * result.denominator/self.denominator; return result; } //约分 - (void)simpleFraction { //求分子分母的最大公约数,然后同时除 for (NSInteger i = 1 ; i < self.molecular; i ++) { if (self.molecular % i == 0 && self.denominator % i == 0) { //分子分母同时除最大公约数 self.molecular /= i; self.denominator /= i; break; } } } //加法方法 - (Fraction *) plus:(Fraction *)other { Fraction *result = [[Fraction alloc] init]; //将self与other通分,将2个分母变成一样,取最小公倍数 Fraction * selfResult = [self commonDenominator:other]; Fraction * otherResult = [other commonDenominator:self]; result.denominator = selfResult.denominator;//结果分母,等于通分后的分数的分母 result.molecular = selfResult.molecular + otherResult.molecular;//结果的分子,等于两个分子想家 [result simpleFraction];//约分调用 return result; } //减法方法 - (Fraction *)substration:(Fraction *)other { Fraction *result = [[Fraction alloc] init]; //将self与other通分,将2个分母变成一样,取最小公倍数 Fraction * selfResult = [self commonDenominator:other]; Fraction * otherResult = [other commonDenominator:self]; result.denominator = selfResult.denominator;//结果分母,等于通分后的分数的分母 result.molecular = selfResult.molecular - otherResult.molecular;//结果的分子,等于两个分子想家 [result simpleFraction];//约分调用 return result; } //乘法方法 - (Fraction *)multiplocation:(Fraction *)other { Fraction *result = [[Fraction alloc] init]; //将self与other通分,将2个分母变成一样,取最小公倍数 Fraction * selfResult = [self commonDenominator:other]; Fraction * otherResult = [other commonDenominator:self]; result.denominator = selfResult.denominator * otherResult.denominator; result.molecular = selfResult.molecular * otherResult.molecular; [result simpleFraction]; return result; } //除法方法 - (Fraction *)dividing:(Fraction *)other { Fraction *result = [[Fraction alloc] init]; //将self与other通分,将2个分母变成一样,取最小公倍数 Fraction * selfResult = [self commonDenominator:other]; Fraction * otherResult = [other commonDenominator:self]; result.denominator = selfResult.denominator * otherResult.molecular; result.molecular = selfResult.molecular * otherResult.denominator; [result simpleFraction]; return result; } - (NSString *)description { return [NSString stringWithFormat:@"%ld/%ld",self.molecular,self.denominator]; //被动调用,无需在主函数 } //封装 将4个方法封装到一起,保留相同部分 - (Fraction *)calculationWithFraction:(Fraction *)other Operation:(Operation)operation { Fraction *result = [[Fraction alloc] init]; //将self与other通分,将2个分母变成一样,取最小公倍数 Fraction * selfResult = [self commonDenominator:other]; Fraction * otherResult = [other commonDenominator:self]; switch (operation ) { case Plus: //完成加法运算 result.denominator = selfResult.denominator;//结果分母,等于通分后的分数的分母 result.molecular = selfResult.molecular + otherResult.molecular;//结果的分子,等于两个分子想家 break; case Substration: result.denominator = selfResult.denominator;//结果分母,等于通分后的分数的分母 result.molecular = selfResult.molecular - otherResult.molecular;//结果的分子,等于两个分子想家 break; case Multiplocation: result.denominator = selfResult.denominator * otherResult.denominator; result.molecular = selfResult.molecular * otherResult.molecular; break; case Dividing: result.denominator = selfResult.denominator * otherResult.molecular; result.molecular = selfResult.molecular * otherResult.denominator; break; default: break; } [result simpleFraction]; return result; } //完成减法 乘法 /***************************************************************************/ @end
/***************************************************************************/ // 2)分数之间的约分问题; // 3)属性及内存管理问题; // 4)方法的调用及代码规范; //创建并实例化2个分数 // 2、建立一个分数类,实现分数之间的加、减、乘、除操作(分母不能为0) // 注:1)分数之间的通分问题; Fraction *f1 = [[Fraction alloc] init]; f1.denominator = 18; f1.molecular = 1; Fraction *f2 = [[Fraction alloc] init]; f2.denominator = 6; f2.molecular = 1; // Fraction *f3 = [f1 plus:f2]; // Fraction *f4 = [f1 substration:f2]; // Fraction *f5 = [f1 multiplocation:f2]; // Fraction *f6 = [f1 dividing:f2]; Fraction *f7 = [f1 calculationWithFraction:f2 Operation:Plus]; Fraction *f8 = [f1 calculationWithFraction:f2 Operation:Substration]; Fraction *f9 = [f1 calculationWithFraction:f2 Operation:Multiplocation]; Fraction *f10 = [f1 calculationWithFraction:f2 Operation:Dividing]; NSLog(@"%@ + %@ =%@",f1,f2,f7); NSLog(@"%@ + %@ =%@",f1,f2,f8); NSLog(@"%@ + %@ =%@",f1,f2,f9); NSLog(@"%@ + %@ =%@",f1,f2,f10); //NSLog(@"该分数相加为:%ld/%ld,该分数相减为:%ld/%ld,该分数相乘为:%ld/%ld,该分数相除为:%ld/%ld",f3.molecular,f3.denominator,f4.molecular,f4.denominator,f5.molecular,f5.denominator,f6.molecular,f6.denominator); /****************************************************************************/
相关文章推荐
- 一个例子体现JAVA中的面向对象思想,接口(抽象类)的用处
- 做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
- 一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
- 运用JAVA面向对象思想写一个区域管理程序
- 面向对象分析和设计(OOA/D) --- 一个例子
- PHP面向对象之旅:一个接口实例,很好的例子
- 【python学习】多线程 与 面向对象 结合的一个经典例子
- 简单的面向对象思想,写一个传奇人物的属性
- java面向对象-异常处理的一个例子
- 由一个问题看JAVA面向对象思想(一)
- [Java实现]通过一个Java小程序(吃苹果)深入理解面向对象思想
- 用Java面向对象思想实现一个微博的功能(未完)
- PHP面向对象之旅:一个接口实例,很好的例子
- .使用面向对象思想,输出员工信息并计算员工的工资。实现过程为:定义一个部门(Department)类,该类有部门编号(Id)、部门名称(Name)属性; 再定义一个员工(Employee)类,该类的属
- 一个简单的例子阐述Go的对象复用思想
- 【设计分享】一个面向对象思想的perl编程实例
- c#,用面向对象思想写一个计算器
- OC基础-面向对象思想08
- 面向对象思想
- java面向对象之设计思想