//
// CalculatorViewController.m
// Calculator
//
// Created by sskset on 5/28/14.
// Copyright (c) 2014 shanke. All rights reserved.
//
#import "CalculatorViewController.h"
@interface
CalculatorViewController ()
@property
(weak, nonatomic ) IBOutlet
UITextField *resultText;
@property
( nonatomic ) BOOL
isProcessing;
@property
( nonatomic ) NSMutableArray
*numberStack;
@property
( nonatomic ) NSMutableArray
*operandStack;
@end
@implementation
CalculatorViewController
-( NSMutableArray
*)operandStack
{
if (!_operandStack)
_operandStack = [[ NSMutableArray
alloc] init];
return
_operandStack;
}
-( NSMutableArray
*)numberStack
{
if (!_numberStack)
_numberStack = [[ NSMutableArray
alloc] init];
return
_numberStack;
}
- ( IBAction )operandPressed:(UIButton *)sender {
if ([ self
isAvailableToCalculate])
{
[ self
doCalculate];
}
else
{
[ self .numberStack addObject: self .resultText.text];
}
[ self .operandStack addObject:sender.titleLabel.text];
self .isProcessing = NO ;
}
- ( IBAction )numberPressed:(UIButton *)sender {
if
( self .isProcessing) {
self .resultText.text =
[ self .resultText.text stringByAppendingString:sender.titleLabel.text];
}
else {
self .resultText.text = sender.titleLabel.text;
self .isProcessing = YES ;
}
}
- ( IBAction )resetPressed:( id )sender {
self .isProcessing = NO ;
[ self .numberStack removeAllObjects];
[ self .operandStack removeAllObjects];
self .resultText.text = @ "0" ;
}
-( void )doCalculate
{
NSString
*operand = [ self .operandStack lastObject];
if (operand)
{
NSString
*outObject = [ self .numberStack lastObject];
int
outputInteger = outObject ? [outObject intValue] : 0;
[ self .numberStack removeLastObject];
int
resultInteger = 0;
if
([operand isEqualToString:@ "+" ])
{
resultInteger = [ self .resultText.text intValue] + outputInteger;
}
else
if ([operand isEqualToString:@ "-" ])
{
resultInteger = outputInteger - [ self .resultText.text intValue];
}
else
if ([operand isEqualToString:@ "*" ])
{
resultInteger = outputInteger * [ self .resultText.text intValue];
}
else
{
resultInteger = [ self .resultText.text intValue] == 0 ? 0 : outputInteger / [ self .resultText.text intValue];
}
[ self .operandStack removeLastObject];
NSString
*resultString = [ NSString
stringWithFormat:@ "%d" , resultInteger];
self .resultText.text = resultString;
[ self .numberStack addObject:resultString];
}
}
-( BOOL )isAvailableToCalculate
{
return
[ self .operandStack lastObject] != nil ;
}
- ( IBAction )enterPressed:( id )sender
{
[ self
doCalculate];
}
@end
|