是否可以将带有变量的方程式的字符串转换为等式?

时间:2014-12-11 20:32:35

标签: javascript parsing variables algebra

我需要将从prompt返回的字符串转换为等式,但parseFloat仅返回第一个数字和等式中的符号,并在变量处停止。变量将始终为= x。该程序旨在将代数表达式15*x(5^4-56)*17/x=15转换为表达式,并计算x的值。如果有人能告诉我如何做到这一点,那将会有很大帮助。我目前正在使用多个提示,让用户在x之前输入等式,然后在x之后输入等式,然后在两者之间插入变量,并计算它的值。

编辑:

我没有预定义的变量,它必须适用于x > 1000x != //an integer的方程式。

提前致谢!

3 个答案:

答案 0 :(得分:1)

似乎是一个复杂的问题...

这是一个简单轻松的问题解决方案。希望你能使用它的一些组成部分。

约束:

  1. x的答案应该是0到1000之间的整数
  2. 表达式的左侧应该是正确的javascript语法
  3. 
    
    var input = prompt("enter the equation");  //eg: x*x+x+1=241
    var parts = input.split('=');
    
    //solving equation starts
    var x = 0;
    var temp = eval(parts[0]);
    while (temp != parts[1] && x<1000){
       x++;
       temp = eval(parts[0]);
    }
    var ans = (x<1000)?"answer is "+x:"this program cannot solve this";
    //solving equation finishes
      
    alert(ans);
    &#13;
    &#13;
    &#13;

    您可以替换&#34;求解等式&#34;部分用计算机科学中用于求解方程的一些数值方法(更多细节here)。如果要允许用户使用您的语法,则必须解析等式的左侧并将它们映射到正确的javascript表达式(作为用eval()执行的字符串)。

答案 1 :(得分:0)

Javascript可以使用eval函数来评估字符串,但是变量将被预先定义,并且方程必须以javascript可以理解的方式进行格式化:

var x = 15
var string = "15*x*17/x"
eval(string)

您的示例:"15*x(5^4-56)*17/x=15"不会运行,因为它会将x(5^4-56)评估为javascript表达式,这是无效的。

答案 2 :(得分:0)

使用我发现的所有信息和其他方法,我总结了一个共同的答案。邀请任何人更改和/或添加他们的方法。

为了尽可能少地为用户和编码器执行此操作,您将实现以下代码。

&#13;
&#13;
var input = prompt("enter the equation");  //eg: x*x+x+1=241
var parts = input.split('=');

//solving equation starts
var x = 0; //Or the lowest possible value of "x"
var temp = eval(parts[0]);
while (temp != parts[1] && x<1000){ // && x < The highest number to evaluate
   x++; //Add the increment (determines the maximum amount of digits) eg x+0.1 for tenths max, x+2 for only even integers etc.
   temp = eval(parts[0]);
}
var ans = (x<1000)?"answer is "+x:"this program cannot solve this"; //make sure x< is the same as line 7.
//solving equation finishes
  
alert(ans);
&#13;
&#13;
&#13;

但是,如果您允许十分之一或大于2000的范围,则运行速度非常慢。

更快的运行方式是定义允许任何变量(而不仅仅是x)的数组和不同的平均过程,例如here.(右键单击查看html并单击第一个js源到看代码)但是,这是2k行。两者都可以使用,但第二种更有效,并且可以解决多元方程。