Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

eeeee eeee Ученик (104), открыт 2 недели назад
Я пишу калькулятор функций, я сделал практически весь инструментарий, но возникла ошибка, которую я уже второй день не могу решить

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

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


 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 - глобальная переменная
1 ответ
Jurijus Zaksas Искусственный Интеллект (458564) 2 недели назад
>приводит меня к функции, в которой я перевожу выражение в строку кода:
Ты ничего там не переводишь, ты надеешься, что за тебя это сделает класс CSharpScript. А он не сделает.
Парсинг надо делать ручками - обратная польская запись и вот это вот все.
eeeee eeeeУченик (104) 2 недели назад
я не знаю как, можешь дать ссылку на статью?
Похожие вопросы