Лабораторна робота №3. Тема: Структури та класи

Завдання

У всіх завданнях, окрім вказаних в завданні операцій, обов’язково повинні бути реалізовані наступні методи:

· метод ініціалізації Init;

· ввід з клавіатури Read;

· вивід на екран Display;

· перетворення в рядок toString.

Всі завдання повинні бути реалізовані трьома способами:

· тип даних представляється структурою з необхідними полями, а операції реалізуються як зовнішні функції, які отримують об’єкти даного типу в якості аргументів;

· як клас з закритими полями, де операції реалізуються як методи класу;

· інкапсулювати поля класу в незалежній структурі і в ньому реалізувати методи Init(), Read(), Display(), toString(); в основному класі повинно бути одне поле даних, представлене об’єктом-структурою.

Варіанти завдань

  1. Комплексне число представляється парою дійсних чисел (a, b), де a – дійсна частина, b – уявна частина. Реалізувати клас Complex для роботи з комплексними числами. Обов’язково повинні бути присутні операції:

o додавання add, (a, b) + (c, d);

o віднімання sub, (a, b) – (c, d);

o множення mul, (a, b) * (c, d);

o ділення div, (a, b) / (c, d);

o порівняння equ, (a, b) = (c, d);

o спряжене число conj(a, b)

  1. Створити клас vector3D, який задається трійкою координат. Обов’язково повинні бути реалізовані: додавання й віднімання векторів, скалярне множення векторів, множення на скаляр, порівняння векторів, обчислення довжини вектора, порівняння довжин векторів.
  1. Створити клас ModelWindow для роботи з моделями екранних вікон. В якості полів задаються: заголовок вікна, координати верхнього лівого кута, розмір по горизонталі, розмір по вертикалі, колір вікна, стан «видиме/невидиме», стан «з рамкою/ без рамки». Координати і розміри вказуються в цілих числах. Реалізувати операції: переміщення вікна по горизонталі, по вертикалі; зміна висоти та/або ширини вікна, зміна кольору; змін стану, опитування стану. Операції переміщення та зміни розміру повинні виконувати перевірку на перетинання границь екрану. Функція виводу на екран повинна демонструвати стан полів об’єкту.
  1. Створити клас Money для роботи з грошовими сумами. Число повинно бути представлене двома полями: типу long для гривень та типу unsigned char – для копійок. Дробова частина (копійки) при виводі на екран повинна бути відділена від цілої частини комою. Реалізувати додавання, віднімання, ділення сум, ділення суми на дробове число, множення суми на дробове число та операції порівняння.
  1. Створити клас Triangle для представлення трикутника. Поля даних повинні включати кути та сторони. Необхідно реалізувати операції: отримання і зміни полів даних, обчислення площі, обчислення периметру, обчислення висот, а також визначення типу прямокутника (рівносторонній, рівнобедрений або прямокутний).
  1. Створити клас Angle для роботи з кутами на площині, які задаються величиною в градусах та мінутах. Обов’язково повинні бути реалізовані: перевід в радіани, приведення до діапазону 0-360, збільшення та зменшення кута на задану величину, отримання синусу, порівняння кутів.
  1. Створити клас Point для роботи з точками на площині. Координати точки – декартові. Обов’язково повинні бути реалізовані: переміщення точки по осі X, переміщення по осі Y, визначення відстані до початку координат, відстані між двома точками, перетворення в полярні координати, порівняння на співпадання та неспівпадання.
  1. Раціональний (нескоротний) дріб представляється парою цілих чисел (a, b), де a – чисельник, b – знаменник. Реалізувати клас Rational для роботи з раціональними дробами. Обов’язково повинні бути реалізовані операції:

o додавання add, (a, b) + (c, d);

o віднімання sub, (a, b) – (c, d);

o множення mul, (a, b) * (c, d);

o ділення div, (a, b) / (c, d);

o порівняння equ, greate, less.

Повинна бути реалізована приватна функція скорочення дробу reduce, яка обов’язково викликається при виконанні арифметичних операцій.

  1. Створити клас Date для роботи з датами в форматі «рік.місяць.день». Дата представляється структурою з трьома полями типу unsigned int: для року, місяця і дня. Клас повинен включати не менше трьох функцій ініціалізації: числами, рядком вигляду «рік.місяць.день» (наприклад, «2004.08.31») та датою. Обов’язковими операціями є: обчислення дати через задану кількість днів, віднімання заданої кількості днів з дати, визначення високосності року, присвоєння та отримання окремих частин (рік, місяць, день), порівняння дат (рівно, до, після), обчислення кількості днів між датами.
  1. Створити клас Time для роботи з часом у форматі «година:хвилина:секунда». Клас повинен включати в себе не менш чотирьох функцій ініціалізації: числами, рядком (наприклад, «23:59:59»), секундами та часом. Обов’язковими операціями є: обчислення різниці між двома моментами часу в секундах, додавання часу і заданої кількості секунд, віднімання з часу заданої кількості секунд, порівняння моментів часу, перевід в секунди, перевід в хвилини (з округленням до цілої хвилини).
  1. Реалізувати клас FazzyNumber для роботи з нечіткими числами, які представляються трійками чисел (x – e1, x, x + e2). Для чисел A = (A – al, A, A + ar) та B = (B – bl, B, B + br) арифметичні операції виконуються за наступними формулами:

Додавання A + B = (A + B – al – bl, A + B, A + B + ar + br);

Віднімання A – B = (A – B – al – bl, A – B, A – B + ar + br);

Множення A * B = (A * B – B * al – A * bl + al * bl, A * B, A * B + B * a2 + A * b2 + a2 * b2);

Обернене число A = (1/(A + ar), 1/A, 1/(A – al)), A > 0;

Ділення A / B = ((A – al)/( B + br), A/B, (A + ar)/( B – bl)), B > 0;

  1. Реалізувати клас Account, який представляє собою банківський рахунок. В класі повинні бути чотири поля: прізвище власника, номер рахунку, процент нарахування і сума в гривнях. Відкриття нового рахунку виконується операцією ініціалізації. Необхідно виконувати наступні операції: змінити власника рахунку, зняти деяку суму з рахунку, покласти гроші на рахунок, нарахувати проценти, перевести суму в долари, перевести суму в євро, отримати суму прописом (перетворити в чисельник).
  1. Номінали українських гривень можуть приймати значення 1, 2, 5, 10, 20, 50, 100, 200, 500. Копійки представити як 0.01 (1 копійка), 0.02 (2 копійки), 0.05 (5 копійок), 0.1 (10 копійок), 0.25 (25 копійок), 0.5 (50 копійок). Створити клас Money для роботи з грошовими сумами. Сума повинна бути представлена полями-номіналами, значеннями яких повинна бути кількість купюр даного номіналу. Реалізувати додавання сум, віднімання сум, ділення сум, ділення суми на дробове число, множення на дробове число та операції порівняння. Дробова частина (копійки) при виводі на екран повинна бути відділена від цілої частини комою.
  1. Реалізувати клас Bankomat, який моделює роботу банкомату. В класі повинні міститися поля для зберігання ідентифікаційного номеру банкомату, інформації про поточну суму грошей, яка залишилася у банкоматі, мінімальній та максимальній сумах, які дозволяється зняти клієнту в один день. Сума грошей представляється полями номіналами 1-500 (див. завдання 13). Реалізувати метод ініціалізації банкомата, метод завантаження купюр в банкомат та метод зняття визначеної суми грошей. Метод зняття грошей повинен виконувати перевірку на коректність суми, яка знімається: вона не повинна бути меншою за мінімальне значення і не повинна перевищувати максимальне значення. Метод toString() повинен перетворювати в рядок суму грошей, яка залишилася в банкоматі.
  1. Створити клас Fraction для роботи з дробовими числами. Число повинно бути представлене двома полями: ціла частина – довге ціле зі знаком, дробова частина – беззнакове коротке ціле. Реалізувати арифметичні операції додавання, віднімання, множення та операції порівняння.
  1. Створити клас Goods (товар). В класі повинні бути представлені поля: назва товару, дата оформлення, ціна товару, кількість одиниць товару, номер накладної, за якою товар поступив на склад. Реалізувати методи зміни ціни товару, зміни кількості товару (збільшення та зменшення), вирахування вартості товару. Метод toString() повинен видавати у вигляді рядку вартість товару.
  1. Створити клас BitString для роботи з 64-бітовими рядками. Бітовий рядок повинен бути представлений двома полями типу unsigned long. Повинні бути реалізовані всі традиційні операції для роботи з бітами: and, or, xor, not. Реалізувати зсув вліво shiftLeft ті зсув вправо shiftRight на задану кількість бітів.
  1. Створити клас LongLong для роботи з цілими числами з 64 біт. Число повинно бути представлене двома полями: long – старша частина, unsigned long – молодша частина. Повинні бути реалізовані арифметичні операції, які присутні в C++ (без присвоювання), та порівняння.
  1. Створити клас Payment (заробітна платня). В класі повинні бути представлені поля: прізвище-ім’я-по-батькові, оклад, рік поступлення на роботу, процент надбавки, прибутковий податок, кількість відроблених днів у місяці, кількість робочих днів у місяці, нарахована та утримана суми. Реалізувати методи: обчислення нарахованої суми, обчислення утриманої суми, обчислення суми, яка видається на руки, обчислення стажу. Стаж вираховується як повна кількість років, які пройшли від року поступлення на роботу, до поточного року. Нарахування представляє собою суму, нараховану за відпрацьовані дні, та надбавки, тобто долі від першої суми. Утримання представляють собою відчислення в пенсійний фонд (1% від нарахованої суми) та прибутковий податок. Прибутковий податок складає 13% від нарахованої суми без відчислень в пенсійний фонд.
  1. Реалізувати клас Cursor. Полями є координати курсору по горизонталі та вертикалі – цілі додатні числа, вигляд курсору – горизонтальний чи вертикальний, розмір курсору – ціле від 1 до 15. Реалізувати методи зміни координат курсору, зміни розміру курсору, метод гасіння та відновлення курсору.