Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / week08 / index.du
diff options
context:
space:
mode:
1 files changed, 80 insertions, 0 deletions
-rw-r--r--src/teaching/oop-2025/week08/index.du80
diff --git a/src/teaching/oop-2025/week08/index.du b/src/teaching/oop-2025/week08/index.du
new file mode 100644
index 0000000..7b3b7e3
--- /dev/null
+++ b/src/teaching/oop-2025/week08/index.du
@@ -0,0 +1,80 @@
+# Задачи - ООП, Седмица 8, 08.04.2026
+
+'define expected-reading 3 min
+'define created 07 April 2026
+'define edited 07 April 2026
+[$pagenav]
+
+## За решаване
+
+### Задача 1
+
+.warn
+За всеки клас имплементирайте [=голяма петица!=]
+Всички методи трябва да достъпни и за константни обекти, когато е възможно.
+
+Реализирайте система за менажиране на многостепенни ракети.
+След изтрелване на ракетата, най-долната "степен" се активира.
+При изразходване на горивото, тя се откача от другите степени и следващата степен се активира.
+
+[image https://upload.wikimedia.org/wikipedia/commons/d/d6/Black_Brant.jpg]\n
+[*В тази ракета, степените са оцветени по различен начин: бяло, червено и черно.*]
+
+Всяка степен си има:
+.bulleted
+- име, низ с максимална дължина от 100 символа
+- височина в целочислени метри
+- тежест в килограми
+- тяга (lift force) в нютони
+- време на горене в секунди
+
+Една степен изразходва горивото си за "време на горене" секунди, като във всяка секунда прилага ускорение на себе си и товара с "тяга" нютони.
+Може да зачитаме праволинейно ускорение и да не изчисляваме промяната на количеството гориво.
+Това означава, че можем да използваме следните формули за дадена степен:
+
+[image ./img/formulas.png]
+
+Където:
+.bulleted
+- [`a`] е ускорението,
+- [`v[_0_]`] е началната скорост,
+ за първата степен тя ще е 0,
+ за втората тя ще е скоростта на първата степен,
+ на третата ще е скоростта на втората степен и так. нат.
+- [`x`] е разстояние в метри.
+
+Степените се комбинират в ракета.
+Всяка ракета си има име и неограничен брой степени.
+
+За една ракета имплементирайте методи, чрез които се намира:
+.bulleted
+- общата тежест на ракетата
+- общата височина на ракетата
+- финалната скорост на финалната степен
+- общото разстояние което ракетата може да измине, в километри
+- общото време в което ракетата ще гори
+
+Допълнително, имплементирайте методи [`Export`] и [`Import`], чрез които всички данни на една ракета се запазват или вземат в/от двоичен файл.
+
+Неограничено количество ракети и необвързани степени се съхраняват в хангари.
+Имплементирайте методи за добавяне на степени в хангара и [*преместване*] на степени в ракети.
+
+Освен това имаме площадки от които ракети могат да се изтрелват.
+Всяка площадка съдържа:
+.bulleted
+- име с максимална дължина от 250 символа
+- максимална тежест на ракета, която поддържа
+- максимална височина на ракета, която поддържа
+
+Финално, имаме космическа агенция, която съдържа неограничен брой хангари и площадки.
+Всички хангари в космическата агенция могат да се експортират и импортират в един двоичен файл и всички площадки в един текстови файл.
+
+Реализирайте конзолен интерфейс, който поддържа командите:
+.bulleted
+- [`new_hangar`], която по подадени данни добавя нов хангар
+- [`new_launch_site`], която по подадени данни добавя нова площадка
+- [`new_rocket_stage`], която по подадени данни добавя нова степен в избран хангар.
+ Ако такъв не съществува, да се добави в последния добавен хангар.
+- [`new_rocket`], която по подадени данни добавя нова ракета в хангар.
+ Степените ѝ трябва да са "пренесени" от хангар(и), [=не=] да се създадат наново.
+- [`can_launch`], която по подадени данни за площадка и ракета, връща дали ракетата може да бъде изтреляна от площадката