You are on page 1of 42

Червоноградський гірничо-економічний фаховий коледж

Зошит

для виконання лабораторних робіт

з дисципліни «Об’єктно-орієнтоване програмування»

V семестр

ст. групи _-ІПЗ-__

________________________________________

Викладач: Глобчак Ю.В.

2022
1
Лабораторна робота № 1
Тема:Створення класу. Доступ до елементів класу
Мета:Навчитися створювати та використовувати класи

Короткі теоретичні відомості

Клас є абстрактним типом даних, який визначається користувачем, і є


моделлю реального об'єкту у вигляді даних і функцій для роботи з ними. Дані
класу називаються полями (по аналогії з полями структури), а функції класу —
методами. Поля і методи називаються елементами класу.

Завдання
1.Створити клас, призначений для обчислення значення арифметичного виразу
sin2 ( x+ y )
a= 4
−ln ( x 2 z )
√ z cos x при заданих значеннях аргументів:

Варіант 1  x=−4 . 6 , y=5 . 1 , z=1 .2 ;

 x=x + y ,
y=
y
z √5
, z= cos
x+ y
3

Варіант 2  x=0 . 9 , y=−5.1 , z=1 .23 x ;


x 3 y−z
x= , 5
z=| |
 2 y= y sin (z ), 7

2.В класі визначити приховане поле а і методи доступу до цього поля, створити два
об’єкти.
3.Створити ще один клас Group з двома прихованими полями: k-кількість учнів,
name – назва групи. Створити 1 метод, який буде зчитувати значення з
клавіатури, 1 метод для ініціалізації даних і 1 метод, який буде виводити всю
інформацію.

Лістинг 1.1

2
3
Висновок: _______________________________________________________________

Лабораторна робота № 2
Тема: Створення конструкторів
Мета: Навчитись створювати та використовувати конструктори

Короткі теоретичні відомості

Конструктор – це спеціальна функція-член класу, яка викликається при


створенні об'єкта, а її ім'я обов'язково збігається з іменем класу.
Клас може мати кілька конструкторів і лише один деструктор. Розглянемо
приклад визначення класу MyClass.
class MyClass
{ int i;
4
public:
MyClass(){i=0;} //Конструктор. У описі відсутній тип результату
//Вхідні параметри відсутні. Це конструктор за замовчуванням
MyClass(int a){i=a;} //Це також конструктор, але з параметром
};

В даному прикладі два конструктори. Один по замовчуванню, який


ініціалізує поле i класу MyClass нулем, та другий, який ініціалізує це поле
заданим значенням. Тепер об’явити об’єкт даного класу можна у два способи: за
замовчуванням та із заданим значенням ініціалізації:
MyClass MyObj1; //ініціалізація за замовчуванням
//поле i ініціалізується значенням 0.
MyClass MyObj1(1); //ініціалізація заданим значенням
//поле i ініціалізується значенням 1.
Доповненням до конструктора слугує деструктор – це функція, яка
викликається під час руйнування об'єкта. Ім'я деструктора має збігатися з іменем
конструктора, але йому передує символ "~". Подібно до конструкторів, деструктори
не повертають значень, а отже, в їх оголошеннях відсутній тип значення, що
повертається.
Завдання
1.В програмі із лабораторної роботи1 створити конструктори для ініціалізації
членів-даних кожного класу і деструктори для знищення об’єктів.

Лістинг 2.1

#include <iostream>

5
2.Створити клас MyDate, що визначає дату (число, місяць, рік). У класі оголосити
конструктор, що отримує три параметри, які встановлюють нову дату.

Лістинг 2.2

#include <iostream>

6
7
Висновок: ____________________________________________________________

Лабораторна робота № 3
Тема: Перевантаження конструкторів
Мета: Навчитись перевантажувати конструктори

Короткі теоретичні відомості

Щоб перевантажити конструктор класу, достатньо оголосити його в усіх


потрібних форматах і визначити кожну дію, пов'язану з кожним форматом.

Завдання
1. В класі Student (прізвище, курс, середній бал) створити конструктор без
параметрів і деструктор. Перевантажити конструктор.

Лістинг 3.1

#include <iostream>

8
2. Створити клас ПРАЦІВНИК з закритими змінними, що зберігають такі дані:
прізвище, професія, заробітна плата, премія, ставка. Визначити конструктор за
замовчуванням та з параметрами для ініціалізації об’єктів класу (конструктор не
повинен ініціалізувати значення ставки, натомість він має викликати функцію,
яка її визначає), деструктор.
3. Додати у клас функцію призначення премій. Врахувати, що премія визначається
за принципом: якщо заробітна плата менша за середню зарплату усіх
співробітників, то розмір премії становить 50% від заробітної плати, в інших
випадках – 30%.
4. Додати у клас функцію визначення заробітної плати.
5. Додати функцію виведення даних про співробітника.
9
Лістинг 3.2

#include <iostream>

10
Висновок: ____________________________________________________________

Лабораторна робота № 4
Тема: Використання вбудованих функцій
Мета: Навчитись створювати та використовувати inline-функції

Короткі теоретичні відомості

Мова C++ володіє важливою властивістю: у нім існують функції (inline


functions), що підставляються, які широко використовуються в класах. Можна
написати коротку функцію, яка не викликається, а підставляється у відповідне
місце програми. Щоб замінити виклик функції підстановкою, перед її
визначенням слід вказати слово inline.
Наприклад, щоби створити вбудовану функцію Fun(), яка повертає int-
значення і не приймає жодного параметра, достатньо оголосити її так:
inline int Fun()
{
//...
}

Модифікатор inline повинен передувати усім решта настанов оголошення


самої функції.
Існує ще один механізм реалізації вбудованої функції. Він полягає у
визначенні коду програми для функції-члена класу в самому оголошенні класу.
Будь-яка функція, що визначається в оголошенні класу, автоматично стає
11
вбудованою. У цьому випадку необов'язково передувати її оголошенню
ключовим словом inline.

Завдання

1. У класі Людина створити inline-функцію, яка приймає два параметри (ріст,


вага) і знаходить індекс маси тіла k (ділення маси тіла у кілограмах на
квадрат росту у метрах квадратних).
2. Створити функцію, що підставляється (inline), яка виводить результат, в
залежності від отриманого індекса маси тіла (якщо k<18.5 – недостатня вага, k
є [18.5,25] – нормальна маса тіла, k>25 – наявність зайвої ваги).
3. Створити клас Student (приховані поля: прізвище, група, масив предметів,
масив оцінок), в якому створити вбудовану функцію, яка визначає середній
бал та функцію, яка виводить прізвища студентів, які мають незадовільні
оцінки та назви предметів, з яких є незадовільні оцінки.

Лістинг 4.1

12
13
Висновок: ____________________________________________________________

Лабораторна робота № 5
Тема: Створення масивів об’єктів
Мета: Навчитися створювати та використовувати масиви об’єктів

Короткі теоретичні відомості

Масиви об'єктів можна організувати так само, як і створюються масиви


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

Завдання
1. Cтворити масив об’єктів. Кожний об’єкт повинен містити інформацію про
1.
іграшки: назва іграшки, ціна і вікові границі для дітей (наприклад, для дітей від 2
до 5 років). Вивести назви іграшок для дітей вказаного віку.

Лістинг 5.1

14
1. Cтворити масив об’єктів. Кожний об’єкт повинен містити інформацію про
2.
студента: прізвище, група, рік вступу, рік народження. Вивести список студентів
вказаного року народження.

Лістинг 5.2

15
Висновок: ____________________________________________________________

Лабораторна робота № 6
Тема: Створення статичних членів класу
Мета: Навчитися створювати статичні змінні

16
Короткі теоретичні відомості

Члени класу (як функції, так і змінні) можуть бути статичними. Оголошення
статичного члена здійснюється в тілі класу за допомогою зарезервованого слова
static в межах класу, а визначення (опис) – за його межами.

class myClass
{ …
static int x;

};
int myClass::x;

Оголошуючи член-даних класу статичним, ми тим самим повідомляємо


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

Завдання
1. Створити клас TOVAR, який містить наступні поля:
name – назва товару;
cost1 – ціна закупки товару;
cost2 - ціна продажу товару.
count –кількість одиниць товару;
profit – прибуток.
та статичну змінну number для порядкованого номеру кожного товару.
Написати програму, що використовує даний клас і виконує наступні дії:
- вводить з клавіатури масив даних SHOP, що складається з N змінних типу
TOVAR і обчислює прибуток по кожному товару;
- Виводить на екран товари, які мають найбільший і найменший прибуток.
- Виводить інформацію про кожний товар (назва, порядковий номер та прибуток).

Лістинг 6.1

17
,

18
Висновок: ____________________________________________________________

Лабораторна робота № 7
Тема: Використання дружніх функцій та класів
Мета: Навчитись використовувати дружні функції та класи
Короткі теоретичні відомості

19
Технологія об'єктно-орієнтованого програмування дає змогу організувати
доступ до закритих членів класу функціями, які не є його членами. Для цього
достатньо оголосити ці функції дружніми до цього класу. Щоб зробити
функцію “другом” класу, потрібно помістити її прототип в public-розділ
оголошення класу і попередити його ключовим словом friend. Наприклад,
наведений нижче фрагмент коду функції Fun() оголошується "другом" класу
myClass:
class myClass // Оголошення класового типу
{ //...
public:
friend void Fun(myClass obj); // "Дружня" функція класу
//...
};

Як бачимо, ключове слово friend передує решті частини прототипу


функції Fun(), надає їй як не члену класу доступ до його закритих членів. Одна і
та ж функція може бути "другом" декількох класів.

Завдання
1. Створити два класи. В першому класі створи дві закриті змінні a, b. В
другому масив цілих чисел.
2. Створити дружню функцію Sum для обчислення кількості дадатніх
елементів масиву, яка не є членом жодного класу.
3. Створити функцію S_а, яка є членом другого класу і одночасно «дружня»
для першого для обчислення максимального із двох значень (a, b).

Лістинг 7.1

#include <iostream>

20
4. Створити два клас: матриця і вектор. У кожному класі визначити
конструктори та деструктори. Як закриті елементи класів створити масиви, що
зберігають відповідно матрицю (двовимірний масив) або вектор (одновимірний
масив) та їх розмірність.
5. Створити функцію для множення вектора на матрицю.

21
Лістинг 7.2

#include <iostream>

22
Висновок: ____________________________________________________________

Лабораторна робота № 8
Тема: Передача об'єктів функціям. Повернення об’єктів
Мета: Навчитися працювати з об’єктами у функціях
Короткі теоретичні відомості
23
Об'єкти можна передавати функціям, як звичайні змінні. Для цього
застосовується звичайний механізм передачі параметрів по значенню. Не
дивлячись на зовнішню простоту, цей процес може привести до несподіваних
наслідків, що стосуються конструкторів і деструкцій.
Якщо виникає необхідність створити копію об'єкту і передати її функції,
звичайний конструктор не викликається. Замість нього викликається
автоматичний конструктор копіювання, що створює побітовий дублікат об'єкту.
Проте при знищенні копії об'єкту (як правило, у момент повернення з функції)
викликається його деструктор.
При поверненні з функції автоматично створюється тимчасовий об'єкт, в
якому зберігається значення, що повертається. Саме цей об'єкт насправді
повертається в зухвалий модуль. Після повернення цей об'єкт знищується. Це
може привести до непередбачуваних наслідків. Наприклад, якщо деструкція
об'єкту, що повертається, повинна звільняти динамічну пам'ять, вона
звільнятиметься, навіть якщо об'єкт, якому привласнюється значення, що
повертається, як і раніше посилається на неї. Уникнути цього можна за
допомогою перевантаження оператора присвоєння і визначення конструктора
копіювання.

Завдання
1. В класі Автомобіль створити декілька варіантів конструктора (звичайний
конструктор і конструктор копії). Створити лічильник автомобілів.
2. Створити 2 автомобілі. Присвоїти одному автомобілю копію іншого. Вивести
інформацію про автомобілі, їх кількість.
3. Продемонструвати механізм передачі об’єктів функціям і повернення
об’єктів функціями (наприклад, передати чи повернути швидкість
автомобіля).

Лістинг 8.1

24
25
Висновок:
_________________________________________________________________

Лабораторна робота № 9
Тема: Перевантаження бінарних операторів “+” і “=”
Мета: Навчитися перевантажувати оператори

Короткі теоретичні відомості

Перевантаження операторів — одна з найефективніших можливостей мови C+


+. Вона дозволяє повністю інтегрувати нові класи в існуюче програмне
середовище. Після перевантаження операції над об'єктами нових класів
виглядають точно так, як і операції над змінними вбудованих типів. Крім того,
перевантаження операторів лежить в основі системи введення-висновку в мові C+
+.
Перевантаження операторів здійснюється за допомогою операторних функцій
(operator function), які визначають дії переобтяжених операторів стосовно
відповідного класу. Операторні функції створюються за допомогою ключового
26
слова operator. Операторні функції можуть бути як членами класу, так і
звичайними функціями. Проте звичайні операторні функції, як правило,
оголошують дружніми по відношенню до класу, для якого вони
перенавантажують оператора. У кожному з цих випадків операторна функція
оголошується по-різному. Отже, необхідно розглянути ці варіанти окремо.
Операторна функція-член має наступний вигляд:
тип_повертаємого_значення імя_класу::operator# (список-аргументів)
{
... // Операції
}

Зазвичай операторна функція повертає об'єкт класу, з яким вона працює,


проте тип значення, що повертається, може бути будь-яким. Символ #
замінюється перенавантажуваним оператором. Наприклад, якщо в класі
перевантажується оператор ділення "+", операторна функція-член називається
operator+.

Завдання
1. Створити два клас: матриця і вектор. У кожному класі визначити
конструктори та деструктори. Як закриті елементи класів створити масиви,
що зберігають відповідно матрицю (двовимірний масив) або вектор
(одновимірний масив) та їх розмірність.
2. Створити дружні функції множення вектора на матрицю і навпаки.
3. Перевантажити оператори “+” для додавання двох матриць.
4. Перевантажити оператори “*” для множення матриці на число та навпаки.
5. Перевантажити оператори “*” для множення двох векторів, множення
вектора на число та навпаки.
6. Перевантажити оператор “=”.
7. В головній функції продемонструвати роботу перевантажених функцій.

Лістинг 9.1

27
28
Висновок:
____________________________________________________________

Лабораторна робота № 10
Тема: Перевантаження унарних операторів “++” і “--”
Мета: Навчитися перевантажувати унарні оператори

Короткі теоретичні відомості

Можна перевантажувати унарні оператори інкремента "++" та


декремента "--", або унарні "-" і "+". Як уже зазначалося вище, при
перевантажені унарного оператора за допомогою функції-члена класу
операторній функції жоден об'єкт не передається безпосередньо. Операція
ж здійснюється над об'єктом, який викликає цю функцію через
опосередковано переданий показник this.
Оператори інкремента "++" та декремента "--" мають дві форми –
префіксну і постфіксну. Наприклад, оператор інкремента можна
використовувати у префіксній формі ++ObjC і у постфіксній формі ObjC++.
Нижче наведено один з можливих способів реалізації постфіксної форми
унарного оператора інкремента "++" для класу kooClass (x, y, z - тривимірні
координати):
// Перевантаження постфіксної форми унарного оператора інкремента
"++".
kooClass kooClass::operator++(int notused)
{ kooClass tmp = *this; // Збереження початкового значення об'єкта
x++; // Інкремент координат x, y і z
y++;
z++;
return tmp; // Повернення початкового значення об'єкта
}

Завдання

29
1. Створити клас Автомобіль, у якому визначити приховані поля швидкість,
пробіг. Визначити методи доступу до цих полів.
2. Перевантажити оператори ++, -- які будуть збільшувати/зменшувати
швидкість на 1.
3. Перевантажити оператори +=, -= які будуть збільшувати/зменшувати пробіг
автомобіля.
4. У програмі з попередньої лабораторної роботи перевантажити оператор “-”
(унарний мінус) для матриці і для вектора.

Лістинг 10.1

30
Висновок:
____________________________________________________________

Лабораторна робота № 11
Тема: Перевантаження оператора "[]"
Мета: Навчитися перевантажувати оператор "[]"

Короткі теоретичні відомості

На додаток до традиційних перевантажених операторів мова


програмування C++ дає змогу перевантажувати і оператор індексації
елементів масиву "[]". У мові програмування C++ (з погляду механізму
перевантаження) оператор "[]" вважається бінарним. Його можна
перевантажувати тільки для класу і тільки з використанням функції-члена

31
класу. Ось як виглядає загальний формат операторної функції-члена класу
operator[]().
тип ім'я_класу::operator[](int індекс)
{
//...
}
Формально параметр індекс необов'язково повинен мати тип int, але
операторна функція operator[]() зазвичай використовують для забезпечення
індексації елементів масивів, тому в загальному випадку як аргумент цієї
функції передається цілочисельне значення.
Припустимо, нехай створено об'єкт ObjA, тоді вираз ObjA[3]
перетвориться в такий виклик операторної функції operator[]():
ObjA.operator[](3);
Іншими словами, значення виразу, що задається в операторі індексації
елементів масиву "[]", передається операторній функції operator[]() як
безпосередньо заданий аргумент. При цьому показник this вказуватиме на
об'єкт ObjA, тобто об'єкт, який здійснює виклик цієї функції.
Завдання
1. Створити клас Студент, який містить приховані поля: прізвище студента,
масив предметів і масив оцінок з відповідних предметів, середній бал.
Визначити методи для введення даних, обчислення середнього балу та
виведення всієї інформації на екран.
2. Перевантажити оператор [] такий чином, щоб можна було отримувати та
змінювати значення відповідного елементу прихованого масиву.
3. Забезпечте контроль за індексом масиву, значення якого вийшло за
дозволені межі.

Лістинг 11.1

32
Висновок:
____________________________________________________________

33
Лабораторна робота № 12
Тема: Перевантаження оператора "()" та операторів
відношення
Мета: Навчитися перевантажувати оператор "()" та операторів
відношення
Короткі теоретичні відомості
Можливо, найбільш інтригуючим оператором, якого можна
перевантажувати, є оператор виклику функції "()". Під час його
перевантаження створюється не новий спосіб виклику функцій, а
операторна функція, якій можна передати довільну кількість параметрів.
Почнемо з такого прикладу. Припустимо, що певний клас містить наведене
нижче оголошення перевантаженої операторної функції:
int operator()(float f, char *p);
І якщо у програмі створюється об'єкт obj цього класу, то настанова
obj(99.57, "перевантаження");
перетвориться в такий виклик операторної функції operator():
operator()(99.57, "перевантаження");
У загальному випадку при перевантаженні оператора виклику функцій
"()" визначаються параметри, які необхідно передати функції operator().
Під час використання оператора "()" у програмі задані аргументи
копіюються в ці параметри.
Як завжди, об'єкт, який здійснює виклик операторної функції (obj у
наведеному прикладі), адресується показником this.

Завдання
1. Створити клас Автомобіль, який містить приховані поля – Швидкість,
Пробіг, Вартість. Визначити методи доступу до цих полів.
2. Перевантажити оператор () з трьома параметрами: Швидкість, Пробіг,
Вартість, який збільшуватиме швидкість на 20, пробіг на 10, а вартість
зменшуватиме на 1.
3. Перевантажити оператор () з одним параметром - цілим числом, який
перемножуватиме Швидкість, Пробіг, Вартість на задане число.

Лістинг 12.1

34
35
Висновок:
____________________________________________________________

Лабораторна робота № 13
Тема: Перевантаження операторів new і delete
Мета: Навчитися перевантажувати оператори new і delete

Короткі теоретичні відомості

 Розробник може керувати виділенням пам’яті, перевантажуючи оператори


new і delete. Такі оператори переважно перевантажуються як методи класу.
Проте дозволено перевантаження і як дружніх функцій
 Операторні функції операторів new і delete в обидвох випадках мають вид
1. void* operator new (size_t size);
2. void operator delete (void*);
де void * - показник на область пам'яті, виділювану під об'єкт,
size - розмір об'єкта в байтах,
size_t - тип розмірності області пам'яті, int чи long.
Тип size_t спеціально визначено, щоб забезпечити зберігання розміру
максимально можливої області пам'яті, яку можна виділити для об'єкта. Параметр
size визначає кількість байтів пам'яті, потрібної для зберігання об'єкта, для якого
виділяється пам'ять. Іншими словами, це об'єм пам'яті, який повинна виділити
Ваша версія оператора new. Операторна функція new повинна повертати
показник на пам'ять, що виділяється нею, або генерувати винятки типу bad_alloc
у випадку виникнення помилки. Окрім цих обмежень, операторна функція new
може виконувати будь-які потрібні дії. Під час виділення області пам'яті для
об'єкта за допомогою оператора new (його початкової форми або Вашої власної)
автоматично викликається конструктор об'єкта.
Функція delete отримує показник на область пам'яті, яку необхідно звільнити.
Потім вона повинна повернути цю область пам'яті системі. Під час видалення
об'єкта автоматично викликається його деструктор.
Операторна функція new виділяє size байт і повертає адрес виділеної пам’яті.
Конструктори та деструктори об’єктів при цьому викликаються автоматично.

Завдання
36
1. Створити клас Мобільний телефон (Модель, Діагональ екрану).
2. Перевантажити оператори new і delete таким чином, щоб на екран
виводилися відповідні повідомлення.
3. Створити вказівник на Мобільний телефон. Виділити для нього пам’ять.
Змінити параметри телефону. Знищити виділену пам’ять.

Лістинг 13.1

37
Висновок:
____________________________________________________________

Лабораторна робота № 14
Тема: Використання наслідування
Мета: Навчитися використовувати наслідування

Короткі теоретичні відомості

Наслідування – один з трьох фундаментальних механізмів об'єктно-


орієнтованого програмування, оскільки саме завдяки йому уможливлюється
створення ієрархічних класифікацій. Використовуючи механізми
наслідування, можна розробити загальний клас, який визначає
38
характеристики, що є властиві множині взаємопов'язаним між собою
елементам. Цей клас потім може наслідуватися іншими,
вузькоспеціалізованими класами з додаванням у кожен з них своїх,
властивих тільки їм унікальних особливостей.
У стандартній термінології мови програмування C++ початковий клас
називається базовим. Клас, який успадковує базовий клас, називається
похідним. Похідний клас можна використовувати як базовий для іншого
похідного класу. За таким механізмом якраз і будується багаторівнева
ієрархія класів.
Мова програмування C++ підтримує механізм успадкування, який дає
змогу в оголошенні класу вбудовувати інший клас. Для цього базовий клас
задається під час оголошення похідного класу.
Загальний формат для забезпечення механізму успадкування має такий
вигляд:
class ім'я_похідного_класу : доступ ім'я_базового_класу
{
тіло нового класу
}
У такому оголошенні похідного класу елемент доступ є необов'язковим.
У разі потреби він може бути виражений одним із специфікаторів доступу:
public, private або protected. Ґрунтовніше про них буде сказано нижче у
цьому розділі. А поки що у визначеннях усіх успадкованих класів будемо
використовувати специфікатор доступу public. Це означає, що всі public-
члени базового класу також будуть public-членами похідного класу.

Завдання

1. Створити клас СТУДЕНТ, що має прізвище, курс та ідентифікаційний


номер. Визначити методи введення і виведення даних.
2. Створити public-похідний клас – СТУДЕНТ-ДИПЛОМНИК, що має тему
дипломної роботи. Визначити методи введення і виведення, зміни назви
дипломної роботи та ідентифікаційного номера.
3. Перевірити рівень доступу до членів похідного класу.

Лістинг 14.1

#include <iostream>

using namespace std;

39
4. Створити базовий клас Фігура (закриті поля: назва, кількість сторін,
площа, периметр). Створіть похідні класи Трикутник і Прямокутник, в яких
оголосіть поля для довжин сторін. Обчисліть площу і периметр фігур за

40
їхніми довжинами сторін. Виведіть всю інформацію про фігури (назву,
кількість сторін, довжини сторін, площа, периметр)

Лістинг 14.2

#include <iostream>

using namespace std;

41
Висновок:
_______________________________________________________________

а робочому столі ПК НЕОБХІДНО зберігати зроблену


Н
лабораторну роботу в папці з назвою своєї групи. Кожна
програма повинна називатися відповідно до номера
лістингу у лабораторній роботі.

42

You might also like