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

3. Порядок виконання роботи

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

2. Згідно з індивідуальним завданням розробити алгоритм розв’язання задачі.

3. Підготувати програмну реалізацію розробленого алгоритму. Засобами вбудованого тексто-вого редактора інтегрованого середовища набрати текст підготовленої програми. Відкомпілювати, налагодити та виконати програму.

4. Протестувати програму згідно зі складеною системою тестів і, при потребі, підкоректувати текст програми. Проаналізувати отримані результати.

5. Написати контрольне опитування по темі.

6. Оформити звіт по роботі.

Без підготовкі до роботи (програмної реалізації розробленого алгоритму) студент до роботи не допускається.

4. ЗМІСТ ЗВІТУ

I. Оформити титульну сторінку звіту стандартного зразка, на якій вказати назву лабораторної роботи, її номер та номер варіанту.

II. В звіті мають бути відображені наступні пункти:

Титульна сторінка стандартного зразка з назвою лабораторної роботи, її номером та номером варіанту.

1. Мета роботи.

2. Завдання 1.

2.1. Постановка задачі.

2.2. Алгоритми розв’язання задачі.

2.3. Результати виконання програми.

3. Завдання 2.

3.1. Постановка задачі.

3.2. Динаміка вмісту стеку.

3.3. Результати виконання програми.

Висновки.

Додаток: тексти програм (обов’язково відображати на екрані всі зміни,

що будуть відбуватись у стеку).

5. Завдання на лабораторну роботу

І. Завдання 1: Використати для розв’язання задач клас stack зі стандартної бібліотеки шаблонів STL .

1. Перетворити вираз з інфіксної форми запису в префіксну форму.

2. Перетворити вираз з інфіксної форми запису без дужок в постфіксну форму.

3. Перетворити вираз з інфіксної форми запису з необхідними дужками в постфіксну форму.

4. Обчислити вираз, представлений в інфіксній формі запису.

5. Обчислити вираз, представлений в постфіксній формі запису.

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

7. Написати програму синтаксичного аналізу відповідностей відкриваючих і закриваючих дужок в арифметичному виразі, що має три набори дужок "(" i ")", "<" i ">", "[" i "]". Роздрукувати таблицю відповідностей дужок, причому в таблиці повинно бути зазначено, для яких дужок відсутні парні їм дужки. Для ідентифікації дужок використати їх порядкові номери у виразі.

Приклад: Для арифметичного виразу:

1 2 3 4 5 6

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

має бути виведена таблиця виду:

Дужки

відкриваюча закриваюча

1 2

- 3

5 6

4 -

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

8. Написати програму, що визначає, чи має символьний рядок, що вводиться, правильну форму виду a D b D c D ... D z , де кожний рядок a, b, c, ..., z має форму рядка виду x C y, де x - рядок, що складається з літер A і B, а y - рядок, обернений до рядка x (наприклад, якщо x = ABABBA, то y повинен дорiвнювати ABBABA). Отже, рядок має правильну форму, якщо він складається з будь-якої кiлькостi подiбних рядків, що роздiленi символом "D". Визначити чи введений рядок правильний.

9. Мажоруючим елементом в послідовності A[1..N] називається елемент, що зустрічається в послідовності більш N/2 разів. В послідовності може бути не більше одного мажоруючого елемента. Визначити, чи є в послідовності мажоруючий елемент, і якщо є, то який.

Приклад: Послідовність 3, 3, 4, 2, 4, 4, 2, 4, 4 має мажоруючий елемент 4, тоді як в послідовності 3, 3, 4, 2, 4, 4, 2, 4 мажоруючого елемента немає.

Вказівки до розвязання задачі: Створіть стек і додавайте або вилучайте зі стеку елементи за таким правилом:

  • на першому кроці покладіть в стек A[1];

  • на i-ом кроці (i=2, ..., N) повторіть такі дії:

якщо стек порожній, то покладіть в нього A[і]; інакше, якщо елемент A[і] співпадає з елементом, що знаходиться у вершині стеку, то додайте A[і] у стек; інакше вилучіть елемент з вершини стеку.

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

10. Задано n однакових на вигляд каменів, деякі з яких насправді різні по вазі. Є прилад, що дозволяє по двох каменях визначити, однакові вони чи різні (але не показує, який тяжчий). Відомо, що серед цих каменів більшість (більше n/2) однакових. Зробивши не більше n зважувань, знайти хоча б один камінь з цієї більшості.

Вказівки до розвязання задачі: Дивіться вказівки до попередньої задачі.

ІІ. Завдання 2: Побудувати динамічну структуру даних стек на базі статичного масиву.

1. Реалізуйте за допомогою одного масиву з N елементiв два послідовних стеки. Стеки повинні рости з кінців масиву назустріч один одному. На вході задаються пари цiлих чисел (i,j), де i=(1;2), j – любе. Перше число (і) вказує на номер стеку (1 або 2), з яким буде виконуватись робота. Якщо друге число j>0, то воно додається в і – тий стек, якщо j<0, то з і - го стеку вилучається один елемент, j=0 – ігнорується. Перепишіть основні операції роботи зі стеками і продемонструйте динаміку стеків.

2. Реалізуйте стек, у якому замість двох функцій top i pop використовується тільки одна функція pop, яка робить ці дві дії одночасно, тобто і вилучає елемент зі стеку, і повертає його значення

3. Задайте послідовність, що складається з цифр 0 і 1 . Кожна цифра 1 додається в класичний стек, а кожна цифра 0 вилучає зі стека один елемент.

4. Напишіть програму, яка будує класичний стек (числа вводяться з клавіатури) і після цього перевіряє, чи елементи стека будуть відсортовані по спаданню або по зростанню.

5. Напишіть програму для реалізації стека, який мiстить цiлi числа, за допомогою масиву data, в якому data[0] (а не окрема змiнна) використовуєтся для зберiгання вершини стека, а решта елементів масиву можуть містити елементи самого стека.

6. Напишіть програму, яка будує класичний стек (числа вводяться з клавіатури) і після цього перевіряє, чи цей стек буде “дзеркальним”.

7. Напишіть програму для послiдовного зберiгання двох стекiв в масивi з N елементiв (стеки розміщуються один за одним: перша половина масиву – перший стек, друга половина масиву – другий стек). На вході задаються пари цiлих чисел (i,j), 1  i  2. Число j пари (i,j) з j>0 додається в i -ий стек; число j пари (i,j), з j<=0, не використовується, але зі стека вилучається один елемент.

8. Реалізуйте стек із “проштовхуванням”: вершина стека завжди знаходиться в першій комірці масиву; при “заштовхуванні” в стек наступного елемента, він поміщається у вершину стеку, а всі решта елементів просуваються на одну позицію далі; при вилученні зі стека одного елемента всі решта елементів пересуваються назад.

9. Реалізуйте стек, у якому до опису стека додано ще дві змінні EMPTY i FULL, замість функції empty. За допомогою цих змінних в функціях push i pop виконати перевірку можливості додавання нового елемента до стека або вилучення елемента з вершини стека.

10. Реалізуйте стек, у якому вершина стека вказує на останній елемент стека, а не на перший вільний елемент масиву.

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