Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2023 / week8 / index.du
diff options
context:
space:
mode:
1 files changed, 31 insertions, 28 deletions
-rw-r--r--src/teaching/oop-2023/week8/index.du59
diff --git a/src/teaching/oop-2023/week8/index.du b/src/teaching/oop-2023/week8/index.du
index 4e2270d..c8fc94f 100644
--- a/src/teaching/oop-2023/week8/index.du
+++ b/src/teaching/oop-2023/week8/index.du
@@ -1,43 +1,46 @@
-# Задачи - ООП, Седмица 8, 11.04.2024
+'def title Задачи - ООП, Седмица 8, 11.04.2024
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/7d0MBjcK classroom.github.com/a/7d0MBjcK]
+GitHub classroom: {url classroom.github.com/a/7d0MBjcK;https://classroom.github.com/a/7d0MBjcK}
## Преговорни
### Задача 1 - Голяма петица
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise1.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise1.cpp}
-Имплементирайте клас [`StreetList`], който запазва имената на улици (низове с произволна дължина) в динамичен масив.
+Имплементирайте клас {` StreetList}, който запазва имената на улици (низове с произволна дължина) в динамичен масив.
Може да се добавят нови имена в края на списъка, като съответния (вътрешен) масив трябва да се уголеми.
Имплементирайте голяма петица за класа.
### Задача 2 - Файлове и класове
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise2.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise2.cpp}
-Имплементирайте клас [`Person`], който запазва трите имена (низове с произволна дължина) и идентификационния номер (цяло неотрицателно число) на човек.
+Имплементирайте клас {` Person}, който запазва трите имена (низове с произволна дължина) и идентификационния номер (цяло неотрицателно число) на човек.
Имплементирайте голяма петица.
-Имплементирайте методи [`SaveText`] и [`LoadText`], които съответно записват и четат (тоест член-данните стават равни на тези от файла) данните си в/от [=текстови=] файл с подадено име.
-Аналогично имплементирайте [`SaveBinary`] и [`LoadBinary`], които работят с [=двоични=] файлове.
+Имплементирайте методи {` SaveText} и {` LoadText}, които съответно записват и четат (тоест член-данните стават равни на тези от файла) данните си в/от {b текстови} файл с подадено име.
+Аналогично имплементирайте {` SaveBinary} и {` LoadBinary}, които работят с {b двоични} файлове.
## Лесни
### Задача 3
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise3.hpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise3.hpp}
-Имплементирайте шаблонната структура [`Pair`], която приема два типа и запазва по една стойност от всеки тип.
+Имплементирайте шаблонната структура {` Pair}, която приема два типа и запазва по една стойност от всеки тип.
### Задача 4
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise4.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise4.cpp}
-Имплементирайте клас [`FloatArray`], който съдържа списък с числа с плаваща запетая.
+Имплементирайте клас {` FloatArray}, който съдържа списък с числа с плаваща запетая.
Може да добавяте нови числа в края на този списък.
Имплементирйате голяма петица.
@@ -53,16 +56,16 @@ GitHub classroom: [url https://classroom.github.com/a/7d0MBjcK classroom.github.
### Задача 5
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise5.hpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise5.hpp}
-Имплементирайте класът и неговите оператори от предходната задача като темплейтен (шаблонен) клас с име [`DynamicArray`].
+Имплементирайте класът и неговите оператори от предходната задача като темплейтен (шаблонен) клас с име {` DynamicArray}.
Очевидно шаблонния тип определя типа на списъка с елементи.
### Задача 6
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise6.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise6.cpp}
-Имплементирайте клас [`NumberInput`], който запазва целочислена стойност.
+Имплементирайте клас {` NumberInput}, който запазва целочислена стойност.
В конструктора се подава минимална и максимална възможна стойност, след това (все още в конструктора) се изкарва на екрана съответно съобщение и се приема потребителски вход.
Ако той не е валиден или е извън подадения обхват, трябва да хвърлите грешка.
@@ -72,26 +75,26 @@ GitHub classroom: [url https://classroom.github.com/a/7d0MBjcK classroom.github.
### Задача 7
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise7.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week08/Exercise7.cpp}
-Имплементирайте клас [`UserError`], чиято употреба е да се хвърля като грешка.
+Имплементирайте клас {` UserError}, чиято употреба е да се хвърля като грешка.
За тази цел нека да запазва два низа, които се приемат в конструктора: името на клас и името на член-данната.
Имплементирайте голяма петица и оператор<<, който изкарва съобщение с информация за класа и член-данната в подадения поток.
-Следете бройката на създадени [`UserError`] инстанции в самия клас (статична променлива) и имплементирате нужната (статична) член-функция, която връща този брой.
+Следете бройката на създадени {` UserError} инстанции в самия клас (статична променлива) и имплементирате нужната (статична) член-функция, която връща този брой.
Преобразувайте последната задача, така че да хвърля грешка от този клас.
-В края на програмата изкарайте колко грешки са се хвърлили [=използвайки статичните членове на UserError=].
+В края на програмата изкарайте колко грешки са се хвърлили {b използвайки статичните членове на UserError}.
## Трудни задачи
### Задача 8
-Имплементирайте шаблонен клас [`UserInput`], който запазва стойност от подадения тип.
+Имплементирайте шаблонен клас {` UserInput}, който запазва стойност от подадения тип.
Ако типа е указател, тогава заделяте динамична памет за един такъв елемент.
-За проверка на типа използвайте [url https://en.cppreference.com/w/cpp/language/partial_specialization partial template specialization].
+За проверка на типа използвайте {url partial template specialization;https://en.cppreference.com/w/cpp/language/partial_specialization}.
-В шаблона ([`template <...>`]) се приема указател към валидираща функция, която приема стойността от съответния тип и връща булева стойност.
+В шаблона ({` template <...>}) се приема указател към валидираща функция, която приема стойността от съответния тип и връща булева стойност.
В конструктора се приема от входа нужната стойност и ако стойността е неуспешно приета или валидиращата функция върне false, тогава хвърляте грешка.
Ако типа е указател, не забравяйте да освободите паметта.
@@ -101,7 +104,7 @@ GitHub classroom: [url https://classroom.github.com/a/7d0MBjcK classroom.github.
.important В тази задача се изикват помощни класове, прочетете цялото условие преди имплементиране!
-Имплементирайте шаблонен клас [`Dictionary`], който запазва два динамично-заделени масива: първия е със стойност от подадения тип, втория е с низове.
+Имплементирайте шаблонен клас {` Dictionary}, който запазва два динамично-заделени масива: първия е със стойност от подадения тип, втория е с низове.
Низовете ще се използват за индексиране, вместо числа.
Разбира се, очаквайте да може да се уразмерява.
Имплементирайте голяма петица.
@@ -109,12 +112,12 @@ GitHub classroom: [url https://classroom.github.com/a/7d0MBjcK classroom.github.
Имплементирайте оператор:
:bulleted
-- <<=, който вмъква всички стойности от десния [`Dictionary`] в левия
+- <<=, който вмъква всички стойности от десния {` Dictionary} в левия
- [], който приема низ и връща референция "към" стойността.
Ако няма записана стойност на съответния индекс, тогава връщате референция в която може да се запише стойност.
- [], който приема число, което се конвертира до низ и работи както предходния оператор
- [], който приема низове (или числа), разделени със запетая и връща "масив" само с тези стойности
-- delete, който приема стойност, върната от оператор[] и "премахва" съответната стойност от [`Dictionary`]
+- delete, който приема стойност, върната от оператор[] и "премахва" съответната стойност от {` Dictionary}
- префиксен++, префиксен+ и префиксен-, които ще се използват за итериране.
.bulleted
- ++ връща инкрементира индекса на сегашната стойност.
@@ -124,14 +127,14 @@ GitHub classroom: [url https://classroom.github.com/a/7d0MBjcK classroom.github.
- + връща референция към стойността на сегашния индекс
- - връща сегашния (низов) индекс
-- ->, такъв че можем да правим [`a->(&func1)->(&func2)`] и [`a->[&func3]->[&func4]`].\n
+- ->, такъв че можем да правим {` a->(&func1)->(&func2)} и {` a->[&func3]->[&func4]}.\n
Върху всяка двойка индекс-стойност се прилагат &func1 и &func2 (приемат индекс и стойност като параметри), които връщат нова стойност, заместваща сегашната.\n
&func3, &func4 аналогично приемат индекс и стойност, но връщат нов индекс.
В края на задачата трябва да можете да правите:
-:code_c++
+````cpp
int doubleUp(const char* index, int value) {
return value * 2;
}