GitXplorerGitXplorer
I

test-calculator

public
0 stars
0 forks
15 issues

Commits

List of commits on branch master.
Unverified
fdd23b0c0fc404bf4be75172c250d7374172d22e

initial commit

IIneigo committed 5 years ago
Verified
321849111486929287ab9962ab6f6c4a4fd748b0

Initial commit

IIneigo committed 5 years ago

README

The README file for this repository.

Запуск

  1. yarn install
  2. yarn start '2+2'

где 2+2 -> любое математическое выражение в рамках операций + - / * ( ) ^

Testing

Тесты написаны при помощи jest yarn test

Алгоритм трансформации

  • Пока есть ещё символы для чтения:
    • Читаем очередной символ.
    • Если символ является открывающей скобкой, помещаем его в стек.
    • Если символ является закрывающей скобкой:

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

    • Если существуют разные виды скобок, появление непарной скобки также свидетельствует об ошибке. Если какие-то скобки одновременно являются функциями (например, [x] — целая часть), добавляем к выходной строке символ этой функции.
    • Если символ является бинарной операцией о1, тогда:
      1. пока на вершине стека приоритетнее o1
        • … ИЛИ операция на вершине стека левоассоциативная с приоритетом как у o1
        • … выталкиваем верхний элемент стека в выходную строку;
      2. помещаем операцию o1 в стек.
  • Когда входная строка закончилась, выталкиваем все символы из стека в выходную строку. В стеке должны были остаться только символы операций; если это не так, значит в выражении не согласованы скобки.

Алгоритм счета

  • Обработка входного символа
    1. Если на вход подан операнд, он помещается на вершину стека.
    2. Если на вход подан знак операции, то соответствующая операция выполняется над требуемым количеством значений, извлечённых из стека, взятых в порядке добавления. Результат выполненной операции кладётся на вершину стека.
    3. Если входной набор символов обработан не полностью, перейти к шагу 1.
  • После полной обработки входного набора символов результат вычисления выражения лежит на вершине стека.