Распарсить формулы
Помогите пожалуйста распарсить формулы из textbox.
Почему вот так не работает:
ExpressionParser parser = new ExpressionParser();
parser.Values.Add("x", x);
parser.Values.Add("y", y);
y_[0] = 1;
y_[1] = parser.Parse(string.Format("{0}", dx_dt.Text));
y_[2] = parser.Parse(string.Format("{0}", dy_dt.Text));
А вот так работает:
ExpressionParser parser = new ExpressionParser();
parser.Values.Add("x", x);
parser.Values.Add("y", y);
y_[0] = 1;
y_[1] = parser.Parse("y+2");
y_[2] = parser.Parse("x+y");
Добавил код:
public void five(double[] y4, out double[] y_)
{
....
ExpressionParser parser = new ExpressionParser();
parser.Values.Add("x", x);
parser.Values.Add("y", y);
y_[0] = 1;
y_[1] = parser.Parse(dx_dt.Text);
y_[2] = parser.Parse(dy_dt.Text);
parser.Values.Clear();
}// five
static public void RungeKutteZick(float h, double[] yy_, out double[] y1)
{
.......
for (int j = 0; j < 3; j++)
{
for (int m = 0; m < SizeSys; m++)
{
if (j == 0 || j == 3)
{
yy[m] = yy_[m] + yy[m];
}
else
{
yy[m] = yy_[m] + yy[m] * 0.5f;
}
}
dy = five(yy);
Ответы (1 шт):
Сперва ошибки. Не нужно использовать out там где один возвращаемый тип, а не 2 и более.
public void five(double[] y4, out double[] y_)
замените на
public double[] five(double[] y4)
А это
y_ = new double[3];
на это
double[] y_ = new double[3];
Затем уберите это, оно бесполезно, так как парсер по завершении работы метода уничтожится сам
parser.Values.Clear();
И на это же место добавьте
return y_;
Затем в вызывающем методе замените
Form1 frm1 = new Form1();
frm1.five(yy, out dy);
На
dy = five(yy);
Потому что вы не используете в методе текстбоксы текущей формы, а создаете новую, в которой они не инициализированы (там null), потому что вы вызываете метод до того, как в текстбоксах что-то появится. И мне кажется, здесь вообще вам не нужно создавать копию текущей формы. А если я ошибаюсь и так задумано, напишите мне об этом в комментарии к этому ответу.
И уберите static у вызывающего метода.