Автор оригинала: FreeCodeCamp Community Member.
Pramod Sripada
Если вы хотите сделать свой простой калькулятор намного умнее, этот пост для вас.
Вы можете спросить: «Что не так с моим простым калькулятором». Ну, это может сделать все операции правильно, но последовательность, в которой она делает их, вероятно, неверна.
Простой калькулятор содержит всего четыре операции: добавление, вычитание, разделение и умножение. Многие из нас могут учиться в средней школе о приоритете операторов: разделение и умножение имеют одинаковый приоритет, и имеют более высокий приоритет, чем добавление и вычитание, которые имеют одинаковый приоритет.
Быстрый отвод операторов-приоритета можно найти здесь: http://www.math.utah.edu/online/1010/precedence/ Отказ
Причина, по которой я подчеркивая оператор, приоритет, заключается в том, что простой калькулятор выполняет большинство расчетов неправомерно. Например, 1 + 2×3 должно быть равным 7 в соответствии с обычным калькулятором, но простой калькулятор дает результат 9.
Причина, который просто калькулятор делает все это неправильно, является то, что он просто умножает два операнда с оператором между ними и создает результат.
Мы просто не можем винить простой калькулятор. В конце концов, это должно было быть просто. Так что теперь вы можете начать думать о том, как переставить операторы, чтобы получить правильный результат. Да, вы на правильном пути. Для этого нам нужно знать около двух более концепций в области компьютерных наук: инфикс-выражения и постфиксные выражения.
По простым словам арифметические выражения, которые мы понимаем, являются инфиксными выражениями и арифметическое выражение, которое компьютер понимает, являются постфиксными выражениями.
Как инфикс, так и постфикс выражения создают те же результаты. Это просто люди, используются для решения инфиксных выражений, а компьютеры используются для решения постфиксных выражений.
Другая ключевая особенность в выражении Postfix заключается в том, что она содержит операторы, следующие успешные операнды в соответствии с приоритетом, что позволяет компьютеру легко оценить их с использованием стеков и создавать правильный результат.
К настоящему времени вы должны думать о том, как преобразовать экспрессию Infix, введенное вашим пользователем в выражение постфикса. Существует алгоритм, который преобразует экспрессию инфикса в выражение постфикса, которые можно найти здесь Отказ
Вот что выглядит этот процесс:
Выражение постфикса должно быть оценено алгоритмом, которое можно найти здесь Отказ Это похоже на оценку, проделанную простым калькулятором, за исключением того, что операторы преуспеют операнды в постфиксных выражениях.
В конце концов, основной мотивом преобразования экспрессии инфикса в выражение постфикса состоит в том, чтобы сохранить приоритет операторов, когда компьютер оценивает выражение.
Проверьте мой полностью функциональный калькулятор, который включает в себя эти принципы здесь Отказ