Проект «Символьные вычисления»

Реализовать модуль для символьных вычислений с рациональными функциями.

Определение рациональной функции
  • Пусть c — любая вещественная константа. Тогда c — рациональная функция.
  • Пусть x — любая переменная. Тогда x — рациональная функция.
  • Пусть p и q — любые рациональные функции. Тогда p+q, p−q, −p, pq, p/q и (p) все суть рациональные функции. При делении рациональных функций производится упрощение, так чтобы остался только один знак деления [x/(y/z) → xz/y].
  • Пусть p — любая рациональная функция, а n — целочисленная константа. Тогда pn — рациональная функция. Если n отрицательна, в качестве результата берется 1/p|n|.

Рациональными функциями являются только те объекты, которые получаются путем применения конечного числа приведенных выше правил.

Пример записи рациональной функции:

2*x*y+(x^2+y^2)^3
Требования
  1. «Калькулятор» — это структура данных. Модуль символьных вычислений должен содержать функции создания и удаления «калькуляторов». Структура данных представляет из себя таблицу имен (набор соответствий имя → рациональная функция). Сразу после создания таблица пуста.
  2. Калькулятор обрабатывает строки вида:

    f=(x^2+y^2)^2+3*x*y
    

    Эта операция создает (или обновляет) запись в таблице имен: соответствие между именем f и соответствующей функцией, стоящей справа от знака равенства. Функция должна являться корректным арифметическим выражением, имеющим в качестве аргументов числа (целые и вещественные), имена функций из таблицы имен и свободные переменные. Корректное имя состоит из 1 и более латинских букв. При обработке выражения производится проверка, существует ли имя в таблице имен. Если да, то подставляется соответствующее значение, в противном случае оно считается свободной переменной.

    Кроме арифметических операций допускается операция взятия производной: f|x вычисляет производную от функции f по x. f должна быть объявлена, а x должно являться либо свободной переменной, либо именем функции, состоящей из одной переменной.

    Еще одной допустимой операцией является подстановка, записываемая в следующей форме:

    z = [f,x,2]
    

    Здесь каждое вхождение переменной x в f будет заменено на 2, а результирующее значение помещено в таблицу имен под именем z. Назначаемое имя вместе со знаком равенства может не указываться, тогда выражение запишется в функцию с именем last.

  3. Кроме обработки выражений, необходимо реализовать функцию печати содержимого таблицы имен (отдельного имени или таблицы целиком).

  4. К модулю должна быть реализована главная программа, которая построчно вводит выражения, «скармливает» их калькулятору и выводит результат обработки каждого из них. Два специальных выражения должны приводить к выходу из программы и полной печати таблицы имен соответственно.