diff options
2 files changed, 30 insertions, 10 deletions
| -rw-r--r-- | src/teaching/oop-2025/index.du | 1 | ||||
| -rw-r--r-- | src/teaching/oop-2025/week09/index.du | 39 |
diff --git a/src/teaching/oop-2025/index.du b/src/teaching/oop-2025/index.du index 5988d77..696a20d 100644 --- a/src/teaching/oop-2025/index.du +++ b/src/teaching/oop-2025/index.du @@ -113,6 +113,7 @@ |: |: [url ./week09 Задачи] +|| [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09 Решения] |: 10 |: 22.04.2026 diff --git a/src/teaching/oop-2025/week09/index.du b/src/teaching/oop-2025/week09/index.du index 677accd..df7eb1e 100644 --- a/src/teaching/oop-2025/week09/index.du +++ b/src/teaching/oop-2025/week09/index.du @@ -2,26 +2,31 @@ 'define expected-reading 5 min 'define created 14 April 2026 -'define edited 15 April 2026 +'define edited 26 April 2026 [$pagenav] ## За решаване ### Задача 1 +.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise01 Решение] + +.note +[*(26.04.2026)*] Променено от "дата на производство" в "година на производство" + Реализирайте клас [`Locomotive`], който съдържа: .bulleted - идентификационен номер - име на производител - име на модел -- дата на производство +- година на производство - дължина в милиметри - брой цилиндри в двигателя - дали поддържа връзка с втори локомотив, така че и двата да се управляват от един машинист (так. нар. [url https://en.wikipedia.org/wiki/Multiple_working multiple working]) За него реализирайте нужните селектори и мутатори. -Реализирайте и приятелска функция, чрез която съдържанието може да се прочете от поток и запише в поток. +Реализирайте и приятелски функции, чрез която съдържанието може да се прочете от поток и запише в поток. Нека записването в поток да следва следния шаблон: ``` @@ -35,6 +40,8 @@ Train #9999 ### Задача 2 +.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise02 Решение] + Реализирайте клас [`Vector`], който съхранява неограничено количество от числа с плаваща запетая. Реализирайте оператори: @@ -54,6 +61,8 @@ Train #9999 ### Задача 3 +.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise03 Решение] + Реализирайте клас [`String`], който съхранява низ с неограничен размер. Имплементирайте следните оператори: .bulleted @@ -61,13 +70,15 @@ Train #9999 - [`==`], [`!=`], [`>`], [`>=`], [`<`], [`<=`], които сравняват двата низа (както [`strcmp`] ги сравнява) - [`[]`], който връща буква по подаден индекс - [`[]`], който връща подниза между два индекса (вкл.), разделени със запетая. - Тоест [`text[3, 5]`] трябва да върне подниз с начало и край индекси 3 и 5. - [*Упътване:*] използвайте помощен клас. + Тоест [`text[X(3), 5]`] трябва да върне подниз с начало и край индекси 3 и 5. + [`X`] е помощен клас, наименуван по ваш начин. - [`<<`], който връща дали левия низ завършва със съдържанието на десния низ - [`>>`], който връща дали десния низ започва със съдържанието на левия низ ### Задача 4 +.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise04 Решение] + Реализирайте клас [`Rover`], който съхранява координатите на движещ се роувър. В началото роувъра започва в координати [`(0,0)`] и сочи напред (към [`(0,1)`]) @@ -83,31 +94,39 @@ Train #9999 ### Задача 5 +.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week09/Exercise05 Решение] + Реализирайте клас [`StringArray`], който съхранява неограничено (и оразмеряемо) количество низове. Реализирайте нужните оператори и помощни класове, чрез които следния код е валиден: +.note +[*(26.04.2026)*] +Обновени конвертирания, така че примера да работи. +Променени първите три размери. + ```c++ StringArray s; -s[ Z(5) +++ 6 +++ 7 ] ("") ("Hello"|"World") [ Z(4) +++ 5 +++ 1 ] ("!") [ Z(2) ] ("Code"|"A"|"B") +s[ Z(7) +++ Z(4) +++ Z(3) ] ("") (X("Hello")|"World") [ Z(4) +++ Z(5) +++ Z(1) ] ("!") [ Z(2) ] (X("Code")|"A"|"B"); В квадратните скоби се изреждат максимални размери на очаквани низове, разделени с [`+++`]. В кръглите скоби се подават низове, разделени с [`|`]. -Класът [`Z`] е помощен, за експлицитно конвертиране на числата. +Класовете [`Z`] и [`X`] са класове, наименувани по ваш начин. .question Защо ни трябва експлицитното конвертиране? +Защо числата винаги ги конвертираме експлицитно, а низовете само веднъж (когато са изредени повече от един)? Тоест, .bulleted -- първо очакваме три низа, с максимални размери от 5, 6 и 7 +- първо очакваме три низа, с максимални размери от 7, 4 и 3 - след това ни се подава един низ с размер 0 -- след това ни се подават два низа, съответно с размери 5 и 5 +- след това ни се подават два низа, съответно с размери 5 и 5 (скъсяваме ги) - след това очакваме три низа, с максимални размери от 4, 5 и 1 - след това ни се подава един низ с размер 1 - след това допълнително очакваме един низ с размер 2 - след това ни се подават три низа, с размери 4, 1 и 1 -Финално, в [`s`] трябва да имаме низовете [`"", "Hello", "World", "!", "Code", "A", "B"`]. +Финално, в [`s`] трябва да имаме низовете [`"", "Hell", "Wor", "!", "Code", "A", "B"`]. Ако ни се подаде низ с по-голям размер от очаквания, трябва да съхраним само броя знаци, които очакваме. Ако ни се подаде низ, който не очакваме, трябва да го игнорираме. |