Infix Expressions VS Postfix Express и как да изградим по-добър JavaScript калкулатор

Ако искате да направите своя опростен калкулатор много по-умен, тази публикация е за вас.

Може да попитате: „Какво не е наред с моя прост калкулатор.“ Е, може да прави всички операции правилно, но последователността, в която ги прави, вероятно е грешна.

Простият калкулатор съдържа само четири операции: събиране, изваждане, деление и умножение. Много от нас може да са учили в гимназията за предимството на операторите: делението и умножението имат един и същ приоритет и имат по-висок приоритет от събирането и изваждането, които имат същия приоритет.

Бързо обобщение на предимството на оператора можете да намерите тук: //www.math.utah.edu/online/1010/precedence/.

Причината, поради която подчертавам приоритета на оператора, е, че обикновеният калкулатор извършва по-голямата част от изчисленията погрешно. Например 1 + 2x3 трябва да е равно на 7 според нормален калкулатор, но простият калкулатор дава резултат 9.

Причината, поради която простият калкулатор прави всичко погрешно, е, че просто умножава двата операнда, с оператора между тях, и дава резултата.

Просто не можем да обвиним простия калкулатор. В крайна сметка трябваше да бъде просто. Така че сега може да започнете да мислите как да пренаредите операторите, така че да получите правилния резултат. Да, вие сте на прав път. За това трябва да знаем за още две понятия в компютърните науки: изрази Infix и изрази Postfix.

С прости думи, аритметичните изрази, които разбираме, са изрази Infix, а аритметичните изрази, които компютърът разбира, са изрази Postfix.

Както изразите infix, така и postfix създават едни и същи резултати. Просто хората са свикнали да решават изрази с инфикс, а компютрите - за решаване на изрази с постфикс.

Друга ключова характеристика в израза за постфикс е, че той съдържа оператори, следващи операндите според приоритета, което улеснява компютъра да ги оцени с помощта на стекове и да даде правилния резултат.

Досега трябва да мислите как да конвертирате израза на инфикса, въведен от вашия потребител, в израз на постфикс. Има алгоритъм, който преобразува израз на инфикс в израз на постфикс, който можете да намерите тук .

Ето как изглежда този процес:

Изразът postfix трябва да бъде оценен от алгоритъм, който можете да намерите тук . Подобно е на оценката, направена от обикновен калкулатор, с изключение на това, че операторите успяват да операндите в изрази постфикс.

В крайна сметка основният мотив за преобразуване на израз на инфикс в израз на постфикс е да се запази приоритетът на операторите, докато компютърът оценява израза.

Вижте моя напълно функционален калкулатор, който включва тези принципи тук .