Top.Mail.Ru
Ответы

Ошибка вычисления: (1,5):error CS0103: Имя "x" не существует в данном контекста

Я пишу калькулятор функций, я сделал практически весь инструментарий, но возникла ошибка, которую я уже второй день не могу решить

В чём суть поставленной задачи: отделить обычные выражения от уравнений т.к начинает рисоваться график дефолтных примеров, а мне это не надо. Я вывожу результат решений этих примеров в отдельном окне

Я написал вот такую функцию (тут проходит логика распределения решений т.е. нужно ли рисовать график или нет)


123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
 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" не существует в данном контекста

вс код при указании ошибки этой приводит меня к функции, в которой я перевожу выражение в строку кода:


1234567
 static double Parse(string form)  
 
{  
 
    return CSharpScript.EvaluateAsync<double>(form).Result;  
 
}  



если кому надо, то я написал небольшой недо-компилятор для перевода "человеческих" символов в методы:

12345678910111213141516171819202122232425262728293031323334353637
 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 - глобальная переменная

По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект
4мес

>приводит меня к функции, в которой я перевожу выражение в строку кода:
Ты ничего там не переводишь, ты надеешься, что за тебя это сделает класс CSharpScript. А он не сделает.
Парсинг надо делать ручками - обратная польская запись и вот это вот все.