Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2023 / week13 / index.du
diff options
context:
space:
mode:
1 files changed, 48 insertions, 45 deletions
-rw-r--r--src/teaching/oop-2023/week13/index.du93
diff --git a/src/teaching/oop-2023/week13/index.du b/src/teaching/oop-2023/week13/index.du
index 5bd0904..913d783 100644
--- a/src/teaching/oop-2023/week13/index.du
+++ b/src/teaching/oop-2023/week13/index.du
@@ -1,8 +1,11 @@
-# Задачи - ООП, Седмица 13, 16.05.2024
+'def title Задачи - ООП, Седмица 13, 16.05.2024
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/GvV1wrC1 classroom.github.com/a/GvV1wrC1]
+GitHub classroom: {url classroom.github.com/a/GvV1wrC1;https://classroom.github.com/a/GvV1wrC1}
.warn Навсякъде, където е нужно, реализирайте голяма петица.
@@ -10,71 +13,71 @@ GitHub classroom: [url https://classroom.github.com/a/GvV1wrC1 classroom.github.
### Задача 1 - Множествено наследяване
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week13/Exercise1 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week13/Exercise1}
-Реализирайте клас [`String`], който запазва динамичен низ с фиксиран размер.
+Реализирайте клас {` String}, който запазва динамичен низ с фиксиран размер.
-Реализирайте клас [`IndexArray`], който запазва динамичен масив с фиксиран размер от цели числа - индекси.
+Реализирайте клас {` IndexArray}, който запазва динамичен масив с фиксиран размер от цели числа - индекси.
-.warn [=Не=] правете общ родител, който имплементира динамичен масив!
+.warn {b Не} правете общ родител, който имплементира динамичен масив!
-Реализирайте наследник на двата класа, [`WordsString`], при който индексите определят началото на всяка дума от запазения низ.
+Реализирайте наследник на двата класа, {` WordsString}, при който индексите определят началото на всяка дума от запазения низ.
Индексите се дефинират при конструктора.
## Лесни
### Задача 2
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week13/Exercise2 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week13/Exercise2}
.comment Диамант
-Реализирайте шаблонен клас [`Container`], който съхранява масив с фиксиран размер от елементи с подаден тип.
-[=Не=] трябва да реализирате нищо повече от задължителните компоненти (голяма петица).
+Реализирайте шаблонен клас {` Container}, който съхранява масив с фиксиран размер от елементи с подаден тип.
+{b Не} трябва да реализирате нищо повече от задължителните компоненти (голяма петица).
-Реализирайте негов наследник [`Indexable`], който реализира оператор[].
+Реализирайте негов наследник {` Indexable}, който реализира оператор[].
-Реализирайте втори негов наследник [`Resizeable`], който реализира член-функция [`InsertAt`], приемаща елемент и индекс, и която вмъква елемента на даден индекс.
+Реализирайте втори негов наследник {` Resizeable}, който реализира член-функция {` InsertAt}, приемаща елемент и индекс, и която вмъква елемента на даден индекс.
Разбира се, може да се наложи оразмеряване на масива.
-Реализирайте наследник [`Vector`] на [`Indexable`] и [`Resizeable`], който реализира оператор[] и член-функции:
+Реализирайте наследник {` Vector} на {` Indexable} и {` Resizeable}, който реализира оператор[] и член-функции:
.bulleted
-- [`pop_back`], премахваща последния елемент
-- [`pop_front`], премахваща първия елемент
-- [`push_back`], приемаща елемент който се вкарва в края на масив
-- [`push_front`], приемаща елемент който се вкарва в началото на масив
+- {` pop_back}, премахваща последния елемент
+- {` pop_front}, премахваща първия елемент
+- {` push_back}, приемаща елемент който се вкарва в края на масив
+- {` push_front}, приемаща елемент който се вкарва в началото на масив
.important Не забравяйте за диамантния проблем!
### Задача 3
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week13/Exercise3 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week13/Exercise3}
.comment Диамант
-Реализирайте клас [`User`], който запазва потребителско име и парола като низове с произволна дължина, заедно с булев флаг [`banned`], определящ дали акаунтът може да прави действия.
+Реализирайте клас {` User}, който запазва потребителско име и парола като низове с произволна дължина, заедно с булев флаг {` banned}, определящ дали акаунтът може да прави действия.
Потребителско име не може да съдържа шпации.
-Реализирайте клас [`Thread`], който запазва масив с произволна дължина, от низове с произволна дължина.
+Реализирайте клас {` Thread}, който запазва масив с произволна дължина, от низове с произволна дължина.
Имплементирайте член-функция:
.bulleted
-- [`PostMessage`], която приема потребител и негово съобщение и добавя съобщението с потребителското име като един низ.
- Ако потребителя е [`banned`], тогава хвърлете грешка.
+- {` PostMessage}, която приема потребител и негово съобщение и добавя съобщението с потребителското име като един низ.
+ Ако потребителя е {` banned}, тогава хвърлете грешка.
-Реализирайте наследник [`ThreadModerator`] на [`User`], който може да променя [`Thread`] обекти, без да се нуждае от публични член-функции в [`Thread`].
+Реализирайте наследник {` ThreadModerator} на {` User}, който може да променя {` Thread} обекти, без да се нуждае от публични член-функции в {` Thread}.
Имплементирайте методи:
.bulleted
-- [`RemoveMessage`], който приема [`Thread`] и индекс на съобщение и премахва съответното съобщение
-- [`RemoveByUser`], който приема [`Thread`] и потребител, и премахва всички съобщения, направени от дадения потребител
+- {` RemoveMessage}, който приема {` Thread} и индекс на съобщение и премахва съответното съобщение
+- {` RemoveByUser}, който приема {` Thread} и потребител, и премахва всички съобщения, направени от дадения потребител
-Реализирайте наследник [`UserModerator`] на [`User`], който може да променя [`User`] обекти, без да се нуждае от публични член-функции в [`User`].
+Реализирайте наследник {` UserModerator} на {` User}, който може да променя {` User} обекти, без да се нуждае от публични член-функции в {` User}.
Имплементирайте методите:
.bulleted
-- [`BanUser`], който приема потребител и вдига [`banned`] флага
-- [`UnbanUser`], който приема потребител и сваля [`banned`] флага
+- {` BanUser}, който приема потребител и вдига {` banned} флага
+- {` UnbanUser}, който приема потребител и сваля {` banned} флага
-Реализирайте наследник [`Administrator`] на [`ThreadModerator`] и [`UserModerator`], който може да прави всичко, което и родителите могат.
+Реализирайте наследник {` Administrator} на {` ThreadModerator} и {` UserModerator}, който може да прави всичко, което и родителите могат.
.important Не забравяйте за диамантния проблем!
@@ -82,7 +85,7 @@ GitHub classroom: [url https://classroom.github.com/a/GvV1wrC1 classroom.github.
### Задача 4
-Реализирайте абстрактен клас [`ShopLocation`], който съхранява член-данни:
+Реализирайте абстрактен клас {` ShopLocation}, който съхранява член-данни:
.bulleted
- адрес като низ с максимална дължина от 511 знака.
Всеки адрес съдържа произволни символи и задължително завършва на число, определящо неговия район.
@@ -90,24 +93,24 @@ GitHub classroom: [url https://classroom.github.com/a/GvV1wrC1 classroom.github.
Имплементирате методи:
.bulleted
-- [`IsOpen`], който връща по подаден час дали локацията е отворена
-- [`InCenter`], който връща дали локацията се намира в центъра на града.
+- {` IsOpen}, който връща по подаден час дали локацията е отворена
+- {` InCenter}, който връща дали локацията се намира в центъра на града.
Всички адреси с регион, по-малък от 11, се намират в центъра.
-Реализирайте шаблонен клас [`Inventory`], който съхранява [=фиксиран=] брой елементи и техните неотрицателни бройки (количества).
+Реализирайте шаблонен клас {` Inventory}, който съхранява {b фиксиран} брой елементи и техните неотрицателни бройки (количества).
Имплементирайте член-функции:
.bulleted
- оператор[], който връща елемент на дадения индекс
- оператор(), който връща бройка на елемент на дадения индекс
-- [`Stock`], приемащ индекс на елемент и бройка (положителна/отрицателна) с която бройката на дадения елемент се променя.
+- {` Stock}, приемащ индекс на елемент и бройка (положителна/отрицателна) с която бройката на дадения елемент се променя.
Бройката може да бъде най-малко 0.
-- [`List`], който връща всички елементи и техните индекси
+- {` List}, който връща всички елементи и техните индекси
-Реализирайте абстрактен шаблонен наследник [`DeliverableInventory`] на [`Inventory`], който е инвентар с максимум 2048 елемента и допълнително задължава имплементацията на:
+Реализирайте абстрактен шаблонен наследник {` DeliverableInventory} на {` Inventory}, който е инвентар с максимум 2048 елемента и допълнително задължава имплементацията на:
.bulleted
-- [`ShippingDelay`], който приема адрес и връща времето в което ще може да се достави обекта
+- {` ShippingDelay}, който приема адрес и връща времето в което ще може да се достави обекта
-Реализирайте наследник на [`DeliverableInventory`], склад [`Warehouse`], който допълнително запазва разстояние от града в километри и имплементира [`ShippingDelay`] по следната логика:
+Реализирайте наследник на {` DeliverableInventory}, склад {` Warehouse}, който допълнително запазва разстояние от града в километри и имплементира {` ShippingDelay} по следната логика:
.bulleted
- доставки в центъра отнемат един ден + регионът в който се доставя
- доставки извън центъра отнемат толкова време, колкото е нужно да се стигне до града ако пътува с 80 километра в час + времето което ще отнеме да се измине номер на региона на брой километри при скорост от 20 километра в час
@@ -115,27 +118,27 @@ GitHub classroom: [url https://classroom.github.com/a/GvV1wrC1 classroom.github.
Доставка не може да се случи преди 9 сутринта и след 18 вечерта.
Ако попадне в този диапазон, тогава се отлага за най-скорошния следващ възможен час.
-Реализирайте шаблонен наследник магазин [`Shop`] на [`ShopLocation`] и [`Inventory`], който е инвентар с максимум 256 елемента, запазващ:
+Реализирайте шаблонен наследник магазин {` Shop} на {` ShopLocation} и {` Inventory}, който е инвентар с максимум 256 елемента, запазващ:
.bulleted
-- [=оразмеряем=] масив от низове с произволен размер, всеки низ който е "отчет на продажба"
+- {b оразмеряем} масив от низове с произволен размер, всеки низ който е "отчет на продажба"
- общо бройка продажби
и който имплементира методи:
.bulleted
-- [`SellItems`], който приема масив от идентификатори на обекти, намалява бройката на всеки от тях и създава нов отчет.
+- {` SellItems}, който приема масив от идентификатори на обекти, намалява бройката на всеки от тях и създава нов отчет.
Отчета е в произволен формат, но трябва да съдържа идентификаторите и бройките на всеки обект.
Ако за някой обект няма достатъчно бройки или изобщо не се пази, хвърлете грешка.
-Реализирайте шаблонен клас [`WebStore`], който запазва оразмеряеми масиви от [`Shop`] и [`Warehouse`].
+Реализирайте шаблонен клас {` WebStore}, който запазва оразмеряеми масиви от {` Shop} и {` Warehouse}.
Имплементирайте:
.bulleted
- оператор<<, който изкарва всички уникални (unique) обекти от всички магазини и складове, с индекс до тях
-- [`GetEstimate`], който приема индекс на уникален обект от всички магазини и складове, сегашно време и адрес, и изкарва на екрана всички магазини които са отворени в дадения час и кое е най-скорошното време в което може обектът да се достави от склад.
+- {` GetEstimate}, който приема индекс на уникален обект от всички магазини и складове, сегашно време и адрес, и изкарва на екрана всички магазини които са отворени в дадения час и кое е най-скорошното време в което може обектът да се достави от склад.
Ако няма отворени магазини, ако няма магазин с наличност и так. нат. изкарайте съответно съобщение.
-Последно реализирайте клас [`Book`], който запазва заглавие на книга и име на автор като низове с максимална дължина от 127 знака.
+Последно реализирайте клас {` Book}, който запазва заглавие на книга и име на автор като низове с максимална дължина от 127 знака.
Имплементирайте оператор<<, който изкарва съответната книга в произволен формат.
-В главната функция реализирайте [`WebStore`] от книги, заедно с набор от книги, магазини и складове по ваш избор.
+В главната функция реализирайте {` WebStore} от книги, заедно с набор от книги, магазини и складове по ваш избор.
Нека в началото на програмата да приемате от потребителя сегашното време и адрес, след това изкарайте на екрана всички ункални книги с индекси.
Накрая потребителя може да въведе индекс на книга и да получи информация кои отворени сега магазини имат съответната книга и кога най-скоро може да бъде доставена от склад.