Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursova_robota_Chastina2_-_2011.doc
Скачиваний:
2
Добавлен:
20.11.2018
Размер:
204.29 Кб
Скачать

3.4. Завдання 2. Частина 2: Застосування атд

І. Розв’язати задачу використовуючи АТД "СТЕК"

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 = AАBABB, то y повинен дорiвнювати BBABАA). Отже, рядок має правильну форму, якщо він складається з будь-якої к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 зважувань, знайти хоча б один камінець з цієї більшості.

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

ІІ. Розв’язати задачу використовуючи АТД "ЧЕРГА"

1. У магазині стоїть черга з m покупців. Час обслуговування покупця з черги – це випадкове ціле число в діапазоні від 1 до t1. Час додавання нового покупця до черги - це випадкове ціле число в діапазоні від 1 до t2.

Промоделювати стан черги:

а) вивести повідомлення про час виникнення подій ( обслуговування та додавання покупця ) за період часу T (T >> t1, T >> t2);

б) показати залишок черги;

в) розв’язати задачу, передбачивши, що через випадковий час від 1 до t3 до початку черги додається „пільговий” покупець, який обслуговується першим, а через випадковий час від 1 до t4 не витримує та йде з черги останній покупець.

2. Автостоянка має одну полосу, на якій може бути розмiщено до 10 автомобiлiв. Машини в'їжджають з пiвденного кiнця стоянки i від'їжджають з пiвнiчного. Якщо автомобiль власника, що прийшов на стоянку забрати його, не розташований пiвнiчнiше за всі решту, то всi автомобiлi, що стоять пiвнiчнiше його, виїжджають iз зупинки, потiм виїжджає його машина і всі машини повертаються в початковому порядку. Якщо машина залишає гараж, то всi машини розташованi пiвденнiше, перемiщаються вперед на стiльки позицій, скiльки є вiльних мiсць в пiвнiчнiй частинi. Написати програму зчитування групи рядків, кожний з яких мiстить літеру "A" для прибуття i літеру "D" для вiдправлення, а також номер машини. Машини прибувають i вiдправляються в порядку, що задає цей список рядків. Програма має видавати повiдомлення при кожному прибутті або вiдправленні машини. При прибутті машини в ньому повинно говоритись, чи є на стоянці вiльне мiсце. Якщо вiльне мiсце вiдсутнє, машина чекає до тих пiр, поки воно не звiльниться, або до моменту зчитування рядка, що повідомляє про вiдправлення цього автомобiля. Якщо з'являється вiльне мiсце, повинно видаватись iнше повiдомлення. При вiдправленнi автомобiля повiдомлення повинно мiстити в собi кiлькiсть перемiщень машини в серединi стоянки (включаючи її вiдправлення, але не прибуття; це число рiвне 0, якщо машина була вiдправлена під час очiкування вільного місця).

3. Написати програму, що моделює обчислювальну систему з кiлькома користувачами. Кожен користувач має свiй унiкальний iдетифiкацiйний номер ID i бажає виконати на ЕОМ ряд операцiй. У будь-який момент часу ЕОМ може виконувати одночасно тiльки одну операцiю. Кожний вхiдний рядок вiдповiдає одному користувачу i мiстить його ID, за яким йде початок роботи, а за ним - набiр цiлих чисел, кожне з яких представляє тривалість кожної з виконуваних користувачем операцiй. Вхiднi данi впорядкованi по зростанню часу початку роботи. Весь час задається в секундах. Вважається, що користувач не видає запрос на проведення наступної операцiї до тих пiр, поки не закiнчилось виконання попередньої, а ЕОМ виконує операцiї за принципом "перший, що поступив, обслуговується першим". Програма повинна iмiтувати роботу системи i виводити повiдомлення, що мiстять ID користувача i час початку i закiнчення проведення операцiї. В кiнцi процесу моделювання вивести середній час очiкування для кожної операцiї. Час очiкування - це рiзниця мiж тим часом, коли був виданий запрос на виконання операцiї, i початком її виконання.

4. Фiрма KRESS по зберiганню i збуту побутової техніки отримує вантажi з товарами по рiзним цiнам. Пізніше фiрма продає ці товари з 20-% надбавкою, причому товари, що отриманi раніше, продаються у першу чергу (стратегiя "перший отриманий - продається першим"). Товари з першої партії грузів продаються по ціні, на 20% вищій ніж закупочна. Після того як вся перша партія повністю розпродана, приступають до продажі другої партії, також по збільшеній на 20% цені, і т.д.

Написати програму, яка зчитує з текстового файлу записи про торговi операцiї двох типiв: операцiї по закупцi i операцiї по продажу. Запис про продажу мiстить префiкс "Р", після якого йде кiлькiсть товару, що продається. Запис про закупку мiстить префiкс "Z" , кiлькiсть товару і вартiсть всієї партiї. Пiсля зчитування запису про закупку товару виводити повідомлення про кiлькiсть товару, вартiсть одиниці товару i загальну вартiсть всiєї партiї. Пiсля зчитування запису про операцiю продажу товару виводити повідомлення про кiлькiсть товару, продану з кожної партії, цiну, по якiй був проданий кожний товар, суму, на яку були продані товари з кожної партії, а також загальну суму проданого товару, середню ціну одиниці товару і суму отриманого прибутку. Якщо кiлькiсть товару що є на складi недостатня для виконання замовлення на продаж товару, то продати всi товари зі складу і вивести повідомлення: "ХХХ одиниць товару немає на складi".

Приклад: Якщо фiрма продала 200 одиниць товару, в які входили 70 одиниць з закупочною цiною 125 грн., 100 одиниць з закупочною цiною 110 грн. i 30 одиниць з закупочною цiною 100 грн., то надрукувати (згадайте про 20-% надбавку) таку послідовність повідомлень:

Фiрма KRESS продала 200 виробiв:

70 штук по ціні 150 грн. на суму 10500 грн.

100 штук по ціні 132 грн. на суму 13200 грн.

30 штук по ціні 180 грн. на суму 5400 грн.

Всього продано товарів на суму 29100 грн. за ціною 145,5 грн. кожний.

Отримано прибутку на суму 6350 грн.

5. У місті розташовано n автобусних зупинок, позначених числами з N={1,2,....,n}. В текстовому файлі записано k автобусних маршрутів, заданих послідовностями сусідніх зупинок при русі автобуса в одному напрямку:

М1={P11,P12,...,P1m1},

М2={P21,P22,...,P2m2},

.....

Mk={Pk1,Pk2,...,Pkmk}, де Pij натуральне число з N.

Написати програму, що по заданих номерах зупинок I і J визначає найбільш швидкий шлях переміщення пасажира з зупинки I у зупинку J з використанням наявних маршрутів автобусів при умові, що час руху між сусідніми зупинками у всіх маршрутах однаковий і у 3 рази менший за час зміни маршруту. Автобуси можуть рухатись в обох напрямках.

Вказівки до розвязання задачі: Ідея рішення грунтується на використанні черг. Для кожної зупинки введіть трійку чисел (О,М,Z), де О - номер зупинки, М - номер маршруту, Z - величина затримки. При виборі чергового елемента з черги можливі дві ситуації:

1). Продовжується рух по тому ж маршруту. У цьому випадку в чергу занесіть трійки типу (О',М,Z), де О' - номер зупинки, сусідньої з О, у маршруті М, Z=0.

2). Змінюється маршрут. У цьому випадку в чергу занесіть трійки типу (О,М',Z), де М' - номер зміненого маршруту, Z=3 (затримка на пересадку).

Всі нові трійки породжуються тільки трійками з затримкою, рівною 0. У випадку трійки з ненульовою затримкою занесіть її знову в чергу зі зменшеним на 1 значенням затримки.

6. Надрукувати в порядку зростання перші n натуральних чисел, у розклад яких на прості множники входять тільки числа 2, 3, 5.

Вказівки до розвязання задачі: Введіть три черги x2, x3, x5, у яких зберігайте елементи, що відповідно в 2, 3, 5 разів більше надрукованих, але ще не надруковані. Найменший з ненадрукованих елементів, нехай це x, ділиться націло на одне з чисел 2, 3, 5. x знаходиться в одній з черг і є в ній першим (менші надруковані, а елементи черг не надруковані). Надрукуйте x, вилучіть його і додайте його кратні. Довжини черг не перевищують числа надрукованих елементів.

7. Дано позначення двох полів шахівниці (наприклад, A5 і C2). Знайти мінімальне число ходів, які потрібні шаховому коневі для переходу з першого поля на друге.

Вказівки до розвязання задачі: Ідея рішення ґрунтується на використанні черги. Спочатку в чергу міститься елемент, що визначає вихідне положення шахового коня, а відповідна клітка поля позначається як така, яку відвідали.

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

  • Із черги вилучається черговий елемент, що визначає деяку позицію (x,y).

  • Знаходяться клітки в межах поля, які досяжні з (x,y) одним ходом шахового коня, і які ще не позначені.

  • Елементи, що відповідають знайденим кліткам, додаються в чергу, а клітки позначаються як такі, яких відвідали.

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

8. У магазині стоїть черга з m покупців. Час обслуговування покупця з черги – це випадкове ціле число в діапазоні від 1 до t1. Час додавання нового покупця до черги - це випадкове ціле число в діапазоні від 1 до t2. Промоделювати стан черги. Вивести повідомлення про час виникнення подій ( обслуго-вування та додавання покупця ) за період часу T (T >> t1, T >> t2).

9. У магазині стоїть черга з m покупців. Час обслуговування покупця з черги – це випадкове ціле число в діапазоні від 1 до t1. Час додавання нового покупця до черги - це випадкове ціле число

в діапазоні від 1 до t2. Промоделювати стан черги. Показати залишок черги.

10. У магазині стоїть черга з m покупців. Час обслуговування покупця з черги – це випадкове ціле число в діапазоні від 1 до t1. Час додавання нового покупця до черги - це випадкове ціле число в діапазоні від 1 до t2. Промоделювати стан черги. Розв’язати задачу, передбачивши, що через випадковий час від 1 до t3 до початку черги додається „пільговий” покупець, який обслуговується першим, а через випадковий час від 1 до t4 не витримує та йде з черги останній покупець.

ІІІ. Розв’язати задачу використовуючи АТД "СПИСОК "

1. Многочлен виду , де представити у вигляді зв’язаного списку в якому кожний вузол має три поля: одне – для коефіцієнта Сi , друге – для показника степеня ni , третє – для вказівника на наступний вузол списку. Для описаного представлення многочленів програмно реалізувати таку операцію:

Додавання двох многочленів.

2. Многочлен виду , де представити у вигляді зв’язаного списку в якому кожний вузол має три поля: одне – для

коефіцієнта Сi , друге – для показника степеня ni , третє – для вказівника на наступний вузол списку. Для описаного представлення многочленів програмно реалізувати таку операцію:

Множення многочлена на одночлен.

3. Многочлен виду , де представити у вигляді зв’язаного списку в якому кожний вузол має три поля: одне – для коефіцієнта Сi , друге – для показника степеня ni , третє – для вказівника на наступний вузол списку. Для описаного представлення многочленів програмно реалізувати таку операцію:

Диференціювання многочлена.

4. Поліном від трьох змінних ( X , Y , Z ) представити у вигляді циклічного списку, в якому кожний вузол має п’ять полів: одне – для коефіцієнта члена поліному , друге – для показника степеня змінної X , третє – для показника степеня змінної Y, четверте – для показника степеня змінної Z, п’яте – для вказівника на наступний вузол списку. Елементи списку мають бути впорядковані спочатку по зменшенню степеня Х, пізніше по зменшенню степеня Y, а після цього по зменшенню степеня Z. Структура збереження поліномів повинна забезпечувати ефективне виконання такої операції над ними:

Додавання двох поліномів.

5. Поліном від трьох змінних ( X , Y , Z ) представити у вигляді циклічного списку, в якому кожний вузол має п’ять полів: одне – для коефіцієнта члена поліному , друге – для показника степеня змінної X , третє – для показника степеня змінної Y, четверте – для показника степеня змінної Z, п’яте – для вказівника на наступний вузол списку. Елементи списку мають бути впорядковані спочатку по зменшенню степеня Х, пізніше по зменшенню степеня Y, а після цього по зменшенню степеня Z. Структура збереження поліномів повинна забезпечувати ефективне виконання такої операції над ними:

Обчислення полінома по заданим значенням X , Y , Z .

6. Написати програму для роботи з розрідженими матрицями, представленими у вигляді зв’язаних списків:

Транспонування розрідженої матриці.

7. Написати програму для роботи з розрідженими матрицями, представленими у вигляді зв’язаних списків:

Додавання двох матриць.

8. Написати програму роботи з довгими числами (довгі числа – це числа, що виходять за діапазон допустимих значень будь-якого стандартного цілого або дійсного типу). Структура збереження довгих чисел повинна забезпечувати ефективну роботу з довільними (додатними і від’ємними) довгими цілими числами. Реалізувати роботу з довгими числами:

Додавання двох довгих чисел.

9. Написати програму роботи з довгими числами (довгі числа – це числа, що виходять за діапазон допустимих значень будь-якого стандартного цілого або дійсного типу). Структура збереження довгих чисел повинна забезпечувати ефективну роботу з довільними (додатними і від’ємними) довгими цілими числами. Реалізувати роботу з довгими числами:

Порівняння двох довгих чисел (дорівнює, не дорівнює, більше, менше).

10. Написати програму роботи з довгими числами (довгі числа – це числа, що виходять за діапазон допустимих значень будь-якого стандартного цілого або дійсного типу). Структура збереження довгих чисел повинна забезпечувати ефективну роботу з довільними (додатними і від’ємними) довгими цілими числами. Реалізувати роботу з довгими числами:

Обчислення значення n!, де n > 12.

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

Вибір АТД:

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

Примітка: 1 – стек, 2 – черга, 3- список.

Вибір номера завдання:

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

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