#import <Foundation/Foundation.h>
//interface section
@interface Calculator : NSObject
{
double accumulator;
}
-(void) setAccumulator: (double) value;
-(void) clear;
-(double) accumulator;
-(void) endOfCalc;
-(void) add: (double) value;
-(void) subtract: (double) value;
-(void) multiply: (double) value;
-(void) divide: (double) value;
@end
//implementation section
@implementation Calculator
-(void) setAccumulator: (double) value
{
accumulator = value;
}
-(void) clear
{
accumulator = 0;
}
-(double) accumulator
{
return accumulator;
}
-(void) endOfCalc
{
NSLog(@"Job Done! Final answer is = %f", accumulator);
}
-(void) add: (double) value
{
accumulator += value;
}
-(void) subtract: (double) value
{
accumulator -= value;
}
-(void) multiply: (double) value
{
accumulator *= value;
}
-(void) divide: (double) value
{
accumulator /= value;
}
@end
//program section
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
double value;
char op;
Calculator *deskCalc =[[Calculator alloc] init];
do
{
NSLog (@"Type value:");
scanf ("%lf", &value);
NSLog (@"Type operator:");
scanf (" %c", &op);
switch (op)
{
case 'S':
[deskCalc setAccumulator: value];
break;
case '+':
[deskCalc add: value];
break;
case '-':
[deskCalc subtract: value];
break;
case '*':
[deskCalc multiply: value];
break;
case '/':
if (value !=0)
{
[deskCalc divide: value];
}
else {
NSLog(@"DO NOT DIVIDE BY ZERO!! COME ON!!");
}
break;
case 'E':
[deskCalc endOfCalc];
break;
default:
NSLog(@"Unknown Operator");
break;
}
}
while (op !='E');
[pool drain];
return 0;
}