Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2023 / week11 / index.du
diff options
context:
space:
mode:
1 files changed, 62 insertions, 59 deletions
-rw-r--r--src/teaching/oop-2023/week11/index.du121
diff --git a/src/teaching/oop-2023/week11/index.du b/src/teaching/oop-2023/week11/index.du
index 295c2de..661a24f 100644
--- a/src/teaching/oop-2023/week11/index.du
+++ b/src/teaching/oop-2023/week11/index.du
@@ -1,165 +1,168 @@
-# Задачи - ООП, Седмица 11, 09.05.2024
+'def title Задачи - ООП, Седмица 11, 09.05.2024
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/oYQehcnN classroom.github.com/a/oYQehcnN]
+GitHub classroom: {url classroom.github.com/a/oYQehcnN;https://classroom.github.com/a/oYQehcnN}
## Преговорни
.warn Моля, не отделяйте на преговорните задачи повече от 30мин
-.important Всеки бащин клас, във всички случаи, трябва да има виртуален деструктор ([`virtual ~ClassName();`]).
+.important Всеки бащин клас, във всички случаи, трябва да има виртуален деструктор ({` virtual ~ClassName()\;}).
### Задача 1 - Шаблони и оператори
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise01 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise01}
Реализирайте шаблонен клас множество, който запазва фиксиран брой елементи от подаден тип.
Реализирайте голяма петица и оператори:
.bulleted
-- [`+`], [`+=`] които действат като обединение
-- [`*`], [`*=`] които действат като сечение
-- [`-`], [`-=`] които действат като допълнение
+- {` +}, {` +=} които действат като обединение
+- {` *}, {` *=} които действат като сечение
+- {` -}, {` -=} които действат като допълнение
### Задача 2 - Наследяване
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise02 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise02}
-Реализирайте клас [`Employee`], съхраняващ име на човек, позиция и департамент като низове със съответно дължина 512, 128 и 64, заедно със заплата като число с плаваща запетая.
+Реализирайте клас {` Employee}, съхраняващ име на човек, позиция и департамент като низове със съответно дължина 512, 128 и 64, заедно със заплата като число с плаваща запетая.
-Реализирайте негов наследник [`Manager`], който допълнително пази масив с фиксиран размер от Employee.
+Реализирайте негов наследник {` Manager}, който допълнително пази масив с фиксиран размер от Employee.
-Реализирайте наследника на [`Employee`], [`Developer`], който допълнително пази брой проекти върху който работи.
+Реализирайте наследника на {` Employee}, {` Developer}, който допълнително пази брой проекти върху който работи.
-Наследниците не могат да достъпят заплатата, но трябва да могат да достъпят другите данни на [`Employee`].
+Наследниците не могат да достъпят заплатата, но трябва да могат да достъпят другите данни на {` Employee}.
## Лесни
### Задача 3
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise03 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise03}
.comment Динамично свързване, Inherit 3
-Реализирайте клас [`Electronics`], който съдържа модел (низ с максимална дължина от 255 знака), [`needsVolts`] и [`needsAmps`] (стойности с плаваща запетая).
+Реализирайте клас {` Electronics}, който съдържа модел (низ с максимална дължина от 255 знака), {` needsVolts} и {` needsAmps} (стойности с плаваща запетая).
Имплементирайте негови наследници:
.bulleted
-- [`Laptop`], който допълнително съхранява размер на екрана като число с плаваща запетая
-- [`WashingMachine`], който допълнително запазва максимално тегло на прането, като цяло неотрицателно число
-- [`Camera`], която допълнително запазва резолюция като число с плаваща запетая (в мегапиксели)
+- {` Laptop}, който допълнително съхранява размер на екрана като число с плаваща запетая
+- {` WashingMachine}, който допълнително запазва максимално тегло на прането, като цяло неотрицателно число
+- {` Camera}, която допълнително запазва резолюция като число с плаваща запетая (в мегапиксели)
-За всеки клас реализирайте член-функция [`Print`], която изкарва всички данни на екрана.
+За всеки клас реализирайте член-функция {` Print}, която изкарва всички данни на екрана.
-&:question Чрез статично или динамично свързване сте имплементирали [`Print`]? Каква е разликата?
+&:question Чрез статично или динамично свързване сте имплементирали {` Print}? Каква е разликата?
### Задача 4
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise04 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise04}
.comment Dynamic linking, Inherit 2
-Реализирайте клас [`String`], който запазва динамично-заделен масив.
+Реализирайте клас {` String}, който запазва динамично-заделен масив.
-Имплементирайте негов наследник [`Name`], който допълнително запазва число: номер на името (първо име, бащино име (второ име), фамилия (трето име)).
+Имплементирайте негов наследник {` Name}, който допълнително запазва число: номер на името (първо име, бащино име (второ име), фамилия (трето име)).
-Имплементирайте втори наследник на [`String`], [`Street`], който запазва и число: номер на улицата.
+Имплементирайте втори наследник на {` String}, {` Street}, който запазва и число: номер на улицата.
-Във всеки клас имплементирайте голяма петица, член-функция [`Length`], като:
+Във всеки клас имплементирайте голяма петица, член-функция {` Length}, като:
.bulleted
-- в [`String`] връща дължината на низа,
-- в [`Name`] връща дължината на името умножена по номера си и
-- в [`Street`] връща дължината на името на улицата плюс броя цифри в номера на улицата.
+- в {` String} връща дължината на низа,
+- в {` Name} връща дължината на името умножена по номера си и
+- в {` Street} връща дължината на името на улицата плюс броя цифри в номера на улицата.
-Самият низ в [`String`] [=не=] може да се достъпва от наследниците.
+Самият низ в {` String} {b не} може да се достъпва от наследниците.
### Задача 5
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise05 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise05}
.comment Templates 1 type
-Реализирайте шаблонен клас [`Counted`], който запазва елемент от подаден тип и неговата бройка (цяло неотрицателно число).
-Имплементирайте оператори [`++`], [`--`], [`+=`], [`-=`], които променят бройката, както и гетъри за елемента и бройката.
+Реализирайте шаблонен клас {` Counted}, който запазва елемент от подаден тип и неговата бройка (цяло неотрицателно число).
+Имплементирайте оператори {` ++}, {` --}, {` +=}, {` -=}, които променят бройката, както и гетъри за елемента и бройката.
### Задача 6
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise06 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise06}
.comment Templates 2 types
-Реализирайте шаблонен клас [`TwoArray`], който запазва два динамично-заделени масива с подадени типове.
+Реализирайте шаблонен клас {` TwoArray}, който запазва два динамично-заделени масива с подадени типове.
Масивите не могат да се оразмеряват и имат еднаква дължина.
Имплементирайте:
.bulleted
- голяма петица,
-- оператор [`[]`], който по подаден индекс връща елемент от първия масив, и
-- оператор [`()`], който по подаден индекс връща елемент от втория масив.
+- оператор {` []}, който по подаден индекс връща елемент от първия масив, и
+- оператор {` ()}, който по подаден индекс връща елемент от втория масив.
### Задача 7
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise07 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise07}
.comment Abstract class
-Реализирайте абстрактен клас [`DynamicArray`], който задължава наследниците да имплементират оператор [`[]`] и оператор [`+=`].
+Реализирайте абстрактен клас {` DynamicArray}, който задължава наследниците да имплементират оператор {` []} и оператор {` +=}.
Реализирайте негови наследници:
:unordered
-- [`Numbers`], който "имплементира" динамично-заделен масив от цели числа, като
+- {` Numbers}, който "имплементира" динамично-заделен масив от цели числа, като
.bulleted
- - оператор [`[]`] връща първия елемент, по-малък от подадения индекс. Ако няма такъв, връщате първия елемент.
- - оператор [`+=`] вмъква елементите в началото на масива
+ - оператор {` []} връща първия елемент, по-малък от подадения индекс. Ако няма такъв, връщате първия елемент.
+ - оператор {` +=} вмъква елементите в началото на масива
-- [`String`], който "имплементира" динамично-заделен масив от букви, като
+- {` String}, който "имплементира" динамично-заделен масив от букви, като
.bulleted
- - оператор [`[]`] връща индекс на брой (първата, втората, ...) главна буква в низа. Ако няма такава, тогава връща последната буква.
- - оператор [`+=`] вмъква елементите в края на масива
+ - оператор {` []} връща индекс на брой (първата, втората, ...) главна буква в низа. Ако няма такава, тогава връща последната буква.
+ - оператор {` +=} вмъква елементите в края на масива
Имплементирайте голяма петица.
.question Къде ще имплементирате динамичния масив и голямата петица?
-.question Можем ли да използваме оператор [`+=`] в полиморфна йерархия?
+.question Можем ли да използваме оператор {` +=} в полиморфна йерархия?
### Задача 8
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise08 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise08}
.comment Abstract class
-Имплементирайте абстрактен клас [`Message`], който съдържа динамично-заделен низ (текстово съобщение, което се показва на екрана) и задължава наследниците да имплементират:
+Имплементирайте абстрактен клас {` Message}, който съдържа динамично-заделен низ (текстово съобщение, което се показва на екрана) и задължава наследниците да имплементират:
.unordered
-- метод [`size`], който връща общия размер на всички данни в байтове.
+- метод {` size}, който връща общия размер на всички данни в байтове.
-Реализирайте негов наследник [`Link`] (хипервръзка), който запазва и втори динамично-заделен низ, запазващ адресът към който линкът сочи.
+Реализирайте негов наследник {` Link} (хипервръзка), който запазва и втори динамично-заделен низ, запазващ адресът към който линкът сочи.
-Реализирайте втори негов наследник [`Location`], чието текстово съдържание е адрес, и който допълнително запазва две стойности с плаваща запетая: една за географска ширина и втора за географска дължина.
+Реализирайте втори негов наследник {` Location}, чието текстово съдържание е адрес, и който допълнително запазва две стойности с плаваща запетая: една за географска ширина и втора за географска дължина.
-За всички класове реализирайте член-функция [`Length`], която връща размера на [=текстовото съобщение=] и оператор [`<<`].
+За всички класове реализирайте член-функция {` Length}, която връща размера на {b текстовото съобщение} и оператор {` <<}.
-.question Има ли разлика между оператор [`<<`] на трите класа?
+.question Има ли разлика между оператор {` <<} на трите класа?
### Задача 9
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise09 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week11/Exercise09}
-Реализирайте абстрактен шаблонен клас [`MixedArray`], който съхранява алтерниращи елементи от два типа.
+Реализирайте абстрактен шаблонен клас {` MixedArray}, който съхранява алтерниращи елементи от два типа.
Тоест, на индекс 0 имаме елемент от първия тип, на индекс 1 от втория, на индекс 2 от първи и так. нат.
-Елементите не е нужно да могат да се конвертират помежду си (тоест не може да използвате полиморфен контейнер), затова се достъпват с член функция [`At`], приемаща индекс и референции към указатели към всеки тип.
-При подаден индекс, на единия указател се записва адресът на съответната стойност, а на другия [`nullptr`].
+Елементите не е нужно да могат да се конвертират помежду си (тоест не може да използвате полиморфен контейнер), затова се достъпват с член функция {` At}, приемаща индекс и референции към указатели към всеки тип.
+При подаден индекс, на единия указател се записва адресът на съответната стойност, а на другия {` nullptr}.
-Също имплементира голяма петица и задължава наследниците да имплементират оператори [`+=`], върщащи указател.
+Също имплементира голяма петица и задължава наследниците да имплементират оператори {` +=}, върщащи указател.
-Реализирайте негов наследник [`DirectConcat`], който реализира [`+=`] като директно слепване (конкатениране).
+Реализирайте негов наследник {` DirectConcat}, който реализира {` +=} като директно слепване (конкатениране).
-Реализирайте втори негов наследник, [`MixedConcat`], който реализир [`+=`] като алтернира елемент от първия масив с елемент от втория.
+Реализирайте втори негов наследник, {` MixedConcat}, който реализир {` +=} като алтернира елемент от първия масив с елемент от втория.
## Трудни
@@ -183,7 +186,7 @@ GitHub classroom: [url https://classroom.github.com/a/oYQehcnN classroom.github.
Имплементирайте клас Document, който запазва масив от Node-ове и за който са имплементирани:
.bulleted
-- методи save и load, които запазват и четат цялото съдържание на документа в [=текстов=] файл с произволен формат.
+- методи save и load, които запазват и четат цялото съдържание на документа в {b текстов} файл с произволен формат.
### Задача 11