diff options
Diffstat (limited to 'week12')
| -rw-r--r-- | week12/README.md | 94 |
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]: От времето без мобилни телефони, хората са си купували пейджъри, които ти пращат нотификация ако някой ти звънне и не вдигнеш. Пейджърите са "заключени" за определени региони, тоест някой ти се обажда, не вдигаш, и всички телекомуникционни кули в региона изпращат съобщение "на теб ти звънна този", и пейджъра като засече сигнала ти писука. Мисля че също можеш да пращаш кратки съобщения. Не е било хич сигурна система, все още се ползва от болници в някои държави. |
