方程求解器/解析器

问题描述 投票:1回答:1

我有一个应用程序,解决基于给定的知识和未知的物理问题..但它做错了方法..

假设我们有这个等式(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)" 

在此先感谢,任何帮助都会非常棒

ios swift math equation solver
1个回答
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个参数的调用,所有这些都是可选项,所以如果你同时尝试“if let”和它们,它就会起作用,这意味着另一个是unknow变量。

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

© www.soinside.com 2019 - 2024. All rights reserved.