Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab-3.doc
Скачиваний:
19
Добавлен:
16.11.2018
Размер:
283.14 Кб
Скачать

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

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

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

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

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

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

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

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

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

4.1. Вибір варіанта індивідуального завдання

№ варіанта = [(день народження) + (ASCII–код першої літери прізвища – велика латинська літера) ] % 21 + 1

4.2. Варіанти завдань

Змоделювати стек на базі статичного масиву згідно з завданням. Написати основні операції для роботи зі стеком (push, pop, top, empty, full) і продемонструвати правильність їх виконання. Для цього (якщо в завданні не вказано інший спосіб) в програмі на вході задати послідовність з К (К>10) цілих чисел (числа вводити з клавіатури). Всі додатні числа послідовно заносити в стек, а кожне від'ємне число має вилучати зі стеку один елемент. Виводити на екран динаміку вмісту стеку під час обробки заданої послідовності. Вхідну послідовність чисел задати такою, щоб вона демонструвала роботу основних операцій та генерувала виникнення ситуацій "втрати значимості стеку"(stack underflow) і "переповнення стеку" (stack overflow).

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

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

2. Реалізувати стек, у якому до опису стека додано змінну EMPTY замість функції empty(). Переписати основні функції роботи зі стеком з врахуванням цієї змінної. Після обробки всієї заданої вхідної послідовності перевірити, чи елементи стека будуть відсортовані по спаданню, відсортовані по зростанню або невідсортовані.

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

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

5. Реалізувати за допомогою одного масиву з N елементiв два стеки. Стеки повинні рости з кінців масиву назустріч один одному. На вході задається послідовність пар цiлих чисел (X,Y), де X - додатнє ціле число, Y - число 1 або 2. Якщо число X є парним, то воно додається в стек, якщо X є непарним числом, то зі стеку вилучається один елемент. Друге число Y кожної пари (X,Y) вказує на номер стеку, з яким виконується робота. Після обробки всієї заданої вхідної послідовності визначити в якому стеку добуток всіх непарних чисел буде найменьшим.

6. Реалізувати стек, у якому до опису стека додано функцію commute, яка заміняє елемент, що знаходиться у вершині стека, заданим елементом. Кожний раз, коли після операції вилучення у вершині стека опиниться парне число, то треба замінити його таким самим за модулем від'ємним числом. Після обробки всієї заданої вхідної послідовності перевірити, чи буде кількість додатніх і від'ємних чисел у стеку однаковою.

7. Реалізувати стек за допомогою масива data[N], в якому data[0], а не окрема змiнна, використовуєтся для зберiгання покажчика вершини стека, а решта елементів масиву можуть містити елементи стека. Після обробки всієї заданої вхідної послідовності вилучити з отриманого стека нижній елемент.

8. Реалізувати стек, у якому до опису стека додано логічну змінну FULL замість функції full(). Переписати основні функції роботи зі стеком з врахуванням цієї змінної. Після обробки заданої вхідної послідовності перевірити, чи стек буде “дзеркальним” (тобто перший елемент буде дорівнювати останньому, другий – передостанньому і т.д.).

9. Реалізувати за допомогою одного масиву з N елементiв два стеки, що містять слова. Стеки повинні рости з кінців масиву назустріч один одному. На вході задається послідовність слів. Якщо слово починається з приголосної літери, то воно додається в стек, якщо з голосної, то зі стеку вилучається один елемент. Якщо слово містить парну кількість букв, то воно працює з першим стеком, а якщо непарну – то з другим. Після обробки всієї заданої вхідної послідовності поміняти між собою вміст цих стеків.

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

11. Реалізувати стек, у якому до опису стека додано функцію wipe_out, яка вилучає всі елементи зі стеку. Кожний раз, коли у вхідній послідовності зустрічається число 0, то всі елементи мають бути вилучені зі стеку. Після обробки всієї заданої вхідної послідовності перевірити, чи всі числа у стеку будуть парними , чи ні.

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

13. Реалізувати стек, у якому до опису стека додано дві змінні EMPTY та FULL замість функцій empty() та full() відповідно. Переписати основні функції роботи зі стеком з врахуванням цих змінних. Після обробки всієї заданої вхідної послідовності продублювати всі елементи стека (тобто замість кожного одного елемента має стати підряд два однакових).

14. Реалізувати за допомогою одного масиву з N елементiв два стеки, що містять слова. Стеки повинні рости з кінців масиву назустріч один одному. На вході задається послідовність слів. Якщо слово починається з великої літери, то воно додається в стек, якщо з малої, то зі стеку вилучається один елемент. Якщо слово починається з голосної літери, то воно працює з першим стеком, а якщо з приголосної – то з другим. Після обробки всієї заданої вхідної послідовності визначити в якому стеку менша кількість слів.

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

16. Реалізувати стек, у якому до опису стека додано функцію turn, яка міняє порядок слідування всіх елементів у стеку на протилежний. Кожний раз, коли у вхідній послідовності зустрічається число 1, то всі елементи у стеку мають змінити свій порядок слідування на протилежний. Після обробки всієї заданої вхідної послідовності перевірити, чи елементи стека будуть відсортовані по зростанню, чи ні.

17. Реалізувати стек за допомогою масива data[N], в якому останній елемент масива, а не окрема змiнна, використовуєтся для зберiгання покажчика вершини стека, а решта елементів масива можуть містити елементи самого стека. Після обробки всієї заданої вхідної послідовності перетворити отриманий стек так, щоб він не містив однакових елементів, що йдуть підряд (тобто замість кожної послідовності однакових елементів має залишитись тільки один елемент, наприклад, зі стеку з вмістом 22230115555 треба отримати стек з вмістом 23015).

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

19. Реалізувати за допомогою одного масиву з N елементiв два стеки. Стеки повинні рости з кінців масиву назустріч один одному. На вході задається послідовність цiлих чисел. Якщо число додатнє, то воно додається в стек, якщо число від'ємне, то зі стеку вилучається один елемент. Якщо модуль числа є парним числом, то воно робота виконується над першим стеком, якщо непарним – то над другим. Після обробки всієї заданої вхідної послідовності визначити у яких стеках всі елементи меньші за 10.

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

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

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