Amazon.com Widgets Program 11.1 MathOps Category and Test Program
Welcome, Guest. Please login or register.
Did you miss your activation email?
June 19, 2013, 10:24:49 AM
Home Help Search chat Login Register   
News: Read this please.The Great Kangaroo Escape Looking for reviews of the 4th ed on Amazon!   Twitter:  @skochan
                     

+  Official Forum for Programming in Objective-C (the iPhone Programming Language) - Stephen Kochan
|-+  Old Stuff
| |-+  Program Examples
| | |-+  Chapter 11
| | | |-+  Program 11.1 MathOps Category and Test Program
Pages: [1]   Go Down
Print
Author Topic: Program 11.1 MathOps Category and Test Program  (Read 2397 times)
esc
Global Moderator
Full Member
*****
Posts: 230






« on: March 01, 2009, 02:15:38 AM »

Program 11.1 (main.m)
Code: (Objective-C)
#import "Fraction.h"

@interface Fraction (MathOps)
-(Fraction *) add: (Fraction *) f;
-(Fraction *) mul: (Fraction *) f;
-(Fraction *) sub: (Fraction *) f;
-(Fraction *) div: (Fraction *) f;
@end

@implementation Fraction (MathOps)
-(Fraction *) add: (Fraction *) f
{
// To add two fractions:
// a/b + c/d = ((a*d) + (b*c) / (b * d)

Fraction *result = [[Fraction alloc] init];
int resultNum, resultDenom;

resultNum = (numerator * f.denominator) + (denominator * f.numerator);
resultDenom = denominator * f.denominator;

[result setTo: resultNum over: resultDenom];
[result reduce];

return result;
}

-(Fraction *) sub: (Fraction *) f
{
// To sub two fractions:
// a/b - c/d = ((a*d) - (b*c)) / (b * d)

Fraction *result = [[Fraction alloc] init];
int resultNum, resultDenom;

resultNum = (numerator * f.denominator) - (denominator * f.numerator);
resultDenom = denominator * f.denominator;

[result setTo: resultNum over: resultDenom];
[result reduce];

return result;
}

-(Fraction *) mul: (Fraction *) f
{
Fraction *result = [[Fraction alloc] init];

[result setTo: numerator * f.numerator over: denominator * f.denominator];
[result reduce];

return result;
}

-(Fraction *) div: (Fraction *) f
{
Fraction *result = [[Fraction alloc] init];

[result setTo: numerator * f.denominator over: denominator * f.numerator];
[result reduce];

return result;
}

@end


int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

Fraction *a = [[Fraction alloc] init];
Fraction *b = [[Fraction alloc] init];
Fraction *result;

[a setTo: 1 over: 3];
[b setTo: 2 over: 5];

[a print];  NSLog (@"  +");  [b print];  NSLog (@"-----");
result = [a add: b];
[result print];
NSLog (@"\n");
[result release];

[a print];  NSLog (@"  -");  [b print];  NSLog (@"-----");
result = [a sub: b];
[result print];
NSLog (@"\n");
[result release];

[a print];  NSLog (@"  *");  [b print];  NSLog (@"-----");
result = [a mul: b];
[result print];
NSLog (@"\n");
[result release];

[a print];  NSLog (@"  /");  [b print];  NSLog (@"-----");
result = [a div: b];
[result print];
NSLog (@"\n");
[result release];
[a release];
[b release];
   
    [pool drain];
    return 0;
}

Fraction.h
Code: (Objective-C)
#import <Foundation/Foundation.h>
#import <stdio.h>

// Define the Fraction class

@interface Fraction : NSObject {
int numerator;
int denominator;
}

@property int numerator, denominator;
-(void) setTo: (int) n over: (int) d;
-(void) reduce;
-(double) convertToNum;
-(void) print;

@end

Fraction.m
Code: (Objective-C)
#import "Fraction.h"

@implementation Fraction

@synthesize numerator, denominator;

-(void) print
{
if ( denominator < 0 )
NSLog (@"-%i/%i", numerator, -denominator);
else
NSLog (@"%i/%i", numerator, denominator);
}

-(double) convertToNum
{
if (denominator != 0)
return (double) numerator / denominator;
else
return 1.0;
}

-(void) setTo: (int) n over: (int) d
{
numerator = n;
denominator = d;
}

-(void) reduce
{
int u = numerator;
int v = denominator;
int temp;

while (v != 0) {
temp = u % v;
u = v;
v = temp;
}

numerator /= u;
denominator /= u;
}
@end
Logged
Goose
Newbie
*
Posts: 4






« Reply #1 on: December 29, 2009, 05:45:02 AM »

Program 11.1 (main.m)
Code: (Objective-C)
#import "Fraction.h"

@interface Fraction (MathOps)
-(Fraction *) add: (Fraction *) f;
-(Fraction *) mul: (Fraction *) f;
-(Fraction *) sub: (Fraction *) f;
-(Fraction *) div: (Fraction *) f;
@end

@implementation Fraction (MathOps)
-(Fraction *) add: (Fraction *) f
{
// To add two fractions:
// a/b + c/d = ((a*d) + (b*c) / (b * d)

Fraction *result = [[Fraction alloc] init];
int resultNum, resultDenom;

resultNum = (numerator * f.denominator) + (denominator * f.numerator);
resultDenom = denominator * f.denominator;

[result setTo: resultNum over: resultDenom];
[result reduce];

return result;
}

-(Fraction *) sub: (Fraction *) f
{
// To sub two fractions:
// a/b - c/d = ((a*d) - (b*c)) / (b * d)

Fraction *result = [[Fraction alloc] init];
int resultNum, resultDenom;

resultNum = (numerator * f.denominator) - (denominator * f.numerator);
resultDenom = denominator * f.denominator;

[result setTo: resultNum over: resultDenom];
[result reduce];

return result;
}

-(Fraction *) mul: (Fraction *) f
{
Fraction *result = [[Fraction alloc] init];

[result setTo: numerator * f.numerator over: denominator * f.denominator];
[result reduce];

return result;
}

-(Fraction *) div: (Fraction *) f
{
Fraction *result = [[Fraction alloc] init];

[result setTo: numerator * f.denominator over: denominator * f.numerator];
[result reduce];

return result;
}

@end




Why would you put this in the main.m section vs. Fraction.m or Fraction.h?  It just seem out of place there.  What is the best way to organize categories within your program?
Logged
skochan
Administrator
Hero Member
*****
Posts: 3109







« Reply #2 on: December 29, 2009, 02:02:18 PM »

You can put the category in separate .h and .m files, much like adding a new class.  For example, you might put the category definition into files called FractionMathOps.h and FractionMathops.m and then import FractionMathOps.h into any file that wants to use the methods defined in the category (such as main.m).

Cheers,

Steve Kochan
Logged
Goose
Newbie
*
Posts: 4






« Reply #3 on: December 30, 2009, 12:20:16 PM »

Thanks
Logged
Pages: [1]   Go Up
Print
Jump to:  



Login with username, password and session length

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC Valid XHTML 1.0! Valid CSS!
Entire forum contents (c) 2009 classroomM.com. All rights reserved.