Ім'я файлу: Лаби АП 2семестр.pdf
Розширення: pdf
Розмір: 779кб.
Дата: 20.04.2022
скачати
Пов'язані файли:
ІНДЗ Вступ до фаху.docx

Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Інститут прикладної математики та фундаментальних наук
Кафедра прикладної математики
Звіт
про виконання лабораторних робіт № 1 – 11 з курсу «Алгоритми та програмування, ч.2»
Виконав (-ла): студент (-ка) групи
(група)
(прізвище та ініціали студента)
Перевірив:
(прізвище та ініціали викладача)
(дата)
(підпис викладача)
Львів – 2022 р.

2021/22 н.р. Група:
Студент:
Лабораторна робота № 1
«Повторення програмування на C++: стандартний ввід/вивід»
Завдання
Створити програму, яка дозволяє з допомогою стандартних функцій вводу/виводу (бібліотека stdio.h) зчитувати по рядках текстові файли, зберігати зчитані рядки у оперативній пам’яті, модифікувати їх та виводити на екран.
Деталізація завдання
1. Частина 1. «Елементарне читання файлу і вивід на екран»
1.1. Створити звичайний текстовий файл (вручну у Notepad, з розширенням '*.txt') довільного змісту.
1.2. Написати програму, яка використовуючи функції стандартної бібліотеки вводу/виводу (stdio.h) зчитує файл по рядках і виводить кожен рядок на екран*.
* Примітка: тут нічого ніде зберігати не потрібно, усе просто: читаємо рядок з допомогою fgets() і кидаємо його на екран з допомогою printf().
2. Частина 2. «Читання у стек і вивід модифікованих рядків»
2.1. . Створити стек для збереження рядків файлу.
2.2. З допомогою стандартного вводу/виводу (stdio.h) зчитати текстовий файл по рядках (як у частині 1) і записати його вміст у стек.
2.3. До кожного запису (рядка!) у стеку додати на початку рядка номер цього рядка. Потрібно модифікувати безпосередньо сам рядок (не створюючи додаткових полів), наприклад, щоб виглядало так:
1: перший рядок
2: другий рядок
2.4. Вивести вміст стеку на екран і одночасно вивільнити стек.
Контрольний список виконання завдання ЛР № 1
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
Читання з текстового файлу з допомогою функцій стандартної бібліотеки вводу/виводу (stdio.h): fopen(), fread(), fgets(), feof(), fclose(), тощо.
2.
Вивід на екран з допомогою функцій стандартної бібліотеки вводу/виводу (stdio.h): puts(), printf(), тощо.
3.
Створення структури даних з двома полями (адресним і
інформаційним), що релазує один елемент стеку.
4.
Створення функцій, що дозволяють надіслати елемент у стек
(напр., push()) та витягнути елемент зі стеку (напр., pop()).
5.
Створення функції, яка дозволяє повністю прочитати файл по рядках та зберегти їх у стеку (напр., LoadFileToStack()).
6.
Створення функції, яка дозволяє вивсти увесь стек на екран, одночасно розвантаживши стек (напр., purge()).
7.
Створення функції, яка перенумеровує рядки, що є
інформаційною частиною стеку (напр., renumber()).
8.
Можливість для описаних вище функцій використовувати довільний вказівник на вершину стеку, переданий з головної програми для виконання дій з цим стеком).
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 1,5)

2021/22 н.р. Група:
Студент:
Лабораторна робота № 2
«Повторення програмування на C++: потоковий ввід/вивід»
Завдання
Створити програму, аналогічну до створеної у ЛР № 1, але із використанням потокових бібліотек вводу/виводу (бібліотеки iostream.h та ін.). Доповнити програму можливістю вибору користувачем будь-якого текстового файлу із поточної директорії.
Деталізація завдання
1. Частина 1. «Перехід до потокового вводу/виводу»
1.1. Виконати завдання як у частинах 1 і 2 ЛР № 1*, лише замість стандартного (stdio.h) використати потоковий ввід/вивід (iostream.h, fstream.h) для читання файлів та виводу їх на екран**.
* Примітка: по-суті, одразу взяти за основу програму з частини 2 ЛР № 1.
* Примітка: у цій ЛР для будь-яких операцій вводу/виводу використовувати лише потокові бібліотеки.
2. Частина 2. «Читання множини текстових файлів з поточної директорії»
2.1. За допомогою потокового вводу/виводу виводити на екран заданий користувачем*** файл із заданої директорії****.
*** Примітка: тут передбачаємо, що користувач повинен задати ім'я файлу і це ім'я файлу він повинен побачити у списку на екрані, а цей список програма повинна вивести, прочитавши вміст директорії та вибравши лише текстові файли.
**** Примітка: використовувати функції FindFirstFile, FindNextFile, GetLastError та FindClose з бібліотеки windows.h для пошуку текстових файлів у поточній директорії.
Контрольний список виконання завдання ЛР № 2
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
Організація вводу/виводу на екран з допомогою бібліотеки потокового вводу/виводу (iostream.h).
2.
Організація вводу/виводу з текстових файлів з допомогою бібліотеки потокового вводу/виводу (fstream.h).
3.
Використання усіх функцій (створених у ЛР № 1 та модифікованих для ЛР № 2) для роботи зі стеком.
4.
Читання переліку текстових файлів з поточної директорії із використанням функцій бібліотеки windows.h.
5.
Організація вибору користувачем файлу, вміст якого він бажає побачити на екрані.
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 1,5)

2021/22 н.р. Група:
Студент:
Лабораторна робота № 3
«Створення класу із перевантаженими методами на C++»
Завдання
Створити клас та описати перевантажені методи згідно індивідуального завдання.
Деталізація завдання
1. Частина 1. «Створення класу»
1.1. Описати клас згідно індивідуального завдання, обов’язково створивши у ньому:
1.1.1. принаймні по одному відкритому (public), закритому (private) та захищеному (protected) полю;
1.1.2. конструктор по замовчуванню, конструктор з параметрами, конструктор копіювання;
1.1.3. деструктор;
1.1.4. відкриті (public) методи-аксесори для читання та запису закритих та захищених полів;
1.1.5. поля та методи, що забезпечують реалізацію згаданої у індивідуальному завданні функціональності класу;
1.1.6. поля та методи, що дозволяють розширити можливості класу відповідно до тематики
індивідуального завдання (лише для прикладу, або передбачити їх на майбутнє);
1.1.7. метод виводу екземпляру класу на екран;
1.1.8. консольний метод ініціалізації екземпляру класу (вводу з клавіатури);
1.1.9. файловий метод зберігання екземпляру класу (у текстовий або бінарний файл);
1.1.10. файловий метод ініціалізації екземпляру класу (з текстового або бінарного файлу).
1.2. У головній програмі:
1.2.1. створити принаймні один екземпляр класу та принаймні один вказівник на екземпляр цього ж класу, проілюструвавши роботу різних типів конструкторів;
1.2.2. продемонструвати звертання до полів екземпляру класу та використання методів-аксесорів;
1.2.3. створити посилання на екземпляр класу через вказівник та продемонструвати використання полів та методів класу через цей вказівник на екземпляр класу;
1.2.4. динамічно створити (new) екземпляр класу, зберігши його адресу у раніше описаному вказівнику, продемонструвати роботу з ним та видалити (delete);
1.2.5. продемонструвати роботу з усіма додатково створеними полями та методами;
1.2.6. продемонструвати роботу з усіма описаними методами вводу/виводу класу.
2. Частина 2. «Перевантаження методів класу»
2.1. Описати клас із частини 1 з перевантаженим методом відповідно до індивідуального завдання.
2.2. У головній програмі проілюструвати роботу перевантажених методів.
3. Частина 3. «Створення статичних полів та методів класу»
3.1. Описати клас із частини 2 зі статичними елементами:
3.1.1. закритим (private) статичним (static) полем (напр., count), яке веде облік кількості дійсних у даний момент екземплярів класу;
3.1.2. відкритим статичним методом (напр., GetCount()), який повертає значення закритого статичного поля;
3.1.3. конструктори і деструктор класу повинні відповідно збільшувати та зменшувати значення статичного поля (count) на одиницю.
3.2. У головній програмі:
3.2.1. створити кілька екземплярів описаного класу, в т.ч. динамічно;
3.2.2. з допомогою статичного метода (GetCount()) виводити на екран поточну кількість екземплярів класу (після кожного створення та знищення об’єктів).

2021/22 н.р. Група:
Студент:
Індивідуальні завдання до ЛР № 3
1. Клас «Автобусний квиток»
Поля «номер» (private), «контроль» (protected), «пасажир» (public). У поле «пасажир» передбачається за необхідності можливість вписування довільного імені пасажира (в т.ч. самим пасажиром). Поле «номер» зберігає інформацію про унікальний номер квитка – цей номер, наприклад, може генеруватися у конструкторі із використанням спеціального статичного методу із використанням статичного поля, що зберігатиме останній згенерований номер квитка. Поле
«контроль» передбачене для створення можливості внесення контрольних відміток на квитку у випадку його перевірки водієм/контролером при посадці у автобус або при перевірці квитків пасажирів – поле захищене, оскільки передбачається можливість вдосконалення способів встановлення контрольних відміток у класах-нащадках, а з іншого боку поле повинно бути змінено деяким специфічним чином, який, можливо, буде відомий лише у дружньому класі/методі іншого класу (наприклад, класу «Контролер»). Додаткові поля класу: дата/час та місце продажу квитка, пункт відправлення, пункт призначення, дата/час відправлення, дата/час прибуття, номер рейсу/автобуса, масив проміжних пунктів зупинки, номер місця, можливість перевезення багажу (у багажному відсіку автобуса) тощо.
Перевантажений метод класу – «Продаж» – даний метод здійснює ініціалізацію (встановлення початкових значень) екземпляру класу та контролює можливість встановлення/зміни значень полів класу лише 1 (один) раз (для цього слід створити та використовувати закрите поле «продано», значення якого може бути false/true відповідно до того, чи викликався, чи ні метод «Продаж»). Метод можна перевантажувати із різною кількістю вхідних аргументів (відповідно до того, які поля є більш чи менш необхідними для встановлення їх значень) та без аргументів (для перевірки статусу поля
«продано»).
У класі також може бути передбачено метод «Анулювати», зміст якого у очищенні усіх додаткових полів екземпляру класу (в т.ч. й поля «продано») для створення можливості повторного використання квитка із даним згенерованим номером, якщо пасажир повернув такий квиток у «Касу».
Згодом при наслідуванні класу слід буде перевизначити методи ряду додаткових полів як захищені, щоб реалізувати бізнес-логіку, при якій усі маніпуляції із даними квитка може проводити лише «Каса». Наприклад, «місце продажу» квитка має бути закритим полем, значення якого встановлюється лише під час його першого продажу, а подальший доступ до нього буде можливий лише у випадку, якщо квиток здається у ту саму касу, що виконала продаж цього квитка. Також згодом повинні бути створені нові типи квитків, які по-різному оброблятимуться «Компостерами» (з метою контролю одноразового/багаторазового проїзду, допустимості проїзду за часом/рейсом/напрямом тощо).
2. Клас «Компостер»
Поля «номер» (private), «шифр» (protected), «квиток» (public). Компостер є пристроєм, що характеризується унікальним фабричним номером – цей номер може генеруватися у конструкторі із використанням спеціального статичного методу, що міститиме деякий алгоритм генерації таких номерів (наприклад, із використанням статичного поля, що зберігатиме останній згенерований номер).
Поле «шифр» використовується для маркування квитків, що подаються на контроль компостера – цей шифр має встановлюватися однаковим для двох і більше компостерів, які встановлені у одному автобусі, – поле захищене, оскільки передбачається можливість вдосконалення компостерів і способів створення їх шифрів. Поле «квиток» використовується для подачі квитка на компостер і повинно використовуватися спільно із методом «Перевірка», що здійснюватиме перевірку правильності поданого квитка та його маркування (у подальших вдосконаленнях класу) або лише маркування (у початковій реалізації). Додаткові поля класу: номер автобуса, номер рейсу, поточна дата/час, кількість опрацьованих квитків, масив номерів опрацьованих квитків, дата/час введення у експлуатацію,

2021/22 н.р. Група:
Студент: дата/час останньої перевірки, кількість відпрацьованих годин (можливо, від часу останньої перевірки) тощо.
Перевантажений метод класу – «Контроль» – метод повинен дозволяти здійснювати перевірки різних типів квитків та різні типи перевірок. Наприклад, квитки можуть бути одноразові чи багаторазові
(цю інформацію компостер може визначити відповідно до деякого специфічного алгоритму, описаного статичним методом, що аналізує номер квитка), а також квиток може мати чи не мати відмітки контролю – відповідно компостер повинен визначати потрібно чи ні змінювати контрольну відмітку на квитку. Метод «Контроль», викликаний без параметрів, може повертати відповідь про придатність даного компостера до роботи (наприклад, контролювати відпрацьований ним час).
Згодом, коли йтиметься про появу нових видів квитків та компостерів, метод «Контроль» повинен контролювати допустимість використання квитка на вході та виході із автобуса, автобусної станції тощо. Також може бути додана й інша бізнес-логіка, що опише методику функціонування більш розвиненого компостера.
3. Клас «Каса»
Поля «номер» (private), «квиток» (protected), «пасажир» (public). Каса характеризується унікальним номером, який може вноситися у інформацію про місце продажу квитка. Поле «квиток» визначає номер квитка, який зараз обробляє (продає/випускає) каса. Крім того, каса можу використовувати відкрите поле «пасажир» для запису його значення у квиток, що перебуває у обробці.
Після завершення обробки квитка поле «пасажир» має бути очищене (це також може бути індикатором доступності каси для обслуговування наступного пасажира – якщо ж передбачається анонімне обслуговування пасажирів, тоді для обслуговування пасажира може використовуватися замість імені пасажира просто слово ‘пасажир’). Поле «пасажир» може також використовуватися касою для
інформування про свій статус (наприклад, як аналог таблички ‘обід’ у віконці каси). Додаткові поля класу: години роботи, кількість проданих квитків, рейси, на які може бути продано квитки, сума виручки, гранична допустима сума виручки для проведення інкасації, обсяг залишку паперу для друку квитків, масив проданих квитків, масив номерів повернених квитків (каса може першочергово використовувати вже створені раніше номери квитків для продажу) тощо.
Перевантажений метод класу – «Продати» – метод, що отримує різний набір інформації від пасажирів про бажані параметри їх поїздки та, у разі наявності відповідних рейсів, ініціювати продаж необхідної кількості квитків. Метод «Продати» без параметрів може бути використаний для перевірки чи працює каса у даний момент (як аналог простого запиту від пасажира: «ви працюєте?»).
Згодом «Каса» має стати класом, відповідальним за створення нових екземплярів класу
«Квиток» та мати спеціальний метод, через який будь-який «Компостер» зможе провести перевірку факту купівлі квитка. Також може бути створено каси для продажу різних типів квитків, наприклад, крім автобусного ще залізничного, авіаційного чи морського транспорту.
Рекомендація
Уважно перечитайте умови усіх індивідуальних завдань та реалізуйте своє завдання,
передбачаючи можливість спільного використання екземплярів свого класу із екземплярами інших
класів відповідно до того, як це вказано у індивідуальних завданнях.

2021/22 н.р. Група:
Студент:
Вказівка до індивідуального завдання
Для виконання і оформлення ЛР слід друкувати усі аркуші цього завдання, вписавши на кожній сторінці (у відповідні поля згори) групу та прізвище студента (заповнює студент).
Викладач визначає номер індивідуального завдання, яке студент виконує, і вписує його тут: завдання №
Клас
(заповнює викладач).
Контрольний список виконання завдання ЛР № 3
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
Опис принаймні одного відкритого (public), одного закритого (private) та одного захищеного (protected) поля.
2.
Опис та ілюстрація роботи:
конструктора по замовчуванню;
– конструктора з параметрами;
– конструктора копіювання.
3.
Опис та ілюстрація роботи відкритих (public) методів- аксесорів для закритих та захищених полів.
4.
Створення, демонстрація роботи та видалення динамічно створеного екземпляру класу.
5.
Створення та демонстрація роботи (лише тестова, тобто без повної реалізації бізнес-логіки) з усіма додатковими полями та методами класу, що реалізують тематику індивідуального завдання.
6.
Демонстрація роботи консольних методів вводу/виводу екземпляру класу.
7.
Демонстрація роботи файлових методів вводу/виводу екземпляру класу.
8.
Опис та ілюстрація роботи перевантаженого методу (згідно з індивідуальним завданням).
9.
Опис статичного поля та статичного методу класу.
10.
Модифікація раніше описаних конструкторів та деструкторів для маніпуляцій із статичним полем.
11.
Ілюстрація зміни значення статичного поля при роботі з екземплярами класу.
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 3)

2021/22 н.р. Група:
Студент:
Лабораторна робота № 4
«Перевантаження операцій для класу на C++»
Завдання
Для класу, створеного у ЛР №3, описати перевантажені оператори зсувів для потокового вводу виводу та оператори порівняння для сортування масиву екземплярів класу.
Деталізація завдання
1. Частина 1. «Перевантаження операцій зсувів»
1.1. В класі, описаному згідно індивідуального завдання у ЛР №3, перевантажити як дружні операції зсувів для організації вводу/виводу:
1.1.1. консольний ввід — з класом istream;
1.1.2. вивід на екран — з класом ostream;
1.1.3. файловий ввід/вивід (читання з файлу та запис у файл) — з класами ifstream та ofstream.
1.2. У головній програмі:
1.2.1. проілюструвати роботу перевантажених операцій для потокового вводу/виводу.
2. Частина 2. «Перевантаження операцій порівняння»
2.1. В класі, описаному згідно індивідуального завдання у ЛР №3, перевантажити операції порівняння
(принаймні три — більше, менше та рівність).
2.2. У головній програмі проілюструвати роботу перевантажених операцій порівняння.
3. Частина 3. «Сортування масиву екземплярів класу»
3.1. У головній програмі продемонструвати ввід/вивід та сортування масиву екземплярів класу з допомогою перевантажених операцій.
Контрольний список виконання завдання ЛР № 4
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
Опис та ілюстрація роботи перевантажених для заданого класу операцій вводу/виводу з консольними потоками.
2.
Опис та ілюстрація роботи перевантажених для заданого класу операцій вводу/виводу з файловими потоками.
3.
Опис перевантажених для заданого класу операцій порівняння (більше, менше, рівність, тощо).
4.
Сортування масиву екземплярів класу із використанням перевантажених операцій порівняння.
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 3)

2021/22 н.р. Група:
Студент:
Лабораторна робота № 5
«Просте наслідування на C++»
Завдання
Для класу, створеного у ЛР №3, створити базовий абстрактний клас та побудувати ієрархію для отримання класу описаного в індивідуальному завданні та його нащадків, використовуючи лише просте наслідування.
Деталізація завдання
1. Частина 1. «Просте наслідування»
1.1. Для класу, описаного в індивідуальному завдання у ЛР №3, створити базовий абстрактний клас.
1.2. Побудувати ієрархію класів, використовуючи лише просте наслідування:
1.2.1. створити один або кілька проміжних класів-предків, що успадковують базовий абстрактний клас, та вивести з них результуючий клас, що описаний у індивідуальному завдані;
1.2.2. створити кілька класів-нащадків, що успадковують (з різними ключами доступу) клас, описаний в індивідуальному завданні.
1.3. У головній програмі проілюструвати роботу усіх класів ієрархії та властивості класів, що мають успадковані з різними ключами доступу елементи:
1.3.1. приклади успішного звертання до відкритих, захищених та закритих полів класів з їх безпосередніх екземплярів;
1.3.2. приклади успішного звертання через екземпляри класів-нащадків до полів усіх батьківських класів в ієрархії;
1.3.3. приклади неуспішного звертання через екземпляри класів-нащадків до полів усіх батьківських класів в ієрархії у вигляді закоментованих рядків — розкоментовувати кожен такий рядок перед компіляцією і, виявивши помилку, знову закоментувати, для подальшої успішної компіляції;
1.3.4. окремо порівняти звертання до полів деякого класу у його безпосередньому нащадку
(успадкування у наступному за ним поколінні) та нащадках його нащадка (успадкування через одне та більше поколінь).
2. Частина 2. «Поліморфна функція»
2.1. Описати поліморфну функцію, операндом якої буде абстрактний клас з частини 1. Призначення та дії функції придумати самостійно, відповідно до тематики індивідуального завдання.
2.2. У головній програмі проілюструвати роботу поліморфної функції.
Контрольний список виконання завдання ЛР № 5
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
Опис абстрактного класу.
2.
Опис та ілюстрація роботи об’єктів для усіх класів з ієрархії.
3.
Ілюстрація особливостей успадкування екземплярів класів- нащадків з різними ключами доступу.
4.
Опис та ілюстрація роботи поліморфної функції.
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 3)

2021/22 н.р. Група:
Студент:
Лабораторна робота № 6
«Множинне наслідування на C++»
Завдання
Створити 3 класи та вивести з них класи-нащадки, що успадкували б атрибути та методи від усіх батьківських класів. Також використати абстрактний клас та поліморфну функцію (згідно
індивідуального завдання).
Деталізація завдання
1. Частина 1. «Інтерфейси»
1.1. Створити 2 (два) інтерфейси*:
1.1.1. Інтерфейс автоматичного нумерування об’єктів класу: метод, що повертає номер поточного об’єкту; метод, що повертає кількість усіх об’єктів.
1.1.2. Інтерфейс конвертації об’єкту у стрічку та навпаки: метод перетворення об’єкту у стрічку; метод перетворення стрічки у об’єкт.
2. Частина 2. «Множинне наслідування»
2.1. На основі одного з класів ієрархії класів, побудованої у ЛР №5 згідно індивідуального завдання у
ЛР №3, та створених у частині 1 інтерфейсів, використовуючи множинне наслідування, вивести новий клас**.
2.2. Описати поліморфні функції, що приймають своїми параметрами вказівники на інтерфейси з частини 1:
2.2.1. функцію сортування масиву об’єктів за їх номерами (використати інтерфейс із п. 1.1.1.);
2.2.2. функції-операції зсуву для потокового вводу/виводу, що використовує інтерфейс із перетворенням об’єкту у стрічку та навпаки (використати інтерфейс із п. 1.1.2.).
2.3. У головній програмі проілюструвати роботу класу, створеного у п. 2.1., та поліморфних функцій, створених у п. 2.2.
* Примітка: оскільки у мові C++ немає спеціального типу «interface», слід створювати абстрактний клас з усіма чисто віртуальними методами — це й буде інтерфейсом.
** Примітка: за відсутності у мові C++ спеціалізованого типу «interface» механізм множинного наслідування створює альтернативу наслідуванню інтерфейсів у інших об’єктно-орієнтованих мовах.
Контрольний список виконання завдання ЛР № 6
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
Коректне створення інтерфейсу роботи з понумерованими об’єктами (п. 1.1.1.).
2.
Коректне створення інтерфейсу конвертації об’єктів у стрічки та навпаки (п. 1.1.2.).
3.
Використання множинного наслідування для виведення
ієрархії класів (п. 2.1.).
4.
Опис та ілюстрація роботи поліморфної функції сортування об’єктів (п.2.2.1).
5.
Опис та ілюстрація роботи поліморфної функції потокового вводу/виводу об’єктів (п.2.2.2).
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 3)

2021/22 н.р. Група:
Студент:
Лабораторна робота № 7
«Стандартна бібліотека шаблонів»
Завдання
Виконати завдання ЛР №2 із застосуванням контейнера типу стек стандартної бібліотеки шаблонів.
Деталізація завдання
1. Частина 1. «Контейнери стандартної бібліотеки шаблонів»
1.1. Для виконання завдання, поставленого у ЛР №2, використати можливості стандартної бібліотеки шаблонів (STL) для зберігання даних у структурі даних типу стек (stack)*.
2. Частина 2. «Ітератори»
2.1. Для виконання операцій файлового потокового вводу/виводу використати відповідні ітератори
(istream_iterator та ostream_iterator).
3. Частина 3. «Створення класу»
3.1. Вивести (на основі шаблону STL) із контейнерного класу типу стек (stack) клас, що реалізує зберігання стеку стрічок та забезпечує виконання базових операцій з цим стеком:
3.1.1. додавання стрічки у стек;
3.1.2. одержання стрічки з вершини стеку з одночасним вивільненням вершини;
3.1.3. перевертання стеку (зміна порядку на зворотній).
3.2. Вивести клас (на основі стандартного потокового вводу/виводу із застосуванням ітераторів), що реалізує читання цілими стрічками (а не окремими словами, як при потоковому вводі за замовчуванням) та запис стрічок у файли.
3.3. Створити клас-нащадок попередніх класів, що інкапсулює можливості створення копій текстових файлів із перенумерованими рядками.
* Примітка: при форматуванні стрічок обов’язково використати стрічкові потоки (ostringstream, istringstream, або stringstream).
Контрольний список виконання завдання ЛР № 7
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
Застосування стандартного контейнера типу стек (stack).
2.
Використання ітераторів потокового вводу/виводу
(istream_iterator, ostream_iterator).
3.
Створення ієрархії класів, що реалізують виконання завдань
Частини 3 цієї лабораторної роботи.
4.
Опис та ілюстрація роботи класу, що інкапсулює усі можливості для виконання завдання ЛР №2.
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 3)

2021/22 н.р. Група:
Студент:
Предметні області індивідуальних завдань до ЛР №8–10
Індивідуальні завдання ЛР №8, 9 та 10 виконуються як роботи згідно даних предметних областей. У підсумку виконання цих трьох ЛР повинен бути створений єдиний завершений проект та тестовий сценарій для демонстрації (перевірки) усіх аспектів функціонування системи.
1. Квиткова каса. Потрібно описати модель функціонування квиткової каси кінотеатру. Модель повинна включати схему глядацьких місць (із інформацією про їх відносну вартість залежно від сеансу – як мультиплікативний коефіцієнт від базової вартості квитка), розклад сеансів (із
інформацією про ), інформацію про кінострічки для перегляду (включно із інформацією про базову вартість квитка, тривалість стрічки у хвилинах, коротким текстовим описом, категорією вікового обмеження для перегляду), бронювання та купівлю квитків різних типів (звичайні,
іменні), можливість побудови рейтингу «постійних глядачів» (тих, хто купляв іменні квитки).
Система повинна забезпечити таку функціональність: 1) збереження усієї інформації у файлах
ОС шляхом їх читання/запису при старті/зупинці системи; 2) продаж квитків глядачам на сеанси, включаючи продаж безіменних та іменних квитків; 3) встановлення/зняття блокування перед продажем квитка для створення можливості багатокористувацького доступу до файлів даних. Для виконання ЛР у системі створити: 1) клас «Каса» і використовувати його як точку входу у систему (метод Main) та для продажу квитків і побудови рейтингу глядачів
(передбачити необхідні поля та методи класу); 2) клас «Кінозал», що міститиме схему глядацьких місць та обліковуватиме продані квитки; 3) клас «Кінострічка», що міститиме
інформацію про кінострічку; 4) клас «Розклад», що міститиме інформацію про призначення сеансів (тобто співставлятиме часовим інтервалам кінострічку та кінозал); 5) ієрархію класів
«Глядач» – «Постійний глядач»; 6) перевантажені оператори порівняння (>,<,==) для класу
«Постійний глядач», щоб можна було формувати рейтинг постійних глядачів; 7) для усіх класів перевантажений метод ToString().
2. Система безпеки. Деяка будівля (довільна кількість поверхів – за вашим вибором) обладнана системами пожежогасіння та відеонагляду. Для контролю використовуються датчики температури, освітленості та руху. До цих датчиків приєднано вентиль подачі води (для гасіння пожеж), систему освітлення приміщення та фотокамеру (для фотографування приміщення).
Схема роботи датчиків та обладнання для пожежогасіння така: якщо спрацьовує датчик температури на підвищення температури вище заданого рівня (T
1
), подається сигнал на пульт служби безпеки будівлі, вмикається світло (на деякий час, після чого освітлення повертається до попереднього стану – залежно чи було воно включене чи виключене), робиться знімок фотокамерою (він теж передається на пульт); якщо спрацьовує датчик температури на підвищення температури вище заданого рівня (T
2
> T
1
), у приміщенні вимикається освітлення, відкривається вентиль подачі води на деякий фіксований час, після чого він закривається.
Схема роботи датчиків та обладнання для відеонагляду така: якщо спрацьовує датчик руху і освітлення було вимкнене, вмикається освітлення (на деякий час, після чого вимикається); щойно вмикається освітлення (це фіксує датчик освітлення), вмикається камера та робить знімок приміщення (знімок надсилається на пульт служби безпеки). Уся інформація про зміни у приміщеннях будівлі передається на пульт служби безпеки, про що ведеться журнал обліку
(записується у файл), куди вносяться відповідні записи із зазначенням моменту часу (у довільній формі – можливо просто числову мітку часу). Приміщення кожного поверху пронумеровано та щодо кожного зберігається інформація про площу (в т.ч. ширину, довжину), кількість вікон, кількість дверей (входів/виходів) та відсоток наповненості об’єму. Кожен поверх має деяку висоту та відрізняється від інших поверхів. У кожному приміщенні встановлено датчики температури із розрахунку 1 датчик на площу до 9 м
2
, 1 вентиль подачі води на площу не більше 4 м
2
, 1 камера на площу не більше 16 м
2
та не менше 1 камери на кожен вхід/вихід, 1 датчик освітленості на кожну камеру, 1 датчик руху на кожен вхід/вихід із

2021/22 н.р. Група:
Студент: приміщення. У коридорах відеонагляд (камери, датчики освітлення та датчики руху) встановлено лише на входах, а пожежогасіння (датчики температури та вентилі води) рівномірно відповідно до показників площі. Система повинна забезпечити таку функціональність: 1) збереження усієї інформації у файлах ОС шляхом їх читання/запису при старті/зупинці системи та ведення журналу подій (запис у файл); 2) повідомлення пульту служби безпеки про усі позаштатні ситуації (підвищення температури; спрацювання більше двох датчиків поряд; не спрацювання датчика між двома сусідніми, що спрацювали). Для виконання ЛР у системі створити: 1) клас «Пульт», який використовувати як точку входу у систему (метод Main) і монітор повідомлень від датчиків та повідомлень про позаштатні ситуації; 2) класи «Будівля», «Поверх» та «Приміщення», що міститимуть відповідну
інформацію; 3) ієрархію класів «Датчик» –{«Температура», «Освітлення», «Рух»} та ієрархію класів «Пристрій» – {«Камера», «Вентиль», «Лампа»}; 4) для класу «Приміщення» перевантажені оператори додавання/віднімання (+, –), що мають реалізувати можливість перепланування системи датчиків та обладнання (їх автоматичне створення/видалення у системі) на випадок об’єднання/поділу приміщень; 5) для усіх класів перевантажений метод
ToString().
3. Магазин. Магазин веде торгівлю деякими товарами, кожен із яких ідентифікується за своїм штрих-кодом. Деякі товари мають штрих-код від виробника, а деяким товарам штрих-код генерується магазином. Також магазин формує «акційні» набори, групуючи деякі товари та надаючи такому набору новий штрих-код (відмінний від штрих-кодів кожного із товарів, що включено у набір). Система повинна забезпечити таку функціональність: 1) збереження усієї
інформації у файлах ОС шляхом їх читання/запису при старті/зупинці системи; 2) обліковувати прихід/розхід усіх товарів, у т.ч. списання прострочених, а також прийом рекламацій
(повернення бракованих товарів покупцями в межах гарантійного строку) та передачу їх виробнику; 3) об’єднання товарів у акційні набори; 4) ведення журналу реєстрації операцій
(запис у файл) та контроль позитивного залишку коштів у касі (читання з файлу журналу та на основі прочитаних даних підрахунок залишку). Для виконання ЛР у системі створити: 1) клас
«Магазин» і використовувати його як точку входу у систему (метод Main), зберігання переліку наявних товарів та для виконання основних операцій – прихід/розхід та ідентифікацію товарів шляхом читання штрих-коду (передбачити необхідні поля та методи класу, в т.ч. перевантажені); 2) класи «Штрих-код» та «Касовий апарат», що міститимуть відповідну
інформацію; 3) ієрархію класів «Товар» –{«Строковий», «Безстроковий»}; 3) передбачити обов’язкову інкапсуляцію (включення) не менш ніж одного екземпляру класу «Штрих-код» у класі «Товар», причому для акційних наборів крім основного штрих-коду (що ідентифікує власне набір) повинні бути збережені штрих-коди складових (товарів, із яких складено набір);
4) для класу «Штрих-код» статичні поля та методи для контролю унікальності штрих-кодів, обліку залишку товарів із однаковими штрих-кодами; 5) перевантажені оператори множення/ділення (*, /) для класу «Штрих-код», що мають реалізувати можливість об’єднання відповідних товарів у акційні набори (із генерацією нового штрих-коду) та розукомплектування таких наборів; 6) перевантажені оператори операційного присвоєння (+=, –=) для класу
«Товар», що мають реалізувати можливість збільшення/зменшення відповідного товару на задану кількість у одиницях виміру цього товару; 7) для усіх класів перевантажений метод
ToString().

2021/22 н.р. Група:
Студент:
Лабораторна робота № 8
«Створення класу із перевантаженими методами на мові C#»
Завдання
Виконати завдання у запропонованій предметній області.
Деталізація завдання
1. Частина 1. «Створення класу»
1.1. Описати клас згідно індивідуального завдання, обов’язково створивши у ньому:
1.1.1. принаймні по одному відкритому (public), закритому (private) та захищеному (protected) полю;
1.1.2. конструктор по замовчуванню, конструктор з параметрами, конструктор копіювання, статичний конструктор;
1.1.3. властивості з різними поєднаннями аксесорів для читання (get) та запису (set);
1.1.4. поля та методи, що забезпечують реалізацію згаданої у індивідуальному завданні функціональності класу.
1.2. Описати методи консольного та файлового вводу/виводу:
1.2.1. консольний метод ініціалізації екземпляру класу (вводу з клавіатури);
1.2.2. метод ініціалізації екземпляру класу шляхом читання даних із файлу;
1.2.3. метод для запису екземпляру класу у файл.
2. Частина 2. «Перевантаження методів класу»
2.1. Перевантажити метод ToString() виводу екземпляру класу на екран.
2.2. Перевантажити інші методи класу із частини 1 відповідно до індивідуального завдання.
2.3. У головній програмі проілюструвати роботу перевантажених методів.
3. Частина 3. «Створення статичних полів та методів класу»
3.1. Описати у класі статичні поля та методи (крім Main()) відповідно до тематики індивідуального завдання.
Контрольний список виконання завдання ЛР № 8
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
Опис принаймні одного відкритого (public), одного закритого (private) та одного захищеного (protected) поля.
2.
Опис та ілюстрація роботи:
– конструктора по замовчуванню;
– конструктора з параметрами;
– конструктора копіювання;
– статичного конструктора.
3.
Використання усіх полів та методів класу, що реалізують тематику індивідуального завдання.
4.
Демонстрація роботи консольних методів вводу/виводу екземпляру класу.
5.
Демонстрація роботи файлових методів вводу/виводу екземпляру класу.
6.
Опис та ілюстрація роботи перевантажених методів.
7.
Опис статичних полів та статичних методів класу.
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 3)

2021/22 н.р. Група:
Студент:
Лабораторна робота № 9
«Наслідування на мові C#»
Завдання
Створити ієрархію класів згідно з індивідуальним завданням.
Деталізація завдання
1. Частина 1. «Створення базових класів»
1.1. Описати базовий абстрактний клас відповідно до тематики індивідуального звдання.
1.2. Описати абстрактні класи-нащадки, що групують товари за категоріями:
2. Частина 2. «Створення інтерфейсів»
2.1. Описати інтерфейси для окремих класів, що реалізують тематику індивідуального завдання.
3. Частина 3. «Герметизовані класи»
3.1. Описати герметизовані (sealed) класи-нащадки відповідно до індивідуального завдання.
3.2. Реалізувати усі методи базових класів та запропонувати специфічні для нащадків методи.
3.3. Описати принаймні один поліморфний метод, який реалізує взаємодію через посилання на базові класи.
4. Частина 4. «Головна програма»
4.1. Створити демонстраційний тест для перевірки усіх особливостей описаних класів.
Контрольний список виконання завдання ЛР № 9
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
Опис базового абстрактного класу ієрархії.
2.
Опис інтерфейсів.
3.
Опис звичайних та герметизованих класів-нащадків.
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 3)

2021/22 н.р. Група:
Студент:
Лабораторна робота № 10
«Перевантаження операцій на мові C#»
Завдання
Перевантажити арифметичні та логічні операції для використання із екземплярами класів із ЛР №4.
Деталізація завдання
1. Частина 1. «Створення колекції об’єктів та перевантаження оператора індексації [ ]»
1.1. Створити у деякому класі відповідно до тематики індивідуального завдання поле, що містить приватну колекцію об’єктів (наприклад, як екземпляр ArrayList).
1.2. Для класу із п.1.1. описати індексатор, що працює з даними з колекції.
1.3. Перевантажити індексатор для використання в режимі асоціативного масиву.
2. Частина 2. «Перевантаження арифметичних та логічних операцій»
2.1. Для класів вказаних у індивідуальному завданні перевантажити відповідним чином логічні/арифметичні операції.
3. Частина 3. «Головна програма»
3.1. Створити демонстраційний тест для перевірки усіх особливостей перевантажених операцій.
Контрольний список виконання завдання ЛР № 10
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
Опис класу-колекції об’єктів.
2.
Опис індексатора.
3.
Перевантаження індексатора для використання в режимі асоціативного масиву.
4.
Перевантаження арифметичних та/або логічних операцій відповідно до індивідуального завдання.
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 3)

2021/22 н.р. Група:
Студент:
Лабораторна робота № 11
«Шаблони проектування»
Завдання
Реалізувати шаблон проектування (патерн) згідно індивідуального завдання.
Деталізація завдання
1. Частина 1. «UML-діаграма класів»
1.1. Скласти UML-діаграму класів, що реалізують індивідуальне завдання. Обов’язково використати
«стереотипи» у позначеннях (інтерфейсів, шаблонів проектування, тощо).
2. Частина 2. «Програмна реалізація»
2.1. Написати програмний код для опису та реалізації класів, відповідно до індивідуального завдання.
Обов’язково використати шаблони проектування «Одинак» (Singleton) та «Ітератор» (Iterator).
2.2. У головній програмі проілюструвати роботу використаних шаблонів проектування.
Індивідуальні завдання до ЛР № 11
1. Модель «Годинник на ратуші». У місті працюють «Ремісники», що використовують для організації часу у своїй роботі «Годинник» на міській ратуші. «Пекар» о 4 ранку розпалює піч, о
5 замішує тісто, о 6 ставить тісто випікатись, о 7 витягає випічку з печі, о 8 відкриває пекарню для продажу випічки, о 16 зачиняє пекарню. «Чоботяр» о 10 відкриває майстерню, об 11 випиває гальбу пива, о 15 починає співати пісню, о 18 зачиняє майстерню і йде до шинку.
«Шинкар» о 16 починає варити пиво, о 17 відчиняє шинок, о 23 зачиняє шинок. Усі вони прислухаються до того, яка година, і відповідно до цього вирішують, що їм слід робити.
«Годинник» дозволяє чути усім, хто його слухає, котра година, тобто виступає спостережуваним суб’єктом, а ремісники — спостерігачами. Використати шаблон проектування «Одинак»
(Singleton) для опису класу «Годинник», шаблон проектування «Спостерігач» (Observer) для опису взаємодії нащадків класу «Ремісник» (observer) з класом «Годинник» (observable) та шаблон проектування «Ітератор» (Iterator) для організації послідовного звертання до списку спостерігачів.
2. Модель «Святий Миколай». Єдиним джерелом подарунків чемним дітям та покарання неслухняним є «Святий Миколай», який приймає у дітей замовлення на подарунки та дарує їм
їх, або карає за погані вчинки. У цьому «Святому Миколаю» допомагає «Фабрика добрих подарунків» та «Фабрика поганих подарунків», кожна з яких створює один їстівний та один неїстівний подарунок (методи абстрактної фабрики та абстрактні продукти відповідно).
«Фабрика добрих подарунків» створює солодощі та іграшки, а «Фабрика поганих подарунків» створює гіркі пілюлі та різки. Для того, щоб отримати подарунок, діти надсилають повідомлення у вигляді двох чисел: кількості хороших і поганих вчинків, які вони скоїли за останній рік. «Миколай» збирає усі повідомлення від дітей та вирішує, надіслати дитині добрий чи поганий подарунок в залежності від того, яких вчинків більше (добрих чи поганих) — призначає кожній дитині у списку відповідну конкретну фабрику. У день Святого Миколая повинні спрацювати призначені їм фабрики, а «Миколай» надсилає дітям створені для них подарунки. Використати шаблон проектування «Одинак» (Singleton) для опису класу «Святий
Миколай», шаблон проектування «Абстрактна фабрика» (Abstract Factory) для опису створення подарунків (abstract/concrete product) на фабриках (abstract/concrete factory) та шаблон проектування «Ітератор» (Iterator) для організації послідовного звертання до списку дітей та призначених їм фабрик.
Вказівка до індивідуального завдання
Для виконання і оформлення ЛР слід друкувати усі аркуші цього завдання, вписавши на кожній сторінці
(у відповідні поля згори) групу та прізвище студента (заповнює студент).

2021/22 н.р. Група:
Студент:
Викладач визначає номер індивідуального завдання, яке студент виконує, і вписує його тут: завдання №
Модель
(заповнює викладач).
Контрольний список виконання завдання ЛР № 11
№ з/п
Завдання
Виконано (Дата, Підпис)
1.
UML-діаграма класів.
2.
Реалізація шаблону проектування «Одинак» (Singleton).
3.
Реалізація шаблону проектування «Ітератор» (Iterator).
4.
Реалізація шаблону проектування відповідно до обраного
індивідуального завдання (підкреслити необхідне):

«Спостерігач» (Observer)

«Абстрактна фабрика» (Abstract Factory)
5.
Ілюстрація у головній програмі прикладу застосування шаблонів проектування.
Завдання виконано повністю і заслуговує на оцінку
(викладач ставить кількість балів від 0 до 3)

скачати

© Усі права захищені
написати до нас