最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

IO實現(xiàn)計算器功能

 更新時間:2021年05月12日 14:35:39   作者:JohnsonSwift  
這篇文章主要為大家詳細介紹了IOS基礎(chǔ)之計算器的編寫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了IO實現(xiàn)計算器功能的具體代碼,供大家參考,具體內(nèi)容如下

代碼:

//
//  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;
//數(shù)字鍵
-(IBAction)clickDigit:(UIButton*)sender;
// 算術(shù)操作鍵
-(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;
}
//算術(shù)操作鍵
-(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];
}
//添加一個分數(shù)到消息的接收器
- (Fraction *)add:(Fraction *)f{
    //將兩個分數(shù)相加
    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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IOS 指紋識別兩種方式詳解及實例

    IOS 指紋識別兩種方式詳解及實例

    這篇文章主要介紹了IOS 指紋識別兩種方式詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Flutter之TabBarView組件項目實戰(zhàn)示例

    Flutter之TabBarView組件項目實戰(zhàn)示例

    這篇文章主要為大家介紹了Flutter之TabBarView組件項目實戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • iOS 高德地圖仿微信發(fā)送實時位置

    iOS 高德地圖仿微信發(fā)送實時位置

    這篇文章主要介紹了iOS 高德地圖仿微信發(fā)送實時位置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • iOS開發(fā)中指紋識別簡單介紹

    iOS開發(fā)中指紋識別簡單介紹

    指紋識別是在iOS8.0以后才推出的,所以我們?nèi)绻氚阎讣y集成到我們的APP當(dāng)中,我們首先就要在代碼中判斷iOS版本。接下來通過本文給大家分享iOS開發(fā)中指紋識別簡單介紹,需要的朋友參考下吧
    2017-11-11
  • IOS實現(xiàn)微信授權(quán)登錄功能

    IOS實現(xiàn)微信授權(quán)登錄功能

    微信是一個在開發(fā)中經(jīng)常會使用到的平臺,比如微信登錄、授權(quán)、支付、分享。今天我們來看看如何在自己的應(yīng)用里面集成微信授權(quán),需要的朋友參考下吧
    2017-03-03
  • iOS 委托與文本輸入(內(nèi)容根據(jù)iOS編程編寫)

    iOS 委托與文本輸入(內(nèi)容根據(jù)iOS編程編寫)

    這篇文章主要介紹了iOS 委托與文本輸入(內(nèi)容根據(jù)iOS編程編寫) 的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • iOS應(yīng)用程序之間的幾種跳轉(zhuǎn)情況詳解

    iOS應(yīng)用程序之間的幾種跳轉(zhuǎn)情況詳解

    這篇文章給大家詳細介紹了iOS應(yīng)用程序之間跳轉(zhuǎn)的幾種情況,包括跳轉(zhuǎn)到另一個程序的主界面、跳轉(zhuǎn)到另一個程序的指定界面以及如何從目標(biāo)程序的非主頁界面回到當(dāng)前(跳轉(zhuǎn)前)程序呢?有需要的朋友們可以下面來一起看看。
    2016-09-09
  • iOS中多線程的經(jīng)典崩潰總結(jié)大全

    iOS中多線程的經(jīng)典崩潰總結(jié)大全

    這篇文章主要給大家介紹了關(guān)于iOS中多線程的一些經(jīng)典崩潰的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • IOS代碼筆記之勾選

    IOS代碼筆記之勾選"記住密碼"整體button

    這篇文章主要為大家詳細介紹了IOS實現(xiàn)勾選"記住密碼"整體button效果的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • iOS中管理剪切板的UIPasteboard粘貼板類用法詳解

    iOS中管理剪切板的UIPasteboard粘貼板類用法詳解

    在iOS中,通過UITextField、UITextView和UIWebView剪切或復(fù)制的內(nèi)容都可以通過UIPasteboard類來管理粘貼操作,下面就為大家?guī)韎OS中管理剪切板的UIPasteboard粘貼板類用法詳解:
    2016-06-06

最新評論

怀宁县| 九寨沟县| 陇南市| 噶尔县| 东兴市| 水城县| 岫岩| 安平县| 嘉义县| 黎城县| 广平县| 沽源县| 嘉定区| 大港区| 孟州市| 稷山县| 元朗区| 赤峰市| 五常市| 烟台市| 红桥区| 浦县| 禹城市| 北碚区| 乐陵市| 玉林市| 东乡族自治县| 舒兰市| 曲阜市| 奈曼旗| 曲周县| 沅陵县| 盖州市| 沿河| 眉山市| 邵武市| 常德市| 大洼县| 那坡县| 历史| 府谷县|