ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 19.08.2020
Просмотров: 1002
Скачиваний: 8
" + " - конкатенація (з’єднання) рядків,
" - " - вилучення підрядку,
" < " - відношення "менше",
" <= " - відношення "менше чи дорівнює",
" > " - відношення "більше",
" >= " - відношення "більше чи дорівнює",
" == " - відношення "дорівнює",
" != " - відношення "не дорівнює".
За відношення порядку ("менше", "більше", "менше чи дорівнює", "більше чи дорівнює") вважати відношення лексикографічного порядку.
Крім того перевантажити операції введення із файлу і виведення у файл з символами " << " , " >> " таким чином:
f << A або A >> f - виведення (запис) значення A типу "рядок" у файл f,
f >> A або A << f - введення (читання) значення A із файлу f, де f - покажчик на файл.
Передбачити обробку виключної ситуації - перевищення кількості символів рядка максимальної припустимої величини - 254.
Варіант 4
Створити клас для роботи з множинами. Максимальна кількість елементів множини - 65534. Здійснити перевантаження символів операцій:
" + " - об’єднання множин,
" - " - віднімання множин,
" * " - переріз множин,
" <= " - відношення включення (перевіряється, чи є множина, що надана лівим операндом, підмножиною множини, що надана правим операндом),
" >= " - відношення включення (перевіряється, чи є множина, що надана правим операндом, підмножиною множини, що надана лівим операндом),
" == " - еквівалентність множин,
" != " - нееквівалентність множин,
Крім того перевантажити операції введення із файлу і виведення у файл з символами " << " , " >> " таким чином:
f << A або A >> f - виведення (запис) значення A типу "множина" у файл f,
f >> A або A << f - введення (читання) значення A із файлу f, де f - покажчик на файл.
Варіант 5
Написати програму, яка здійснює побайтне копіювання інформації з одного файлу в інший. Імена файлів вказуються у командній стрічці. Якщо ім’я файлу-приймача не вказано, програма повинна виводити інформацію із файлу-джерела на екран. Для виконання операцій обміну застосувати потокові операції.
Варіант 6
Створити класи bifstream i bofstream для виконання файлових операцій читання і запису значень дійсного типу у бінарному режимі. Застосувати потокові операції введення/виведення. Тип значень обрати самостійно з наступних: float, double, extended.
Варіант 7
Перевантажити символ операції “>>” таким чином, щоб можна було робити копіювання файлу за допомогою такого оператору:
fa >> fb ;
де fa, fb – потоки, що пов’язані з файлами.
Операція “>>” повинна повертати значення потоку fa так, щоб можна було робити множинне копіювання:
fa >> fb >> fc;
Варіант 8
Написати функцію, яка повертає значення дескриптору файла, пов’язаного з потоком. Функцію треба створити так, щоб вона працювала для потоків ifstream, ofstream, fstream. Створити файли, відкрити їх для читання, запису і введення/виведення за допомогою вказаних вище потоків і отримати їх дескриптори.
Варіант 9
Створити макрос-функцію, яка повертає значення дескриптору файла, пов’язаного з наданим потоком. Створити файли, відкрити їх для читання, запису і введення/виведення за допомогою потоків ifstream, ofstream, fstream і отримати їх дескриптори.
Лабораторна робота 6
Тема: функції та класи з шаблонами
Варіант 1
Створити функцію сортування (впорядковування) одновимірного масиву з елементами довільного типу. Передбачити параметр функції, який дає змогу виконувати впорядковування елементів масиву: а) по збільшенню значень елементів; б) по зменшенню.
Варіант 2
Написати функцію, яка створює копію іншого двовимірного динамічного масиву довільного типу.
Варіант 3
Створити функцію, яка знаходить найбільший і найменший елементи одновимірного масиву довільного типу.
Варіант 4
Створити функцію, яка створює одновимірний динамічний масив таким чином, що він є конкатенацією (тобто отриманий з’єднанням) двох заданих масивів одного і того ж типу. Застосувати шаблони таким чином, щоб конкатенацію можна було виконувати з масивами довільного типу.
Варіант 5
Створити динамічний клас з шаблонами для роботи з однови-мірними масивами. Передбачити можливість застосування створеного класу для випадків, коли елементи масиву мають будь-який числовий тип. Здійснити перевантаження операцій:
" = " - динамічне присвоєння,
" + " - поелементне додавання,
" - " - поелементне віднімання,
" * " - скалярне множення масивів,
" << " - циклічне переставлення елементів масиву уліво,
" >> " - циклічне переставлення елементів масиву управо,
" [ ] " - доступ до елементу по індексу з контролем.
Варіант 6
Створити динамічний клас з шаблонами для роботи з послідов-
ностями абстрактних символів із деякого алфавіту. Передбачити шаблони для таких випадків: символ є ціле число, символ є символом ASCII, символ є рядок символів ASCII, символ є вектор на площині. Максимальну довжину послідовності і код завершення послідовності вибрати самостійно. Перевантажити операції:
" = " - динамічне присвоєння,
" + " - конкатенація (з’єднання) рядків,
" - " - вилучення підрядку,
" <= " - відношення "менше чи дорівнює",
" >= " - відношення "більше чи дорівнює",
" == " - відношення "дорівнює",
" != " - відношення "не дорівнює".
За відношення порядку ("менше", "більше", "менше чи дорівнює", "більше чи дорівнює") вважати відношення лексикографічного порядку. Крім того, перевантажити операції введення значення вказаного класу із файлу і виведення у файл з символами " << ", " >> ".
Варіант 7
Створити клас для роботи з множинами. Тип елемента множини - довільний, застосувати шаблони. Здійснити перевантаження символів операцій:
" = " - присвоєння,
" + " - об’єднання множин,
" - " - віднімання множин,
" * " - переріз множин,
" <= " - відношення включення (перевіряється, чи є множина, що надана лівим операндом, підмножиною множини, що надана правим операндом),
" == " - еквівалентність множин,
" != " - нееквівалентність множин,
" << " - належність (перевіряється, чи належить значення, що надане лівим операндом, до множини, що надана правим операндом).
Варіант 8
Створити клас List для роботи із структурою типу "однозв’язний список". Тип елемента списку - довільний, застосувати шаблони. Передбачити функції для виконання таких операцій:
putinbeg - створити новий елемент списку у його початку;
getoutbeg - добути і вилучити перший елемент списку;
putinend - створити новий елемент списку у його кінці;
getoutend - добути і вилучити останній елемент списку;
print - вивести список на екран;
Приклад побудови зв’язного списка з шаблоном див., наприклад, у [ Майкл Хаймен И., Арнсон Боб. Borland C++ 5 для "чайников".- К.: Диалектика, 1997.- 320 с.]
Варіант 9
Створити клас Astack - стек, що базується на масиві покажчиків фіксованого розміру. Передбачити, щоб стек мав можливість вміщувати значення довільного типу, застосувати шаблони. Передбачити функції для виконання таких операцій:
push - занести у стек значення типу Тype;
pop - добути і вилучити значення із вершини стека;
print - вивести усі значення стека на екран;
num - повернути кількість значень, що знаходяться у стеку.
Варіант 10
Створити клас Aqueue - структура типу черга,
що базується на масиві покажчиків
фіксованого розміру. Передбачити, щоб
черга мала можливість вміщувати значення
довільного типу, застосувати шаблони.
Передбачити функції - члени класу
для виконання таких операцій:
add - занести у чергу надане значення;
pop - добути і вилучити значення із черги;
print - вивести усі значення із черги на екран;
num - повернути кількість значень, що знаходяться у черзі;
isempty - повернути значення true (тип bool), якщо черга пуста.
Варіант 11
Створити клас Lstack - стек, що базується на структурі зв’язного списку. Передбачити, щоб стек мав можливість вміщувати значення довільного типу, застосувати шаблони. Передбачити функції - члени класу для виконання таких операцій:
push - занести у стек надане значення;
pop - добути і вилучити значення із вершини стека;
print - вивести усі значення стека на екран;
num - повернути кількість значень, що знаходяться у стеку;
isempty - повернути значення true (тип bool), якщо черга пуста.
Вказівки.
Передбачити обробку виключної ситуації: добування значення із порожнього стека.
Варіант 12
Створити клас Lqueue - структура типу
"черга", що базується на структурі
зв’язного списку. Вважати, що тип
значення, що зберігаються у черзі, може
бути довільним, застосувати шаблони.
Передбачити функції для виконання
таких операцій:
add - занести у кінець черги значення типу Тype;
pop - добути і вилучити значення із початку черги;
print - вивести усі значення, що знаходяться у черзі, на екран;
num - кількість значень, що знаходяться у черзі;
isempty - повернути значення true (тип bool), якщо черга пуста.
Вказівки.
Передбачити обробку виключної ситуації: добування значення із порожньої черги.
Лабораторна робота 7
Тема: успадкування, атрибути доступу та віртуальні функції
Варіант 1
Створити абстрактний клас для роботи з геометричними фігурами на екрані. Передбачити такі компоненти-властивості класу:
- координати центра фігури;
- кут повороту (у градусах);
- масштабний фактор;
і такі функції-методи:
- показати фігуру на екрані;
- зробити фігуру невидною (знищити її зображення);
- повернути фігуру на заданий кут (кут надається у градусах);
- пересунути фігуру на наданий вектор.
Застосовуючи успадкування і наведений вище абстрактний клас створити похідний клас для роботи з фігурою типу "трикутник". Визначити інтерфейсну частину у класах, застосувати атрибути доступу.
Варіант 2
Застосовуючи успадкування і наведений у завданні 7.1 абстрактний клас створити клас для роботи з фігурою типу "чотирикутник".
Варіант 3
Застосовуючи успадкування і наведений
у завданні 7.1 абстрактний клас створити
клас для роботи з фігурою типу
"правильний
n-кутник".
Варіант 4
Застосовуючи успадкування і наведений
у завданні 7.1 абстрактний клас створити
клас для роботи з фігурою типу
"еліпс".
Варіант 5
Наданий такий клас:
class Base
{ public:
virtual
void myname() { cout << "This is class Base" <<
endl; }
};
а. Від цього класу треба створити два похідних класу: DerA і DerB.
б. Від класів DerA і DerB шляхом множинного успадкування створити клас DerAB.
в. Переозначити у кожному з створених класів функцію myname таким чином, щоб вона виводила на екран дійсне ім’я класу об’єкту, для якого вона викликається.
г. Для кожного з класів створеної ієрархії створити по одному об’єкту і для кожного з них викличте функцію myname.
д. Створіть масив із 4 покажчиків на базовий клас ієрархії. Для кожного з них створіть динамічний об’єкт, по одному для кожного з класів ієрархії. Запишіть виклик функції myname для кожного з динамічних об’єктів за допомогою покажчиків.
є. Поясніть дію функції mymain у всіх випадках.
Варіант 6
У файлах 7_05_a.cpp, 7_05_b.cpp, 7_05_c.cpp (див. Додаток Б) розміщені приклади програм, які ілюструють застосування класів для створення ефектів анімації. Розібратися як ці програми діють, виконати їх компіляцію, подивитися, як вони працюють.
Лабораторна робота 8
Тема: обробка надзвичайних ситуацій
Всі класи, що були створені при виконанні попередніх завдань, доробити, передбачивши обробку надзвичайних ситуацій. Надзвичайною ситуацією вважати:
- некоректні значенні операндів при виконанні операцій;
- некоректні значенні параметрів при викликах функцій - членів класів;
- не успішне виконання операції виділення оперативної пам’яті при створенні динамічного об’єкту;
- не успішне завершення операції відкриття файлу;
- інші випадки на розсуд студента.
Для обробки надзвичайної ситуації застосувати:
а) спеціально побудовані функції типу errhalt із модулю syst.h ;
б) макрозасіб типу assert ;
в) засоби throw, try, catch .
4 довідкова інформація
Нехай у плоскій системі координат маємо точку з координатами x,y. Координати цієї точки після повороту її на кут відносно початку системи координат проти часової стрілки можна обчислити за такими формулами:
![]()
Тут x', y' - координати точки після повороту.
5 ЛІТЕРАТУРА
1. Скляров В.А.
Язык С++ и объектно-ориентированное программирование .-
Мн.: Выш. шк., 1997.- 478 с.
2. Фридман А.Л.
Объектно-ориентированное программирование на языке С++.-
М.: Горячая линия - Телеком, 2001.- 232 с.
3. Савитч Уолтер
Язык С++. Курс объектно-ориентированного программирования.-
М.: "Вильямс", 2001.- 704 с.
4. Пол Ирэ.
Объектно-ориентированное
программирование с использованием
С++.- К.: НИПФ "ДиаСофт Лтд", 1995.-
480 с.
5. Уильям Топп, Уильям Форд
Структуры данных в С++ .-
М.: БИНОМ, 1999.- 816 с.
6. Леен Аммерааль
STL для программистов на С++ .-
М.: ДМК, 1999.- 240 с.
7. Подбельский В.В.
Язык С++ : Уч. пос. - М.: Финансы и статистика, 1995.- 560 с.
Додаток А
Таблиця варіантів завдань
|
Ном. по спис. |
Номер лабораторної роботи |
|||||||
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
|
1 |
6 |
7 |
8 |
1 |
2 |
3 |
4 |
1 |
|
2 |
7 |
8 |
9 |
2 |
3 |
4 |
5 |
1 |
|
3 |
8 |
1 |
10 |
3 |
4 |
5 |
6 |
1 |
|
4 |
9 |
2 |
11 |
4 |
5 |
6 |
1 |
1 |
|
5 |
10 |
3 |
1 |
5 |
6 |
7 |
2 |
1 |
|
6 |
11 |
4 |
2 |
6 |
7 |
8 |
3 |
1 |
|
7 |
1 |
5 |
3 |
1 |
8 |
9 |
4 |
1 |
|
8 |
2 |
6 |
4 |
2 |
9 |
10 |
5 |
1 |
|
9 |
3 |
7 |
5 |
3 |
1 |
11 |
6 |
1 |
|
10 |
4 |
8 |
6 |
4 |
2 |
12 |
1 |
1 |
|
11 |
5 |
1 |
7 |
5 |
3 |
1 |
2 |
1 |
|
12 |
6 |
2 |
8 |
6 |
4 |
2 |
3 |
1 |
|
13 |
7 |
3 |
9 |
1 |
5 |
3 |
4 |
1 |
|
14 |
8 |
4 |
10 |
2 |
6 |
4 |
5 |
1 |
|
15 |
9 |
5 |
11 |
3 |
7 |
5 |
6 |
1 |
|
16 |
10 |
6 |
1 |
4 |
8 |
6 |
1 |
1 |
|
17 |
11 |
7 |
2 |
5 |
9 |
7 |
2 |
1 |
|
18 |
1 |
8 |
3 |
6 |
1 |
8 |
3 |
1 |
|
19 |
2 |
1 |
4 |
1 |
2 |
9 |
4 |
1 |
|
20 |
3 |
2 |
5 |
2 |
3 |
10 |
5 |
1 |
|
21 |
4 |
3 |
6 |
3 |
4 |
11 |
6 |
1 |
|
22 |
5 |
4 |
7 |
4 |
5 |
12 |
1 |
1 |
|
23 |
6 |
5 |
8 |
5 |
6 |
1 |
2 |
1 |
|
24 |
7 |
6 |
9 |
6 |
7 |
2 |
3 |
1 |
|
25 |
8 |
7 |
10 |
1 |
8 |
3 |
4 |
1 |
|
26 |
9 |
8 |
11 |
2 |
9 |
4 |
5 |
1 |
|
27 |
10 |
1 |
1 |
3 |
1 |
5 |
6 |
1 |
|
28 |
11 |
2 |
2 |
4 |
2 |
6 |
1 |
1 |
|
29 |
1 |
3 |
3 |
5 |
3 |
7 |
2 |
1 |
|
30 |
2 |
4 |
4 |
6 |
4 |
8 |
3 |
1 |
Додаток Б
Зразок титульної сторінки лабораторної роботи