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

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

(0)

相关推荐

  • 基于AngularJS实现iOS8自带的计算器

    前言 首先创建angularjs的基本项目就不说了,最好是利用yeoman这个脚手架工具直接生成,如果没有该环境的,当然也可以通过自行下载angularjs的文件引入项目. 实例详解 main.js是项目的主要js文件,所有的js都写在这个文件中,初始化之后,该文件的js代码如下 angular .module('calculatorApp', [ 'ngAnimate', 'ngCookies', 'ngResource', 'ngRoute', 'ngSanitize', 'ngTouch'

  • IO实现计算器功能

    本文实例为大家分享了IO实现计算器功能的具体代码,供大家参考,具体内容如下 代码: // // ViewController.m // Fraction_Calculator // // Created by 鲁军 on 2021/4/26. // #import "ViewController.h" #import "Calculator.h" @interface ViewController () @property(nonatomic,strong)IBOu

  • android studio实现简单的计算器功能

    本文实例为大家分享了android studio实现计算器的具体代码,供大家参考,具体内容如下 先来个效果图: 功能: 满足加减乘除四则运算规则,有回退.清除功能. 下面的代码只是完成基本功能,若添加背景图先看看下面的方法:Android Studio App设置背景图片 1.本地准备好图片,复制它,粘贴进mipmap(drawable)文件夹. 2.在activity_main.xml里添加下面代码,注意添加位置. 3.完成,效果图: content_main.xml文件(页面布局,conte

  • C#实现的简单整数四则运算计算器功能示例

    本文实例讲述了C#实现的简单整数四则运算计算器功能.分享给大家供大家参考,具体如下: 运行效果图如下: 具体代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace 计算器 { public pa

  • Vue.js实现价格计算器功能

    本文实例为大家分享了Vue.js实现价格计算器功能的具体代码,供大家参考,具体内容如下 实现效果: 实现代码及注释: <!DOCTYPE html> <html> <head> <title>价格计算器</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial

  • JS实现的简单四则运算计算器功能示例

    本文实例讲述了JS实现的简单四则运算计算器功能.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: <!DOCTYPE html> <html> <meta name="content-type" content="text/html; charset=UTF-8"> <head> <title>www.jb51.net 计算器 Calculator</title> <!

  • PHP实现的简单在线计算器功能示例

    本文实例讲述了PHP实现的简单在线计算器功能.分享给大家供大家参考,具体如下: <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf8"> <title>简单的计算器(www.jb51.net)</title> </head> <body> <?php //如果用户单击了计算按

  • PHP基于堆栈实现的高级计算器功能示例

    本文实例讲述了PHP基于堆栈实现的高级计算器功能.分享给大家供大家参考,具体如下: 当我们得到一个字符串运算式该如何去得出它的运算结果呢? 这时候我们就能使用堆栈的算法很巧妙的解决这个问题. 思路是这样的:(我们利用php函数substr循环去截取这个字符串运算式,依次取出这个字符串的值[我们得从第一个字符开始截取],我们将开始截取位置设为一个循环增长的变量,初始化为[$index=0]),同时还需要创建两个栈,一个专门存放数字[$numStack],一个存放运算符[$operStack],我们

  • Python PyQt5实现的简易计算器功能示例

    本文实例讲述了Python PyQt5实现的简易计算器功能.分享给大家供大家参考,具体如下: 这里剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它 [知识点] 1.利用循环添加按钮部件,及给每个按钮设置信号/槽 2.给按钮设置固定大小:button.setFixedSize(QtCore.QSize(60,30)) 3.取事件的的发送者(此例为各个按钮)的文本: self.sender().text() [效果图] [源代码] import sys from PyQt

  • Python实现的科学计算器功能示例

    本文实例讲述了Python实现的科学计算器功能.分享给大家供大家参考,具体如下: import wx import re import math # begin wxGlade: extracode # end wxGlade ans=0 ts="" class MyFrame(wx.Frame): def __init__(self, *args, **kwds): # begin wxGlade: MyFrame.__init__ kwds["style"] =

  • C#实现简单的计算器功能完整实例

    本文实例讲述了C#实现简单的计算器功能.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; usi

随机推荐