Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / week09 / index.du
diff options
context:
space:
mode:
1 files changed, 47 insertions, 47 deletions
-rw-r--r--src/teaching/oop-2025/week09/index.du94
diff --git a/src/teaching/oop-2025/week09/index.du b/src/teaching/oop-2025/week09/index.du
index df7eb1e..d7bd858 100644
--- a/src/teaching/oop-2025/week09/index.du
+++ b/src/teaching/oop-2025/week09/index.du
@@ -1,20 +1,20 @@
-# Задачи - ООП, Седмица 9, 15.04.2026
+'def title Задачи - ООП, Седмица 9, 15.04.2026
+'def desc Условията на задачите за упражнение.
-'define expected-reading 5 min
-'define created 14 April 2026
-'define edited 26 April 2026
-[$pagenav]
+# {title}
+
+{pagenav 5 min;14 April 2026;26 April 2026}
## За решаване
### Задача 1
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise01 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise01}
.note
-[*(26.04.2026)*] Променено от "дата на производство" в "година на производство"
+{i (26.04.2026)} Променено от "дата на производство" в "година на производство"
-Реализирайте клас [`Locomotive`], който съдържа:
+Реализирайте клас {` Locomotive}, който съдържа:
.bulleted
- идентификационен номер
- име на производител
@@ -22,7 +22,7 @@
- година на производство
- дължина в милиметри
- брой цилиндри в двигателя
-- дали поддържа връзка с втори локомотив, така че и двата да се управляват от един машинист (так. нар. [url https://en.wikipedia.org/wiki/Multiple_working multiple working])
+- дали поддържа връзка с втори локомотив, така че и двата да се управляват от един машинист (так. нар. {url multiple working;https://en.wikipedia.org/wiki/Multiple_working})
За него реализирайте нужните селектори и мутатори.
@@ -40,77 +40,77 @@ Train #9999
### Задача 2
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise02 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise02}
-Реализирайте клас [`Vector`], който съхранява неограничено количество от числа с плаваща запетая.
+Реализирайте клас {` Vector}, който съхранява неограничено количество от числа с плаваща запетая.
Реализирайте оператори:
.bulleted
-- [`+`], който покомпонентно събира елементи
-- [`-`], който покомпонентно изважда елементи
-- [`&`], който връща евклидовата дължина на вектора
-- [`*`], който връща умножение на вектор и скалар
-- [`*`], който връща точковото (покомпонентно) умножение на два вектора
-- [`^`], който връща векторнотно умножение на векторите
-- [`||`], който връща дали двата вектора са паралелни
-- [`==`], който връща дали двата вектора са равни
-- [`!=`], който връща дали двата вектора са различни
+- {` +}, който покомпонентно събира елементи
+- {` -}, който покомпонентно изважда елементи
+- {` &}, който връща евклидовата дължина на вектора
+- {` *}, който връща умножение на вектор и скалар
+- {` *}, който връща точковото (покомпонентно) умножение на два вектора
+- {` ^}, който връща векторнотно умножение на векторите
+- {` ||}, който връща дали двата вектора са паралелни
+- {` ==}, който връща дали двата вектора са равни
+- {` !=}, който връща дали двата вектора са различни
-За всички тези оператори реализирайте съотвените оператори за присвояване ([`+=`], [`-=`], ...).
+За всички тези оператори реализирайте съотвените оператори за присвояване ({` +=}, {` -=}, ...).
Ако единия вектор има повече елементи, нека те да се игнорират/оставят.
### Задача 3
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise03 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise03}
-Реализирайте клас [`String`], който съхранява низ с неограничен размер.
+Реализирайте клас {` String}, който съхранява низ с неограничен размер.
Имплементирайте следните оператори:
.bulleted
-- [`+`], конкатенира (слепва) втория низ в края на първия
-- [`==`], [`!=`], [`>`], [`>=`], [`<`], [`<=`], които сравняват двата низа (както [`strcmp`] ги сравнява)
-- [`[]`], който връща буква по подаден индекс
-- [`[]`], който връща подниза между два индекса (вкл.), разделени със запетая.
- Тоест [`text[X(3), 5]`] трябва да върне подниз с начало и край индекси 3 и 5.
- [`X`] е помощен клас, наименуван по ваш начин.
-- [`<<`], който връща дали левия низ завършва със съдържанието на десния низ
-- [`>>`], който връща дали десния низ започва със съдържанието на левия низ
+- {` +}, конкатенира (слепва) втория низ в края на първия
+- {` ==}, {` !=}, {` >}, {` >=}, {` <}, {` <=}, които сравняват двата низа (както {` strcmp} ги сравнява)
+- {` []}, който връща буква по подаден индекс
+- {` []}, който връща подниза между два индекса (вкл.), разделени със запетая.
+ Тоест {` text[X(3), 5]} трябва да върне подниз с начало и край индекси 3 и 5.
+ {` X} е помощен клас, наименуван по ваш начин.
+- {` <<}, който връща дали левия низ завършва със съдържанието на десния низ
+- {` >>}, който връща дали десния низ започва със съдържанието на левия низ
### Задача 4
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise04 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise04}
-Реализирайте клас [`Rover`], който съхранява координатите на движещ се роувър.
-В началото роувъра започва в координати [`(0,0)`] и сочи напред (към [`(0,1)`])
+Реализирайте клас {` Rover}, който съхранява координатите на движещ се роувър.
+В началото роувъра започва в координати {` (0,0)} и сочи напред (към {` (0,1)})
Реализирайте следните оператори:
.bulleted
-- [`<`], роувъра от дясната страна на оператора се придвижва наляво с лявата страна на брой единици
-- [`>`], роувъра от лявата страна на оператора се придвижва надясно с дясната страна на брой единици
-- [`^`], роувъра от лявата страна на оператора се придвижва напред с дясната страна на брой единици
-- [`<<`], роувъра от дясната страна на оператора се завърта обратно на часовниковата стрелка с лявата страна на брой градуси
-- [`>>`], роувъра от лявата страна на оператора се завърта по часовниковата стрелка с дясната страна на брой градуси
+- {` <}, роувъра от дясната страна на оператора се придвижва наляво с лявата страна на брой единици
+- {` >}, роувъра от лявата страна на оператора се придвижва надясно с дясната страна на брой единици
+- {` ^}, роувъра от лявата страна на оператора се придвижва напред с дясната страна на брой единици
+- {` <<}, роувъра от дясната страна на оператора се завърта обратно на часовниковата стрелка с лявата страна на брой градуси
+- {` >>}, роувъра от лявата страна на оператора се завърта по часовниковата стрелка с дясната страна на брой градуси
Реализирайте и съответните оператори за вход/изход от/към поток.
### Задача 5
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise05 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise05}
-Реализирайте клас [`StringArray`], който съхранява неограничено (и оразмеряемо) количество низове.
+Реализирайте клас {` StringArray}, който съхранява неограничено (и оразмеряемо) количество низове.
Реализирайте нужните оператори и помощни класове, чрез които следния код е валиден:
.note
-[*(26.04.2026)*]
+{i (26.04.2026)}
Обновени конвертирания, така че примера да работи.
Променени първите три размери.
-```c++
+```cpp
StringArray s;
s[ Z(7) +++ Z(4) +++ Z(3) ] ("") (X("Hello")|"World") [ Z(4) +++ Z(5) +++ Z(1) ] ("!") [ Z(2) ] (X("Code")|"A"|"B");
-В квадратните скоби се изреждат максимални размери на очаквани низове, разделени с [`+++`].
-В кръглите скоби се подават низове, разделени с [`|`].
-Класовете [`Z`] и [`X`] са класове, наименувани по ваш начин.
+В квадратните скоби се изреждат максимални размери на очаквани низове, разделени с {` +++}.
+В кръглите скоби се подават низове, разделени с {` |}.
+Класовете {` Z} и {` X} са класове, наименувани по ваш начин.
.question
Защо ни трябва експлицитното конвертиране?
@@ -126,7 +126,7 @@ s[ Z(7) +++ Z(4) +++ Z(3) ] ("") (X("Hello")|"World") [ Z(4) +++ Z(5) +++ Z(1) ]
- след това допълнително очакваме един низ с размер 2
- след това ни се подават три низа, с размери 4, 1 и 1
-Финално, в [`s`] трябва да имаме низовете [`"", "Hell", "Wor", "!", "Code", "A", "B"`].
+Финално, в {` s} трябва да имаме низовете {` "", "Hell", "Wor", "!", "Code", "A", "B"}.
Ако ни се подаде низ с по-голям размер от очаквания, трябва да съхраним само броя знаци, които очакваме.
Ако ни се подаде низ, който не очакваме, трябва да го игнорираме.