Ошибка вычисления: (1,5):error CS0103: Имя "x" не существует в данном контекста
Я пишу калькулятор функций, я сделал практически весь инструментарий, но возникла ошибка, которую я уже второй день не могу решить
В чём суть поставленной задачи: отделить обычные выражения от уравнений т.к начинает рисоваться график дефолтных примеров, а мне это не надо. Я вывожу результат решений этих примеров в отдельном окне
Я написал вот такую функцию (тут проходит логика распределения решений т.е. нужно ли рисовать график или нет)
private void button14_Click(object sender, EventArgs e)
{
formula = Comp(formula);
string[] finform = formula.Split(' ');
try
{
for (int j = 0; j < finform.Length; j++)
{
if (finform[j] == "x")
{
this.chart1.Series[0].Points.AddXY(0, 0);
for (double X = -10; X < 11; X += 0.1)
{
x = X;
string modifiedFormula = formula.Replace("x", x.ToString("G", CultureInfo.InvariantCulture));
double y = Parse(formula);
this.chart1.Series[0].Points.AddXY(x, y);
}
}
else
{
double result = Parse(formula);
double y = Convert.ToDouble(result);
label2.Text = Convert.ToString(result);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка вычисления: " + ex.Message);
}
formula = "1 * ";
label1.Text = formula;
}
у меня возникает ошибка: Ошибка вычисления: (1,5):error CS0103: Имя "x" не существует в данном контекста
вс код при указании ошибки этой приводит меня к функции, в которой я перевожу выражение в строку кода:
static double Parse(string form)
{
return CSharpScript.EvaluateAsync<double>(form).Result;
}
если кому надо, то я написал небольшой недо-компилятор для перевода "человеческих" символов в методы:
static string Comp(string code)
{
string[] bit = code.Split(' ');
for(int i = 0; i < bit.Length; i++)
{
if (bit[i] == "^")
{
bit[i - 1] = $"System.Math.Pow({bit[i - 1]}";
bit[i] = ",";
bit[i + 1] = $"{bit[i + 1]})";
}
if (bit[i] == "√")
{
bit[i] = $"System.Math.Sqrt({bit[i + 1]})";
bit[i + 1] = "";
}
если что x - глобальная переменная
>приводит меня к функции, в которой я перевожу выражение в строку кода:
Ты ничего там не переводишь, ты надеешься, что за тебя это сделает класс CSharpScript. А он не сделает.
Парсинг надо делать ручками - обратная польская запись и вот это вот все.