Теоретичні відомості: матеріали лекцій (тема 19, 20)

Завдання для самостійної роботи

Завдання 1.

Реалізувати завдання попередньої лабораторної роботи з використанням властивостей для доступу до полів.

Завдання 2.

У кожному із завдань передбачити конструктор класу та метод ToString, який дозволяє одержати рядкове представлення даних об’єкта. Доступ до даних реалізувати за допомогою властивостей.

1. Створити клас TMoney для роботи з грошовими сумами. Сума повинна зберігатися у вигляді доларового еквіваленту. Реалізувати методи додавання/вилучення грошової маси, вказуючи необхідну суму у гривнях, та визначення курсу долара, при якому сума у гривнях збільшиться на 100. Курс долара зберігати в окремому полі.

2. Створити клас TAngle для роботи з кутами. Кут зберігається як ціле число у градусній мірі. Реалізувати збільшення та зменшення кута на величину, яка задається у радіанах.

3. Створити клас TRational для роботи з раціональними дробами. Число представляється парою цілих чисел. Реалізувати збільшення, зменшення, множення і ділення числа на число, яке задається як дійсне число. Введення та виведення числа реалізувати за допомогою методу ToString (при цьому чисельник від знаменника відділяється символом “/”).

4. Створити клас TDate для роботи із датами у форматі “день.місяць.рік”. Дата представляється структурою із трьома полями. Реалізувати методи збільшення/зменшення дати на певну кількість днів, місяців чи років. Введення та виведення дати реалізувати за допомогою методу ToString.

5. Створити клас TFraction для роботи із десятковими дробами. Число представляється за допомогою двох полів, у яких зберігається ціла та дробова частини числа. Реалізувати методи збільшення та зменшення числа.

6. Створити клас TBankomat, який моделює роботу банкомата. Клас повинен містити поля для зберігання кількості купюр кожного із номіналів від 5 до 200 гривень. Реалізувати методи знаходження максимальної та мінімальної сум, які може видати банкомат, та метод зняття деякої суми.

7. Створити клас TTime для роботи із часом у форматі “години:хвилини”. Час представляється структурою із двома полями. Реалізувати методи збільшення/зменшення часу на певну кількість годин чи хвилин.

8. Створити клас TMan для зберігання інформації про людину з полями: ім’я, вік, стать. Реалізувати методи визначення знаку гороскопа та встановлення того, чи є людина дитиною, юнаком або дорослою людиною.

9. Створити клас TGoods, який характеризує деякий товар на складі. Клас повинен містити поля: назва товару, одиниці виміру, кількість, ціна однієї одиниці. Реалізувати методи визначення сумарної вартості товару та методи збільшення/зменшення кількості товару.

10. Створити клас TBus, який характеризує автобус і містить наступні поля: марка автобуса, вага, кількість місць, кількість пасажирів. Передбачити методи збільшення/зменшення кількості пасажирів та визначення наближеної ваги автобуса з пасажирами без багажу.

11. Створити клас TQuadrangle, який характеризує чотирикутник і містить наступні поля: довжини сторін, кути. Передбачити методи для визначення типу чотирикутника, знаходження периметру та площі.

12. Створити клас Tfirm, який характеризує приватне підприємство і містить наступні поля: назва, вид діяльності, кількість працівників, кількість продукції, що може бути виготовлена за один день. Передбачити методи для визначення кількості продукції, яка може бути виготовлена за вказаний період часу та часу, який необхідно для виготовлення вказаної кількості продуктції.

 

Завдання 3.У кожному із завдань самостійно визначити властивості, необхідні для реалізації вказаного класу та реалізувати відповідні індексатори.

  1. Реалізувати клас, що представляє одновимірний масив і містить опис індексатора для доступу до елементів. Передбачаити методи введення/виведення, знаходження максимального та мінімального елементів.
  2. Реалізувати клас, що представляє матрицю і містить опис індексатора для доступу до елементів масиву. Передбачаити методи введення/виведення, знаходження максимального та мінімального елементів.
  3. Реалізувати клас, щопредсатвляє прямокутник (прямокутник задається довжинами сторін) і містить опис індексатора для доступу до сторін прямокутника ( – перша сторона, – друга сторона). Передбачаити методи введення/виведення, знаходження периметру та площі.
  4. Реалізувати клас, щопредсатвляє трикутник (трикутник задається довжинами сторін) і містить опис індексатора для доступу до сторін трикутника( – перша сторона, – друга сторона, – третя сторна). Передбачаити методи введення/виведення, знаходження периметру та площі.
  5. Реалізувати клас, щопредсатвляє прямокутник (прямокутник задається координатами вершин) і містить опис індексатора для доступу до сторін прямокутника ( – перша сторона, – друга сторона). Передбачаити методи введення/виведення, знаходження периметру та площі.
  6. Реалізувати клас, щопредсатвляє трикутник (трикутник задається координатами вершин) і містить опис індексатора для доступу до сторін трикутника( – перша сторона, – друга сторона, – третя сторна). Передбачаити методи введення/виведення, знаходження периметру та площі.
  7. Реалізувати клас, щопредсатвляє багатокутник (багатокутник задається довжинами сторін) і містить опис індексатора для доступу до сторін багатокутника. Передбачаити методи введення/виведення, знаходження периметру та площі.
  8. Реалізувати клас, щопредсатвляє багатокутник(багатокутник задається координатами вершин) і містить опис індексатора для доступу до сторін багатокутника. Передбачаити методи введення/виведення, знаходження периметру та площі.
  9. Реалізувати клас, що представляє квадратне рівняння і містить опис індексатора, який дозволяє одержувати перший та другий розв’язки (якщо вони існують). Передбачити методи введення/виведення, перевірки існування розв’язків.
  10. Реалізувати клас, що представляє рівняння прямої на площині ( ) і містить опис індексатора для доступу до коефіцієнтів цього рівняння. Передбачити методи введеня виведення, знаходження точки перетину з іншою прямою та метод перевірки належності точки прямій.
  11. Реалізувати клас, що представляє рівняння площини ( ) і містить опис індексатора для доступу до коефіцієнтів цього рівняння. Передбачити методи введеня виведення, знаходження точки перетину з осями координат та метод перевірки належності точки площині.
  12. Реалізувати клас, що представляє систему двох рівнянь з двома невідомими

Передбачити індексатор для доступу до коефіцієнтів першого та другого рівняння (індексатор з двома індексами: перший – номер рівняння, другий – номер коефіцієнта). Передбачити також методи введення/виведення, знаходження розв’язку, перевірки точки на те, чи є вона роз’язком системи рівнянь.

  1. Реалізувати клас, що представляє натуральне число. Передбачити індексатор для доступу до цифр цього числа, методи обернення числа, та підрахунку кількості нулів.
  2. Реалізувати клас, що представляє арифметичну прогресію. Передбачити індексатор для одержання -го члена прогресії, методи введення/виведення, знаходження суми членів цієї прогресії.
  3. Реалізувати клас, що представляє геометричну прогресію. Передбачити індексатор для одержання -го члена прогресії, методи введення/виведення, знаходження суми членів цієї прогресії.

Контрольні запитання

1. Що таке інкапсуляція?

2. Що визначають області видимості?

3. Якою є область видимості за замовчуванням?

4. Чому поля класів прийнято включати в область private?

5. Для чого потрібні методи для встановлення та зчитування значень захищених полів?

6. Який формат опису властивостей?

7. Чим відрізняються властивості тільки для читання і властивості тільки для запису?

8. Яке призначення індексаторів?

9. Загальний формат опису індексаторів?

10. Скільки індексів може бути описано в індексаторі?


Лабораторна робота № 13

 

Тема:Проблема повторного використання коду. Успадкування.

 

Мета роботи: Набуття навичок розробки програм з використанням базового принципу об’єктно-орієнтованого програмування – успадкування.

Теоретичні відомості:матеріали лекцій (тема 21).

Завдання для самостійної роботи

Завдання 1.

Варіант 1.
1. Описати клас, який містять вказані поля і методи.
Клас “Вектор у ” – TVector2D
поля § для зберігання координат вектора;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення елементів вектора; § визначення довжини вектора; § нормування вектора; § порівняння з іншим вектором; § перевантаження операторів + (додавання векторів), – (віднімання векторів), * (знаходження скалярного добутку).

 

2. Створити клас-нащадок TVector3D (вектор у ) на основі класу TVector2D. Додати третю координату вектора та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

Варіант 2.

1. Описати клас, який містять вказані поля і методи.

Клас “Прямокутник ” – TRectangle
поля § для зберігання довжин сторін;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення площі; § визначення периметру; § порівняння з іншим прямокутником; § перевантаження операторів + (додавання відповідних сторін), – (віднімання довжин відповідних сторін), * (множення сторін на деяке число).

 

2. Створити клас-нащадок TParallelepiped (прямокутний паралелепіпед) на основі класу TRectangle. Додати поле для збереження висоти паралелепіпеда, метод знаходження об’єму паралелепіпеда та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

 


 

Варіант 3.

1. Описати клас, який містять вказані поля і методи.

Клас “Квадрат ” – TSquare
поля § для зберігання довжини сторін;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення площі; § визначення периметру; § порівняння з іншим квадратом; § перевантаження операторів + (додавання довжин сторін), – (віднімання довжин сторін), * (множення сторін на деяке число).

 

2. Створити клас-нащадок TCube (куб) на основі класу TSquare. Додати метод знаходження об’єму куба та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

Варіант 4.

1. Описати клас, який містять вказані поля і методи.

Клас “Трикутник ” – TTriangle
поля § для зберігання довжин сторін;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення площі; § визначення периметру; § порівняння з іншим трикутником; § перевантаження операторів + (додавання довжин сторін), – (віднімання довжин відповідних сторін), * (множення сторін на деяке число).

 

2. Створити клас-нащадок TTrianglePrizm (пряма призма, в основі якої трикутник) на основі класу TTriangle. Додати метод знаходження об’єму призми та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.
Варіант 5.
1. Описати клас, який містять вказані поля і методи.
Клас “Рівносторонній трикутник ” – TRTriangle
поля § для зберігання довжини сторін;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення площі; § визначення периметру; § порівняння з іншим трикутником; § перевантаження операторів + (додавання довжин сторін), – (віднімання довжин відповідних сторін), * (множення сторін на деяке число).

 

2. Створити клас-нащадок TPiramid (правильна трикутна піраміда) на основі класу TRTriangle. Додати метод знаходження об’єму піраміди та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.
Варіант 6.

1. Описати клас, який містять вказані поля і методи.

Клас “прямокутний трикутник ” – TPTriangle
поля § для зберігання довжин катетів;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення площі; § визначення периметру; § порівняння з іншим трикутником; § перевантаження операторів + (додавання довжин катетів), – (віднімання довжин відповідних катетів), * (множення сторін на деяке число).

 

2. Створити клас-нащадок TPPiramid (прямокутна трикутна піраміда, у якій бічне ребро перпендикулярне до катетів) на основі класу TPTriangle. Додати метод знаходження об’єму піраміди та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

Варіант 7.

1. Описати клас, який містять вказані поля і методи.

Клас “коло” – TCircle
поля § для зберігання радіуса;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення площі круга (обмеженого колом); § визначення довжини кола; § порівняння з іншим колом; § перевантаження операторів + (додавання радіусів), – (віднімання радіусів), * (множення радіуса на число).

 

2. Створити клас-нащадок TCylinder (циліндр) на основі класу TCircle. Додати метод знаходження об’єму циліндра та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

Варіант 8.

1. Описати клас, який містять вказані поля і методи.

Клас “коло” – TCircle
поля § для зберігання радіуса;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення площі круга (обмеженого колом), площі сектора; § визначення довжини кола; § порівняння з іншим колом; § перевантаження операторів + (додавання радіусів), – (віднімання радіусів), * (множення радіуса на число).

 

2. Створити клас-нащадок TCone (конус) на основі класу TCircle. Додати поле для збереження висоти конуса, метод знаходження об’єму конуса та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

Варіант 9.

1. Описати клас, який містять вказані поля і методи.

Клас “коло” – TCircle
поля § для зберігання радіуса;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення площі круга (обмеженого колом), площі сектора; § визначення довжини кола; § порівняння з іншим колом; § перевантаження операторів + (додавання радіусів), – (віднімання радіусів), * (множення радіуса на число).

 

2. Створити клас-нащадок TSphere (сфера) на основі класу TCircle. Додати метод знаходження площі поверхні сфери та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

Варіант 10.

1. Описати клас, який містять вказані поля і методи.

Клас “круг” – TCircle
поля § для зберігання радіуса; § для зберігання центра кола
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення площі круга; § перевірка належності точки кругу; § перевантаження операторів + (додавання радіусів), – (віднімання радіусів), * (множення радіуса на число).

 

2. Створити клас-нащадок TBall (куля) на основі класу TCircle. Додати метод знаходження об’єму кулі та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

Варіант 11.

1. Описати клас, який містять вказані поля і методи.

Клас “одновимірний масив” – TArray
поля § для зберігання елементів масиву; § для зберігання кількості елементів.
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § знаходження найбільшого/найменшого елемента; § сортування масиву; § знаходження суми елементів; § перевантаження операторів + (додавання елементів), – (віднімання елементів), * (множення масиву на число).

 

2. Створити клас-нащадок TOderedArray (упорядкований масив) на основі класу TArray. Додати методи додавання та вилучення елементів (перевизначивши оператори додавання та віднімання числа).
3. Створити програму-клієнт для тестування.

 

 

Варіант 12.

1. Описати клас, який містять вказані поля і методи.

Клас “матриця ” – TMatrix
поля § для зберігання елементів матриці; § для зберігання розмірності матриці.
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § знаходження найбільшого/найменшого елемента; § знаходження суми елементів.

 

2. Створити клас-нащадок TOpMatrix (матриця, для якої перевантажено оператори +,–,*) на основі класу TMatrix..
3. Створити програму-клієнт для тестування.

 

Варіант 13.

1. Описати клас, який містять вказані поля і методи.

Клас “квадратна матриця ” – TSMatrix
поля § для зберігання елементів матриці; § для зберігання розмірності матриці.
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § знаходження найбільшого/найменшого елемента; § знаходження суми елементів. § перевантаження операторів + (додавання елементів), – (віднімання елементів).

 

2. Створити клас-нащадок TDeterminant2 (визначник квадратної матриці порядку 2) на основі класу TSMatrix. Розробити метод для знаходження визначника.
3. Створити програму-клієнт для тестування.

 

Варіант 14.

1. Описати клас, який містять вказані поля і методи.

Клас “квадратна матриця ” – TSMatrix
поля § для зберігання елементів матриці; § для зберігання розмірності матриці.
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § знаходження найбільшого/найменшого елемента; § знаходження суми елементів. § перевантаження операторів + (додавання матриць), – (віднімання матриць).

 

2. Створити клас-нащадок TMSMatrix (клас доповнюється новими методами: транспонування, перевантаження оператора * (множення матриці на матрицю) та перевантаження оператора * (множення матриці на число) ) на основі класу TSMatrix. Розробити метод для знаходження визначника.
3. Створити програму-клієнт для тестування.

 

Варіант 15.

1. Описати клас, який містять вказані поля і методи.

Клас “звичайний дріб” – TFraction
поля § для зберігання чисельника і знаменника;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § скорочення дробів (якщо чисельник і знаменник містять спільні множники); § перевантаження операторів +, –, *, / .

 

2. Створити клас-нащадок TMixFraction (мішані дроби – ціла частина, чисельник і знаменник) на основі класу TFraction. Додати поле для збереження цілої частини та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

Варіант 16.

1. Описати клас, який містять вказані поля і методи.

Клас “комплексне число” – TComplex
поля § для зберігання дійсної і уявної частин;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § перевантаження операторів +, –, *, / .

 

2. Створити клас-нащадок TMComplex (комплексне число на площині) на основі класу TComplex. Додати методи визначення квадранта, у який попадає комплексне число, метод визначення відстані до початку координат.
3. Створити програму-клієнт для тестування.

 

Варіант 17.

1. Описати клас, який містять вказані поля і методи.

Клас “пряма на площині” – TLine2D
поля § для зберігання коефіцієнтів канонічного рівняння прямої;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § знаходження точки перетину з іншою прямою; § визначення належності точки прямій; § перевантаження операторів + (додавання коефіцієнтів прямих), – (віднімання коефіцієнтів прямих).

 

2. Створити клас-нащадок TLine3D (пряма у просторі) на основі класу TLine2D. Додати ще одне поле для збереження коефіцієнта при невідомій z та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

Варіант 18. 1. Описати клас, який містять вказані поля і методи.

Клас “відрізок на площині” – TInterval2D
поля § для зберігання координат початку і кінця відрізка;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § знаходження точки перетину з іншим відрізком; § визначення довжини відрізка; § визначення середини відрізка; § перевантаження операторів + (утворюється відрізок початок якого є початком першого, а кінець – кінцем другого), * (збільшення довжини відрізка у вказану кількість разів зберігаючи початок відрізка незмінним).

 

2. Створити клас-нащадок TInterval3D (відрізок у просторі) на основі класу TInterval2D. Додати поля для збереження третьої координати точок початку і кінця та перевизначити відповідні методи.
3. Створити програму-клієнт для тестування.

 

Варіант 19. 1. Описати клас, який містять вказані поля і методи.

Клас “точка на площині” – TPoint2D
поля § для зберігання довжин сторін;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення відстані до іншої точки; § визначення квадранту, до якого належить точка; § порівняння з іншою точкою; § перевантаження операторів + (додавання відповідних координат), – (віднімання відповідних координат).

 

2. На основі класу TPoint2D створити клас TCRectangle (прямокутник задається координатами вершин). Клас повинен містити чотири поля типу TPoint2D і методи для знаходження площі, периметру прямокутника та методу визначення того, чи лежить вказана точка всередині прямокутника.
3. Створити програму-клієнт для тестування.

 

Варіант 20. 1. Описати клас, який містять вказані поля і методи.

Клас “точка на площині” – TPoint2D
поля § для зберігання координат;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § визначення відстані до іншої точки; § визначення квадранту, до якого належить точка; § порівняння з іншою точкою; § перевантаження операторів + (додавання відповідних координат), – (віднімання відповідних координат).

 

2. На основі класу TPoint2D створити клас TCTriangle (трикутник задається координатами вершин). Клас повинен містити три поля типу TPoint2D і методи для знаходження площі, периметру трикутника та методу визначення того, чи лежить вказана точка всередині трикутника.
3. Створити програму-клієнт для тестування.

Варіант 21. 1. Описати клас, який містять вказані поля і методи.

Клас “арифметична прогресія” – TArProgression
поля § для зберігання першого члена арифметичної прогресії та різниці;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § знаходження -го члена; § знаходження суми перших членів прогресії; § перевантаження операторів + (додавання перших членів та різниць), – (віднімання перших членів та різниць).

 

2. На основі класу TArProgression створити клас-нащадок TArProgressionM. Цей клас повинен містити метод, який дозволяє визначити, чи утворює послідовність цілих чисел арифметичну прогресію та метод, який дозволяє встановити, чи є вказане число членом даної арифметичної прогресії.
3. Створити програму-клієнт для тестування.

 

Варіант 22. 1. Описати клас, який містять вказані поля і методи.

Клас “геометрична прогресія” – TGeomProgression
поля § для зберігання першого члена геометричної прогресії та знаменника;
методи § конструктор без параметрів, конструктор з параметрами, конструктор копіювання; § введення/виведення даних; § знаходження -го члена; § знаходження суми перших членів прогресії; § перевантаження операторів + (додавання перших членів та знаменників), – (віднімання перших членів та знаменників).

 

2. На основі класу TGeomProgression створити клас-нащадок TGeomProgressionM. Цей клас повинен містити метод, який дозволяє визначити, чи утворює послідовність додатних цілих чисел геометричну прогресію та метод, який дозволяє встановити, чи є вказане число членом даної геометричної прогресії.
3. Створити програму-клієнт для тестування.

Контрольні запитання

1. У чому полягає суть успадкування?

2. Що таке клас-предок?

3. Що таке клас-нащадок?

4. Для чого використовують класи-предки?

5. Скільки класів-предків може мати клас?

6. Як описати клас-нащадок?

7. Що таке перевизначення методів?

8. Як перевизначити метод класу-предка?

9. Як здійснити доступ до перевизначених методів класу-предка?

10. Чи має об’єкт-нащадок доступ до перевизначених методів класу-предка?

11. Які члени класу-предка є доступними для класу-нащадка?

12. Чи має можливість клас-нащадок змінювати область видимості членів класу-предка?

13. Як описати члени класу-предка, щоб вони були доступними для класу-нащадка і недоступними у програмі-клієнті?

14. Як описати члени класу-предка, щоб вони не були доступними як для класу-нащадка, так і для програми-клієнта?

15. Чи може змінна типу класу-предка приймати значення об’єкта-нащадка?

16. До яких полів і методів об’єкта-нащадка може здійснити доступ об’єкт-предок?

Лабораторна робота № 14

 

Тема:Поліморфізм у С#.

 

Мета роботи: Набуття навичок розробки класів з використанням базових принципів об’єктно-орієнтованого програмування – успадкування та поліморфізму.

Теоретичні відомості:матеріали лекцій (тема 22).

Завдання для самостійної роботи

Завдання 1.

Примітки. У кожному із завдань при описі класів самостійно визначити необхідні поля, властивості та методи вводу/виводу. Деякі методи класу-предка можуть бути віртуальними і абстрактними. У програмі-клієнті для збереження сукупності об’єктів використати масив.

  1. Створити клас TPrism, який представляє правильну призму і містить методи для знаходження площі поверхні та об’єму. На основі цього класу створити класи-нащадки TPrism3 та TPrism4, які представляють правильну трикутну та чотирикутну призми. З клавіатури вводиться дані для створення правильної трикутної та чотирикутної призми. На їх основі поступово створити правильних призм (трикутних та чотирикутних), об’єм кожної з яких на 5 більше попередньої. Для трикутних призм знайти сумарний об’єм, а для чотирикутних – суму площ поверхні.
  2. Створити клас TPrism, який представляє призму (в основі опуклий багатогранник) і містить методи для знаходження площі поверхні та суми ребер. На основі цього класу створити класи-нащадки, що представляють пряму та похилу призми. Випадковим чином згенерувати дані для призм обох видів. Визначити, чи є серед прямих призм така, площа поверхні якої дорівнює площі поверхні першої по порядку похилої призми. Для похилих призм знайти суму всіх сум ребер.
  3. Створити клас TNumber з віртуальними методами для знаходження суми цифр та знаходження першої/останньої цифри. На основі цього класу створити класи-нащадки TIntNumber та TRealNumber, у яких реалізовано перевизначені віртуальні методи. Створити об’єктів цілих чисел та об’єктів дійсних чисел (дані згенерувати випадковим чином). Знайти суму перших цифр цілих чисел та суму останніх цифр дійсних чисел.
  4. Створити клас TBody, який представляє просторову геометричну фігуру з методами обчислення площі поверхні та об’єму. На основі цього класу створити класи нащадки TParallelepiped та TBall. Випадковим чином створити певну кількість паралелепіпедів та куль, щоб їх сумарна кількість дорівнювала . Знайти сумарну площу поверхонь усіх геометричних тіл.
  5. Створити клас TTriangle з віртуальними методами для обчислення площі та периметру. На основі цього класу створити класи, які представляють рівносторонні, прямокутні та рівнобедрені трикутники. Випадковим чином створити певну кількість трикутників кожного виду, щоб їх сумарна кількість дорівнювала . Для рівносторонніх та прямокутних обчислити суму площ, а для рівнобедрених – суму всіх периметрів.
  6. Створити клас TQuadrangle, який представляє чотирикутник і містить віртуальні методи для обчислення площі та периметру. На основі цього класу створити класи, які представляють прямокутник, квадрат, паралелограм (квадрат створити на основі прямокутника). Випадковим чином створити певну кількість чотирикутників кожного виду, щоб їх сумарна кількість дорівнювала . Обчислити суму площ прямокутників та квадратів і суму периметрів паралелограмів.
  7. Створити клас TMatrix, який представляє матрицю і містить методи для обчислення детермінанта та суми елементів матриці. На основі цього класу створити класи, які представляють квадратні матриці порядку 2, та порядку 3. За допомогою цих класів обчислити вираз

,

де – матриця порядку 3, а – матриця порядку 2.

  1. Створити клас TVector, який представляє вектор і місить методи для обчислення довжини вектора та скалярного добутку векторів. На основі цього класу створити класи, які представляють вектори з просторів та . За допомогою цих класів, обчислити значення виразу

,

де , а .

  1. Створити клас TVector, який представляє вектор і місить методи для визначення того, чи є інший вектор паралельним/перпендикулярним до нього та метод знаходження довжини вектора. На основі цього класу створити класи, які представляють вектори з просторів та . У масиві зберегти 3 двовимірні та 4 тривимірні вектори. Знайти суму довжин паралельних до першого по порядку двовимірних векторів та суму перпендикулярних до першого по порядку тривимірних векторів.
  2. Створити клас TEquation, який представляє рівняння і містить віртуальні методи для знаходження коренів рівняння та перевірки чи є деяке значення коренем рівняння. На основі цього класу створити класи нащадки, які представляють лінійні рівняння та квадратні рівняння. Випадковим чином згенерувати дані для лінійних рівнянь та квадратних рівнянь. Знайти суму коренів для кожного із видів рівнянь (за умови, що вони існують).
  3. Створити клас TSystemLinearEquation, який представляє систему лінійних алгебраїчних рівнянь і містить методи для введення/виведення коефіцієнтів, знаходження коренів та перевірки того, чи є деякий набір чисел розв’язком системи. На основі цього класу створити класи-нащадки, які представляють системи двох та трьох лінійних рівнянь відповідно з двома та трьома невідомими. Випадковим чином згенерувавши дані, знайти розв’язок систем лінійних алгебраїчних рівнянь обох видів.
  4. Створити клас TVSeries, який представляє прогресію і містить методи для знаходження -го члена прогресії і знаходження суми перших членів цієї прогресі. На основі цього класу створити класи нащадки, які представляють арифметичні та геометричні прогресії. Випадковим чином згенерувати дані для прогресій (геометрична, арифметична, геометрична, арифметична, і т.д.). Знайти суму перших членів прогресії, ‑товий член якої є найбільшим.
  5. Створити клас TTriad, який представляє трійку цілих чисел і містить методи для їх збільшення/зменшення на 1. Реалізувати класи нащадки TDate (“число.місяць.рік”) та TTime (“години.хвилини.секунди”). Випадковим чином згенерувати дат та об’єктів-часу. Визначити, які із дат мають значення, що є допустимими, якщо їх трактувати як час. Всі інші дати зменшити на 1.
  6. Створити клас TPair, який представляє пару чисел і містить методи для їх збільшення/зменшення на 1. Реалізувати класи нащадки TTime (“години.хвилини”) та TMoney (“гривні.копійки”). Згенерувати поступово випадковим чином пар (час, гроші), де час – тривалість виконання роботи, а гроші – вартість однієї хвилини роботи працівників. Обчислити витрати на виконання кожної із робіт.
  7. Створити клас TArray, який представляє одновимірний масив і містить методи введення/виведення, збільшення/зменшення всіх елементів на 1 та знаходження середнього арифметичного. Реалізувати класи‑нащадки, що представляють одновимірні масиви з елементами цілого та дійсного типів. Випадковим чином створивши масивів кожного виду, знайти масив, середнє арифметичне елементів якого є найбільшим.
  8. Створити клас TSructureArray, який представляє одновимірний масив як послідовну структуру даних для збереження дійсних чисел і містить методи введення/виведення, додавання/вилучення, впорядкування та пошуку елемента. Реалізувати класи-нащадки, що представляють структуру даних впорядкований масив (можна здійснювати дихотомічний пошук) та невпорядкований масив. Випадковим чином задаючи елементів, зберегти їх одночасно у впорядкованому та невпорядкованому масивах. Визначити кількість порівнянь, які необхідно для знаходження елемента як у впорядкованому, так і невпорядкованому масивах.
  9. Створити клас TLine, що представляє пряму і містить методи для визначення того, чи є інша пряма паралельною/перпендикулярною до неї, чи належить вказана точка прямій. Реалізувати класи-нащадки, що представляє пряму на площині і в просторі. Випадковим чином згенерувати дані для створення прямих у просторі, та прямих на площині. Визначити, чи є серед заданих прямих у просторі така, що є перпендикулярною до всіх інших прямих у просторі.
  10. Створити клас TGiperplane, що представляє гіперплощину і містить віртуальні методи для визначення того, чи належить точка гіперплощині, чи є вектор перпендикулярним до гіперплощини, знаходження проекції точки на гіперплощину. Реалізувати класи-нащадки, що представляють гіперплощину в просторі та . Для кожного виду гіперплощин окремо сформувати екземплярів, та, випадковим чином задавши точку (з відповідного простору), визначити, чи належить точка перетину деяких гіперплощин.
  11. Створити клас TStructure, що представляє лінійний однозв’язний список (поле даних дійсного типу) і містить методи для виведення елементів структури на екран (без їх видалення), знаходження суми елементів та додавання/вилучення елементів. Реалізувати класи-нащадки, що представляють структури даних черга та стек. Випадковим чином задаючи дані, зберегти їх за допомогою структури даних черга, а потім використовуючи стек. Записати елементи у чергу у зворотному порядку до порядку їх введення.
  12. Створити клас TFraction, який представляє дріб і містить методи для додавання/віднімання іншого дробу. На основі цього класу створити класи-нащадки TRFraction (раціональний дріб) та TDFraction (десятковий дріб), для яких передбачити метод “інвертування” (для раціональних дробів чисельник і знаменник поміняти місцями, а для десяткового – здійснити обмін цілої і дробової частин). Випадковим чином згенерувати певну кількість дробів обох видів (в одному масиві) та інвертувати дроби, які менші за середнє арифметичне усіх дробів.
  13. Створити клас TEmploeer, який представляє працівника (паспортні дані, дата прийняття на роботу, дата вступу на поточну посаду) і містить методи знаходження стажу, авансу та заробітної плати. На основі цього класу створити класи, для представлення директорів (назва відділення, кількість менеджерів та працівників, що є у підпорядкуванні), менеджерів та операторів заводу. Якщо стаж 5 (10) років, то розмір заробітної плати збільшується на 10% (25%). Визначити розміри заробітної плати працівників, дані яких згенеровано випадковим чином, якщо оклад директора 3000 грн., менеджера –2500 грн., оператора – 1800 грн. Вивести на екран дані тих працівників, які отримують заробітну плату, вищу ніж середня заробітна плата на заводі.

Контрольні запитання

1. Які види методів можна виділити відносно успадкування?

2. Що таке віртуальні методи? Як вони описуються?

3. Чим відрізняються віртуальні методи від статичних?

4. Що таке абстрактні методи?

5. Чи можуть віртуальні методи бути абстрактними?

6. Як називають клас, що містить абстрактні методи?

7. Чи може клас містити крім абстрактних інші методи?

8. Чи можна створити об’єкт абстрактного класу?

9. У яких випадках використовують абстрактні класи?

10. Чи можна визначити тип об’єкта-нащадка, якщо змінна типу клас‑предок містить його адресу?

11. До яких членів об’єкта-нащадка має доступ змінна типу класу-предка, якщо вона містить його адресу?

12. Як можна привести тип змінної класу-предка до типу класу-нащадка?


Лабораторна робота № 15

 

Тема:Використання інтерфейсів у С#.

 

Мета роботи: Набуття навичок розробки класів з використанням інтерфейсів та базового принципу об’єктно-орієнтованого програмування – успадкування.

Теоретичні відомості: матеріали лекцій (тема 23).

Завдання для самостійної роботи

Завдання 1.

У кожному із завдань для тестування створити програму-клієнт.

1. Створити клас, що містить методи знаходження площі, периметра та типу опуклого чотирикутника, який може задаватися довжинами сторін або координатами вершин. Створити відповідні інтерфейси для випадку задання чотирикутника довжинами сторін та координатами вершин.

2. Створити клас, що містить методи знаходження площі, периметра, радіуса вписаного і описаного кола для рівностороннього, рівнобедреного, різностороннього та прямокутного трикутників. Для різного типу трикутників передбачити відповідні інтерфейси.

3. Створити клас, що містить методи визначення паралельності та перпендикулярності прямих на площині, що задані різними способами. Для різних способів задання прямих передбачити відповідні інтерфейси.

4. Створити клас, що містить методи знаходження розв’язків системи двох лінійних рівнянь з двома невідомими та системи трьох лінійних рівнянь з трьома невідомими (коефіцієнти можуть бути задані як десяткові дробів або як раціональні дроби). Для системи двох лінійних рівнянь з двома невідомими та системи трьох лінійних рівнянь з трьома невідомими передбачити відповідні інтерфейси.

5. Створити клас, що містить методи розв’язання квадратного рівняння (знаходження розв’язків розглядати як у , так і просторі комплексних чисел). Для різних випадків передбачити відповідні інтерфейси.

6. Створити клас, що містить методи додавання, віднімання, множення та ділення раціональних дробів та такі ж методи для роботи з комплексними числами. Для випадку раціональних дробів та випадку комплексних чисел передбачити відповідні інтерфейси.

7. Створити клас, що містить методи для знаходження відсотку від числа, збільшення, зменшення числа на певну кількість відсотків (число може бути десятковим або раціональним дробом). При створенні класу використати відповідні інтерфейси.

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

9. Створити клас, що містить методи для знаходження суми і різниці цифр, які можуть бути арабськими, римськими або задані прописом. При створенні класу використати відповідні інтерфейси.

10. Створити клас, що містить методи знаходження суми, добутку та середнього арифметичного елементів масиву, який може бути статичним або динамічно створеним. При створенні класу використати відповідні інтерфейси.

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

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

13. Створити інтерфейс, що містить опис методів для знаходження -го члена та суми перших членів прогресії. На основі цього інтерфейсу створити класи, що містять реалізації методів інтерфейсу у випадку арифметичної та геометричної прогресій.

14. Створити інтерфейс, що містить опис методів для знаходження суми цифр числа, а визначення кількості нулів у записі числа. На основі цього інтерфейсу створити класи, що містять реалізації методів інтерфейсу у випадку цілого та дійсного чисел

15. Створити інтерфейс, що містить опис методів додавання, вилучення та пошуку елементів, що є цілими числами типу Byte. На основі цього інтерфейсу створити класи, що містять реалізації методів інтерфейсу, зберігаючи елементи у множині та одновимірному масиві.

16. Створити інтерфейс, що містить опис методів додавання, вилучення та пошуку елементів, що є цілими числами. На основі цього інтерфейсу створити класи, що містять реалізації методів інтерфейсу, зберігаючи елементи у стеку та черзі.

17. Створити інтерфейс, що містить опис методів додавання, вилучення та пошуку дійсних чисел, які зберігаються у файлі. На основі цього інтерфейсу створити класи, що містять реалізації методів інтерфейсу, зберігаючи числа у текстовому та типізованому файлі дійсних чисел.

18. Створити інтерфейс, що містить опис методів роботи з матрицями (знаходження детермінанта, сліду, рангу матриці), та класи, що містять реалізації методів інтерфейсу у випадку квадратних матриць порядку 2 і 3.

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

20. Створити інтерфейс, що містить опис методів визначення відстані від точки до площини в та метод перевірки належності точки деякій площині. На основі цього інтерфейсу створити класи, що містять реалізації методів інтерфейсу у випадку задання площини канонічним рівнянням та за допомогою трьох точок.

21. Створити інтерфейс, що містить опис методів знаходження площі поверхні, площі основи та об’єму правильної піраміди. На основі цього інтерфейсу створити класи, що містять реалізації методів інтерфейсу у випадку трикутної та чотирикутної пірамід.

Контрольні запитання

1. Що таке інтерфейс?

2. Що спільного між інтерфейсами та абстрактними класами?

3. Чим відрізняються інтерфейси від абстрактних класів?

4. Який інтерфейс є базовим для всіх інтерфейсів?

5. Що повинен містити клас, який реалізує інтерфейс?

6. Чи обов’язково клас, який реалізує інтерфейс має містити реалізації всіх його методів?

7. Чи можна змінній типу інтерфейс надавати значення об’єкта типу класу, в якому реалізовано цей інтерфейс?

8. Чи може інтерфейс мати багато реалізацій?


Лабораторна робота № 16

 

Тема:Обробка виключних ситуацій у С# .

 

Мета роботи: Набуття навичок розробки стійких програм з аналізом виключних ситуацій.

Теоретичні відомості:матеріали лекцій (тема 24).

Завдання для самостійної роботи

Завдання 1.

Усі завдання потребують використання класів і успадкування.

1. Обчислити суму векторів з генерацією виключних ситуацій під час виходу значень за заданий діапазон і у разі невірного розміру вектора.

2. Обчислити суму матриць з генерацією виключних ситуацій під час виходу значень за заданий діапазон і невірному розмірі матриць.

3. Здійснити пошук у списку. У разі відсутності потрібного значення ге-нерувати виключення, інакше повернути покажчик на знайдений елемент.

4. Здійснити пошук файлу на диску та його зчитування. У разі відсутно-сті файлу або неможливості його відкриття та читання генерувати виклю-чення.

5. Розробити базовий клас "Виключення" і похідні класи для конкрет-них виключних ситуацій (помилки перетворення рядка у число, неприпус-тиме приведення типів, переповнення тощо).

6. Визначити клас int, що працює як вбудований тип int, але генерує ви-ключення у ситуаціях overflow, underflow.

7. Продемонструвати послідовність викликів обробника виключень catch() при використанні вкладених блоків try-catch(). Протестувати на при-кладі обробки виключень виду: втрата значення у виразі з плаваючою точкою, ділення на нуль, переповнення значень з плаваючою точкою, неприпус-тима математична операція з плаваючою точкою.

8. Використати ієрархію класів для обробки виключень, що викликаються стандартною бібліотекою математичних функцій (переповнення, ділення на нуль, значення за межами діапазону тощо).

9. Створити клас "Рядок", в якому передбачити методи об’єднання двох і більше рядків у один. Передбачити виключну ситуацію, яка створюється під час недостачи пам'яті для розміщення об’єднаного рядка. Реалізувати обробку виключення, яке генерується у конструкторі.

10. Створити клас "Матриця", в якому визначити методи генерації мат-риці генератором випадкових чисел, перевірки її на симетричність. Передба-чити обробку таких виключних ситуацій, як вихід значень матриці та її інде-ксів за межі діапазону, її несиметричність.

11. Створити базовий та похідні класи виключень. За допомогою опера-тора catch()базового класу здійснити перехоплення виключень похідних класів.

12. Розробити тестову програму, яка використовує усі можливі формати оператора throw(з параметрами та без параметрів) і демонструє послідов-ність передачі управління відповідному оператору catch().

13. Представивши виключення у вигляді ієрархічного дерева, реалізува-ти їх обробку під час виконання математичних функцій над даними, що зчи-тані з потоку.

14. Створити клас "Число", в якому значення числа, мантиса та порядок є його атрибутами. Реалізувати методи визначення мантиси та порядку числа по його значенню, формування матриці вимірності n*3, стовпчики якої міс-тять зчитане число, його мантису та порядок. Дані зчитати з потоку симво-лів. У випадку зчитування нецифрових символів сформувати виключення та здійснити його обробку.

15. Використовуючи потоки введення-виведення, написати програму-фільтр, яка із зчитаного потоку, виділяє алфавітні символи та перетворює їх у символи верхнього регістру, а зчитані цифрові символи замінює на будь-який введений з клавіатури. Якщо зчитані символи пунктуації та арифметичних дій, то сформувати виключення та їх обробити.

16. Визначити зворотну матрицю з генерацією виключних ситуацій під час виходу значень за заданий діапазон і неправильній вимірності матриці.

17. Створити клас Complex, в якому визначити конструктор і методи додавання та множення комплексних чисел. Передбачити генерацію виклю-чних ситуацій у конструкторі під час ініціалізації атрибутів комплексного числа та під час виклику інших методів.

18. Створити клас "Типові виключення", в якому визначити методи об-числення арифметичного виразу з генерацією виключень типів ділення на нуль, арифметичного переповнення, недостачі оперативної пам’яті для роз-міщення обчисленого результату, виходу значення за допустимі межі.

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

20. Створити клас "Ціле число", в якому визначити методи, що можуть генерувати виключення типів переповнення зверху та знизу і ділення на нуль.

21. Створити клас "Матриця", в якому визначити конструктор для гене-рації верхньої трикутної методи матриці та методи обчислення її визначника як добутку її діагональних елементів. Формувати виключні ситуації у випадках, коли визначник дорівнює нулю або не побудована верхня трикутна матриця.

22. Написати програму для генерації та обробки помилки, яка пов’язана з нестачею оперативної пам’яті. Програма повинна видавати відповідне повідомлення при динамічному виділення пам’яті за допомогою оператора new.

23. Розробити програму, яка формує виключення при перевищенні від-веденого для її роботи часу і зупиняється. Користувач може продовжити працювати, задавши відповідні дані з клавіатури.

24. Визначити клас "Елементарні та обернені тригонометричні функції". У виключних ситуаціях (вихід аргументу за область допустимих значень) генерувати та обробляти відповідні виключення.

Контрольні запитання

  1. Який загальний формат опису фрагменту коду обробки виключної ситуації?
  2. Як згенерувати виключну ситуацію за бажанням користувача?
  3. Який клас є нащадком класів виключних ситуацій?
  4. Що відбувається у випадку, коли не обробити виключну ситуацію?
  5. Як здійснити контроль переповнення типів даних?

Лабораторна робота № 17

 

Тема:Покажчики. Динамічні структури даних стек та черга. Динамічні структури даних дерева.

 

Мета роботи: Набуття навичок розробки програм з використанням динамічних структур даних.

Теоретичні відомості:матеріали лекцій (тема 25).

Завдання для самостійної роботи

Завдання 1.