【问题标题】:Solving a Variable Equation defined by the User求解用户定义的变量方程
【发布时间】:2013-05-16 01:47:35
【问题描述】:

非常感谢 C、Python、C++ 或 Javascript 的答案。 我读了几本书,做了所有的例子。现在我想写一个简单的程序。 但是,我已经遇到了以下障碍:

我的意图是从用户那里获取一个方程并将其保存在一个变量中, 例如:

-3*X+4 or pow(2,(sin(cos(x))/5))       >  [In valid C Math syntax]

然后针对某个 X-Value 计算给定的表达式。 像这样的:

printf("%g", UserFunction(3.2))   // Input 3.2 for X in User's Function and Print Result

有什么想法吗?对于我的生活,我无法弄清楚这一点。更令我沮丧的是,解决方案可能非常简单。提前谢谢你。

【问题讨论】:

  • 你不会用-3 * x 代替-3x 吗?您可以使用eval,但如果您期望任意用户输入,这并不安全。
  • 你是对的,-3 * X 是合适的语法。关于eval,你说的“不安全”是什么意思?
  • eval("__import__('os').system('rm -Rf /')") 做你认为它做的事。
  • 谢谢,但我不认为用户会在询问他们想要求解的方程时输入“rm -Rf /”。你有没有机会给我一个它的用法例子?不会像 eval(scanf("%s"), x=5) 这么简单吧?
  • 在 Python 中,它只是 eval('x + 2', {'x': 3})

标签: c variables equation solver


【解决方案1】:

C 中没有简单的方法可以做到这一点,但我认为 muParser 可能对你有用,它是用 C++ 编写的,但有 C 绑定。 ExprTk 也是一个选项,但看起来它只是 C++,从好的方面来说,它看起来更容易获得有趣的结果。

另一个选项可能是Expression Evaluation,它是Libav 的一部分。它在 C 中,eval.h 标头对接口有一些很好的描述。

【讨论】:

  • 可悲的是,作为一个初学者,我不知道如何使用它。无论如何,谢谢你的回答,Yaghmour 先生。
【解决方案2】:

在 C、C++ 或 Java 等编译语言中,没有简单的方法可以做到这一点——您基本上必须重写整个编译器(或使用带有解释器的外部库)。这在 Python 和 Javascript 等“脚本”语言中只是微不足道的,它们具有在运行时评估表达式的函数(通常称为“eval()”)。此函数通常很危险,因为它还可以执行诸如调用具有副作用的函数之类的事情。

【讨论】:

  • 感谢您的回答,克罗克先生。看起来我有点过头了。我的想法是编写一个简单的程序,使用辛普森和梯形规则来近似从 a 到 b 的积分。然后,我将求解由长度和 n 确定的适当 x 值的函数,然后将答案乘以适当的系数,...。但这一切都取决于能够计算给定 X 的用户函数。所以看来我将不得不使用更简单的语言。再次感谢。
  • 这不能通过在 C 中实现 sudo try-catch 来完成,就像这里描述的 stackoverflow.com/questions/10586003/try-catch-statements-in-c?
【解决方案3】:

Ffmpeg/libav 有一个不错的简单函数评估器,您可以使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多