CS193p的作业1

时间:2012-02-04 04:25:43

标签: objective-c ios cs193p

我最近开始在iTunes U上关注斯坦福大学的iPhone开发在线课程。

我正在尝试为前几个讲座做家庭作业。我跟着我构建了一个基本计算器的演练,但现在我正在尝试第一个任务,我似乎无法解决它。有一些问题:

尝试实施这些:

Add the following 4 operation buttons:
• sin : calculates the sine of the top operand on the stack.
• cos : calculates the cosine of the top operand on the stack.
• sqrt : calculates the square root of the top operand on the stack.
• π: calculates (well, conjures up) the value of π. Examples: 3 π * should put
three times the value of π into the display on your calculator, so should 3 Enter π *, 
so should π 3 *. Perhaps unexpectedly, π Enter 3 * + would result in 4 times π being 
shown. You should understand why this is the case. NOTE: This required task is to add π as 
an operation (an operation which takes no arguments off of the operand stack), not a new
way of entering an operand into the display.

我的performOperation代码是这样的:

-(double)performOperation:(NSString *)operation
{
    double result = 0;
    double result1 = 0;
    if ([operation isEqualToString:@"+"]){
        result = [self popOperand] + [self popOperand];
    }else if ([@"*" isEqualToString:operation]){
        result = [self popOperand] * [self popOperand];
    }
    else if ([@"/" isEqualToString:operation]){
        result = [self popOperand] / [self popOperand];
    }
    else if ([@"-" isEqualToString:operation]){
        result = [self popOperand] - [self popOperand];
    }
    else if ([@"C" isEqualToString:operation])
    {
        [self.operandStack removeAllObjects];
        result = 0;
    }
    else if ([@"sin" isEqualToString:operation])
    {
       result1 = [self popOperand];
        result = sin(result1); 
    }
    else if ([@"cos" isEqualToString:operation])
    {
        result1 = [self popOperand];
        result = cos(result1);
    }
    else if ([@"sqrt" isEqualToString:operation])
    {
        result1 = [self popOperand];
        result = sqrt(result1);
    }

    [self pushOperand:result];
    return result;
}

遇到一些问题,例如:

  1. 当我输入5时输入3 /
  2. 我得到inf
  3. 还不确定我的sin,cos和sprt代码是否正确?

3 个答案:

答案 0 :(得分:3)

由于我也在iTunesU上课,这可能会有所帮助。

首先,阿诺说的是真的。

你弹出的第一个操作数实际上应该在分母中,所以你必须先将它存放到一边。 (也因为它的分母你应该确保它不是=到0。) 您还应该查看减法以确保操作顺序正确。

从5输入inf /告诉我你从步行中错过了一件事。在operationPressed:在你的CalculatorViewController中,如果我们正在输入一个数字,你是否发送了enterPressed?

- (IBAction)operationPressed:(UIButton *)sender {
    if (self.userIsInTheMiddleOfEnteringANumber) {
        [self enterPressed];
    }
    double result = [self.brain performOperation:sender.currentTitle];
    NSString *resultString = [NSString stringWithFormat:@"%g",result];
    self.display.text = resultString;
    self.history.text = [CalculatorBrain descriptionOfProgram:self.brain.program];
}

答案 1 :(得分:2)

我认为你在这里缺少的是这一点:

  

“这个必需的任务是添加π作为操作”

考虑以下情况 - 3π*应该产生9.42作为答案。根据你的performOperation:当遇到'*'时,操作数堆栈应为

  • 3.14
  • 3

所需的任务是添加π作为操作。那么π操作需要做的是将适当的值推送到堆栈上而不是更多。至于其他功能,请试一试并使用科学计算器检查您是否正确实施。

答案 2 :(得分:2)

你所在部门有一个错误。

如果您现在输入'2输入4输入/',您将得到2(4/2)作为答案。它应该是0.5(2/4)。

也许这个提示有帮助。

您可以将函数缩短为'result = sin([self popOperand]);'例如。

无论如何,当你被卡住时,尝试使用NSLog()并在控制台中打印有趣的值。在调试时非常有用。