IO实现计算器功能

【字号: 日期:2022-06-13浏览:46作者:雯心

本文实例为大家分享了IO实现计算器功能的具体代码,供大家参考,具体内容如下

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;@endNS_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;@endNS_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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持乐呵呵网。

相关文章: