Есть ли способ принять пользовательские данные как 2x^2 и использовать их как экспоненциальное число в моей программе?C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли способ принять пользовательские данные как 2x^2 и использовать их как экспоненциальное число в моей программе?

Сообщение Anonymous »

Я пишу программу на C#, которая требует получения от пользователя полиномиальных выражений. Есть ли способ сделать это, позволяя пользователю писать выражение типа «2x^2 + 3x»? Я пытаюсь взять два выражения от пользователя, а затем в программе эти два добавляются друг к другу.
Я пробовал использовать библиотеку регулярных выражений, а также словари, но это все равно работает не так, как я ожидал. p>
Вот код:
static Dictionary ParsePolynomial(string polynomial)
{
Dictionary terms = new Dictionary();
var matches = Regex.Matches(polynomial, @"([-+]?\d*)x\^(\d+)|([-+]?\d+)");

foreach (Match match in matches)
{
if (match.Groups[1].Success)
{
int coeff = match.Groups[1].Value == "-" ? -1 : int.Parse(match.Groups[1].Value);
int power = int.Parse(match.Groups[2].Value);
if (terms.ContainsKey(power)) terms[power] += coeff;
else terms[power] = coeff;
}
else
{
int constant = int.Parse(match.Groups[3].Value);
if (terms.ContainsKey(0)) terms[0] += constant;
else terms[0] = constant;
}
}
return terms;
}

static string PolynomialToString(Dictionary terms)
{
List result = new List();
foreach (var term in terms)
{
if (term.Key == 0)
result.Add($"{term.Value}");
else
result.Add($"{term.Value}x^{term.Key}");
}
return string.Join(" + ", result);
}

static Dictionary AddPolynomials(Dictionary poly1, Dictionary poly2)
{
Dictionary result = new Dictionary(poly1);
foreach (var term in poly2)
{
if (result.ContainsKey(term.Key)) result[term.Key] += term.Value;
else result[term.Key] = term.Value;
}
return result;
}

static Dictionary SubtractPolynomials(Dictionary poly1, Dictionary poly2)
{
Dictionary result = new Dictionary(poly1);
foreach (var term in poly2)
{
if (result.ContainsKey(term.Key)) result[term.Key] -= term.Value;
else result[term.Key] = -term.Value;
}
return result;
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... l-number-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»