Сообщений 11 Оценка 241 [+2/-0] Оценить |
Класс TParser
Программа-пример Solver
Класс TParser занимается разбором математических выражений. Его можно применять в любых программах, в которых требуется расчёт значений функций, задаваемых пользователем. Класс написан на Visual C++, но может практически без изменений применяться с любыми другими компиляторами языка C++.
Основные возможности класса:
Использовать класс TParser достаточно просто. Сначала нужно создать экземпляр класса любым способом, например:
TParser parser; |
Затем задаётся и компилируется некоторое математическое выражение. Для этого используется функция TParser::Compile, например:
parser.Compile("(sin(x[0]) + 2^x[1])/2"); |
Теперь можно вычислять значение выражения в любой точке, используя одну из версий перегруженной функции TParser::Evaluate:
double values[] = { 1.0, 2.0 }; ... // Способ 1 parser.Evaluate(1.0, 2.0); // Способ 2 parser.Evaluate(values); // Способ 3 parser.SetX(values); parser.Evaluate(); |
Как видим, вектор переменных можно хранить в массиве типа double, а можно просто передать значения всех переменных в функцию Evaluate. Все версии этой функции возвращают полученный результат в виде double. Обратиться к последнему полученному результату можно также, используя функцию TParser::GetResult().
Как я уже говорил, информация об ошибках в выражении передаётся через структуру TError. Рассмотрим пример обработки ошибок в выражении.
try { // Посчитать значение выражения. parser.Compile("2*(1+3"); // "Забыли" закрывающую скобку. parser.Evaluate(); cout << parser.GetResult() << endl << endl; } catch(TError error) { // Выдать сообщение об ошибке. cerr << error.error << " at position " << error.pos << endl << endl; } |
При выполнении эта программа напечатает сообщение:
')' or ']' expected at position 6 |
Программа-пример Solver демонстрирует применение класса TParser. Solver - это простой консольный калькулятор, который позволяет вам запоминать значения в десяти переменных (x[0]...x[9]) и обсчитывать любые выражения, поддерживаемые классом TParser.
Сообщений 11 Оценка 241 [+2/-0] Оценить |