diff options
1 files changed, 47 insertions, 47 deletions
| -rw-r--r-- | src/teaching/oop-2025/week09/index.du | 94 |
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"}. Ако ни се подаде низ с по-голям размер от очаквания, трябва да съхраним само броя знаци, които очакваме. Ако ни се подаде низ, който не очакваме, трябва да го игнорираме. |