diff options
| Commit | 85889833f990fc7f0a68d3554515074a2bd559db (patch) | |
|---|---|---|
| Author | 2026-04-15 08:37:57 +0300 | |
| Committer | 2026-04-15 08:37:57 +0300 | |
| Files | 2bf7a54f39eb1df76794862714dae3aaaa1a9244 | |
| syndamia.com-85889833f990fc7f0a68d3554515074a2bd559db.tar syndamia.com-85889833f990fc7f0a68d3554515074a2bd559db.tar.gz syndamia.com-85889833f990fc7f0a68d3554515074a2bd559db.zip | ||
| Parent | a7f2a3e10b7da8cd0477e997c7ceb8d6352ab285 (diff) | |
feat(teaching/oop-2025/w09): Add exercises
3 files changed, 123 insertions, 0 deletions
| -rw-r--r-- | meta/meta.tsv | 1 | ||||
| -rw-r--r-- | src/teaching/oop-2025/index.du | 9 | ||||
| -rw-r--r-- | src/teaching/oop-2025/week09/index.du | 113 |
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"`]. + +Ако ни се подаде низ с по-голям размер от очаквания, трябва да съхраним само броя знаци, които очакваме. +Ако ни се подаде низ, който не очакваме, трябва да го игнорираме. |