1.
1 #import "Fraction.h" 2 3 @interface Fraction (MathOps) 4 5 - (Fraction *) add: (Fraction *) f; 6 7 - (Fraction *) mul: (Fraction *) f; 8 9 - (Fraction *) sub: (Fraction *) f; 10 11 - (Fraction *) div: (Fraction *) f; 12 13 - (Fraction *) invert; //倒数 14 15 @end
1 #import "Fraction+MathOps.h" 2 3 @implementation Fraction (MathOps) 4 5 - (Fraction *) add: (Fraction *) f 6 { 7 Fraction *result = [[Fraction alloc] init]; 8 9 result.numerator = self.numerator * f.denominator + self.denominator * f.numerator; 10 result.denominator = self.denominator * f.denominator; 11 12 [result reduce]; 13 return result; 14 15 } 16 17 - (Fraction *) mul: (Fraction *) f 18 { 19 Fraction *result = [[Fraction alloc] init]; 20 21 result.numerator = self.numerator * f.denominator - self.denominator * f.numerator; 22 result.denominator = self.denominator * f.denominator; 23 24 [result reduce]; 25 return result; 26 27 } 28 29 - (Fraction *) sub: (Fraction *) f 30 { 31 Fraction *result = [[Fraction alloc] init]; 32 33 result.numerator = self.numerator *f.numerator; 34 result.denominator = self.denominator *f.denominator; 35 36 [result reduce]; 37 return result; 38 39 } 40 41 - (Fraction *) div: (Fraction *) f 42 { 43 Fraction *result = [[Fraction alloc] init]; 44 45 result.numerator = self.numerator *f.denominator; 46 result.denominator = self.denominator *f.numerator; 47 48 [result reduce]; 49 return result; 50 } 51 52 - (Fraction *) invert 53 { 54 Fraction *result = [[Fraction alloc] init]; 55 56 result.numerator = self.denominator; 57 result.denominator = self.numerator; 58 59 [result reduce]; 60 return result; 61 } 62 63 64 @end
1 Fraction *f1 = [[Fraction alloc] init]; 2 Fraction *f2 = [[Fraction alloc] init]; 3 Fraction *result; 4 5 [f1 setTo:1 over:5]; 6 [f2 setTo:1 over:6]; 7 result = [f1 add: f2]; 8 [[result invert] print]; 9
2.
1 #import "Fraction.h" 2 3 @interface Fraction (Comparison) 4 5 - (BOOL) isEqualTo: (Fraction *) f; 6 7 - (int) compare: (Fraction *) f; 8 9 @end
#import "Fraction+Comparison.h" @implementation Fraction (Comparison) - (BOOL) isEqualTo: (Fraction *) f { if (self.numerator * f.denominator == f.numerator * self.denominator) { return YES; }else return NO; } - (int) compare: (Fraction *) f { if (self.numerator * f.denominator == f.numerator * self.denominator) { return 0; }else if (self.numerator * f.denominator > f.numerator * self.denominator) { return 1; }else return -1; } @end
1 Fraction *f1 = [[Fraction alloc] init]; 2 Fraction *f2 = [[Fraction alloc] init]; 3 Fraction *result; 4 5 [f1 setTo: 3 over: 7]; 6 [f2 setTo: 1 over: 2]; 7 result = [f1 add: f2]; 8 [[result invert] print]; 9 10 if ([f1 isEqualTo: f2] == YES) { 11 NSLog(@"两个分数相等"); 12 }else 13 NSLog(@"两个分数不相等"); 14 15 if ([f1 compare: f2] == 0) { 16 NSLog(@"%d/%d 等于 %d/%d", f1.numerator, f1.denominator,f2.numerator,f2.denominator); 17 }else if ([f1 compare:f2] == 1){ 18 NSLog(@"%d/%d 大于 %d/%d", f1.numerator, f1.denominator,f2.numerator,f2.denominator); 19 }else 20 NSLog(@"%d/%d 小于 %d/%d", f1.numerator, f1.denominator,f2.numerator,f2.denominator); 21 22
3.
1 @implementation Fraction (NSComparisonMethods) 2 3 - (BOOL) isEqualTo:(id)object 4 { 5 if ( (self.numerator * [object denominator] ) == ([object numerator] * self.denominator )) { 6 return YES; 7 }else 8 return NO; 9 } 10 11 - (BOOL) isLessThanOrEqualTo:(id)object 12 { 13 if ( (self.numerator * [object denominator]) <= ([object numerator] * self.denominator )) { 14 return YES; 15 }else 16 return NO; 17 } 18 19 - (BOOL) isLessThan:(id)object 20 { 21 if ( (self.numerator * [object denominator]) < ([object numerator] * self.denominator )) { 22 return YES; 23 }else 24 return NO; 25 } 26 27 - (BOOL) isGreaterThanOrEqualTo:(id)object 28 { 29 if ( (self.numerator * [object denominator]) >= ([object numerator] * self.denominator )) { 30 return YES; 31 }else 32 return NO; 33 } 34 35 - (BOOL) isGreaterThan:(id)object 36 { 37 if ( (self.numerator * [object denominator]) < ([object numerator] * self.denominator )) { 38 return YES; 39 }else 40 return NO; 41 } 42 43 - (BOOL) isNotEqualTo:(id)object 44 { 45 if ( (self.numerator * [object denominator]) != ([object numerator] * self.denominator )) { 46 return YES; 47 }else 48 return NO; 49 } 50 51 52 53 @end
//测试方法同上题
4.
1 #import "Calculator+Trig.h" 2 3 @implementation Calculator (Trig) 4 5 - (double) sin 6 { 7 return sin(self.accumulator); 8 } 9 10 - (double) cos 11 { 12 return cos(self.accumulator); 13 } 14 15 - (double) tan 16 { 17 return tan(self.accumulator); 18 } 19 20 @end
5.
1 @interface Square : NSObject 2 3 - (id) init; 4 - (id) initWithSide: (int) s; 5 - (void) setSide: (int) s; 6 - (int) side; 7 - (int) area; 8 - (int) perimeter; 9 10 @end
#import "Square.h" #import "Rectangle.h" @implementation Square { Rectangle *rect; } - (id) init { return [self initWithSide:0]; } - (id) initWithSide: (int) s { self = [super init]; if (self) { rect = [[Rectangle alloc] initWithWidth: s andHeight: s]; } return self; } - (void) setSide: (int) s { [rect setWidth: s andHeight: s]; } - (int) side { return rect.width; //四边相等 } - (int) area { return rect.area; } - (int) perimeter { return rect.perimeter; } @end
Square *newSqu = [[Square alloc] initWithSide:5]; NSLog(@"side is %d", newSqu.side); NSLog(@"area is %d", newSqu.area); NSLog(@"per is %d", newSqu.perimeter); newSqu.side = 6; NSLog(@"side is %d", newSqu.side); NSLog(@"area is %d", newSqu.area); NSLog(@"per is %d", newSqu.perimeter);
时间: 2024-10-30 11:48:23