Решение простого уравнения из аргументов командной строки Visual Studio (без использования библиотек) - PullRequest
0 голосов
/ 09 сентября 2018

Я хочу подготовить программу на C # в Visual Studio, которая действует как простой решатель уравнений. решатель уравнений запускается из аргументов командной строки только с операторами (+, -, *, /)

поэтому ввод будет в формате "calc 3X + 5 = 8" и вывод даст вам X = 1

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

вы должны создать парсер => проанализировать аргумент как

парсер, например: https://github.com/mariuszgromada/MathParser.org-mXparser

без библиотеки, я предлагаю рассмотреть аргумент наподобие "3 * X = 2", и вы зациклите каждый символ, если найдете X его переменной и вы можете проанализировать *, -, + и / как операторы:

foreach char c in args[0]
{
  if (c == '*')...
  if (c == '+')...
  if (c == 'X') => you have identify the variable
}

после программирования логики для разрешения уравнения

это начало ... }

Google Math Parser или анализатор математических уравнений

0 голосов
/ 09 сентября 2018

Ну, во-первых, вам нужно написать парсер . В зависимости от сложности вашей грамматики , вы можете сделать это вручную. Однако, если это вообще сложно, вы, вероятно, захотите использовать инструмент / библиотеку для этого.

Традиционно, вы использовали бы лексер , чтобы преобразовать ваш ввод в поток токенов . Затем вы использовали бы другой инструмент для анализа потока токенов, используя вашу грамматику. Классическим примером этого является набор инструментов Unix Lex и YACC.

Antlr - более современный (и более простой в использовании) способ анализа ввода. И это имеет тенденцию связываться с каждым проектом C #. Если вы покупаете основную книгу Antlr 4, я думаю, что ваша проблема - один из первых примеров.

Как только вы интерпретируете и понимаете вводные данные, вам нужно найти решатель , который решит уравнение.

Удачи.

Кстати, «без использования библиотек» - вещь относительная. Если вы используете какую-либо часть .NET Framework, вы «используете библиотеки». Если вы не хотите использовать какие-либо сторонние библиотеки, ознакомьтесь с некоторыми из перечисленных выше вещей, чтобы узнать, как они работают (например, как они используют регулярные выражения), и перейдите оттуда.

Как только у вас появится код для показа и возникнут проблемы, вернитесь и задайте вопрос, отвечающий за переполнение стека.

...