Summary Files Commits Branches @commit @diff @stats
path: root / src
diff options
context:
space:
mode:
Commitd33e90e556ccd73af0cdae306e732eb33d0f8079 (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-03-20 18:21:54 +0200
Committer
 Syndamia <kamen@syndamia.com>
2024-03-20 18:21:54 +0200
Files8877845b1c2a248b5c161a175d622eca547f1500 /src
syndamia.com-d33e90e556ccd73af0cdae306e732eb33d0f8079.tar
syndamia.com-d33e90e556ccd73af0cdae306e732eb33d0f8079.tar.gz
syndamia.com-d33e90e556ccd73af0cdae306e732eb33d0f8079.zip
Parent37df2313c8c25930a7609b69208647d565b48ce0 (diff)
[te/oop-2023/w5] Added revision and easy exercises
2 files changed, 98 insertions, 0 deletions
-rw-r--r--src/teaching/oop-2023/index.md1
-rw-r--r--src/teaching/oop-2023/week5/index.md97
diff --git a/src/teaching/oop-2023/index.md b/src/teaching/oop-2023/index.md
index 9485dca..a7f84be 100644
--- a/src/teaching/oop-2023/index.md
+++ b/src/teaching/oop-2023/index.md
@@ -18,3 +18,4 @@
|2 |29.02.2024|[Задачи](./week2/) \|\| [Решения](https://github.com/Syndamia/oop-2023-solutions/tree/main/week02) \|\| [GitHub classroom](https://classroom.github.com/a/3qPsfyyI)|
|3 |07.03.2024|[Задачи](./week3/) \|\| [Решения](https://github.com/Syndamia/oop-2023-solutions/tree/main/week03) \|\| [GitHub classroom](https://classroom.github.com/a/KPMqXsFp)|
|4 |14.03.2024|[Задачи](./week4/) \|\| [Решения](https://github.com/Syndamia/oop-2023-solutions/tree/main/week04) \|\| [GitHub classroom](https://classroom.github.com/a/qa_FfWeG)|
+|5 |15.03.2024|[Задачи](./week5/) <!-- \|\| [Решения](https://github.com/Syndamia/oop-2023-solutions/tree/main/week05) \|\| [GitHub classroom](https://classroom.github.com/a/qa_FfWeG)-->|
diff --git a/src/teaching/oop-2023/week5/index.md b/src/teaching/oop-2023/week5/index.md
new file mode 100644
index 0000000..e608428
--- /dev/null
+++ b/src/teaching/oop-2023/week5/index.md
@@ -0,0 +1,97 @@
+# Задачи - ООП, Седмица 5, 21.03.2024
+
+<!-- GitHub classroom: [classroom.github.com/a/qa_FfWeG](https://classroom.github.com/a/qa_FfWeG) -->
+
+## Преговорни
+
+### 1 задача - Капсулация с динамична памет
+
+Пациент в болница се характеризира с идентификационен номер (неотрицателно целочислено число) и име (низ от максимум 1024 знака).
+Една болница има максимален капацититет на болни, които може да държи (максимален брой легла за тях).
+
+Конструктора за болницата приема максималния капацитет, като структурата за болницата пази всичките си пациенти.
+Имплементирайте методи `AddPatient`, който добавя нов пациент и `RemovePatient`, който го премахва от болницата.
+
+Не е нужно данните за пациентите да са скрити, но данните в болницата трябва да са.
+
+### 2 задача - Копиращ конструктор и оператор=
+
+Имплементирайте структура `FloatArray`, която запазва динамично-заделен масив от `float` стойности.
+Размерът на масива се подава в конструктора.
+
+Имплементирайте копиращ конструктор, оператор= и get-ър/set-ър за елемент на индекс `i`.
+
+## Лесни задачи
+
+### 3 задача
+
+Имейл се характеризира с две стойности: адресът от който е изпратен (низ с максимална дължина от 128 знака) и съдържание (низ с неограничен размер).
+Съобщението се подава като указател към знак, и трябва да заделите точно толкова динамична памет, колкото ви трябва за целия текст.
+
+Имплементирайте голяма четворка за имейла.
+
+### 4 задача
+
+Имплементирайте структура за касов бон, която запазва скрит динамично-заделен масив от цени (числа с плаваща запетая).
+Можете да добавяте неограничен брой цени в края на касовия бон (ако масива е пълен, създавате по-голям и пренасяте стойностите).
+Можете да премахвате цени според индекс (и всички следващи се преместват с една позиция назад).
+
+Имплементирайте тези функционалности в методи.
+Имплементирайте голяма четворка.
+
+### 5 задача
+
+Един контролен списък (checklist) пази няколко неща: булева стойност, дали е избран или не, текстово съдържание (низ с "произволна" дължина) и масив от контролни списъци (всеки списък от този масив ще наричам "подсписък" за удобство).
+Нека текстовото съдържание да не може да се редактира (задава се в конструктора и няма set-ър).
+
+Имплементирайте добавяне и премахване на подсписък, както и придвижване на подсписък с една позиция наляво или надясно.
+Имплементирайте голяма четворка.
+
+### 6 задача
+
+Имате телефонен указател, който запазва масив от имена (низове).
+В началото винаги започва празен.
+Имплементирайте голяма четворка.
+
+Имплементирайте метод `InsertPerson`, който вмъква ново име в указателя, като вмъкването запазва сортировка по азбучен ред.
+Тоест ако указателя беше `{ "Atanas", "Yavor" }`, тогава след вмъкване на `Boris` ще имаме `{ "Atanas", "Boris", "Yavor" }`.
+
+&:important Имплементирайте вмъкване, запазващо "сортираност" без функция за сортиране!
+
+### 7 задача
+
+Имплементирайте структура водомер, която скрито запазва отчетеното количество вода (double).
+Има **единствено** конструктор по подразбиране, при който отчетеното количество е нула, метод `AddWater`, който увеличава брояча с подаденото количество вода и метод `Print`, който изкарва стойността на брояча на екрана.
+Имплементирайте голяма четворка (когато е нужно).
+
+Имплементирайте структура сграда, която има инсталирани подаден брой водомери.
+
+Имплементирайте метод `SimulateDay`, който "симулира" ден в сградата - към всички датчици се добавят между 0 и 0.42 вода (разглеждаме само числа с максимум 3 цифри след запетаята).
+Количеството е случайно за всеки ден.
+
+Имплементирайте метод `SimulateMonth`, който "симулира" 30 дена в сградата, като на всеки 5 дена се прави "отчет" - всичките водомери се **копират** и запазват във вътрешен масив.
+На края на месеца изкарайте на екрана, на един ред, всичките водомери от първите дни (първи ден на първи отчет, първи ден на втори отчет, ...), вторите дни, ...
+
+### 8 задача
+
+Една интернет заявка се характеризира с тип (низ от максимум 4 знака), версия на протокола (положително число с плаваща запетая) и идентификатор (буква).
+Нека тези данни да са скрити, като единствено могат да се set-нат от конструктора (тоест няма set-ъри, но има get-ъри) и е имлементирана голяма четворка (когато е нужно).
+
+Интернет сървър обработва интернет заявки, като всяка получена заявка я запазва в нормалните логове (динамично-заделен масив със заявки) **и** в логовете за грешки (друг динамично-заделен масив със заявки).
+
+Разглеждаме четири типа заявки: `GET`, `HEAD`, `POST` и `PUT`.
+За всяка сървърът съдържа динамично-заделен масив от низове.
+Имплементирайте методи за добавяне на низ към всеки тип.
+Ако съответния масив от низове е пълен, тогава трябва да го уголемите.
+
+Имплементирайте метод `HandleRequest`, който приема интернет заявка **по копие**, запазва я в нормалните логове и връща първия низ от масива на съответния тип, който започва с идентификатор-буквата.
+Ако такъв низ не съществува, тогава връща низа "Bad request" и добавя заявката **и** в логовете за грешки.
+
+Размерите на логовете се подават на конструктора.
+По принцип добавяте нови заявки в края на лога.
+Логовете са циклични, тоест ако един лог е запълен, тогава трябва да почнете да презаписвате от началото.
+Имплементирайте голяма четворка.
+
+## Трудни задачи
+
+*Ще се добавят в бъдеще*