方程求解器/解析器

时间:2018-09-03 11:56:34

标签: ios swift math equation solver

我有一个应用程序,可以根据给定的已知和未知数来解决物理问题..但是这样做的方式是错误的。

假设我们有这个等式(d = v * t)
我们这里有三个变量..我的操作方式就是这样

let v = 10
let t = 5
let d = nil

let result = Double()


if d == nil && v != nil && t != nil {
    result = v * t

}if v == nil && d != nil && t != nil {
    result = d / t

}if t == nil && v != nil && d != nil {
    result = d / v

}else{
    result = nil
}

print(result) // "50" 

显然这很令人头疼..这只是一个包含三个变量的小方程..如果我有20个方程,每个变量有5个变量,怎么办..这样输入起来会很累。.所以我想知道是否有一个变量只需输入方程式并调用.solve之类的方法

let equation = "d = v * t"
let knowns = [d:20,v:50]
let result = equation.solve(usingKnowns: knowns)
print(result) // "Optional(t = 0.4)" 

预先感谢, 任何帮助都将非常棒

1 个答案:

答案 0 :(得分:0)

这里的问题是看什么变量是未知的,假设您有X个变量,并且您总是得到X-1个变量,而1个未知数,您实际上不需要检查已知变量是否为!= nil。

我建议您使用另一种可能性:

func resolve(a: Double?, b: Double?, c: Double?)-> Double{
    //Default value
    var result: Double = 0.0
    //a missing
    if let b = b, let c = c{
        result = b*c
    }
    //b missing
    if let a = a, let b = b{
        result = a/b
    }
    //c missing
    if let a = a, let c = c{
        result = a/c
    }
    return result
} 

在这种情况下,您只有一个带有3个参数的调用,所有这些参数都是可选的,因此,如果同时尝试两个带有2 o的“ if let”并且它起作用,则意味着另一个是unknow变量。 / p>

这是我能想到的“最干净”的解决方案。