Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
САОД_ответы_catsto_NEW.doc
Скачиваний:
17
Добавлен:
16.04.2019
Размер:
365.57 Кб
Скачать
  1. Рекуррентное определение выражений. Алгоритм анализа и вычисления выражений (программа ”калькулятор”).

Рекуррентное соотношение – это рекурсивная функция с целочисленными значениями. Значение любой такой функции можно определить, вычисляя все ее значения начиная с наименьшего, используя на каждом шаге ранее вычисленные значения для подсчета текущего значения.

Рекуррентные выражения используются, в частности, для определения сложности рекурсивных вычислений.

Калькулятор анализирует и вычисляет выражения методом рекурсивного спуска. Этот алгоритм лежит в основе работы многих компиляторов и, разобравшись с ним, вы лучше поймете как строятся выражения в С++. В нем можно задавать выражения типа x=y=5; x=x+(6/17+2.5)*y; l=2*pi*x и т.д. Выражение заканчивается с окончанием строки или символом ‘;’. Увидев ‘;’ или конец строки калькулятор распечатает результат, а увидев новое имя заведет соответствующую переменную. Кроме того, в нем сразу определены две константы pi и e.

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

Выражение:

Терм + выражение или

Терм - выражение или

Терм

Терм: атом / терм или

атом * терм или

атом

Атом: Число или

Имя или

Имя = Выражение или

- атом или

(выражение) или

Раскрывая это определение обычным языком можно сказать, что выражение может состоять из нескольких слагаемых (термов). Терм может состоять из нескольких сомножителей (атомов). Атом — это число, переменная, выражение присваивания, выражение с унарным минусом или выражение в скобках. Рекурсия определения заключается в том, что каждое понятие определяется через себя, а атом определяется еще и через выражение.

Анализ программы можно начать с функции анализа выражений (Expr). Из нее сразу станет ясно, как определение порождает алгоритм. Имейте ввиду, что программа сначала читает первый элемент (token) выражения (это делается в функции main).

Рекурсией в программировании называется вызов функцией самой себя прямо (в теле функции расположен вызов себя) или косвенно (функция вызывает функцию, которая вызывает функцию, которая… и в одной из этих функций расположен вызов самой первой функции!!!).

50