Об’єктно – орієнтоване програмування
І. МЕТОДИЧНІ ВКАЗІВКИ ДО РОЗРАХУНКОВО-ГРАФІЧНОЇ РОБОТИ
1. ВСТУП
Студенти даного курсу повинні володіти мовою програмування С та С++ та засобами програмування не нижче Microsoft Visual Studio 6..

2. ЗАГАЛЬНІ ПОЛОЖЕННЯ
2.1 У роботах студент повинен вибрати завдання розробити програму, що реалізує поставлену задачу.
2.3. Захист розрахунково-графічної роботи здійснюється при пред’явленні пояснювальної записки та

5. ВИМОГИ ДО ОФОРМЛЕННЯ ПОЯСНЮВАЛЬНОЇ ЗАПИСКИ
5.1. Пояснювальна записка (ПЗ) оформляється українською мовою та подається у рукописному варіанті на аркушах паперу формату А4 . Дозволяється лістинги програм та результати тестової перевірки подавати в друкованому вигляді.
5.2. Формат тексту- тип шрифту Times New Roman, розмір- 14, міжрядковий інтервал -1,5, чіткий шрифт з контурами символів середньої жирності. Розміри поля тексту з відступами не менше з: лівого поля –25 мм, правого -10 мм, верхнього та нижнього до 40 мм.
5.3. Рекомендується при описі програми застосовувати записи ключових імен функцій, змінних та ін. програмних компонентів мовою оригіналу(англійською).
5.3. ПЗ повинна бути скріплена.
Додаток.
Завдання 1.Згідно вибраного номеру задачі, вказаного нижче, написати програму реалізації перевантажених функцій, вибравши відповідну їх групу:
a) T func(int** arr, int length1, int length1);
T func(char** arr, int length1, int length1);
б) T func(int** arr, int length1, int length2, int number );
T func(char** arr, int length1, int length2, char ch);
в) T func(int** arr, int length1, int length2, int num1, int num2 );
T func(char** arr, int length1, int length2, char ch1, char ch1);
г) T func(int** arr, int length1, int length2, int number );
T func(char** arr, int length1, int length2, int number);
, де:
T-можливий тип даних(void, bool, int, char, double), який повертає функція в залежності від умови задачі,
int length1, int length2 - індекси розмірності двовимірного масиву arr типу int або char, які задаються динамічним способом,
int number - шуканий елемент масиву типу int або номер позиції елементу кожного з блоків масиву типу int або char,
int num1, char ch1 та int num2, char ch1 – пари значень елемента масивів, які підлягають заміні та пари значень на які їх міняють,
char ch шуканий елемент масиву типу char.
Номер задачі:
Функція func(....) :
здійснює сортування елементів масиву по спаданню
здійснює сортування елементів масиву по зростанню
повертає середнє арифметичне елементів послідовності.
здійснює пошук максимального елемента масиву.
здійснює заміну вказаного елемента масиву.
здійснює пошук мінімального елемента масиву.
повертає позицію першого входження шуканого числа чи символу.
перевіряє чи елементи масиву розташовані по зростанню.
повертає середнє арифметичне значення послідовності елементів , які знаходяться на однакових позиціях кожного з блоків двовимірного масиву.
повертає середнє арифметичне значення послідовності елементів, які знаходяться на взаємно сусідніх позиціях кожного з блоків двовимірного масиву.
перевіряє чи елементи масиву розташовані по спаданню.
переставляє всі елементи у дзеркальному порядку.
повертає кількість входжень числа чи символу в масив.
повертає позицію останнього входження шуканого числа чи символу.
повертає кількість елементів, які більші за своїх сусідів.
повертає середнє арифметичне значення елементів послідовності між мінімальним та максимальним елементами.
Головна програма повинна містити також тестову перевірку програми виконання поставленої задачі а також ввід значень індексів розмірності двовимірного масиву, режим багаторазового вводу вхідної послідовності, вводу всіх можливих комбінації вхідної послідовності, за якої забезпечується як виконання, так і не виконання відповідної умови задачі.
Результати виконання кожної тестової перевірки програми повинні відображатись на екрані монітора, а також записані в текстовий файл, тобто програма повинна забезпечувати:
- запис даних у текстовий файл ;
- читання даних з текстового файлу.
Запис даних у файл здійснюється у вигляді структурованої таблиці, з використанням засобів форматування. Послідуючі записи додаються у файл.Не менше двох записів у файл повинно бути здійснено.
Слід передбачати незалежний багаторазовий вибір користувачем режиму роботи: запис чи читання даних при роботі з текстовим файлом.
Структура даних, що записується у файл наступна:
перше поле – поле запису прізвища;
друге поле – поле запису імені;
третє поле – поле запису номера групи та номера завдання;
четверте поле – поле запису результату тестової перевірки, що включає задану вхідну послідовність даних та вихідну, за необхідності, або, відповідний до умови задачі, результат обчислення.
Слід також передбачити обробку виключних ситуацій
Завдання 2. Створити оголошення класів згідно варіанту. Розробити програму-драйвер, яка продемонструє роботу похідних класів.
Варіант
Завдання

1
Базовий клас:
class Animal
{
protected:
char* name;
int weight;
public:
Animal() ;
virtual ~Animal() ;
virtual void Call() = 0;
virtual bool Feed();
virtual void DoAnimalStuff();
};
Animal() – конструктор базового класу. Виділяє пам‘ять під змінну name та ініціалізує змінну weight = 0.
~Animal() – деструктор базового класу. Вивільняє пам‘ять віділену під змінну name.
Call() – імітує притаманні тварині звуки (!виводить на екран повідомлення!).
Feed() – збільшує вагу тварини після годування (змінює змінну weight).
DoAnimalStuff() – зменшує вагу тварини (змінює змінну weight) та виводить повідомлення.
Похідні класи Dog та Cat.
Конструктори похідних класів ініціалізують змінну name та weight.
Перевизначити функції Feed() та DoAnimalStuff().
В основній програмі створити кілька тварин і змоделювати їхню поведінку.

2
class Сards
{
protected:
int **cards; - потасовані карти;
int ** BankCards; - банк карт;
int person;- кількість персон у грі;

public:
Cards();
~ Cards();
virtual void Shuffle(); - тасування карт;
virtual int СuttentCard(); - кидання текучої карти
virtual void Distribution()- роздача карт;
virtual void Motion() – хід картою;
};
Похідні класи Fool (гра в дурака на двох) та Spot(гра в очко на двох)
Конструктори похідних класів ініціалізують змінні cards (тасування карт), рerson (кількість персон у грі) та BankCards(банк карт).
Перевизначити функції СuttentCard(),Distribution() та Motion()
В основній програмі створити два об’єкти похідних класів, змоделювати підготовку до гри та перші ходи кожної з ігор.

3
Базовий клас:
class Shape2D
{
protected:
double x1, y1, x2, y2, x3, y3, x4, y4;
public:
Shape2D();
virtual ~ Shape2D();
virtual float Area( )= 0;
virtual float Perimeter() = 0;
virtual void PrintMessage();
};
Shape2D() – конструктор базового класу.
~ Shape2D() – деструктор базового класу.
Area() – повертає значення площі фігури.
Perimeter() – повертає значення периметру фігури.
PrintMessage() – виводить повідомлення про тип фігури.
Похідні класи Triangle, Rectangle та Сircle.
Визначити необхідні для похідних класів параметри та перевизначити необхідні функції.

4
Базовий клас:
class Shape3D
{
protected:
double x1, y1, z1, x2, y2, z2, x3, y3, , z3, x4, y4, , z4, x5, y5, z5;
public:
Shape3D();
virtual ~ Shape3D();
virtual float Area( )= 0;
virtual float Volume() = 0;
virtual void PrintMessage();
};
Shape3D() – конструктор базового класу.
~ Shape3D() – деструктор базового класу.
Area() – повертає значення площі фігури.
Volume () – повертає значення об’єму фігури.
PrintMessage() – виводить повідомлення про тип фігури.
Похідні класи Box, Sphere та Cone
Визначити необхідні для похідних класів параметри та перевизначити необхідні функції.

5
Базовий клас:
class Resource
{
protected:
int id;
bool isUsed;
char* title;
char* author;
public:
Resource(int number) ;
virtual ~ Resource() ;
virtual bool TakeResource ();
virtual bool GiveBackResource();
virtual void PrintInfo();
virtual bool Status() {return isUsed;}
};
Resource() – конструктор базового класу. Ініціалізує змінну id та isUsed. Виділяє пам’ять під title та author.
~ Resource() – деструктор базового класу.
TakeResource() – встановлює змінну isUsed=1 (виводить на екран повідомлення).
GiveBackResource() – встановлює змінну isUsed=0 (виводить на екран повідомлення).
PrintInfo () – виводить інформацію про ресурс.
Status() – повертає стан ресурсу.
Похідний клас Book.
Атрибути:
int pages;
int year;
Похідний клас CD.
Атрибути:
int cdType;
Визначити конструктор та деструктор (!вивільняти всі ресурси!) класу.
В основній програмі створити декілька ресурсів та продемонструвати процес їхнього використання.

6
Базовий клас:
class Device
{
public:
Device(char* fName);
~Device();
virtual bool Open() = 0;
virtual bool Close() = 0;
virtual bool Execute(char* cmd, void* prm) = 0;
virtual bool Status(int ext=0) {return isOpened;}
protected:
char* Device;
bool isOpened;
};
Device() – конструктор базового класу, ініціалізує змінні, друкує повідомлення «Device: » та значення char* friendlyName.
~Device() – деструктор базового класу, вивільняє пам'ять.
Open() – відкриває пристрій для роботи, встановлює змінну isOpened. Друкує повідомлення, про те що пристрій готовий до роботи.
Close() – завершує роботу з пристроєм. Друкує повідомлення, та встановлює змінну isOpened у відповідний стан.
Execute() – виконує команду специфічну для кожного пристрою, встановлює змінну isOpened у відповідний стан.
Status() – повертає стан пристрою.
Похідний клас Printer.
Атрибути:
char* friendlyName;
bool canPrint;
char* ptrBuf;
Команди для функції Execute():
“Print” – друкує вмістиме буферу
“Write” – завантажує текст у буфер (prm – розглядати як char*), змінює значення змінної canPrint.
“Clear” – обнулює вмістиме буферу, змінює значення змінної canPrint
+ Перевизначити функцію Status() – коли (ext == 1) повертати значення (isOpened && canPrint).
Визначити конструктор та деструктор (!вивільняти всі ресурси!) класу.
Похідний клас Scaner.
Атрибути:
char* friendlyName;
char* scrBuf;
Команди для функції Execute():
“Scan” – заповнити вмістиме буферу випадковими даними.
“Read” – завантажує текст у prm – розглядати як char*.
“Clear” – обнулює вмістиме буферу.
Визначити конструктор та деструктор (!вивільняти всі ресурси!) класу.


Завдання 3. Побудувати програму розв’язання задачі, що вказане нижче, з використанням власного класу контейнера масиву та дружнього класу ітератора.
Контейнерний клас повинен містити дані масиву та необхідні методи контейнерних класів.
Слід використати основні методи контейнерних класів:
begin()- повернення ітератора до початкового елементу масиву контейнера,
end()- повернення ітератора на позицію останнього елементу контейнера,
size()-повернення кількості елементів масиву контейнера
Клас ітераторів повинен містити основні методи(функції) роботи ітераторів, такі як:
pd++, ++pd - інкременти, переміщення ітератора по всім елементам контейнера,
*pd- розіменування ітератора,тобто повернення або присвоєння значення елемента контейнера,а також інші функії, такі як присвоєння одного ітератора іншому (pd1= pd2) або порівняння двох ітераторів(pd1== pd2).
Варіанти задач:
1. Здійснити сортування елементів двовимірного масиву типу int по спаданню
2. Здійснити сортування елементів двовимірного масиву типу char по зростанню
3. Знайти середнє арифметичне значення елементів двовимірного масиву дійсних чисел..
4. Знайти максимальний елемент двовимірного масиву типу int .
5. Здійснити заміну вказаного елемента двовимірного масиву типу char.
6. Здійснити пошук мінімального елемента двовимірного масиву типу char.
7. Знайти позицію першого входження шуканого дійсного числа двовимірного масиву.
8. Перевірити чи елементи двовимірного масиву типу int розташовані по зростанню.
9. Знайти середнє арифметичне значення елементів двовимірного масиву типу int , які знаходяться на однакових позиціях кожного з блоків.
10. Знайти середнє арифметичне значення послідовності елементів дійсних чисел, які знаходяться на взаємно сусідніх позиціях кожного з блоків двовимірного масиву.
11. Перевірити чи елементи двовимірного масиву типу char розташовані по спаданню.
12. Переставити всі елементи двовимірного масиву типу int у дзеркальному порядку.
13. Знайти кількість входжень числа чи символу в двовимірний масив типу double.
14. Знайти позицію останнього входження символу двовимірного масиву .
15. Знайти кількість елементів двовимірного масиву типу double , які більші за своїх сусідів.
16. Знайти середнє арифметичне значення елементів двовимірного масиву типу int між мінімальним та максимальним елементами.