aboutsummaryrefslogtreecommitdiff
path: root/week12
diff options
context:
space:
mode:
authorSyndamia <kamen@syndamia.com>2024-05-10 12:34:43 +0300
committerSyndamia <kamen@syndamia.com>2024-05-10 12:34:43 +0300
commit94c45e51a5ab456ded3130450ac5bf2b4a1d1ff5 (patch)
tree4e0dfdb988ba38e76099fe291446f1c67b6f3384 /week12
parenteb6305c8b0a71a613a34edbcabdaf1fde259451d (diff)
downloadoop-2023-solutions-94c45e51a5ab456ded3130450ac5bf2b4a1d1ff5.tar
oop-2023-solutions-94c45e51a5ab456ded3130450ac5bf2b4a1d1ff5.tar.gz
oop-2023-solutions-94c45e51a5ab456ded3130450ac5bf2b4a1d1ff5.zip
[w11,w12] Updated task descriptions
Diffstat (limited to 'week12')
-rw-r--r--week12/README.md94
1 files changed, 94 insertions, 0 deletions
diff --git a/week12/README.md b/week12/README.md
new file mode 100644
index 0000000..6df9447
--- /dev/null
+++ b/week12/README.md
@@ -0,0 +1,94 @@
+# Задачи - ООП, Седмица 12, 09.05.2024
+
+*Този файл е копие на задачите от: [syndamia.com/teaching/oop-2023/week12](https://syndamia.com/teaching/oop-2023/week12)*
+
+### Задача 1
+
+&::solution-link [Решение](https://github.com/Syndamia/oop-2023-solutions/blob/main/week12/Exercise1)
+
+<!-- Multiple inheritance -->
+
+Реализирайте клас `Publication`, който пази:
+
+- низ от максимална дължина 1023, съхраняващ автори и
+- втори низ с максимална дължина от 255, съхраняващ име на (научно) списание.
+
+Реализирайте клас `TextDocument`, който пази неоразмеряем низ с текстово съдържание и неговия размер.
+
+Реализирайте наследник на двата класа `ScientificPaper`, който допълнително пази и низ от максимално 511 знака, съдържащ име на научна дисциплина.
+За всички класове реазлизирайте оператор <<.
+
+### Задача 2
+
+*Не говорим за нея, условието беше толкова сбъркано, че се наложи да я сваля*
+
+### Задача 3
+
+&::solution-link [Решение](https://github.com/Syndamia/oop-2023-solutions/blob/main/week12/Exercise3)
+
+Реализирайте абстрактен клас `MobileDevice`, който запазва:
+
+- телефонен номер като цяло неотрицателно число и
+- масив с максимална дължина от 511 знака за текстово съобщение.
+
+Допълнително нека:
+
+- класът да задължава имплементацията на метод `Show`,
+- да има член-функция `CanAccept`, която по подадено "хиперсъобщение" връща дали неговия номер съвпада с този на класа.
+ Под "хиперсъобщение" имаме предвид низ, който започва с телефонния номер, след това има шпация и след това е самото съобщение.
+- да има член-функция `Accept`, която по подадено "хиперсъобщение" запазва текстовото съобщение.
+ Ако номерът не съответства тогава хвърля грешка.
+
+Реализирайте негов наследник `Telephone`, за който `Show` изкарва съобщението на екрана.
+
+Реализирайте втори негов наследник `Pager`[^pager], който съхранява име на файл (като динамично-заделен низ) и `Show` изкарва съобщението в съответния файл.
+Разбира се, имплементирайте голяма петица.
+
+Реализирайте клас `TelecommunicationCompany`, който съхранява динамично-заделен и оразмеряем масив от (указатели към) `MobileDevice`.
+Имплементирайте всичко, **което е възможно**, от голяма петица.
+
+### Задача 4
+
+&::solution-link [Решение](https://github.com/Syndamia/oop-2023-solutions/blob/main/week12/Exercise4)
+
+<!-- Multiple inheritance with mixed class types, polymorphic container, and copying -->
+
+Реализирайте клас `Employee`, който запазва:
+
+- заплата като число с плаваща запетая и
+- производителост също като число с плаваща запетая.
+
+Производителността е множител на заплатата, тоест ако има производителност 0.5 значи работи като човек на който му плащат с половината заплата.
+
+Реализирайте абстрактен клас `Person`, който запазва:
+
+- име като низ с произволна дължина и
+- възраст като цяло неотрицателно число
+
+Допълнително задължава реализацията на член-функция `Workload`, връщаща стойност с плаваща запетая.
+Разбира се имплементирайте голяма петица.
+
+Реализирайте наследник на двата класа на име `Developer`, който допълнително запазва:
+
+- цяло неотрицателно число - брой проекти в които участва, и
+- второ което е брой проекти на които ще се пуска нова версия.
+
+Реализирайте оператори `++` и `--`, като префиксните променят броя проекти на които ще се пуска нова версия, докато постфиксните променя броя проекти в които участва.
+За него `Workload` се определя като 1.1 по всеки проект и допълнително по 2.3 за всеки проект на който ще се пуска нова версия.
+
+Реализирайте наследник на двата класа на име `Manager`, който допълнително запазва динамично-заделен и оразмеряем масив от `Person`, които менижира.
+
+Имплементирайте голяма петица и:
+
+- оператори `==` и `!=`, сравняващи хора по име
+- член-функция `StartManaging`, която приема `Person` и го запазва, и
+- член-функция `StopManaging`, която приема `Person` и го премахва от масива ако съществува в него.
+
+`Workload` се определя като 0.6 на човек който менижира.
+
+Финално реализирайте клас `Company`, който запазва масив от 128 указателя `Person` в компанията.
+Имплементирайте негова член-функция:
+
+- `PaymentDifference`, която връща с колко платената заплата на всички служители се отличава с тази според тяхната производителност
+
+[^pager]: От времето без мобилни телефони, хората са си купували пейджъри, които ти пращат нотификация ако някой ти звънне и не вдигнеш. Пейджърите са "заключени" за определени региони, тоест някой ти се обажда, не вдигаш, и всички телекомуникционни кули в региона изпращат съобщение "на теб ти звънна този", и пейджъра като засече сигнала ти писука. Мисля че също можеш да пращаш кратки съобщения. Не е било хич сигурна система, все още се ползва от болници в някои държави.