Skip to content

Instantly share code, notes, and snippets.

@b-adams
Created January 30, 2013 02:09
Show Gist options
  • Save b-adams/4669982 to your computer and use it in GitHub Desktop.
Save b-adams/4669982 to your computer and use it in GitHub Desktop.
Calculator (just entering numbers) class for Wells CS132
#import <Foundation/Foundation.h>
FOUNDATION_EXPORT const char CLEAR_SCREEN_KEY; //The FOUNDATION_EXPORT part makes this truly global - available to all other files.
@interface Calculator : NSObject
@property (assign) int numberOnScreen;
-(void) clearScreen;
-(void) pressKey:(char) input;
@end
#import "Calculator.h"
const char CLEAR_SCREEN_KEY = 'x';
@implementation Calculator
@synthesize numberOnScreen;
- (id)init
{
self = [super init];
if (self) {
[self clearScreen];
}
return self;
}
-(NSString*) description
{
return [NSString stringWithFormat:@"Calculator with %d on screen.", [self numberOnScreen]];
}
-(void) clearScreen
{
NSLog(@"Clearing screen of <%@> at memory location [%p] upon receiving message {%@}",
self, self, NSStringFromSelector(_cmd));
[self setNumberOnScreen:0];
}
-(void) pressKey:(char)input
{
int oldNumberOnScreen;
int newNumberOnScreen;
int numberEntered;
if(input == CLEAR_SCREEN_KEY)
{ //Clear the screen
[self clearScreen];
}
else
{ //Must be a digit
//First, convert user input character into a number
if(input < '0' || input > '9')
numberEntered=NAN; //Not a digit!
else
numberEntered = (input - '0'); //Tricksy conversion
//Second, update number on screen
oldNumberOnScreen = [self numberOnScreen];
newNumberOnScreen = 10*oldNumberOnScreen + numberEntered;
[self setNumberOnScreen:newNumberOnScreen];
}
}
@end
#import <Foundation/Foundation.h>
#import "Calculator.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
char userInput;
Calculator* casioCFX9850g = nil;
casioCFX9850g = [[Calculator alloc] init];
while(YES)
{
printf("Please press a key:");
scanf(" %c", &userInput);
[casioCFX9850g pressKey:userInput];
printf("You pressed %c. The number on screen is now %d\n",
userInput, [casioCFX9850g numberOnScreen]);
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment