
- •Методичні вказівки
- •Лабораторна робота №1 з дисципліни «Алгоритми та структури даних»
- •Лабораторна робота №2 Рішення комбінаторних задач
- •Лабораторна Робота №3
- •Лабораторна робота 4
- •Лабораторна робота №5
- •1. Методи вставки. Алгоритм простих вставок.
- •1.5. Вставки в зв'язаний список
- •1.6. Вставки в кілька зв'язаних списків
Лабораторна Робота №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
При реалізації процедур і функцій стека може виявитися корисної розробка процедур для автоматичної перевірки правильності функціонування стека. Можлива процедура перевірки може складатися, наприклад, у виконанні послідовності наступних дій:
- запис значення в стек;
- читання значення зі стека;
- перевірка отриманого значення.
При реалізації лабораторної роботи може виявитися корисної і процедура демонстрації вмісту стека на екрані дисплея комп'ютера.