Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2023 / week4 / index.du
diff options
context:
space:
mode:
1 files changed, 34 insertions, 31 deletions
-rw-r--r--src/teaching/oop-2023/week4/index.du65
diff --git a/src/teaching/oop-2023/week4/index.du b/src/teaching/oop-2023/week4/index.du
index 3b2c19f..d25085a 100644
--- a/src/teaching/oop-2023/week4/index.du
+++ b/src/teaching/oop-2023/week4/index.du
@@ -1,16 +1,19 @@
-# Задачи - ООП, Седмица 4, 14.03.2024
+'def title Задачи - ООП, Седмица 4, 14.03.2024
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/qa_FfWeG classroom.github.com/a/qa_FfWeG]
+GitHub classroom: {url classroom.github.com/a/qa_FfWeG;https://classroom.github.com/a/qa_FfWeG}
## Преговорни
### Задача 1 - Капсулация
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week04/Exercise1.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week04/Exercise1.cpp}
-Имплементирайте структура [`Smartphone`], която запазва [=скрито=]:
+Имплементирайте структура {` Smartphone}, която запазва {b скрито}:
.bulleted
- марка, низ с максимална дължина от 128 знака
- модел, низ с максимална дължина от 512 знака
@@ -27,11 +30,11 @@ GitHub classroom: [url https://classroom.github.com/a/qa_FfWeG classroom.github.
### Задача 2 - Капсулация с динамична памет
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week04/Exercise2.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week04/Exercise2.cpp}
-Имплементирайте структура [`Bee`], която запазва възрастта на пчела чрез число с плаваща запетая и типа пчела с буква.
+Имплементирайте структура {` Bee}, която запазва възрастта на пчела чрез число с плаваща запетая и типа пчела с буква.
-Имплементирайте структура [`BeeHive`], която запазва динамично-заделен масив с всички реещи се пчели и друг динамично-заделен масив с всички яйца в кошера.
+Имплементирайте структура {` BeeHive}, която запазва динамично-заделен масив с всички реещи се пчели и друг динамично-заделен масив с всички яйца в кошера.
Размерите на двата масива се подават на конструктора.
Имплементирайте нужните конструктор и деструктор.
@@ -39,47 +42,47 @@ GitHub classroom: [url https://classroom.github.com/a/qa_FfWeG classroom.github.
### Задача 3
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week04/Exercise3.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week04/Exercise3.cpp}
-Имплементирайте структура [`Paper`], която запазва своето текстово съдържание като низ от максимум 1024 знака и положително цяло число, определящо номера на страницата.
+Имплементирайте структура {` Paper}, която запазва своето текстово съдържание като низ от максимум 1024 знака и положително цяло число, определящо номера на страницата.
-От входа получавате на един ред цялото текстото съдържание за един обект от тип [`Paper`] и на следващия ред - бройките копия [`N`] на дадения обект.
+От входа получавате на един ред цялото текстото съдържание за един обект от тип {` Paper} и на следващия ред - бройките копия {` N} на дадения обект.
-Създайте [`Paper`] обект със съответното съдържание и номер на страницата [`1`].
-Създайте динамично-заделен масив от [`Paper`] с размер [`N`], като първия му елемент е новосъздадения обект, докато останалите са [=копия=] на първия обект.
+Създайте {` Paper} обект със съответното съдържание и номер на страницата {` 1}.
+Създайте динамично-заделен масив от {` Paper} с размер {` N}, като първия му елемент е новосъздадения обект, докато останалите са {b копия} на първия обект.
При всяко копие, трябва да увеличите номера на страницата.
Имплементирейте логиката чрез копиращ конструктор.
### Задача 4
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week04/Exercise4.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week04/Exercise4.cpp}
-Създайте структура [`DynamicString`], чиито конструктор приема низ с терминираща нула, заделя точно толкова динамична памет, колкото е нужно да се запази целия низ и копира буквите на низа в тази памет.
+Създайте структура {` DynamicString}, чиито конструктор приема низ с терминираща нула, заделя точно толкова динамична памет, колкото е нужно да се запази целия низ и копира буквите на низа в тази памет.
Имплементирайте оператор равно.
-.question Какви данни трябва [`DynamicString`] да запазва скрито?
+.question Какви данни трябва {` DynamicString} да запазва скрито?
:question
-Какво трябва оператор равно да направи, ако записваме в [`DynamicString`] с вече заделена памет?\n
+Какво трябва оператор равно да направи, ако записваме в {` DynamicString} с вече заделена памет?\n
Тоест ако имахме:\n
-[`DynamicString s1("Hello"); DynamicString s2("World"); s2 = s1;`]
+{` DynamicString s1("Hello"); DynamicString s2("World"); s2 = s1;}
### Задача 5
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week04/Exercise5.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week04/Exercise5.cpp}
-Имплементирайте структура [`TVProgram`], която запазва името на предаването като низ от максимум 1024 знака, начало на излъчване и край на излъчване като неотрицателни целочислени числа (като примерно 1347 е един часа и 47 минути следобед).
+Имплементирайте структура {` TVProgram}, която запазва името на предаването като низ от максимум 1024 знака, начало на излъчване и край на излъчване като неотрицателни целочислени числа (като примерно 1347 е един часа и 47 минути следобед).
Имплементирайте конструктор, деструктор, оператор равно и копиращ конструктор.
-Имплементирайте структура [`TVChannel`], която запазва динамично заделен масив от [`TVProgram`], размера на динамично заделената памет и броя "ненулеви" елементи (програми, добавени с [`AddProgram`]).
+Имплементирайте структура {` TVChannel}, която запазва динамично заделен масив от {` TVProgram}, размера на динамично заделената памет и броя "ненулеви" елементи (програми, добавени с {` AddProgram}).
-Имплементирайте нейн метод [`AddProgram`], който приема [`TVProgram`] [=по копие=] и го вмъква на последната свободна позиция в масива.
+Имплементирайте нейн метод {` AddProgram}, който приема {` TVProgram} {b по копие} и го вмъква на последната свободна позиция в масива.
Ако масива е пълен, трябва да го "оразмерите" (да направите нов, по-голям масив, да копирате данните от стария в новия, да изтриете стария и да обновите указателя да сочи към новия).
-.question Кога използвате копиращия конструктор на [`TVProgram`] и кога използвате оператор равно?
+.question Кога използвате копиращия конструктор на {` TVProgram} и кога използвате оператор равно?
## Трудни задачи
@@ -92,9 +95,9 @@ GitHub classroom: [url https://classroom.github.com/a/qa_FfWeG classroom.github.
Гравитационното привличане на звезда в своя център се определя от ъгъла &theta;<sub>max</sub> (в градуси).
Планетата се върти около една звезда, използвайки стандартната матрица за ротация:
-[image ./img/Rotation_matrix.png]
+{img ./img/Rotation_matrix.png}
-Ъгълът на въртене &theta;, спрямо разстоянието до една звезда, се определя чрез [url https://en.wikipedia.org/wiki/Inverse-square_law закона на обратните квадрати], тоест в зависимост от разстоянието [`d`] между центъра на звездата и центъра на планетата, то истинският ъгъл на завъртане е &theta; = &theta;<sub>max</sub> * 1 / d^2.
+Ъгълът на въртене &theta;, спрямо разстоянието до една звезда, се определя чрез {url закона на обратните квадрати;https://en.wikipedia.org/wiki/Inverse-square_law}, тоест в зависимост от разстоянието {` d} между центъра на звездата и центъра на планетата, то истинският ъгъл на завъртане е &theta; = &theta;<sub>max</sub> * 1 / d^2.
Допълнително, ако имаме повече от една звезда, тогава ще използваме &theta;' = max(&theta;<sub>i</sub> - average(&theta;<sub>1</sub>, ..., &theta;<sub>n</sub>)), където &theta;<sub>i</sub> е намереният ъгъл &theta; за i-тата звезда и имаме n на брой звезди.
@@ -105,11 +108,11 @@ GitHub classroom: [url https://classroom.github.com/a/qa_FfWeG classroom.github.
Имплементирайте структури:
.bulleted
-- [`Matrix2x2`] и [`Matrix2x1`], чиито стойности са числа с плаваща запетая, и с член функции за събиране и умножение (не оператор+, оператор\*)
-- [`Coordinate`], която запазва ([=не наследява=]) точките в пространството като [`Matrix2x1`] и имплементира събиране, умножение и разстояние между координати и матрици
-- [`Star`], запазваща координатата на своя център ([`Matrix2x1`]) и ъгълът &theta;<sub>max</sub> като число с плаваща запетая.
+- {` Matrix2x2} и {` Matrix2x1}, чиито стойности са числа с плаваща запетая, и с член функции за събиране и умножение (не оператор+, оператор\*)
+- {` Coordinate}, която запазва ({b не наследява}) точките в пространството като {` Matrix2x1} и имплементира събиране, умножение и разстояние между координати и матрици
+- {` Star}, запазваща координатата на своя център ({` Matrix2x1}) и ъгълът &theta;<sub>max</sub> като число с плаваща запетая.
Имплементирайте и метод, който приема планета и връща ъгълът &theta;.
-- [`Planet`], запазваща своите координати ([`Matrix2x1`]) и изминалото време (тоест колко пъти се е движела от началото на симулацията).
- Имплементирайте метод [`OrbitPlanet`], която приема планета и ъгъл &theta;', и се завърта около нея.
-- [`Universe`], запазваща всички звездите и планетата.
- Имплементирайте метод [`FullOrbit`], която връща звездата около която планетата е успяла да извърши пълна ротация и времето за което това се е случило.
+- {` Planet}, запазваща своите координати ({` Matrix2x1}) и изминалото време (тоест колко пъти се е движела от началото на симулацията).
+ Имплементирайте метод {` OrbitPlanet}, която приема планета и ъгъл &theta;', и се завърта около нея.
+- {` Universe}, запазваща всички звездите и планетата.
+ Имплементирайте метод {` FullOrbit}, която връща звездата около която планетата е успяла да извърши пълна ротация и времето за което това се е случило.