RPN计算器(Swift xcode)-正弦、余弦、正切、倒数(1/x)、对数(基本)函数
我已经用Swift构建了一个基本的RPN计算器,我需要添加这些函数:正弦、余弦、切线、倒数(1/x)、对数(基本)和对数(基本10)。 以下是我为基本操作编写的代码:RPN计算器(Swift xcode)-正弦、余弦、正切、倒数(1/x)、对数(基本)函数,swift,math,rpn,Swift,Math,Rpn,我已经用Swift构建了一个基本的RPN计算器,我需要添加这些函数:正弦、余弦、切线、倒数(1/x)、对数(基本)和对数(基本10)。 以下是我为基本操作编写的代码: import Foundation import UIKit class CalculatorEngine: NSObject { var operandStack = Array<Double>() //array func updateStackWithValue(value: Double)
import Foundation
import UIKit
class CalculatorEngine: NSObject
{
var operandStack = Array<Double>() //array
func updateStackWithValue(value: Double)
{ self.operandStack.append(value) }
func operate(operation: String) ->Double
{ switch operation
{
case "×":
if operandStack.count >= 2 {
return self.operandStack.removeLast() * self.operandStack.removeLast()
}
case "÷":
if operandStack.count >= 2 {
return self.operandStack.removeFirst() / self.operandStack.removeLast()
}
case "+":
if operandStack.count >= 2 {
return self.operandStack.removeLast() + self.operandStack.removeLast()
}
case "−":
if operandStack.count >= 2 {
return self.operandStack.removeFirst() - self.operandStack.removeLast()
}
case "√":
if operandStack.count >= 1 {
return sqrt(self.operandStack.removeLast())
}
default:break
}
return 0.0
}
<代码>导入基础
导入UIKit
类CalculatorEngine:NSObject
{
var operandStack=Array()//数组
func updateStackWithValue(值:双精度)
{self.operandStack.append(value)}
func操作(操作:字符串)->Double
{开关操作
{
案例“×”:
如果操作数Stack.count>=2{
返回self.operanstack.removeLast()*self.operanstack.removeLast()
}
案例“÷”:
如果操作数Stack.count>=2{
返回self.operanstack.removeFirst()/self.operanstack.removeLast()
}
格“+”:
如果操作数Stack.count>=2{
返回self.operanstack.removeLast()+self.operanstack.removeLast()
}
案例”−":
如果操作数Stack.count>=2{
返回self.operanstack.removeFirst()-self.operanstack.removeLast()
}
案例”√":
如果操作数Stack.count>=1{
返回sqrt(self.operanstack.removeLast())
}
默认值:中断
}
返回0.0
}
这是Swift中这些基本函数的一个实现。我将让您将其放入RPN计算器中,因为这是您的任务 内置的trig函数需要输入弧度,因此必须通过乘以
pi
并除以180.0
进行转换
func sine(degrees: Double) -> Double {
return sin(degrees * M_PI / 180)
}
func cosine(degrees: Double) -> Double {
return cos(degrees * M_PI / 180)
}
func tangent(degrees: Double) -> Double {
return tan(degrees * M_PI / 180)
}
func log(n: Double, base: Double) -> Double {
return log(n) / log(base)
}
func reciprocal(n: Double) -> Double {
return 1.0 / n
}
对于log(base 10),只需使用内置的
log10(n:Double)->Double
,这是一个数学问题,不是编程问题,但基本操作是什么。因为当我输入case“sin”:if operanstack.count>=1{返回sin(self.operanstack.removeLast())}它不会给我与基本计算器相同的结果,所以我不认为它是我使用的正确函数,但我不知道使用哪一个。什么?你接受弧度而不是度吗?