diff options
1 files changed, 80 insertions, 0 deletions
| -rw-r--r-- | src/teaching/oop-2025/week08/index.du | 80 |
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`], която по подадени данни за площадка и ракета, връща дали ракетата може да бъде изтреляна от площадката |