Она мною сознательно немного урезана. Немного разобравшись (комментариев для этого достаточно) в коде можно легко его развить до более функционального
- Код: Выделить всё
Программыный калькулятор, использующий Обратную польскую нотацию (или Постфиксную или Полиз или Reverse Polish Notation (RPN)) - это такая запись математических выражений, в которой операнды расположены перед операторами.
Вычисления в обратной польской нотации основаны на стеке, это означает, что операнды достаются из стека, и результат вычисления кладётся обратно в стек. На первый взгляд это может выглядеть непонятно, однако, обратная польская нотация имеет важное приемущество — она невероятно проста для разбора, поэтому её реализации на компьютере требует мало ресурсов и выполняется быстро.
Особенности
• Вычисления выполняются слева направо
• Операнды предшествуют своему оператору.
После выполении оператора он удаляется и
результат сам становится операндом (для
следующих операторов)
• В ОПН нет скобок и приоритетов операций
Пример
выражение в инфиксной записи:
3 * (4 + 7),
в ОПН примет вид:
3 4 7 + *
Приоритеты операторов от высшего к низшему
круглые скобки ( )
возведение в степень ^
унарный минус -
умножение, деление *, / | \
сложение, вычитание +, -
любая функция sin, ln, arctg и т.п.
Более подробный перечень функций и их описание читай в файле
"описание функций.txt" в данном архиве.
Возможности и особенности данного калькулятора
• бинарные арифметические операции (+, -, /, *, ^)
• унарный минус - смена знака операнда на противоположный
• возможно объединение операций в круглые скобки и их
(скобок) вложение друг в друга
• вычисление функций от нескольких аргументов, разделенных
запятыми. Например, функция root(27,3) вычислит кубический
корень из двадцати семи
• разбор и предварительное вычисление происходит один раз,
что позволяет многократно вычислять выражение с максимальной
скоростью
• в выражениях допустимо использование констант чьи имена
должны начинаться с буквенного символа, но могут содержать
любые цифры
• калькулятор допускает в выражении около 30000 символов
вместе с пробелами. Сам алгоритм нечувствителен к пробелам
и их положению и - к регистру символов