An open API service indexing awesome lists of open source software.

https://github.com/misterzurg/equationcalculator


https://github.com/misterzurg/equationcalculator

Last synced: 7 months ago
JSON representation

Awesome Lists containing this project

README

          

# Bonch_Project_Java
Theme: Калькулятор выражений

Discipline


  • Технологии и методы программирования a.k.a. Разработка защищённых приложений
  • Project Goal


  • Реализовать калькулятор, вычисляющий выражение в заданном контексте.

  • Освоить средства создания UML диаграмм на Java
  • Description


    Поскольку калькулятор поддерживает простейшие операции:
  • Сложение +

  • Вычитание -

  • Умножение *

  • Деление /

  • Расстановка открывающей ( скобок и закрывающей ) скобок
  • Было решено рассмотреть возможные варианты решения поставленной задачи:
    1. Располагать операции в виде Бинарного дерева, ресурсоемко и сложно!
    2. Разбивать выражение на токены.
    Был выбран второй вариант.

    Также при выполнении задачи был открыт следующий термин:


    Обратная польская нотация — форма записи математических и логических выражений,
    в которой операнды расположены перед знаками операций.

    Логика программы


    Мы посимвольно пробегаемся по всему выражению, каждому символу соответствует определенный приоритет:
  • Умножение «*» или Деление «/» приоритет 3

  • Сложение «+» или Вычитание «–» приоритет 2

  • Открывающая скобка «(» приоритет 1

  • Числа «0…9» приоритет 0

  • Закрывающая скобка «)» приоритет -1
  • Программа выполняется с некоторыми оговорками:


  • если нам встречается число, то мы выводим его в строку вывода;

  • если встречается математический знак, то мы кладем его в стек,
    при этом проверяя стек на пустоту, если стек не пустой,
    то нужно достать все знаки из него до тех пор, пока приоритет последующего знака не будет меньше текущего;
  • По прохождению программы у нас имеется два набора данных:


    Строке вывода, в которой находятся набор переданных чисел
    Стек с математическими операциями
    Полученные два набора данных преобразуются в обратную польскую нотацию, из которой и получается итоговый ответ по следующей логике:
  • если нам встречается число, то оно передается в стек

  • если нам встречается математическая операция, то берутся последние два элемента в стеке и над ними выполняется соответствующее преобразование, которое записывается в стек;
  • Я не хотел сдавать экзамен

    Поэтому сделал следующий проект