Лабораторна робота №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).