Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_pr1_4567C.doc
Скачиваний:
1
Добавлен:
16.11.2019
Размер:
155.65 Кб
Скачать

Тема 7. Рекурсивні специфікації систем.

Індуктивні визначення множин та функцій. БНФ. Рекурсивні специфікації функцій. Подання рекурсивних специфікацій засобами мов програмування. Бінарні дерева. Стратегії обходу дерев. Дерева пошуку. Таблиці у вигляді дерев пошуку. Синтаксичний аналіз арифметичних виразів. Переборні алгоритми. Бектрекінг.

ЗАДАЧІ

    1. Написати процедури для:

а) генерації порожнього бінарного дерева,

б) приєднання нового листка до заданого листка,

в) заміни одного педдерева дерева на інше,

г) вилучиння заданого піддерева,

д) перепису дерева в файл,

е) відновлення дерева з файлу,

є) виведення дерева на екран.

    1. Побудувати частотний словник слів текстового файлу у вигляді дерева пошуку з вузлами ( слово, кількість входжень, ліве_піддерево, праве_піддерево ).

    2. Написати процедури обходу дерева: 1) в префіксному порядку, 2) в суфіксному порядку, 3) в постфіксному порядку.

    3. Побудувати: а) дерево пошуку, вузли якого зважені натуральними числами від до ., б) те саме, що і в п.а) тільки побудувати збалансоване дерево пошуку.

    4. «Ханойська вежа». Дошка має три стовбчики. На першому нанизано дисків зі спадаючим нагору діаметром (утворюють пірамду). Розташувати диски в тому ж порядку на іншому стовбчику. Диски можна перекладати зі стобчика на стовбчик по одному. Класти більший диск на менший не дозволяється. Написати процедуру, що задає відповідну послідовність операцій: а) рекурсивну, б) ітеративну.

    5. Написати рекурсивні процедури для задачі 5.4.

    6. Знайти скількома способами можна подати натуральне число у вигляді суми доданків. Наприклад, для числа 4 існує 5 варіантів: 1+1+1+1, 1+2+1, 1+3, 2+2, 4.

    7. Написати рекурсивну функцію для ”швидкого” піднесення дійсного числа до цілого степені.

7.9 Знайти бездужкову постфіксну форму (БПФ) для заданого арифметичного виразу. Сам вираз побудований з обднобуквенних змінних та символів арифметичних операцій і вводиться з клавіатури.. Всі дужки обов'язкові. Тобто кожному входженню символа операції відповідає пара дужок. Наприклад, для виразу (b+(d*c)) БПФ є bdc*+.

Лабораторна робота 6

ТЕМА: Синтаксичний аналіз виразів.

Мова в певному алфавіті (основному) символів – це слова, записані за певними синтаксичними правилами. Синтаксичні правила подаються записами вигляду <…> ::= де <…> - позначає синтаксичне поняття, а - послідовність символів розширеного алфавіту. Розширений алфавіт – це основний алфавіт, доповнений синтаксичними поняттями та метасимволами - ‘|’, ‘[‘, ‘]’, ‘{‘, ‘}’, ‘(‘, ‘)’. Метасимвол ‘|’ розділяє варіанти поняття. Вираз […] означає, що послідовність символів входить або не входить в конструкцію. Вираз {…} – що послідовність символів може входити в конструкцію n раз (n>=0). Кожному поняттю відповідає сукупність слів в основному алфавіті, що задовольняють певному синтаксичному правилу. Синтаксичний аналізатор - це програма, що для заданої послідовності символів основного алфавіту розпізнає, чи побудована вона у відповідності з синтаксичними правилами для даного поняття.

ЗАВДАННЯ

Побудувати синтаксичний аналізатор для даного поняття і там, де це можливо, обчислити значення заданого виразу. Вхідний рядок вводиться з клавіатури.

ПОНЯТТЯ

  1. <список-списків> ::= <список> {';' <список>}

<список> ::= <буква> {',' <буква> }

2) <дійсне-число> ::= <ціле-число> '.' <ціле-без-знака> |

<ціле-число> ['.' <ціле-без-знака> ] 'Е' <ціле-число>

<ціле-без-знака> ::= <цифра> { <цифра> }

<ціле-число> ::= [ '-' | '+' ] <ціле-без-знака>

Якщо розпізнано вірний вираз, то аналізатор обчислює його значення.

3) <сума> ::= <ціле> { <знак-операцІЇ> <ціле> }

< знак-операції > ::= '-' | '+' | '*'

<ціле > ::= <цифра> { <цифра> }

Якщо розпізнано вірний вираз, то аналізатор обчислює його значення.

4) < дужки > ::= <квадратні > | < круглі >

< квадратні > ::= '+' | '[' < круглі > < круглі >']'

< круглі> ::= '-' | '('<квадратні> <квадратні>')'

5) < простий-вираз > ::= < простий-ідентифікатор > |

'(' < простий-вираз > < знак-операції > < простий-вираз >')'

< знак-операції > ::= '-' | '+' | '*'

< простий-ідентифікатор > ::= < буква >

  1. < список-параметрів > ::= <параметр> {',' <параметр>}

<параметр> ::= <ім'я> '=' <цифра> <цифра> |

<ім'я> '=' '(' < список-араметрів > ')'

<ім'я> ::== <буква> <буква> <буква>

7) <дужки> ::= <квадратні> | <круглі>

<квадратні> ::= 'В' | '[' '[' <квадратні> ']' '(' <круглі> ') ' ']'

<круглі> ::= 'А' | '(' '(' <круглі> ')' '[' <квадратні> ']' ')'

8) <константний-вираз> ::= <цифра> { <цифра>} |

'(' <константний-вираз> <знак-операції> <константний-вираз> ') '

<знак-операції> ::= '-' | '+' | '*'.

Якщо розпізнано вірний вираз, то аналізатор обчислює його значення.

9) <простий-логічний> ::= <простий-ідентифікатор> |

TRUE | FALSE | <простий-логічний> |

'(' <простий-логічний> <знак-операції> <простий-логічний> ')'

<знак-операції> ::= AND> | OR

<простий-ідентифікатор> ::= <буква>

Якщо розпізнано вірний простий логічний вираз, в який не входять прості ідентифікатори, то аналізатор обчислює його значення.

10) Визначити, чи еквівалентний заданий простий-логічний вираз виразу

FALSE.

11) Визначити, чи зберігає заданий простий-логічний вираз свої значення при довільній перестановці значень аргументів.

12) Визначити, чи еквівалентні два прості-логічні вирази.

13) Визначити, чи містить заданий простий-логічний вираз входження іншого заданого простого-логічного виразу.

ВКАЗІВКИ:

виконати аналіз та проектування ЖЦП;

провести автономне тестування та відлагодження всіх процедур і функцій та комплексне тестування всієї програми;

аналізатор працює до першої помилки і друкує діагностику помилки;

підготувати Звіт про виконання Лабораторної роботи .

Лiтература

  1. Зубенко В.В. Науково-методичні матеріали. Факультет кібернетики KНУ ім.Тараса Шевченка, 2004-05 н.р. http://www.unicyb.kiev.ua /~vvz

  2. Кнут Д. Искусство программирования.Т.1,2,3. Изд 3-е, испр. -М.СбП.К.:Вильямс, 2001.

  3. Вирт Н. Систематическое программирование. Введение.- М.:Мир,1987.с.184.

  4. Вирт Н. Алгоритмы и структуры данных. - М.:Мир,1989.с.263.

  5. Керниган Б., Ричи Д.-Язык программирования Си. Изд. 3-е, испр.-СПб.:Невский Диалект.- 2001.

  6. Фьюэр А. Задачи по языку Си.- - М.: Финансы и статистика. -1985.

  7. Харбисон С.П., Стил Г.Л. Язык программирования. Изд. 5-е.-М.:БИНОМ, 2004. -528с.

  8. Проценко В.С. та ін. Техніка програмування мовою Сі.- К.: Либідь.-1993

  9. Белов Ю.А. , Проценко В.С., Чаленко П.Й Інструментальні засоби програмування.- К.: Либідь.-1993.

  10. Подбельский В.В., Фомин С.С. Программировнаие на языке Си. – М.: Финансы и статистика, 1999 , 600 с.

  11. Глібовець М.М., та ін. Мова програмування Сі. Учбовий посібник з лабораторного практикуму. – Київ, НаУКМА, 2002, 67с.

  12. Иодан Э. . Структурное программирование и конструирование программ. - М.:Мир, 1979. с.378.

  13. Майерс Г. Надежность программного обеспечения. . - М.:Мир,1980.с.360.

  14. Ставровский А.Б.,Коваль Ю.В. Вступний курс програмування . Київ, РВЦ ”Київський університет”, 1998, с.215.

Схвалено на засіданні кафедри TТП

Прокол № 2 від 7.10.2004 р.

Зав. Кафедри ТТП проф. Нікітченко М.С,

Підготував доц. Зубенко В.В.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]