objective-c第二十一章课后练习题

//  ViewController.m
//  Fraction_Calculator
//
//  Created by new on 15/6/7.
//  Copyright (c) 2015年  All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
{
    char op;
    int numberOps;
    int currentNumber;//输入中的数字
    BOOL firstOperand,isNumerator;//跟踪输入的是第一个分数和第二个分数,以及输入的是分子还是分母;
    BOOL isNegative,writingDigit;//跟踪输入的是否是负数,以及书写位数;
    Calculator *myCalculator;
    NSMutableString *displayString;
}

@synthesize display;

-(void)viewDidLoad
{
    //覆盖应用程序载入的自定义方法
    firstOperand=YES;
    isNumerator=YES;
    
    isNegative=NO;
    writingDigit=NO;
    numberOps=0;
    displayString=[NSMutableString stringWithCapacity:40];
    myCalculator=[[Calculator alloc]init];
}
-(void)errorOutDisplay
{
    [myCalculator clear];
    [displayString setString:@"Error!"];
    [display setText:displayString];

}
-(void)processDight:(int)digit
{
    if (isNegative)
        currentNumber=currentNumber*10-digit;
    else
        currentNumber=currentNumber*10+digit;
    if(!writingDigit)
        writingDigit=YES;
    [displayString appendString:[NSString stringWithFormat:@"%i",digit]];
    display.text=displayString;
}

-(IBAction)clickDigit:(UIButton *)sender
{
    int digit;
    digit=(int)sender.tag;
    [self processDight:digit];
}

-(void)processOp:(char)theOp
{
    NSString *opStr;
    [self storeFracPart];
    numberOps++;
    if (numberOps>1) {
        NSLog(@"------%i",numberOps);
        [myCalculator performOperation:op];
        myCalculator.operand1.numerator=myCalculator.accumulator.numerator;
        myCalculator.operand1.denominator=myCalculator.accumulator.denominator;
    }
    if (writingDigit==NO && theOp=='-') {
        isNegative=YES;
        [displayString setString:[displayString stringByAppendingString:@"-"]];
        [display setText:displayString];
        return ;
    }
    op=theOp;
    switch (theOp) {
        case '+':
            opStr=@"+";
            break;
        case '-':
            opStr=@"-";
            break;
        case '*':
            opStr=@"∞";
            break;
        case '/':
            opStr=@"÷";
            break;
    }
    //[self storeFracPart];
    firstOperand=NO;
    isNumerator=YES;
    writingDigit=NO;
    isNegative=NO;
    
    [displayString appendString:opStr];
    display.text=displayString;
}

-(void)storeFracPart
{
    if (firstOperand)
    {
        if (isNumerator)
        {
            myCalculator.operand1.numerator=currentNumber;
            myCalculator.operand1.denominator=1;
        }
        else
        {
            if (currentNumber==0)
                [self errorOutDisplay];
            myCalculator.operand1.denominator=currentNumber;
        }
    }
    else if (isNumerator)
    {
        myCalculator.operand2.numerator=currentNumber;
        myCalculator.operand2.denominator=1;
    }
    else
    {
        if (currentNumber==0)
            [self errorOutDisplay];
        myCalculator.operand2.denominator=currentNumber;
        firstOperand=YES;
    }
    currentNumber=0;
}

-(IBAction)clickOver
{
    [self storeFracPart];
    isNumerator=NO;
    isNegative=NO;
    
    [displayString appendString:@"/"];
    display.text=displayString;
}
//算术操作键
-(IBAction)clickPlus
{
    [self processOp:'+'];

}
-(IBAction)clickMinus
{
    [self processOp:'-'];
}
-(IBAction)clickMultiply
{
    [self processOp:'*'];
}
-(IBAction)clickDivide
{
    [self processOp:'/'];
}

//Misc键

-(IBAction)clickEquals
{
   
    if (firstOperand==NO) {
        [self storeFracPart];
        [myCalculator performOperation:op];
        [displayString appendString:@"="];
        [displayString appendString:[myCalculator.accumulator convertToString]];
        display.text=displayString;
        
        currentNumber=0;
        isNumerator=YES;
        firstOperand=YES;
        
        numberOps=0;
        [displayString setString:@""];
    }
}

-(IBAction)clickClear
{
    
    
    numberOps=0;
    isNumerator=YES;
    firstOperand=YES;
    currentNumber=0;
    [myCalculator clear];
    [displayString setString:@""];
    display.text=displayString;
}
-(IBAction)Convert
{
    if(firstOperand && isNumerator &&!currentNumber)
    {
        [displayString setString:[NSString stringWithFormat:@"%g",[myCalculator.accumulator convertToNum]]];
        [display setText:displayString];
        
    }

}


- (void)viewDidUnLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
//  ViewController.h
//  Fraction_Calculator
//
//  Created by new on 15/6/7.
//  Copyright (c) 2015年 All rights reserved.
//

#import <UIKit/UIKit.h>
#import "Calculator.h"
@interface ViewController : UIViewController

@property(strong,nonatomic)IBOutlet UILabel *display;

-(void)processDight:(int)digit;
-(void)processOp:(char)theOp;
-(void)storeFracPart;
-(void)errorOutDisplay;
//数字键
-(IBAction)clickDigit:(UIButton*)sender;

//算术操作键
-(IBAction)clickPlus;
-(IBAction)clickMinus;
-(IBAction)clickMultiply;
-(IBAction)clickDivide;

//Misc键
-(IBAction)clickOver;
-(IBAction)clickEquals;
-(IBAction)clickClear;

-(IBAction)Convert;
@end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值