Изучить основы функционирования символьных методов вычисления. Реализовать заданный алгоритм над символьной формой выражения по вариантам с помощью произвольного языка программирования, не основываясь на существующих системах символьных вычислений.
- Проанализировать задействуемые в задании предметные области, произвести их декомпозицию, выявить сущности и разработать архитектуру решения
- Реализовать необходимые структуры данных и модели
- Реализовать соответствующие варианту задания методы загрузки и сохранения данных
- Реализовать соответствующий заданию алгоритм
- Реализовать тестовые сценарии
- Оформить отчет по работе и продемонстрировать преподавателю для защиты вместе с демонстрацией разработанного решения
- Нужно следовать порядку выполнения
- Нужно для символьного представления использовать иммутабельную модель данных
- Нужно использовать аргументы командной строки для передачи входных данных в программу (например, имен файлов, откуда зачитать выражения для обработки)
- Нельзя использовать функциональные ЯП
- Нельзя использовать синтаксические конструкции ЯП, реализующие проверки или приведения с заранее известным типом (is, as, cast, match, ...)
Приведение многочлена к стандартному виду и сравнение.
Дополнительная задача: вычисление выражения в матрицах и векторах (ветка matrix)
Задача реализована с помощью паттерна Visitor.
Модель строится с использованием четырех типов объектов: Constrant (extends Symbol), Expression (extends Symbol), StringSymbol (extends Symbol), Symbol.
Реализован свой DSL, который содержит: собственные арифметические функции (Plus, BinaryPlus, BinaryTimes, Times, Divide, Power, Minus), логические функции If, Eq, Compare, Not, Less, More, And, Or, While), функции приведения, функции над списками (Generate, Part, Fold, Append, Map, Filter, Length, Concat, CountItem, Contains, Distinct, Group, Range, ListSum).
Ввод и вывод выражений в формате XML.