Проект "Компилятор формул"
Задача 12.10. Модифицируйте текст эталонного проекта "Стековый компилятор формул" так, чтобы:
a) формулы, содержащие унарные операции sin и cos, правильно компилировались на язык стекового калькулятора, расширенный операциями S и C, которые вычисляют синус и косинус элемента, расположенного на вершине стека, размещая результат там же;
b) формулы, содержащие операцию возведения в степень ^, которая правоассоциативна и имеет максимальный приоритет, правильно компилировались на язык стекового калькулятора, расширенный операцией ^ ;
c) формулы, содержащие операцию возведения в степень **, которая правоассоциативна и имеет максимальный приоритет, правильно компилировались на язык стекового калькулятора, расширенный операцией ^ ;
d) для коммутативных операций аргументы в программе для стекового компилятора появлялись в алфавитном порядке;
e) формулы, содержащие квадратные скобки [], обозначающие удвоение выражения, в них стоящего, компилировались на язык стекового калькулятора, расширенный операцией D (duplicate), которая извлекает верхний элемент из стека и записывает его обратно в стек дважды ;
f) формулы, содержащие фигурные скобки {}, обозначающие возведение в квадрат выражения, в них стоящего, компилировались на язык стекового калькулятора, расширенный операцией D (duplicate), которая извлекает верхний элемент из стека и записывает его обратно в стек дважды ;
g) перед обработкой каждого символа формулы печаталась ее откомпилированную часть, содержимое стека отложенных операций и необработанную еще часть формулы;
h) формулы, содержащие переменную a, значение которой следует считать равным нулю, компилировались в оптимизированные формулы, не содержащие лишних сложений и вычитаний;
i) формулы, содержащие переменную b, значение которой следует считать равным единице, компилировались в оптимизированные формулы, не содержащие лишних умножений и делений;
j) при компиляции неправильных формул выдавалась диагностика об ошибке и корректная часть исходной формулы.
Задача 12.11. Модифицируйте текст эталонного проекта "Стековый компилятор формул" так, чтобы:
a) формулы, содержащие переменные a и b, значение которых следует считать равным двойке, компилировались в оптимизированные формулы, в которых умножение заменено сложением;
b) результатом его работы была формула на входном языке, из которой удалены все лишние скобки;
c) результатом его работы была формула на входном языке, в которой каждое из выполняемых действий заключено в скобки;
d) результатом его работы было дерево вывода исходной формулы.
Задача 12.12. Модифицируйте текст эталонного проекта "Интерпретатор формул" так, чтобы:
a) деление трактовалось, как левоассоциативная операция;
b) приоритеты операций сложения и вычитания были выше, чем у операций умножения и деления;
c) в качестве аргументов допускались произвольные целые неотрицательные числа;
d) для группировки в формулах можно было использовать не только круглые, но также квадратные и фигурные скобки;
e) вычислялись значения выражений, содержащих операцию % (остаток от деления), с приоритетом, равным операциям умножения и деления;
f) вычислялись значения выражений, содержащих пробелы и комментарии двух видов: /* */ и // ;
g) вычислялись значения выражений, запись которых состоит из нескольких строк;
h) вычислялись значения выражений, содержащих унарные арифметические операции + и - ;
i) вычислялись значения выражений, содержащих бинарные битовые операции | и & ;
j) вычислялись значения выражений, содержащих унарную битовую операцию ^.
Задача 12.13. Модифицируйте текст эталонного проекта "Интерпретатор формул" так, чтобы:
a) вычислялись значения формул, содержащих только десятичные числа (до 3999), а результат печатался в виде восьмеричного числа;
b) вычислялись значения формул, содержащих только десятичные числа (до 3999), а результат печатался в виде шестнадцатеричного числа;
c) вычислялись значения формул, содержащих только десятичные числа (до 3999), а результат печатался в виде римского числа;
d) вычислялись значения формул, содержащих только восьмеричные числа (до 3999), а результат печатался в виде десятичного числа;
e) вычислялись значения формул, содержащих только восьмеричные числа (до 3999), а результат печатался в виде римского числа;
f) вычислялись значения формул, содержащих только шестнадцатеричные числа (до 3999), а результат печатался в виде десятичного числа;
g) вычислялись значения формул, содержащих только шестнадцатеричные числа (до 3999), а результат печатался в виде римского числа;
h) вычислялись значения формул, содержащих только римские числа (до 3999), а результат печатался в виде десятичного числа;
i) вычислялись значения формул, содержащих только римские числа (до 3999), а результат печатался в виде восьмеричного числа;
j) вычислялись значения формул, содержащих только римские числа (до 3999), а результат печатался в виде шестнадцатеричного числа.
Задача 12.14. Модифицируйте текст эталонного проекта "Интерпретатор формул" так, чтобы:
a) вычислялись значения формул, содержащих операцию возведения в степень ^, которая правоассоциативна и имеет максимальный приоритет;
b) вычислялись значения формул, содержащих операцию возведения в степень **, которая правоассоциативна и имеет максимальный приоритет;
c) вычислялись значения формул, содержащие квадратные скобки [], обозначающие удвоение выражения, в них стоящего;
d) вычислялись значения формул, содержащие фигурные скобки {}, обозначающие возведение в квадрат выражения, в них стоящего.
Задача 12.15. Модифицируйте текст эталонного проекта "Стековый компилятор формул", превратив его в аплет, который:
a) строит график функции , где формула вводится с клавиатуры;
b) строит график функции, заданной в полярных координатах соотношением , где зависимость вводится с клавиатуры (для обозначения переменной при этом следует использовать идентификатор t );
c) строит график функции, заданной параметрически соотношениями , , где зависимости и вводятся с клавиатуры.