Опубликован: 27.09.2006 | Уровень: для всех | Доступ: свободно
Лекция 12:

Проект "Компилятор формул"

Задача 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) строит график функции y=f(x), где формула f(x) вводится с клавиатуры;

b) строит график функции, заданной в полярных координатах соотношением r=f(\varphi), где зависимость f(\varphi) вводится с клавиатуры (для обозначения переменной \varphi при этом следует использовать идентификатор t );

c) строит график функции, заданной параметрически соотношениями x=x(t), y=y(t), где зависимости x(t) и y(t) вводятся с клавиатуры.

Анастасия Халудорова
Анастасия Халудорова
подавляющее большиство фукций на пространстве последовательостей?
екатерина яковлева
екатерина яковлева
как получить сертификат,что для этого нужно?
Павел Плахотник
Павел Плахотник
Украина, Днепропетровск
Елена Сергеева
Елена Сергеева
Россия, Таганрог, ТРТУ, 2003