Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit85889833f990fc7f0a68d3554515074a2bd559db (patch)
Author
 Syndamia <kamen@syndamia.com>
2026-04-15 08:37:57 +0300
Committer
 Syndamia <kamen@syndamia.com>
2026-04-15 08:37:57 +0300
Files2bf7a54f39eb1df76794862714dae3aaaa1a9244
syndamia.com-85889833f990fc7f0a68d3554515074a2bd559db.tar
syndamia.com-85889833f990fc7f0a68d3554515074a2bd559db.tar.gz
syndamia.com-85889833f990fc7f0a68d3554515074a2bd559db.zip
Parenta7f2a3e10b7da8cd0477e997c7ceb8d6352ab285 (diff)
feat(teaching/oop-2025/w09): Add exercises
3 files changed, 123 insertions, 0 deletions
-rw-r--r--meta/meta.tsv1
-rw-r--r--src/teaching/oop-2025/index.du9
-rw-r--r--src/teaching/oop-2025/week09/index.du113
diff --git a/meta/meta.tsv b/meta/meta.tsv
index 4c660ff..e0e23cb 100644
--- a/meta/meta.tsv
+++ b/meta/meta.tsv
@@ -124,6 +124,7 @@ teaching/oop-2025/oop-notes/index.html Бележки по ООП при C++ - Ð
teaching/oop-2025/week06/index.html Задачи - ООП, Седмица 6, 25.03.2026 Условията на задачите за упражнение.
teaching/oop-2025/week07/index.html Задачи - ООП, Седмица 7, 01.04.2026 Условията на задачите за упражнение.
teaching/oop-2025/week08/index.html Задачи - ООП, Седмица 8, 08.04.2026 Условията на задачите за упражнение.
+teaching/oop-2025/week09/index.html Задачи - ООП, Седмица 9, 15.04.2026 Условията на задачите за упражнение.
blog/connect-to-mysql-in-dotnet-ef/index.html Connect to MySql in .NET and Entity Framework Connecting a .NET application to a MySql database (with Entity Framework) can be tricky. Here is what works for me.
diff --git a/src/teaching/oop-2025/index.du b/src/teaching/oop-2025/index.du
index aafb28d..a26dbc3 100644
--- a/src/teaching/oop-2025/index.du
+++ b/src/teaching/oop-2025/index.du
@@ -104,3 +104,12 @@
|:
[url ./week08 Задачи]
|| [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week08 Решения]
+
+|: 9
+|: 15.04.2026
+|: Приятелски функции и класове, предефиниране на оператори
+
+|:
+|:
+|:
+[url ./week09 Задачи]
diff --git a/src/teaching/oop-2025/week09/index.du b/src/teaching/oop-2025/week09/index.du
new file mode 100644
index 0000000..677accd
--- /dev/null
+++ b/src/teaching/oop-2025/week09/index.du
@@ -0,0 +1,113 @@
+# Задачи - ООП, Седмица 9, 15.04.2026
+
+'define expected-reading 5 min
+'define created 14 April 2026
+'define edited 15 April 2026
+[$pagenav]
+
+## За решаване
+
+### Задача 1
+
+Реализирайте клас [`Locomotive`], който съдържа:
+.bulleted
+- идентификационен номер
+- име на производител
+- име на модел
+- дата на производство
+- дължина в милиметри
+- брой цилиндри в двигателя
+- дали поддържа връзка с втори локомотив, така че и двата да се управляват от един машинист (так. нар. [url https://en.wikipedia.org/wiki/Multiple_working multiple working])
+
+За него реализирайте нужните селектори и мутатори.
+
+Реализирайте и приятелска функция, чрез която съдържанието може да се прочете от поток и запише в поток.
+Нека записването в поток да следва следния шаблон:
+
+```
+Train #9999
++ Model: ZZZ
++ Manufacturer: ZZZ
++ Year of manufacture: 2000
+- Length: 9999mm
+- Engine cyllinders: 9999
+- Multiple working: Yes
+
+### Задача 2
+
+Реализирайте клас [`Vector`], който съхранява неограничено количество от числа с плаваща запетая.
+
+Реализирайте оператори:
+.bulleted
+- [`+`], който покомпонентно събира елементи
+- [`-`], който покомпонентно изважда елементи
+- [`&`], който връща евклидовата дължина на вектора
+- [`*`], който връща умножение на вектор и скалар
+- [`*`], който връща точковото (покомпонентно) умножение на два вектора
+- [`^`], който връща векторнотно умножение на векторите
+- [`||`], който връща дали двата вектора са паралелни
+- [`==`], който връща дали двата вектора са равни
+- [`!=`], който връща дали двата вектора са различни
+
+За всички тези оператори реализирайте съотвените оператори за присвояване ([`+=`], [`-=`], ...).
+Ако единия вектор има повече елементи, нека те да се игнорират/оставят.
+
+### Задача 3
+
+Реализирайте клас [`String`], който съхранява низ с неограничен размер.
+Имплементирайте следните оператори:
+.bulleted
+- [`+`], конкатенира (слепва) втория низ в края на първия
+- [`==`], [`!=`], [`>`], [`>=`], [`<`], [`<=`], които сравняват двата низа (както [`strcmp`] ги сравнява)
+- [`[]`], който връща буква по подаден индекс
+- [`[]`], който връща подниза между два индекса (вкл.), разделени със запетая.
+ Тоест [`text[3, 5]`] трябва да върне подниз с начало и край индекси 3 и 5.
+ [*Упътване:*] използвайте помощен клас.
+- [`<<`], който връща дали левия низ завършва със съдържанието на десния низ
+- [`>>`], който връща дали десния низ започва със съдържанието на левия низ
+
+### Задача 4
+
+Реализирайте клас [`Rover`], който съхранява координатите на движещ се роувър.
+В началото роувъра започва в координати [`(0,0)`] и сочи напред (към [`(0,1)`])
+
+Реализирайте следните оператори:
+.bulleted
+- [`<`], роувъра от дясната страна на оператора се придвижва наляво с лявата страна на брой единици
+- [`>`], роувъра от лявата страна на оператора се придвижва надясно с дясната страна на брой единици
+- [`^`], роувъра от лявата страна на оператора се придвижва напред с дясната страна на брой единици
+- [`<<`], роувъра от дясната страна на оператора се завърта обратно на часовниковата стрелка с лявата страна на брой градуси
+- [`>>`], роувъра от лявата страна на оператора се завърта по часовниковата стрелка с дясната страна на брой градуси
+
+Реализирайте и съответните оператори за вход/изход от/към поток.
+
+### Задача 5
+
+Реализирайте клас [`StringArray`], който съхранява неограничено (и оразмеряемо) количество низове.
+Реализирайте нужните оператори и помощни класове, чрез които следния код е валиден:
+
+```c++
+StringArray s;
+s[ Z(5) +++ 6 +++ 7 ] ("") ("Hello"|"World") [ Z(4) +++ 5 +++ 1 ] ("!") [ Z(2) ] ("Code"|"A"|"B")
+
+В квадратните скоби се изреждат максимални размери на очаквани низове, разделени с [`+++`].
+В кръглите скоби се подават низове, разделени с [`|`].
+Класът [`Z`] е помощен, за експлицитно конвертиране на числата.
+
+.question
+Защо ни трябва експлицитното конвертиране?
+
+Тоест,
+.bulleted
+- първо очакваме три низа, с максимални размери от 5, 6 и 7
+- след това ни се подава един низ с размер 0
+- след това ни се подават два низа, съответно с размери 5 и 5
+- след това очакваме три низа, с максимални размери от 4, 5 и 1
+- след това ни се подава един низ с размер 1
+- след това допълнително очакваме един низ с размер 2
+- след това ни се подават три низа, с размери 4, 1 и 1
+
+Финално, в [`s`] трябва да имаме низовете [`"", "Hello", "World", "!", "Code", "A", "B"`].
+
+Ако ни се подаде низ с по-голям размер от очаквания, трябва да съхраним само броя знаци, които очакваме.
+Ако ни се подаде низ, който не очакваме, трябва да го игнорираме.