Лабораторна робота №4. Тема: Створення класів
В кожному варіанті розробити вказаний клас і протестувати його, для чого в основній програмі створити необхідну кількість об’єктів, використовуючи які, продемонструвати всі розроблені оператори і функції. Частину перевизначених операторів і функцій зробити дружніми, а частину – членами класу.
Варіанти завдань
1. Визначити клас: трикутник на площині. Він визначається трьома вершинами А(X1,Y1), B(X2,Y2), C(X3,Y3). Xi, Yi є R. Створити конструктор і деструктор.
Визначити операції:
«<<» друку інформації про об’єкт;
«==», «!=» порівняння двох об’єктів.
Визначити функції:
- знаходження площі і периметра трикутника;
- знаходження радіуса вписаного і описаного кола;
- знаходження кутів при вершинах;
- знаходження висот і медіан;
- визначення типу трикутника (прямокутний, гострокутний, є тупий кут; рівнобедрений, рівносторонній);
- графічного зображення об’єкта на екрані;
- знаходження центрів описаного і вписаного кола;
- повертання на заданий кут навколо центра описаного кола;
- зсуву об’єкта вправо, вліво.
2. Визначити клас многочленів степеня n з дійсними коефіцієнтами P(x)=a0 +a1 x +a2 x2 +…+ an-1 xn-1, x є R.
Для збереження коефіцієнтів многочлена використати масив. Створити конструктори і деструктор.
Визначити операції:
«+», «-», «*» -додавання, віднімання і множення многочленів.
Визначити функції:
- друку многочлена;
- створення копії многочлена;
- знаходження значення многочлена в точці;
- знаходження частки і залишка від ділення многочлена на многочлен;
- обчислення многочленів (x-a)P(x), P(x+a) (a задається), P’(x), P(Q(x)).
3. Визначити клас: довге ціле число. Для збереження числа використати масив (один елемент масиву - одна цифра числа). Створити конструктори i деструктор.
Визначити операції:
"+", "-", "*" додавання, віднімання, множення чисел;
"/" цілочислове ділення;
"%" залишок від ділення;
"==","!=",">","<","<=",">=" порівняння.
Визначити функції:
- друку числа;
- логічну функцію, яка визначає, чи дорівнює число нулю.
Визначити, чи є число 250+1 простим. Роздрукувати числа 210, 2100, 100!.
4. Створити клас: рядок символів. Рядок символів зберігається в пам’яті з допомогою однонапрямного зв’язного списку. Створити конструктори і деструктор.
Визначити операції:
«+» зчеплення двох рядків;
«==», «!=», «<», «>», «<=», «>=» операції порівняння двох рядків;
«<<» операцію друку рядка.
Визначити функції:
- копіювання рядка;
- знищення N символів рядка, починаючи з позиції Poz;
- вставка рядка St1 в рядок St2, починаючи з позиції Рoz;
- визначення довжини рядка;
- виявлення першого входження в рядок St1 підрядка St2. Результат – номер позиції.
5. Створити клас: множина точок на площині. P(X,Y), X,Y є Z. Для збереження множини використати лінійний однонапрямний список. Створити конструктори і деструктор.
Визначити операції:
«*», «+», «-» перетин, об’єднання, різниця двох множин;
«==»,«!=», «>=», «<=» операції відношення множин;
«<< » операцію друку множини.
Визначити функції:
- створення копії множини;
- визначення кількості елементів в множині;
- визначення належності точки до множини;
- порівняння з порожньою множиною;
- впорядкування множини по відстаням від точок до початку координат;
- впорядкування множини по куту повороту відносно вісі ОХ.
6. Визначити клас: прямий паралелограм на площині. Паралелограм визначається числами (X1, Y1, X2, Y2, X3, Y3) , де Xi, Yi є N.
(X2, Y2) (X3, Y2)
(X1, Y1)
Створити конструктор і деструктор.
Визначити операції:
“+”, “*”, “-” площа об’єднання, перетину і різниці паралелограмів;
“==” порівняння паралелограмів на співпадання при переносі.
Визначити функції:
- друку інформації про паралелограм;
- знаходження площі і периметру об’єкта;
- графічного зображення об’єкта;
- знаходження гострого кута при вершині;
- зсуву об’єкта на 10 пікселей вправо.
7. Створити клас: множина цілих чисел. Для представлення множини використати бінарний вектор. Створити конструктор і деструктор.
Визначити операції:
«*» – перетин двох множин;
«+» – об’єднання множин;
«-» – різниця двох множин;
«~» – доповнення множини;
«%»– симетричну різницю множин;
«==», «!=», «>=», «<=» – операції відношення множин;
«<<»,«>>» - операції вводу і виводу інформації про множину.
Визначити функції:
- створення копії множини;
- визначення кількості елементів в множині;
- визначення, чи належить число до множини;
- порівняння з порожньою множиною;
- знаходження мінімального елемента множини.
8. Визначити клас многочленів з комплексними коефіцієнтами P(x)=a0 +a1 x +a2 x2 +…+ an-1 xn-1, x є C, ak =u+iv, u є Z, v є Z. Для збереження коефіцієнтів в пам’яті використати лінійний однонапрямний зв’язний список. Створити конструктори і деструктор
Визначити операції:
«+»,«-», «*» додавання, віднімання, множення многочленів;
«==» операцію порівняння многочленів.
Визначити функції:
· друку многочлена;
· створення копії многочлена;
· обчислення значення многочлена в точці a;
· друку многочлена Р(x+а) для заданного a.
9. Визначити клас многочленів довільного степеня з цілими коефіцієнтами P(x)=a0 +a1 x +a2 x2 +…+ an-1 xn-1.
Для збереження коефіцієнтів в пам’яті використати лінійний однонапрямний зв’язний список. Створити конструктори і деструктор
Визначити операції:
«+»,«-», «*» додавання, віднімання, множення многочленів;
«<<»,«>>» операції виводу і вводу многочленів.
Визначити функції:
- перевірки рівностей двох многочленів;
- створення копії многочлена;
- знаходження значення многочлена в точці;
- обчислення многочленів Р(x+а), (x-а)Р(x), Р’(x) для заданного a;
- графічного зображення функції y=Р(x).
10. Визначити клас многочленів з раціональними коефіцієнтами коефіцієнтами P(x)=a0 +a1 x +a2 x2 +…+ an-1 xn-1, x є Q, ak =uk/vk, uk є Z, vk є N.
Для збереження коефіцієнтів використати один двовимірний або два одновимірні масиви. Створити конструктор та деструктор.
Визначити операції:
«+» додавання двох многочленів;
«-» віднімання двох многочленів;
«*» множення двох многочленів;
«<<» друку многочлена;
«==» порівняння двох многочленів.
Визначити функції:
- створення копії многочлена;
- скорочення раціонального дробу;
- знаходження значення многочлена в точці;
- знаходження Р’(х), Р(х+а).
11. Визначити клас: комплексне число. Створити конструктори і деструктор.
Визначити операції:
«+»,«-»,«*»,«/» - арифметичні операції;
«=» – присвоєння;
«!» – отримання спряженого числа.
Створити функції:
- друку комплексного числа;
- створення копії;
- знаходження кореня n-го степеня з комплексного числа;
- знаходження |z|, Arg z, za (a–дійсне число);
- обчислення
з заданою точністю за допомогою рядів
12. Створити клас матриць розмірності n х n з дійсними коефіцієнтами. Визначити конструктор і деструктор.
Визначити операції:
«+»,«-»,«*» для матриць;
«<<» друку матриці;
«>>» вводу матриці;
«==» порівняння матриць.
Визначити функції:
- знаходження визначника матриці;
- знаходження оберненої матриці;
- знаходження норми матриці;
- знаходження сліду матриці;
- функцію, яка визначає, чи є матриця симетричною.
13. Визначити клас векторів розмірності n. Створити конструктори і деструктор.
Визначити операції:
«+»,«-» додавання і віднімання векторів;
«*» скалярний добуток векторів;
«>>» вводу вектора;
«^» множення вектора на число.
Визначити функції:
- друку вектора;
- знаходження довжини вектора;
- створення копії вектора;
- сортування елементів вектора;
- нормування вектора.
14. Створити клас: рядок символів Рядок символів зберігається як в мові Паскаль. Для його збереження використовується масив символів. В нульовому елементі зберігається поточна довжина рядка. Створити конструктори і деструктор.
Визначити операції:
«+» зчеплення двох рядків;
«%» логічне додавання (добавляються тільки ті символи з другого рядка, яких немає в першому рядку);
«==»,«!=»,«<»,«>»,«<=»,«>=» операції порівняння двох рядків.
Визначити функції:
- друку рядка;
- копіювання рядка;
- знищення N символів рядка, починаючи з позиції Poz;
- вставки рядка st1 в рядок st2, починаючи з позиції Poz;
- визначення довжини рядка;
- виявлення першого входження в рядок st1 підрядка st2. Результат - номер позиції.
15. Визначити клас: рядок символів. Для збереження рядка використати масив, ознакою кінця рядка символів є символ ‘\0’. Створити конструктори і деструктор.
Визначити операції:
«*» логічне множення двох рядків (повертається рядок, в якому є тільки спільні символи);
«+» операцію зчеплення двох рядків;
«==», «!=», «<», «>», «<=» , «>=», операції порівняння двох рядків.
Визначити функції:
- друку рядка;
- копіювання рядка;
- знищення N символів рядка, починаючи з позиції Poz;
- вставка рядка St1 в рядок St2, починаючи з позиції Poz;
- визначення довжини рядка;
- виділення із рядка підрядок довжиною N символів починаючи з позиції Poz;
- виявлення першого входження рядка в підрядок. Результат - номер позиції;
- перевірки, чи є рядок записом цілого додатного числа;
- перетворення рядка символів в ціле число, записом якого він є.
16. Визначити клас: круг на площині. Круг визначається трійкою чисел (х, у, r). Створити конструктори і деструктор.
Визначити операції:
«+» – площа об'єднання двох кругів;
«–» – площа різниці двох кругів;
«*» – площа перетину двох кругів.
Визначити функції:
- друку інформації про коло;
- порівняння площ;
- знаходження площі круга;
- довжини дуги для заданого в градусах центрального кута;
- графічного зображення кола на екрані.
17. Визначити клас: прямокутник на площині. Прямокутник визначається координатами точки А(х1,у1) – верхня ліва точка, і точки В(х2,у2) – нижня права точка прямокутника (х1,у1,х2,у2єN). Створити конструктори і деструктор.
Визначити операції:
«+» – площа об'єднання двох прямокутників;
«–» – площа різниці двох прямокутників;
«*» – площа перетину двох прямокутників.
Визначити функції:
- друку інформації про прямокутник;
- порівняння прямокутників за площами;
- порівняння прямокутників на співпадання при переносі;
- знаходження площі і периметру прямокутника;
- графічного зображення прямокутника на екрані.
18. Визначити клас: довге ціле число. Для збереження числа використати лінійний однонапрямний список. Створити конструктор i деструктор.
Визначити операції:
"+", "-", "*" додавання, віднімання, множення чисел;
"/" цілочислове ділення;
"%" залишок від ділення.
Визначити функції:
- друку числа;
- знаходження кількості цифр в числі;
- нормалізації числа (відкидання незначущих нулів);
- логічну функцію, яка визначає, чи дорівнює число нулю.
Визначити, чи є число 2100+1 простим.
19. Створити клас: правильний многокутник. Об’єкт визначається через 5 цілих чисел X1,Y1, R, N. Тут O(X1,Y1)- центр описаного кола, R – радіус описаного кола, N – кількість сторін, A(X1-R, Y1) –координати першої вершини. Створити конструктор і деструктор.
Визначити операцію:
“==” , “!=”– порівняння двох об’єктів;
“<<”– друку інформації про об’єкт.
Визначити функції:
· знаходження площі і периметра об’єкта;
· знаходження радіуса вписаного кола;
· знаходження кута при вершині;
· графічного зображення об’єкта на екрані;
· зсуву зображення на 20 пікселей вліво.
20. Визначити клас: площина у просторі. Площина задається загальним рівнянням А,В,С,D – коефіцієнти. Створити конструктор і деструктор, генератор копій.
Визначити операції:
«^» – кут між площинами;
«||» – відстань між площинами;
«==», «!=» – порівняння двох площин.
Визначити функції:
· друку інформації про площину;
· перевірки на належність точки до площини;
· визначення коефіцієнтів нормального рівняння площини;
· перевірки на паралельність площини координатним площинам;
· перевірки паралельності і перпендикулярності двох площин;
· знаходження відстані між точкою і площиною;
21. Визначити клас: ламана на площині. Ламана задається координатами точок, які зберігаються в двовимірному або одновимірному масиві. Створити конструктори і деструктор.
Визначити операції:
"+"- склеювання двох ламаних;
"<<", ">>"- виводу і вводу ламаної (кількість вершин та їх координати).
Визначити функції:
· визначення, чи ламана замкнута;
· визначення, чи є самоперетин ламаної;
· визначення, чи є замкнута ламана опуклою;
· знаходження площі фігури, обмеженою опуклою ламаною;
· графічного зображення ламаної.
Для спрощення алгоритму всі вершини, крім, можливо, першої, і останньої вважати різними.
22. Визначити клас: пряма на площині. Пряма задається загальним рівнянням, А,В,С – коефіцієнти. Створити конструктор і деструктор, генератор копій.
Визначити операції:
«^» – кут між прямими;
«||» – відстань між прямими;
«==», «!=» – порівняння двох прямих.
Визначити функції:
· друку інформації про пряму;
· знаходження перетину двох прямих;
· перевірки на належність точки до прямої;
· визначення коефіцієнтів нормального рівняння прямої;
· перевірки на паралельність прямої координатним осям;
· перевірки паралельності і перпендикулярності двох прямих;
· знаходження відстані між точкою і прямою.
23. Визначити клас: точка на площині. Створити конструктори і деструктор, генератор копій.
Визначити операції:
«++»,«--» – зсув точки вправо/вліво на 10 пікселів;
«||» – відстань між точками;
«<<», «>>» – вивід і ввід точок.
«==», «!=» – порівняння двох точок.
Визначити функції:
· знаходження полярних координат точки;
· графічного зображення точки на координатній площині;
· визначення, в якій чверті координатної площини лежить точка;
· визначення, чи утворюють 4 дані точки коло.
· визначення належності 3 даних точок одній прямій.
24. Визначити клас: ламана у просторі. Ламана задається координатами точок, які зберігаються в масиві розміром 3 х n. Створити конструктори і деструктор, генератор копій.
Визначити операції:
"+"- склеювання двох ламаних;
"="-присвоєння.
Визначити функції:
· друку інформації про ламану (кількість вершин та їх координати);
· визначення, чи ламана замкнута;
· визначення, чи належить вона одній площині;
· знаходження проекцій ламаної на координатні площини;
· графічного зображення проекції ламаної на XOY.
25. Визначити клас: точка у просторі. Створити конструктор, деструктор, генератор копій.
Визначити операції:
«==», «!=» – порівняння точок;
«||» – відстань між точками;
«=» – присвоєння;
«+», «-» – додавання, віднімання точок.
Створити функції:
· друку інформації про точку;
· знаходження сферичних координат;
· визначення належності точки координатним площинам.
· визначення рівняння прямої, що проходить через 2 задані точки;
· визначення рівняння площини, що проходить через 3 задані точки;
26.Визначити клас: ціле число. Створити конструктор і деструктор.
Визначити операції:
«++» - сума цифр числа;
«—» – знищення незначущих цифр числа;
«!» - обертання числа (цифри – в оберненому порядку);
«&» – ділення чисел (результат–дійсне число).
Створити функції:
· перевірки, чи є число простим;
· знаходження простих дільників числа;
· розклад числа на прості множники;
· знаходження найменшого спільного кратного двох чисел;
· друку числа в різних системах числення (від двійкової до десяткової).
27. Визначити клас: раціональне число x=p/q, де p є Z, q є N. Створити конструктор і деструктор.
Визначити операції:
"+", "-", "*", "/" додавання, віднімання, множення, ділення дробів;
"==","!=",">","<","<=",">=" порівняння;
«<<» – виводу та «>>» – вводу .
Визначити функції:
· піднесення до степеня: xa, a є Z;
· скорочення раціонального дробу;
· копії об’єкта.
28. Створити клас: куля у просторі. Куля задається координатами центру і радіусом. Створити конструктор, деструктор і генератор копій.
Визначити операції:
“==” – порівняння радіусів
“<<” – друк інформації про кулю;
“<=” – визначення належності однієї кулі іншій;
“>=” – визначення включення однієї кулі іншою;
“*” – знаходження об’єму перетину куль.
Визначити функції:
· зсуву кулі на заданий вектор;
· стискання кулі в задану кількість разів;
· друку інформації про перетин з іншою кулею (одна точка та її координати, безліч точок перетину).
29.Створити клас: вектор на площині. Створити конструктор і деструктор, генератор копій.
Визначити операції:
«+» – сума векторів;
«-» – різниця векторів;
«*» – скалярний добуток;
«=» – присвоєння;
«<» – кут між векторами.
Визначити функції:
· визначення, чи вектори колінеарні;
· визначення, чи вектори ортогональні;
· друку вектора;
· графічного зображення вектора;
· визначення довжини вектора.
30. Створити клас: вектор у просторі. Створити конструктор і деструктор, генератор копій.
Визначити операції:
«&» – кут між векторами;
«&&» – векторний добуток векторів;
«*» – скалярний добуток;
«=» – присвоєння;
«<<» – друку вектора.
Визначити функції:
· визначення, чи вектори колінеарні;
· визначення, чи вектори компланарні;
· визначення мішаного добутку векторів;
· графічного зображення проекцій вектора на кожну координатну площину;
· визначення довжини вектора.
31. Створити клас: еліпс. Еліпс задається коефіцієнтами a, b канонічного рівняння. Створити конструктори, деструктор.
Визначити операції:
“=” – присвоєння;
“==”- порівняння;
“<<” – друку інформації про еліпс;
“<=”, “>=” – включення одного еліпсу в інший та навпаки.
Визначити функції:
· визначення координат фокусів;
· визначення ексцентриситету;
· визначення фокального параметру;
· визначення рівнянь директрис;
· графічного зображення еліпсу.
32. Створити клас: циліндр, нижня основа якого паралельна координатній площині XOY. Циліндр задається координатами центру нижньої основи, радіусом основи і висотою. Створити конструктори, деструктор.
Визначити операції:
« = » - присвоєння;
«==» - порівняння циліндрів за об’ємами;
«<< » - друк інформації про циліндр;
«<= » - визначення належності одного циліндру іншому;
«>= » - визначення включення одним циліндром іншого.
Визначити функції:
· зсуву циліндру на заданий вектор;
· стискання розмірів циліндру в задану кількість разів;
· друку інформації про перетин з іншим циліндром (так, ні).
33. Створити клас: автомобіль. Автомобіль задається даними: номер. марка, ціна, колір, прізвище та ім’я власника, рік випуску, ознака проходження мита. Створити конструктори, деструктор.
Визначити операції:
« = » - присвоєння;
«<»,«>» - порівняння автомобілів за ціною;
«<=»,«>=» - порівняння автомобілів за роком випуску;
«<< » - друк інформації про автомобіль;
«+ » - сумарна ціна автомобілів.
Визначити функції:
· розмитнення авто в залежності від року випуску;
· зміна кольору та власника;
· визначення, чи розмитнений автомобіль;
· визначення, чи номер автомобіля є щасливим (симетричним);
· визначення, скільки років автомобілю.
34. Створити клас: таймер. Таймер задається проміжком часу, через якій буде викликана функція та часом початку та кінця роботи. Створити конструктори, деструктор.
Визначити операції:
« = » - присвоєння;
«==» - порівняння двох таймерів;
«<=»,«>=» - порівняння проміжків часу двох таймерів;
«<»,«>» - порівняння часу початку роботи двох таймерів;
«<< » - друк інформації про таймер;
«-» - визначення різниці в часі між двома таймерами.
Визначити функції:
· графічного зображення зміни часу у вигляді відрізка, довжина якого збільшується з часом (функція викликатися через заданий таймером проміжок часу);
· зміни проміжку часу;
· визначення кількості викликів таймером заданої функції;
· створення копії таймера;
· зміни часу початку роботи таймера.