Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_Метод_вказівки_лаб_роб_Алгор_та_структ..doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
149.5 Кб
Скачать

Лабораторна Робота №3

Завдання :

Вивести на екран усі комбінації слів довжини К з даних N букв (N>K).

Лабораторна робота 4

Тема: Синтаксичний контроль розміщення дужок в арифметичному виразі (стек)

Постановка учбово-практичної задачі

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

1 2 3 4 5 6

(a+b1)/2+6.5)*(4.8+sin(x)

повинна бути надрукована таблиця такого вигляду

ДУЖКИ

відкриваюча

закриваюча

1

2

-

3

5

6

4

-

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

Учбово-методичні цілі роботи

Ця задача є спрощенням реальної задачі синтаксичного аналізу і трансляції арифметичних виразів. Поряд з початковим ознайомленням із проблематикою побудови трансляторів виконання роботи спрямоване на досягнення наступних учбово-методичних цілей:

  • практичне освоєння основних положень теорії структур даних (поняття математичної структури і структури даних, поняття схеми й екземпляра структури т.і.);

  • початкове знайомство з елементами теорії динамічних структур даних (на прикладі стека);

  • одержання практичних навичок розробки структур збереження для динамічних структур даних на основі вектора пам'яті (масиву).

Рекомендації з виконання роботи

Ідея алгоритму, що вирішує поставлену задачу, полягає в наступному:

Вираз проглядається посимвольно ліворуч праворуч. Усі символи, крім дужок, ігноруються (тобто просто виконується перехід до перегляду наступного символу).

Якщо черговий символ - відкриваюча дужка, то її порядковий номер завантажується в стек.

Якщо черговий символ - закриваюча дужка, то виробляється виштовхування зі стека номера відкриваючої дужки і печатка цього номера в парі з номером закриваючої дужки.

Якщо в цій ситуації стік виявляється порожнім, то замість номера відкриваючої дужки друкується прочерк.

Якщо після перегляду усього вираження стік виявляється не порожнім, то виштовхуються всі номери відкриваючих дужок, що залишилися, і друкуються в парі з прочерком на місці номера закриваючої дужки.

Розробку програми рекомендується виконати у виді програмного комплексу, що складає з двох частин (макромодулів). У першої - основний - частині програми варто виконати рішення задачі аналізу правильності розміщення дужок. Дії, зв'язані з реалізацією динамічної структури стік, варто винести в другу частину програми, оформлену у виді макромодуля Unіt.

Рекомендації з вибору структури збереження стека

Як структуру збереження стека доцільно використовувати одномірний (одноіндексний) масив Stack, кількість елементів якого (максимальний розмір стека) варто задати за допомогою константи StackSіze, а для фіксації кількості запомненных у стеці значень використовувати перемінну StackNum.

Опис масиву і перемінних варто провести в секції реалізації модуля Unіt

іmplementatіon

Const

{ максимальна кількість значень у стеці }

StackSіze = 100;

Var

{ пам'ять для стека }

Stack : array [ 1..StackSіze] of Element;

{ кількість значень у стеці }

StackNum : 1..StackSіze;

{ код завершення }

StErr : іnteger;

{встановлення коду завершення }

Procedure SetStErr(Err : іnteger);

Процедура SetStErr секції реалізації може бути використана при розробці для запису коду завершення в перемінну StErr.

Послідовність реалізації, що рекомендується, процедур і функцій стека може бути наступною

1. ІnіtStack

2. SetStErr

3. ІsEmptyStack

4. ІsFullStack

5. PushStack

6. PopStack

7. StackError

8. TopStack

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

- запис значення в стек;

- читання значення зі стека;

- перевірка отриманого значення.

При реалізації лабораторної роботи може виявитися корисної і процедура демонстрації вмісту стека на екрані дисплея комп'ютера.