diff options
1 files changed, 69 insertions, 0 deletions
| -rw-r--r-- | src/teaching/oop-2025/week13/index.du | 69 |
diff --git a/src/teaching/oop-2025/week13/index.du b/src/teaching/oop-2025/week13/index.du new file mode 100644 index 0000000..7a9d920 --- /dev/null +++ b/src/teaching/oop-2025/week13/index.du @@ -0,0 +1,69 @@ +# Задачи - ООП, Седмица 13, 20.05.2026 + +'define expected-reading 3 min +'define created 20 May 2026 +'define edited 20 May 2026 +[$pagenav] + +## За решаване + +### Задача 1 + +Реализирайте абстрактен клас [`Numeric`], който съдържа чисто виртуални функции: +.bulleted +- [`operator+`] +- унарен [`operator-`] + +И имплементира член-функциите: +.bulleted +- бинарен [`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`]. +Сравненията между масиви са спрямо бройката елементи. |