c# - 如何显示变量的公式

标签 c# algorithm data-structures tree

我得到了一些导致显示一些数字的复杂代码。 该代码仍在开发中,并非最终版本。现在,最终用户想要了解这些数字是如何计算的。

举个简单的例子:

var x = y + z; // x = 10 + 20

Display(x); // x will be 30

但是我想要一个像

这样的帮助字符串
"x = y(10) + z(20) = 30"

这是一个非常简单的例子,典型的我得到了一个很深的公式,就像一个树结构。

有没有人做过类似的事情并且有一些提示和技巧?

我试图创建我自己的双类来覆盖 +-*/ 并创建一个字符串。但是代码变得非常丑陋。

最佳答案

我最近做了类似的事情,并以基本相同的方式使用树结构。我没有使用二叉树——我允许每个级别有多个 child ——我构建了“帮助”,正如我所说,手动与算术分开,但它完成了工作。这更灵活一些,但自动化程度较低,而且工作量更大。

从设计的角度来看,我可能想将值派生的想法封装在一个类中,称之为变量。变量将派生自涉及其他变量的表达式。变量将具有实际数值,运算符不仅会计算新值,还会计算新的推导。例如:

class Variable
    int id
    double value
    string expression
    Variable[] dependencies

    Variable()
        id = GetId()

    static int shared_id = 0

    static int GetId()
        return shared_id++

    static Variable Add(Variable lhs, Variable rhs)
        Variable result
        result.value = lhs.value + rhs.value
        result.expression = "v[" + lhs.id + "]+v[" + rhs.name + "]"
        result.dependencies[0] = lhs
        result.dependencies[1] = rhs
        return result


Variable x(1.0, "x", [])
// x.id = 0
// x.value = 1.0
// x.expression = "x"
// x.dependecies = []

Variable y(2.0, "y", [])
// y.id = 1
// y.value = 2.0
// y.expression = "y"
// y.dependecies = []

Variable z(3.0, "z", [])
// z.id = 2
// z.value = 3.0
// z.expression = "z"
// z.dependecies = []

Variable w = x + (y + z)
// (y + z).id = 3
// (y + z).value = 5.0
// (y + z).expression = "v[1]+v[2]"
// (y + z).dependencies = [y, z]
// w.id = 4
// w.value = 6.0
// w.expression = "v[0]+v[3]"
// w.dependencies = [x, (y + z)]

你得到一个如下所示的推导:

v[4]=v[0]+v[3]=1.0+5.0=6.0
v[0]=x=1.0
v[3]=v[1]+v[2]=2.0+3.0=5.0
v[1]=y=2.0
v[2]=z=3.0

如果您想内联地写出它,您可以递归地将根的每个依赖项的内联表达式替换为根的表达式,用圆括号括起每个术语以确保正确排序。

关于c# - 如何显示变量的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55497178/

相关文章:

c# - 只读 ("const"-like) C# 的函数参数

C# Unity - 尝试从另一个脚本访问变量

algorithm - 非相邻值的最大总和

algorithm - 在列表中查找重复组合

algorithm - 将 1 添加到数字链表

c# - 在不让线程休眠的情况下,如何在执行下一行代码之前等待计时器完成?

c# - Paypal 开发者测试版 : Test transaction not listed in Sandbox Business account

string - 在多个查询中按字典顺序比较字符串

algorithm - 寻找无向图中的负循环

Javascript 在数组中存储多个字段