Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / week13 / index.du
diff options
context:
space:
mode:
1 files changed, 32 insertions, 32 deletions
-rw-r--r--src/teaching/oop-2025/week13/index.du64
diff --git a/src/teaching/oop-2025/week13/index.du b/src/teaching/oop-2025/week13/index.du
index 77479ed..5ea3f64 100644
--- a/src/teaching/oop-2025/week13/index.du
+++ b/src/teaching/oop-2025/week13/index.du
@@ -1,66 +1,66 @@
-# Задачи - ООП, Седмица 13, 20.05.2026
+'def title Задачи - ООП, Седмица 13, 20.05.2026
+'def desc Условията на задачите за упражнение.
-'define expected-reading 3 min
-'define created 20 May 2026
-'define edited 20 May 2026
-[$pagenav]
+# {title}
+
+{pagenav 3 min;20 May 2026;20 May 2026}
## За решаване
### Задача 1
-Реализирайте абстрактен клас [`Numeric`], който съдържа чисто виртуални функции:
+Реализирайте абстрактен клас {` Numeric}, който съдържа чисто виртуални функции:
.bulleted
-- [`operator+`]
-- унарен [`operator-`]
-- бинарен [`operator-`]
-- [`operator+=`]
-- [`operator-=`]
+- {` operator+}
+- унарен {` operator-}
+- бинарен {` operator-}
+- {` operator+=}
+- {` operator-=}
-Реализирайте негови наследници [`Integer`] и [`Float`], които съответно имплементират операции върху [`int`] и [`float`] стойности.
+Реализирайте негови наследници {` Integer} и {` Float}, които съответно имплементират операции върху {` int} и {` float} стойности.
### Задача 2
-Реализирайте клас [`User`], който съхранява идентификационен номер и входен ПИН код.
-Имплементирайте (виртуална) член-функция [`LogIn`], която връща дали подадения ѝ ПИН код съответства на запазения.
+Реализирайте клас {` User}, който съхранява идентификационен номер и входен ПИН код.
+Имплементирайте (виртуална) член-функция {` LogIn}, която връща дали подадения ѝ ПИН код съответства на запазения.
-Реализирайте наследник [`Citizen`], който разширява функцията [`LogIn`], така че винаги да отказва числа, които имат повече от 4 цифри.
+Реализирайте наследник {` Citizen}, който разширява функцията {` LogIn}, така че винаги да отказва числа, които имат повече от 4 цифри.
-Реализирайте наследник (на [`User`]) [`Clerk`], който допълнително съхранява статичен код.
-[`LogIn`] в този случай е успешен, когато [`((ВХОДЕН_ПИН + СЪХРАНЕН_ПИН) * СТАТИЧЕН_КОД) % 115249 = 347`].
+Реализирайте наследник (на {` User}) {` Clerk}, който допълнително съхранява статичен код.
+{` LogIn} в този случай е успешен, когато {` ((ВХОДЕН_ПИН + СЪХРАНЕН_ПИН) * СТАТИЧЕН_КОД) % 115249 = 347}.
Пример за валидни стойности са 700 за съхранен пин, 3141 за входен пин и 47978 за статичен код.
-Реализирайте наследник (на [`User`]) [`System`], при който [`LogIn`] е валидно, когато подадения пин е точен квадрат на съхранения пин.
+Реализирайте наследник (на {` User}) {` System}, при който {` LogIn} е валидно, когато подадения пин е точен квадрат на съхранения пин.
-От входа получавате неотрицателно цяло число [`N`] и след това данни за [`N`] на брой потребителя.
-При всеки потребител се поисква буква, определяща неговия тип: [`c`] за [`Citizen`], [`l`] за [`Clerk`] и [`s`] за [`System`].
-Трябва да съхраните всички потребители в [=полиморфен=] масив с елементи от тип [`User*`].
+От входа получавате неотрицателно цяло число {` N} и след това данни за {` N} на брой потребителя.
+При всеки потребител се поисква буква, определяща неговия тип: {` c} за {` Citizen}, {` l} за {` Clerk} и {` s} за {` System}.
+Трябва да съхраните всички потребители в {b полиморфен} масив с елементи от тип {` User*}.
След това от входа ще получавате идентификационен номер и пин код, и трябва да върнете дали подадените данни са валидни за влизане в акаунта.
### Задача 3
-Реализирайте клас [`String`], който съхранява динамично-задлен низ.
+Реализирайте клас {` String}, който съхранява динамично-задлен низ.
Освен голяма петица, имплементирайте виртуален мутатор и константен селектор към низа.
-Реализирайте клас [`Username`], наследник на [`String`], чиито мутатор приема единствено низове, които съдържат само главни и малки латински букви.
+Реализирайте клас {` Username}, наследник на {` String}, чиито мутатор приема единствено низове, които съдържат само главни и малки латински букви.
-Реализирайте клас [`Match`], наследник на [`String`], който съхранява допълнителен динамично-заделен низ [`pattern`] и бройка [`matches`].
-За [`pattern`] има друг селектор и мутатор.
-При всяка промяна на [`pattern`] и оригиналния низ, [`matches`] се обновява с бройката (потенциално препокриващи се) срещания на [`pattern`] в низа.
+Реализирайте клас {` Match}, наследник на {` String}, който съхранява допълнителен динамично-заделен низ {` pattern} и бройка {` matches}.
+За {` pattern} има друг селектор и мутатор.
+При всяка промяна на {` pattern} и оригиналния низ, {` matches} се обновява с бройката (потенциално препокриващи се) срещания на {` pattern} в низа.
### Задача 4
-Реализирайте шаблонен клас [`Indexable`], който съхранява чисто-виртуален не-константен [`operator[]`], и имплементира константен [`operator[]`], базиран на не-константния.
+Реализирайте шаблонен клас {` Indexable}, който съхранява чисто-виртуален не-константен {` operator[]}, и имплементира константен {` operator[]}, базиран на не-константния.
-Реализирайте клас [`Compareable`], който съхранява чисто-виртуални [`operator<`] и [`operator==`], и имплементира останалите оператори за сравнение ([`<=`], [`>`], [`>=`], [`!=`]), използвайки чисто-виртуалните.
+Реализирайте клас {` Compareable}, който съхранява чисто-виртуални {` operator<} и {` operator==}, и имплементира останалите оператори за сравнение ({` <=}, {` >}, {` >=}, {` !=}), използвайки чисто-виртуалните.
-Реализирайте клас [`Dynamic`], който въхранява чисто-виртуални не-публични методи [`free`], [`copyFrom`] и [`init`], и имплементира компонентите от голямата петица, използвайки тези методи.
+Реализирайте клас {` Dynamic}, който въхранява чисто-виртуални не-публични методи {` free}, {` copyFrom} и {` init}, и имплементира компонентите от голямата петица, използвайки тези методи.
-Реализирайте клас [`Vector`], който съхранява динамично-заделен масив от елементи и е наследник и на трите класа.
+Реализирайте клас {` Vector}, който съхранява динамично-заделен масив от елементи и е наследник и на трите класа.
Сравненията между вектори са спрямо бройката елементи.
-Реализирайте клас [`Integer`], който съхранява динамично-заделен [`int`] и наследява [`Compareable`] и [`Dynamic`].
+Реализирайте клас {` Integer}, който съхранява динамично-заделен {` int} и наследява {` Compareable} и {` Dynamic}.
-Реализирайте шаблонен клас [`Array`], който съхранява статично-заделен масив, чиито елементи и тяхна бройка се подават като част от типа, и който наследява [`Indexable`] и [`Compareable`].
+Реализирайте шаблонен клас {` Array}, който съхранява статично-заделен масив, чиито елементи и тяхна бройка се подават като част от типа, и който наследява {` Indexable} и {` Compareable}.
Сравненията между масиви са спрямо бройката елементи.