Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / week05 / index.du
diff options
context:
space:
mode:
1 files changed, 60 insertions, 60 deletions
-rw-r--r--src/teaching/oop-2025/week05/index.du120
diff --git a/src/teaching/oop-2025/week05/index.du b/src/teaching/oop-2025/week05/index.du
index 0469fe4..e7de9e3 100644
--- a/src/teaching/oop-2025/week05/index.du
+++ b/src/teaching/oop-2025/week05/index.du
@@ -1,116 +1,116 @@
-# Задачи - ООП, Седмица 5, 18.03.2026
+'def title Задачи - ООП, Седмица 5, 18.03.2026
+'def desc Условията на задачите за упражнение.
-'define expected-reading 6 min
-'define created 18 March 2026
-'define edited 18 March 2026
-[$pagenav]
+# {title}
-.warn За всеки клас имплементирайте [=голяма петица!=] Това включва "move" семантики!
+{pagenav 6 min;18 March 2026;18 March 2026}
+
+.warn За всеки клас имплементирайте {b голяма петица!} Това включва "move" семантики!
## За решаване
### Задача 1
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week05/Exercise01 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week05/Exercise01}
-Реализирайте клас [`NumSeries`], който съхранява динамично-заделен масив от числа с плаваща запетая, техния размер и индекса на последния елемент.
+Реализирайте клас {` NumSeries}, който съхранява динамично-заделен масив от числа с плаваща запетая, техния размер и индекса на последния елемент.
-Класа трябва да има публични методи, [=достъпни и за константни обекти=]:
+Класа трябва да има публични методи, {b достъпни и за константни обекти}:
.unordered
-- [`Push`], който слага подадения елемент на последната позиция.
+- {` Push}, който слага подадения елемент на последната позиция.
Това е единствения начин да се добавят елементи.
Ако цялата заделена памет е запълнена, масива да се уголеми.
-- [`At`], който по подаден индекс връща елемент.
- Да има проверка дали индекса е валиден (дали елемент на този индекс е бил [`Push`]-нат).
- При невалиден индекс върнете [url https://en.cppreference.com/w/cpp/numeric/math/NAN.html NaN].
-- [`Length`], който връща броя [`Push`]-нати елементи
+- {` At}, който по подаден индекс връща елемент.
+ Да има проверка дали индекса е валиден (дали елемент на този индекс е бил {` Push}-нат).
+ При невалиден индекс върнете {url NaN;https://en.cppreference.com/w/cpp/numeric/math/NAN.html}.
+- {` Length}, който връща броя {` Push}-нати елементи
### Задача 2
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week05/Exercise02 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week05/Exercise02}
-Реализирайте клас [`String`], който съхранява динамично-заделен низ.
+Реализирайте клас {` String}, който съхранява динамично-заделен низ.
-Допълнително, реализирайте конструктор, приемащ [`const char*`] и публичи методи, [=достъпни за константни обекти=] (когато смислено):
+Допълнително, реализирайте конструктор, приемащ {` const char*} и публичи методи, {b достъпни за константни обекти} (когато смислено):
.unordered
-- [`Substring`], който връща нов низ, който е под-низ на текущия.
+- {` Substring}, който връща нов низ, който е под-низ на текущия.
Като аргументи приема начален индекс и дължина.
-- [`Concat`], който приема низ и го "слепва" в края на текущия низ.
+- {` Concat}, който приема низ и го "слепва" в края на текущия низ.
-Реализирайте клас [`Text`], който съхранява динамично-заделена последователност от редове текст ([`String`]-ове).
-Реализирайте публични методи, [=достъпни за константни обекти=] (когато смислено):
+Реализирайте клас {` Text}, който съхранява динамично-заделена последователност от редове текст ({` String}-ове).
+Реализирайте публични методи, {b достъпни за константни обекти} (когато смислено):
.unordered
-- [`LineCount`], който връща броя редове в текста
-- [`WordCount`], който връща броя думи в текста.
+- {` LineCount}, който връща броя редове в текста
+- {` WordCount}, който връща броя думи в текста.
Дума за нашите цели е всяка последователност от букви, която не съдържа шпация.
-- [`SubText`], който по подадени начален и краен ред, и начална и крайна колона, връща [`Text`], съдържащ само тези (части от) низове
+- {` SubText}, който по подадени начален и краен ред, и начална и крайна колона, връща {` Text}, съдържащ само тези (части от) низове
### Задача 3
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week05/Exercise03 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week05/Exercise03}
-Реализирайте клас [`Person`], който съхранява трите имена, телефонен номер, имейл, година на раждане и ЕГН (personal number) на човек.
-Препоръчително е да използвате [`String`] клас, подобен на този от предходната задача ([=но имплементиран от Вас=]).
+Реализирайте клас {` Person}, който съхранява трите имена, телефонен номер, имейл, година на раждане и ЕГН (personal number) на човек.
+Препоръчително е да използвате {` String} клас, подобен на този от предходната задача ({b но имплементиран от Вас}).
Реализирайте конструктор, който приема тези данни.
-Реализирайте клас [`TaxReport`], който съхранява ЕГН, година, сума приходи и процент данък от приходите.
+Реализирайте клас {` TaxReport}, който съхранява ЕГН, година, сума приходи и процент данък от приходите.
Реализирайте конструктор, който приема тези данни.
-Реализирайте клас [`TaxDatabase`], който съхранява динамичо-заделени количества от [`Person`] и [`TaxReport`] обекти.
-Реализирайте публични методи, [=достъпни за константни обекти=] (когато смислено):
+Реализирайте клас {` TaxDatabase}, който съхранява динамичо-заделени количества от {` Person} и {` TaxReport} обекти.
+Реализирайте публични методи, {b достъпни за константни обекти} (когато смислено):
.unordered
-- [`RegisterPerson`], който добавя човек.
- Нека да връща [`bool`], дали успешно е добавен човек.
+- {` RegisterPerson}, който добавя човек.
+ Нека да връща {` bool}, дали успешно е добавен човек.
ЕГН-тата, имейлите и телефонните номера трябва да са различни между всички потребители.
Количеството хора е неограничено, вътрешната памет трябва да се реоразмерява.
-- [`LogTagReport`], който добавя данъчна декларация.
- Нека да връща [`bool`], дали е успешно добавена.
+- {` LogTagReport}, който добавя данъчна декларация.
+ Нека да връща {` bool}, дали е успешно добавена.
Всяка декларация се различава по комбинацията от ЕГН и година.
Количеството декларации е неограничено, вътрешната памет трябва да се реоразмерява.
-- [`PersonalReports`], който по подадено ЕГН изкарва на екрана всички данни за човека и всички данни за всички негови данъчни декларации
-- [`YearlyReports`], който по подадена година изкарва на екрана всички данъчни декларации през подадената година.
+- {` PersonalReports}, който по подадено ЕГН изкарва на екрана всички данни за човека и всички данни за всички негови данъчни декларации
+- {` YearlyReports}, който по подадена година изкарва на екрана всички данъчни декларации през подадената година.
За всяка декларация изкарайте вместо ЕГН, първото име, фамилия и възраст на съответния човек.
-- [`YearlyAvgIncome`], който по подадена година връща средния приход на всички потребители
-- [`YearlyTaxedIncome`], който по подадена година връща общия приход от данъци на всички потребители
-- [`GetReport`], който по подадено ЕГН и година връща съответната декларация
-- [`GetReportByAge`], който по подадено ЕГН и възраст връща съответната декларация
-- [`GetReports`], който по подадено ЕГН, начална година и крайна година връща [*последователност*] от данъчни декларации.
+- {` YearlyAvgIncome}, който по подадена година връща средния приход на всички потребители
+- {` YearlyTaxedIncome}, който по подадена година връща общия приход от данъци на всички потребители
+- {` GetReport}, който по подадено ЕГН и година връща съответната декларация
+- {` GetReportByAge}, който по подадено ЕГН и възраст връща съответната декларация
+- {` GetReports}, който по подадено ЕГН, начална година и крайна година връща {i последователност} от данъчни декларации.
Ще е нужно да имплементирате помощен клас.
-- [`GetReportsByAge`], който по подадено ЕГН, начална възраст и крайна възраст връща [*последователност*] от данъчни декларации
+- {` GetReportsByAge}, който по подадено ЕГН, начална възраст и крайна възраст връща {i последователност} от данъчни декларации
## За самоподготовка
### Задача 4
-Реализирайте клас [`User`], който съхранява ЕГН, имейл и парола на потребител.
+Реализирайте клас {` User}, който съхранява ЕГН, имейл и парола на потребител.
Реализирайте конструктор с всички тези параметри.
-Реализирайте клас [`BankAccount`], който съхранява [`AccountId`] и последователност от транзакции.
+Реализирайте клас {` BankAccount}, който съхранява {` AccountId} и последователност от транзакции.
Всяка транзакция съдържа промяна по баланса (положително число за вложена сума и отрицателна за изтеглена) и дата (ден, месец, година, час, минути, секунди).
Реализирайте нужните помощни класове/структури.
-Реализирайте публични методи, [=достъпни за константни обекти=] (когато смислено):
+Реализирайте публични методи, {b достъпни за константни обекти} (когато смислено):
.unordered
-- [`Balance`], който връща текущия баланс в акаунта
-- [`Balance`], който по подадена дата и час връща баланса към този момент от времето
-- [`AddTransaction`], който добавя транзакция към акаунта
+- {` Balance}, който връща текущия баланс в акаунта
+- {` Balance}, който по подадена дата и час връща баланса към този момент от времето
+- {` AddTransaction}, който добавя транзакция към акаунта
-Реализирайте структура [`UserBankAccount`], която съхранява ЕГН и [`AccountId`].
+Реализирайте структура {` UserBankAccount}, която съхранява ЕГН и {` AccountId}.
-Реализирайте клас [`BankingSystem`], който съхранява последователности от [`User`]-и, [`BankAccount`]-и и [`UserBankAccount`]-и.
-[`UserBankAccount`]-ите свързват [`User`]-ите и [`BankAccount`]-ите.
+Реализирайте клас {` BankingSystem}, който съхранява последователности от {` User}-и, {` BankAccount}-и и {` UserBankAccount}-и.
+{` UserBankAccount}-ите свързват {` User}-ите и {` BankAccount}-ите.
-Реализирайте публични методи, [=достъпни за константни обекти=] (когато смислено):
+Реализирайте публични методи, {b достъпни за константни обекти} (когато смислено):
.unordered
-- [`RegisterBankAccount`], който по подадени данни добавя потребител и неговия [`BankAccount`] (сметка).
+- {` RegisterBankAccount}, който по подадени данни добавя потребител и неговия {` BankAccount} (сметка).
Ако се подаде нов потребител, неговите данни да се запазят.
- Ако потребителя вече е записан, единствено да се запише новия [`BankAccount`] (и връзката му с потребителя; един потребител може да има много сметки).
-- [`RegisterTransaction`], която по подадено ЕГН, [`AccountId`], сума и време запазва съответната транзакция в акаунта на потребителя
-- [`TotalBalance`], която по подадено ЕГН връща общия баланс на всички сметки на потребителя
-- [`NegativeBalances`], която по подадено ЕГН и време връща броя сметки, които са имали отрицателен общ баланс към подаденото време
-- [`CanBeDeleted`], която по подадено ЕГН връща последователност от [`AccountId`]-та на сметки, които имат баланс 0 (и следователно могат да бъдат изтрити).
+ Ако потребителя вече е записан, единствено да се запише новия {` BankAccount} (и връзката му с потребителя; един потребител може да има много сметки).
+- {` RegisterTransaction}, която по подадено ЕГН, {` AccountId}, сума и време запазва съответната транзакция в акаунта на потребителя
+- {` TotalBalance}, която по подадено ЕГН връща общия баланс на всички сметки на потребителя
+- {` NegativeBalances}, която по подадено ЕГН и време връща броя сметки, които са имали отрицателен общ баланс към подаденото време
+- {` CanBeDeleted}, която по подадено ЕГН връща последователност от {` AccountId}-та на сметки, които имат баланс 0 (и следователно могат да бъдат изтрити).
Ще е нужно да имплементирате помощен клас.
-- [`SuspiciousAccounts`], която връща всички имейли и [`AccountId`]-та на сметки, които изглеждат съмнителни.
+- {` SuspiciousAccounts}, която връща всички имейли и {` AccountId}-та на сметки, които изглеждат съмнителни.
Съмнителни са тези сметки, чиито най-скорошни 20 транзакции са се случили за по-малко от минута.
Може да е нужно да разширите имплементацията на някой клас.
-- [`Debtors`], която връща първо име, фамилия и имейл на всички на всички потребители, чиито сметки имат отрицателен баланс.
+- {` Debtors}, която връща първо име, фамилия и имейл на всички на всички потребители, чиито сметки имат отрицателен баланс.
Ще е нужно да имплементирате помощен клас.