Решатель уравнений / анализатор - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть приложение, которое решает физические задачи, основываясь на данных известных и неизвестных ... но оно делает это неправильно ..

допустим, у нас есть это уравнение (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 голосов
/ 03 сентября 2018

Проблема здесь в том, чтобы увидеть, какая переменная неизвестна, предположим, что у вас есть переменные 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» с 2 o одновременно, и это сработает, это означает, что другой является переменной неизвестной.

Это самое «чистое» решение, которое я могу придумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...