Технологии и методы программирования a.k.a. Разработка защищённых приложений
Project Goal
Реализовать калькулятор, вычисляющий выражение в заданном контексте.
Освоить средства создания UML диаграмм на Java
Description
Поскольку калькулятор поддерживает простейшие операции:
Сложение +
Вычитание -
Умножение *
Деление /
Расстановка открывающей ( скобок и закрывающей ) скобок
Было решено рассмотреть возможные варианты решения поставленной задачи:
1. Располагать операции в виде Бинарного дерева, ресурсоемко и сложно!
2. Разбивать выражение на токены.
Был выбран второй вариант.
Также при выполнении задачи был открыт следующий термин:
Обратная польская нотация — форма записи математических и логических выражений,
в которой операнды расположены перед знаками операций.
Логика программы
Мы посимвольно пробегаемся по всему выражению, каждому символу соответствует определенный приоритет:
Умножение «*» или Деление «/» приоритет 3
Сложение «+» или Вычитание «–» приоритет 2
Открывающая скобка «(» приоритет 1
Числа «0…9» приоритет 0
Закрывающая скобка «)» приоритет -1
Программа выполняется с некоторыми оговорками:
если нам встречается число, то мы выводим его в строку вывода;
если встречается математический знак, то мы кладем его в стек,
при этом проверяя стек на пустоту, если стек не пустой,
то нужно достать все знаки из него до тех пор, пока приоритет последующего знака не будет меньше текущего;
По прохождению программы у нас имеется два набора данных:
Строке вывода, в которой находятся набор переданных чисел
Стек с математическими операциями
Полученные два набора данных преобразуются в обратную польскую нотацию, из которой и получается итоговый ответ по следующей логике:
если нам встречается число, то оно передается в стек
если нам встречается математическая операция, то берутся последние два элемента в стеке и над ними выполняется соответствующее преобразование, которое записывается в стек;