Лабораторна робота №2. Тема: Перезавантаження операцій і функцій
Лабораторна робота №1. Тема: Структури. Зовнішні функції і функції-члени структури
Завдання
Структурою-парою називається структура, яка складається з двох полів, що зазвичай мають імена first і second. Необхідно реалізувати тип даних за допомогою такої структури. В усіх завданнях обов’язково повинні бути присутні:
· ввід з клавіатури read.
· функція check, яка повинна забезпечувати перевірку введених функцією read значень на коректність.
· вивід на екран введеної інформації і результату (функція display).
При передачі помилкових значень параметрів слід вивести відповідне повідомлення і припинити виконання програми. Програму реалізувати у двох варіантах: спочатку необхідні функції описати як звичайні зовнішні функції, а потім переробити їх на функції-члени структури.
Варіанти завдань
1.Поле first – дробове число; поле second – ціле число, показник степені. Реалізувати метод power() – піднесення числа first до степені second (без використання функції pow з бібліотеки math.h). Метод повинен працювати вірно для усіх допустимих значень first та second.
2.Поле first – дробове число; поле second – дробове число, показник степені. Реалізувати метод power() – піднесення числа first до степені second. Метод повинен працювати вірно для усіх допустимих значень first та second.
3.Поле first – додатне ціле число, чисельник; поле second – додатне ціле число знаменник. Реалізувати метод ipart() – виділення цілої частини дробу first/second. Метод повинен перевіряти нерівність знаменника нулю.
4.Поле first – додатне ціле число, номінал купюри; номінал може приймати значення 1, 2, 5, 10, 50, 100, 500, 1000, 5000. Поле second – додатне ціле число, кількість купюр даного номіналу . Реалізувати метод summa() – обчислення грошової суми.
5.Поле first – додатне дробове число, ціна товару; поле second – додатне ціле число, кількість одиниць товару. Реалізувати метод cost() – обчислення вартості товару.
6.Поле first – додатне ціле число, калорійність 100 г. продукту; поле second – додатне дробове число, маса продукту в кілограмах. Реалізувати метод power() – обчислення загальної калорійності продукту.
7.Поле first – дробове число, ліва межа діапазону; поле second – дробове число, права межа діапазону. Реалізувати метод rangecheck() – перевірку заданого числа на належність діапазону.
8.Поле first – ціле число, ліва межа діапазону, належить діапазону; поле second – ціле число, права межа діапазону, не належить діапазону. Пара чисел задає напіввідкритий інтервал [first, second). Реалізувати метод rangecheck() – перевірку заданого числа на належність діапазону.
9.Поле first – додатне ціле число, години; поле second – додатне ціле число, хвилини. Реалізувати метод minutes() – переведення часу у хвилини.
10.Лінійна функція y=Ax+B. Поле first – дробове число, коефіцієнт A; поле second – дробове число, коефіцієнт B. Реалізувати метод function() – обчислення для заданого x значення функції y.
11.Лінійне рівняння Ax+B=0. Поле first – дробове число, коефіцієнт A; поле second – дробове число, коефіцієнт B. Реалізувати метод root() – обчислення кореня лінійного рівняння. Метод повинен перевірити нерівність коефіцієнта A нулеві.
12.Поле first – дробове число, координата x точки на площині; поле second – дробове число, координата y точки на площині. Реалізувати метод distance() – відстань від точки до початку координат.
13.Поле first – додатне дробове число, катет а прямокутного трикутника; поле second – додатне дробове число, катет b прямокутного трикутника. Реалізувати метод hypotenuse() – обчислення гіпотенузи.
14.Поле first – додатне дробове число, оклад; поле second – додатне ціле число, кількість відпрацьованих днів в місяці. Реалізувати метод summa() – обчислення нарахованої суми за дану кількість днів для заданого місяця:
оклад / дні місяця * відпрацьовані дні.
15.Поле first – додатне ціле число, тривалість телефонної розмови у хвилинах; поле second – додатне дробове число, вартість однієї хвилини в гривнях. Реалізувати метод cost() – обчислення загальної вартості розмови.
16.Поле first – ціле число, чисельник; поле second – додатне ціле число, знаменник. Реалізувати метод multiply() – множення його на довільне дробове число типу double. Метод повинен працювати коректно для будь-яких допустимих значеннях first і second.
17.Поле first – додатне ціле число, координати курсору по горизонталі; поле second – додатне ціле число, координати курсору по вертикалі. Реалізувати метод changex() – зміни горизонтальної координати курсору; реалізувати метод changey() – зміни вертикальної координати курсору. Методи повинні перевіряти вихід за межі екрану.
18.Поле first – додатне ціле число, ціла частина числа; поле second – додатне ціле число, дробова частина числа. Реалізувати метод multiply() – множення на довільне ціле число типу int. Метод повинен працювати вірно для усіх допустимих значень first та second.
19.Кількість можливих вибірок з n об’єктів по k об’єктів (k<n) обчислюється за формулою
C(n,k)=n! / ((n-k)!*k!)
Поле first – додатне ціле число, k; поле second – додатне ціле число, n. Реалізувати метод combination() – обчислення C(n,k).
20.Елемент aj геометричної прогресії обчислюється за формулою
aj = a0rj, j = 0, 1, 2, ..
Поле first – дробове число, перший елемент прогресії a0; поле second – додатне ціле число, r. Реалізувати метод element() – для обчислення заданого елементу прогресії.
21.Поле first – додатне ціле число, рік, поле second – додатне ціле число від 1 до 12 – номер місяця. Реалізувати метод DaysCount() – для обчислення кількості днів заданого місяця (врахувати, що рік може бути високосним).
22.Поля first та second – дійсні числа, які визначають координати точки в полярній системі координат. Реалізувати методи GetX() та GetY(), які обчислюють координати в прямокутній системі координат по відповідних осях.
23.Поля first та second – дійсні числа, які визначають відповідно число і його окіл. Реалізувати метод Check(), якій перевіряє чи попадає задане число в окіл.
Лабораторна робота №2. Тема: Перезавантаження операцій і функцій
Завдання
Перезавантажити функції для різних типів вхідних даних, або створити шаблони функцій, або перевизначити операції для означених користувачем типів (нові типи задавати у вигляді структур).
Варіанти завдань
1. Створити функцію, яка на вхід одержує текст і перетворює його: відкидає повторні пробіли. Функція повинна повертати кількість відкинутих пробілів. Текст передавати в функцію по посиланню. Перезавантажити операцію "<<" виводу перетвореного рядка, в якій використати створену функцію.
2. Створити структуру, що визначає трикутник на площині. Перевизначити операції:
“++” – зсув трикутника на 10 пікселів вправо,
“--” – зсув трикутника на 10 пікселів вліво,
“<”– порівняння площ.
3. Cтворити структуру, що визначає вектор на площині. Перевизначити операції:
“!” – обчислення вектора, який отримується з даного поворотом на 90 градусів проти годинникової стрілки,
“-”– обчислення вектора, який протилежний даному і має з ним однакову довжину,
“++”– нормування вектора.
4. Створити функції, які інвертують масиви, що складаються з елементів типу int, double, а також – функцію, яка переставляє слова в реченні в зворотному порядку. Використати перезавантаження функцій і створити шаблон функції.
5. Створити функції, які порівнюють цілі числа, рядки символів, норми векторів і повертають
0, якщо дані рівні,
1, якщо перше більше/довше другого,
-1, якщо перше більше/довше другого.
Використати перезавантаження функцій.
6. Створити функції, які друкують квадратні корені з дійсного і комплексного числа і норму вектора. Використати перезавантаження функцій.
7. Створити функції, які знаходять максимальний елемент масивів, що складаються з елементів типу int, double, а також – функцію, яка знаходить максимальну довжину слова в рядку (тип char*). Використати перезавантаження функцій і створити шаблон функції.
8. Визначити операцію ++ обчислення визначника матриці методом Гаусса. Використати перезавантаження операторів.
9. Перезавантажити операції “<<”, “>>” для вводу і виводу транспонованих цілих і дійсних матриць розмірністю nxm.
10. Визначити операцію логічного віднімання двох рядків символів S3=S1-S2. Рядок S3 складається з символів, які належать рядку S1 і не належать S2. Використати перезавантаження операторів.
11. Визначити операції “+”, “-“, “*”, “/” для комплексного числа. Обчислити вираз z=(x+y)/(x-y)+xy/(x+y). Використати перезавантаження операторів.
12. Визначити операції “+”, “-“, “*” для матриць (nxn). Обчислити вираз D=A*B+C*A-A*C. Використати перезавантаження операторів.
13. Визначити операції “+”, “-“, “*” для векторів розмірності n. Обчислити вираз d=(a+b)(a-b). Використати перезавантаження операторів.
14. Визначити операцію логічного додавання двох рядків символів S3=S1+S2. Рядок S3 складається з символів, які належать хоча б одному рядку S1 або S2. Використати перезавантаження операторів.
15. Визначити операцію логічного множення двох рядків символів S3=S1*S2. Рядок S3 складається з символів, які належать рядкам S1 і S2 одночасно. Використати перезавантаження операторів.
16. Трійка чисел (x,y,r) визначає круг на площині. Визначити операції
“+”, “-“ , “*” для двох кругів:
"+" – площа об’єднання,
"*" – площа перетину,
"-" – площа різниці.
Використати перезавантаження операторів.
17. Четвірка чисел (x1,y1,x2,y2) визначає прямокутник на площині.
(x1,y1)
Визначити операції (x2,y2)
“+”, “-“ , “*” для двох прямокутників:
"+" – площа об’єднання,
"*" – площа перетину,
"-" – площа різниці.
Використати перезавантаження операторів.
18. Масив чисел А(n) визначає многочлен a0 +a1 x +a2 x2 +…+ an-1 xn-1.
Визначити операції “+”, “-“ , “*” многочленів. Коефіцієнти зберігаються в пам’яті у вигляді масиву. Використати перезавантаження операторів.
19. Масив чисел А(n) визначає многочлен a0 +a1 x +a2 x2 +…+ an-1 xn-1. Визначити операцію “++” – обчислення значення многочлена в точці. Коефіцієнти зберігаються в пам’яті у вигляді списку. Використати перезавантаження операторів.
20. Перезавантажити операції “<<” і “>>” для виводу і вводу комплексного числа, а також операцію “==” порівняння модулів двох комплексних чисел.
21. Перезавантажити операції “<<” і “>>” для виводу і вводу структури. В структурі зберігаються відомості про кількість пар у кожний день тижня в комп’ютерному класі.
22. Перезавантажити операцію “*” для множення двох комплексних чисел, множення дійсного і комплексного числа, обчислення скалярного добутку двох векторів.
23. Для рядків символів перезавантажити операції:
"– " (унарний мінус). Перевертає рядок на своєму місці.
"*" (множення цілого числа k на рядок s).
Якщо к>0, то в результаті одержується рядок із k повторень рядка S. Якщо k<0, то в результаті одержується із k повторень перевернутих рядків S.
24. Визначити операції:
a & b – векторний добуток векторів,
! a – нормування вектора.
Обчислити вираз a & a, a & b, ! a.
25. Перезавантажити операції “<<” та “>>” для вводу і виводу многочленів степеня n з дійсними коефіцієнтами.
26. Визначити операції “+”, “-“, “*”,”/” для дробів P/Q, де PєZ, QєN. Перезавантажити ці операції. Обчислити вираз a/d-(a+b)/(cd), a,b,c,d – дроби.
27. Визначити структуру, яка визначає прямокутник на площині. Визначити операції “<<”, “>>“ для прямокутників:
">>" – ввід інформації про координати і назву прямокутника,
"<<" – вивід інформації про прямокутник (назва, координати, площа).
28. Масив чисел A(n) визначає многочлен з цілими коефіцієнтами a0 +a1 x +a2 x2 +…+ an-1 xn-1 . Визначити операцію ! – знаходження похідної від многочлена.
29. Для множин, які зберігаються в пам’яті у вигляді бінарних векторів розмірності n перевизначити операції:
"+" – об’єднання множин,
"*" – перетину множин,
">>" – ввід множини.
30. Для множин, які зберігаються в пам’яті у вигляді бінарних векторів розмірності n перевизначити операції:
"-" – різниці множин,
"!" – доповнення множин,
"<<" – вивід множини.
31. Створити функції, які знаходять довжину вектора на площині, довжину вектора у просторі, довжину речення (кількість слів). Використати перезавантаження функцій.
32. Створити функції, які знаходять висоту трапеції, висоту паралелограма, максимальну висоту трикутника. Використати перезавантаження функцій.
33.Визначити операцію добутку “*” матриці розмірності n x n на вектор розмірності n та навпаки (вектора на матрицю).
34.Масиви чисел визначають многочлени з цілими коефіцієнтами A(n) = a0 +a1 x +a2 x2 +…+ an-1 xn-1 та B(m) = b0 +b1 x +b2 x2 +…+ bm-1 xm-1. Визначити операцію “/” –ділення цих многочленів. Результат – два многочлени P(r) та Q(l) такі, що A(n) = P(r)*B(m) + Q(l).