IO实现计算器功能
作者:JohnsonSwift
这篇文章主要为大家详细介绍了IOS基础之计算器的编写,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了IO实现计算器功能的具体代码,供大家参考,具体内容如下
代码:
// // ViewController.m // Fraction_Calculator // // Created by 鲁军 on 2021/4/26. // #import "ViewController.h" #import "Calculator.h" @interface ViewController () @property(nonatomic,strong)IBOutlet UILabel *display; -(void)processDigit:(int) digit; -(void)processOp:(char)theOp; -(void)storeFracPart; //数字键 -(IBAction)clickDigit:(UIButton*)sender; // 算术操作键 -(IBAction) clickPlus; -(IBAction) clickMinus; -(IBAction) clickMultiply; -(IBAction) clickDivde; //Misc键 -(IBAction) clickOver; -(IBAction) clickEquals; -(IBAction) clickClear; @end @implementation ViewController { char op; int currentNumber; BOOL firstOperand,isNumerator; Calculator *myCalculator; NSMutableString *displayString; } - (void)viewDidLoad { [super viewDidLoad]; self.display.text=@""; firstOperand = YES; isNumerator = YES; displayString = [NSMutableString stringWithCapacity: 40]; myCalculator = [[Calculator alloc] init]; } -(void) processDigit:(int) digit{ currentNumber = currentNumber * 10 + digit; [displayString appendString:[NSString stringWithFormat:@"%i",digit]]; self.display.text = displayString; } -(IBAction)clickDigit:(UIButton *)sender{ int digit = (int)sender.tag; [self processDigit:digit]; } -(void)processOp:(char)theOp{ NSString * opStr; op = theOp; switch (theOp) { case '+': opStr = @" + "; break; case '-': opStr = @" - "; break; case '*': opStr = @" *"; break; case '/': opStr = @" / "; break; } [self storeFracPart]; firstOperand = NO; isNumerator = YES; [displayString appendString:opStr]; self.display.text = displayString; } -(void) storeFracPart{ if(firstOperand){ if(isNumerator){ myCalculator.operand1.numerator = currentNumber; myCalculator.operand1.denominator = 1; //例如 3 * 4/5 = } else { myCalculator.operand1.denominator = currentNumber; } } else if (isNumerator) { myCalculator.operand2.numerator = currentNumber; myCalculator.operand2.denominator = 1; }else{ myCalculator.operand1.denominator = currentNumber; firstOperand = YES; } currentNumber = 0; } -(IBAction)clickOver{ [self storeFracPart]; isNumerator = NO; [displayString appendString:@"/"]; self.display.text = displayString; } //算术操作键 -(IBAction)clickPlus{ [self processOp:'+']; } - (void)clickMinus{ [self processOp:'-']; } - (void)clickMultiply{ [self processOp:'*']; } - (void)clickDivde{ [self processOp:'/']; } //Misc 键 - (void)clickEquals{ if(firstOperand==NO){ [self storeFracPart]; [myCalculator performOperation:op]; [displayString appendString:@" = "]; [displayString appendString:[myCalculator.accumulator convertToString]]; self.display.text = displayString; currentNumber = 0; isNumerator = YES; firstOperand = YES; [displayString setString:@""]; } } - (void)clickClear{ isNumerator = YES; firstOperand = YES; currentNumber = 0; [myCalculator clear]; [displayString setString:@""]; self.display.text = displayString; } @end
// // Calculator.h // Fraction_Calculator // // Created by 鲁军 on 2021/5/9. // #import <Foundation/Foundation.h> #import "Fraction.h" NS_ASSUME_NONNULL_BEGIN @interface Calculator : NSObject @property(nonatomic,strong)Fraction *operand1,*operand2,*accumulator; -(Fraction *)performOperation:(char)op; -(void)clear; @end NS_ASSUME_NONNULL_END
// // Calculator.m // Fraction_Calculator // // Created by 鲁军 on 2021/5/9. // #import "Calculator.h" @implementation Calculator - (instancetype)init { self = [super init]; if (self) { _operand1 = [[Fraction alloc] init]; _operand2 = [[Fraction alloc] init]; _accumulator = [[Fraction alloc] init]; } return self; } - (void)clear{ _accumulator.numerator = 0; _accumulator.denominator = 0; } - (Fraction *)performOperation:(char)op{ Fraction *result; switch (op) { case '+': result = [_operand1 add:_operand2]; break; case '-': result = [_operand1 subtract:_operand2]; break; case '*': result = [_operand1 multiply:_operand2]; break; case '/': result = [_operand1 divide:_operand2]; break; } _accumulator.numerator = result.numerator; _accumulator.denominator = result.denominator; return _accumulator; } @end
// // Fraction.h // Fraction_Calculator // // Created by 鲁军 on 2021/5/9. // #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface Fraction : NSObject @property int numerator,denominator; -(void) print; -(void) setTo:(int) n over:(int) d; -(Fraction *) add:(Fraction *)f; -(Fraction *) subtract:(Fraction *)f; -(Fraction *) multiply:(Fraction *)f; -(Fraction *) divide:(Fraction *)f; -(void)reduce; -(double)convertToNum; -(NSString*)convertToString; @end NS_ASSUME_NONNULL_END
// // Fraction.m // Fraction_Calculator // // Created by 鲁军 on 2021/5/9. // #import "Fraction.h" @implementation Fraction - (void)setTo:(int)n over:(int)d{ self.numerator = n; _denominator = d; } - (void)print{ NSLog(@"%i/%i",_numerator,_denominator); } - (double)convertToNum{ if(_denominator!=0) return (double) _numerator / _denominator; else return NAN; } - (NSString *)convertToString{ if(_numerator==_denominator) if(_numerator==0) return @"0"; else return @"1"; else if (_denominator==1) return [NSString stringWithFormat:@"%i",_numerator]; else return [NSString stringWithFormat:@"%i/%i",_numerator,_denominator]; } //添加一个分数到消息的接收器 - (Fraction *)add:(Fraction *)f{ //将两个分数相加 Fraction *result = [[Fraction alloc] init]; result.numerator = _numerator *f.denominator + _denominator * f.numerator; result.denominator = _denominator*f.denominator; [result reduce]; return result; } - (Fraction *)subtract:(Fraction *)f{ Fraction *result = [[Fraction alloc] init]; result.numerator = _numerator*f.denominator - _denominator*f.numerator; result.denominator = _denominator*f.denominator; [result reduce]; return result; } - (Fraction *)multiply:(Fraction *)f{ Fraction *result = [[Fraction alloc] init]; result.numerator = _numerator*f.numerator; result.denominator = _denominator *f.denominator; [result reduce]; return result; } - (Fraction *)divide:(Fraction *)f{ Fraction *result = [[Fraction alloc] init]; result.numerator = _numerator*f.denominator; result.denominator = _denominator *f.numerator; [result reduce]; return result; } - (void)reduce{ int u = _numerator; int v = _denominator; int temp; if(u==0) return; else if (u<0) u = -u; while(v!=0){ temp = u%v; u=v; v=temp; } _numerator/=u; _denominator/=u; } @end
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。