Задачи - ООП, Седмица 13, 20.05.2026
За решаване
Задача 1
Реализирайте абстрактен клас Numeric, който съдържа чисто виртуални функции:
-
operator+ - унарен
operator- - бинарен
operator- -
operator+= -
operator-=
Реализирайте негови наследници Integer и Float, които съответно имплементират операции върху int и float стойности.
Задача 2
Реализирайте клас User, който съхранява идентификационен номер и входен ПИН код.
Имплементирайте (виртуална) член-функция LogIn, която връща дали подадения ѝ ПИН код съответства на запазения.
Реализирайте наследник Citizen, който разширява функцията LogIn, така че винаги да отказва числа, които имат повече от 4 цифри.
Реализирайте наследник (на User) Clerk, който допълнително съхранява статичен код.
LogIn в този случай е успешен, когато ((ВХОДЕН_ПИН + СЪХРАНЕН_ПИН) * СТАТИЧЕН_КОД) % 115249 = 347.
Пример за валидни стойности са 700 за съхранен пин, 3141 за входен пин и 47978 за статичен код.
Реализирайте наследник (на User) System, при който LogIn е валидно, когато подадения пин е точен квадрат на съхранения пин.
От входа получавате неотрицателно цяло число N и след това данни за N на брой потребителя.
При всеки потребител се поисква буква, определяща неговия тип: c за Citizen, l за Clerk и s за System.
Трябва да съхраните всички потребители в полиморфен масив с елементи от тип User*.
След това от входа ще получавате идентификационен номер и пин код, и трябва да върнете дали подадените данни са валидни за влизане в акаунта.
Задача 3
Реализирайте клас String, който съхранява динамично-задлен низ.
Освен голяма петица, имплементирайте виртуален мутатор и константен селектор към низа.
Реализирайте клас Username, наследник на String, чиито мутатор приема единствено низове, които съдържат само главни и малки латински букви.
Реализирайте клас Match, наследник на String, който съхранява допълнителен динамично-заделен низ pattern и бройка matches.
За pattern има друг селектор и мутатор.
При всяка промяна на pattern и оригиналния низ, matches се обновява с бройката (потенциално препокриващи се) срещания на pattern в низа.
Задача 4
Реализирайте шаблонен клас Indexable, който съхранява чисто-виртуален не-константен operator[], и имплементира константен operator[], базиран на не-константния.
Реализирайте клас Compareable, който съхранява чисто-виртуални operator< и operator==, и имплементира останалите оператори за сравнение (<=, >, >=, !=), използвайки чисто-виртуалните.
Реализирайте клас Dynamic, който въхранява чисто-виртуални не-публични методи free, copyFrom и init, и имплементира компонентите от голямата петица, използвайки тези методи.
Реализирайте клас Vector, който съхранява динамично-заделен масив от елементи и е наследник и на трите класа.
Сравненията между вектори са спрямо бройката елементи.
Реализирайте клас Integer, който съхранява динамично-заделен int и наследява Compareable и Dynamic.
Реализирайте шаблонен клас Array, който съхранява статично-заделен масив, чиито елементи и тяхна бройка се подават като част от типа, и който наследява Indexable и Compareable.
Сравненията между масиви са спрямо бройката елементи.