Для арифметических выражений допустимы операции: сложения(+), вычитания(-), умножения(*), деления(/), а также унарные + и - (в постфиксной записи + не учитывается, а - обозначается через !).
Арифметическое выражение может содержать идентификаторы, значения которых задаются при запуске и их длина равна 1 символу, а также скобки ( ).
Разработанная программа выводит:
- постфиксную запись выражения
- вычисленное значение выражения по постфиксной записи
Программа основана на Алгоритме сортировочной станции с модификацией в части унарных операторов.
Программа представляет собой проект в msvs (SImplePostfixGenerator.sln) и написана на C++17 с использовнием STL.
Заголовочные файлы:
- Tokens -
классы для токенов - tests -
тесты - main -
функция, решающая задачу - Funcs -
Класс, хранящий для работы с постфиксным выражением - Symbols -
Словари, задающие операторы и их свойства
- 1 вариант
Использование функции solve с передачей потоков ввода вывода и флага, контролирующего вывод сообщений запроса
solve(cin, cout, false);
- 2 варинат
Использование функций tokenize, to_postfix и класса NExpr
Пример:
Перевод в токены строки str
auto in_tokens = tokenize(str);
Перевод в постфиксную запись
auto tokens = to_postfix(in_tokens);
Присванивание значений переменным из словаря vars_to_vals
tokens.set_vars(vars_to_vals);
Получение строки с постфиксным выражением
auto postfix = tokens.to_string();
Вычисление по постфиксному выражению
auto result = tokens.eval();
Перевод ошибочных выражений и попытка вычисления выражения с переменными без значений приводят к исполючениям std::invalid_argument.