diff options
1 files changed, 24 insertions, 21 deletions
| -rw-r--r-- | src/teaching/oop-2023/week5/index.du | 45 |
diff --git a/src/teaching/oop-2023/week5/index.du b/src/teaching/oop-2023/week5/index.du index 265e4f7..2ee73ba 100644 --- a/src/teaching/oop-2023/week5/index.du +++ b/src/teaching/oop-2023/week5/index.du @@ -1,37 +1,40 @@ -# Задачи - ООП, Седмица 5, 21.03.2024 +'def title Задачи - ООП, Седмица 5, 21.03.2024 +'def desc Условия на задачите за упражнение + +# {title} \n -GitHub classroom: [url https://classroom.github.com/a/42ZZ56Mg classroom.github.com/a/42ZZ56Mg] +GitHub classroom: {url classroom.github.com/a/42ZZ56Mg;https://classroom.github.com/a/42ZZ56Mg} ## Преговорни ### 1 задача - Капсулация с динамична памет -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise1.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise1.cpp} Пациент в болница се характеризира с идентификационен номер (неотрицателно целочислено число) и име (низ от максимум 1024 знака). Една болница има максимален капацититет на болни, които може да държи (максимален брой легла за тях). Конструктора за болницата приема максималния капацитет, като структурата за болницата пази всичките си пациенти. -Имплементирайте методи [`AddPatient`], който добавя нов пациент и [`RemovePatient`], който го премахва от болницата. +Имплементирайте методи {` AddPatient}, който добавя нов пациент и {` RemovePatient}, който го премахва от болницата. Не е нужно данните за пациентите да са скрити, но данните в болницата трябва да са. ### 2 задача - Копиращ конструктор и оператор= -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise2.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise2.cpp} -Имплементирайте структура [`FloatArray`], която запазва динамично-заделен масив от [`float`] стойности. +Имплементирайте структура {` FloatArray}, която запазва динамично-заделен масив от {` float} стойности. Размерът на масива се подава в конструктора. -Имплементирайте копиращ конструктор, оператор= и get-ър/set-ър за елемент на индекс [`i`]. +Имплементирайте копиращ конструктор, оператор= и get-ър/set-ър за елемент на индекс {` i}. ## Лесни задачи ### 3 задача -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise3.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise3.cpp} Имейл се характеризира с две стойности: адресът от който е изпратен (низ с максимална дължина от 128 знака) и съдържание (низ с неограничен размер). Съобщението се подава като указател към знак, и трябва да заделите точно толкова динамична памет, колкото ви трябва за целия текст. @@ -40,7 +43,7 @@ GitHub classroom: [url https://classroom.github.com/a/42ZZ56Mg classroom.github. ### 4 задача -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise4.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise4.cpp} Имплементирайте структура за касов бон, която запазва скрит динамично-заделен масив от цени (числа с плаваща запетая). Можете да добавяте неограничен брой цени в края на касовия бон (ако масива е пълен, създавате по-голям и пренасяте стойностите). @@ -51,7 +54,7 @@ GitHub classroom: [url https://classroom.github.com/a/42ZZ56Mg classroom.github. ### 5 задача -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise5.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise5.cpp} Един контролен списък (checklist) пази няколко неща: булева стойност, дали е избран или не, текстово съдържание (низ с "произволна" дължина) и масив от контролни списъци (всеки списък от този масив ще наричам "подсписък" за удобство). Нека текстовото съдържание да не може да се редактира (задава се в конструктора и няма set-ър). @@ -61,31 +64,31 @@ GitHub classroom: [url https://classroom.github.com/a/42ZZ56Mg classroom.github. ### 6 задача -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise6.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise6.cpp} Имате телефонен указател, който запазва масив от имена (низове). В началото винаги започва празен. Имплементирайте голяма четворка. -Имплементирайте метод [`InsertPerson`], който вмъква ново име в указателя, като вмъкването запазва сортировка по азбучен ред. -Тоест ако указателя беше [`{ "Atanas", "Yavor" }`], тогава след вмъкване на [`Boris`] ще имаме [`{ "Atanas", "Boris", "Yavor" }`]. +Имплементирайте метод {` InsertPerson}, който вмъква ново име в указателя, като вмъкването запазва сортировка по азбучен ред. +Тоест ако указателя беше {` { "Atanas", "Yavor" }}, тогава след вмъкване на {` Boris} ще имаме {` { "Atanas", "Boris", "Yavor" }}. .important Имплементирайте вмъкване, запазващо "сортираност" без функция за сортиране! ### 7 задача -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise7.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week05/Exercise7.cpp} Имплементирайте структура водомер, която скрито запазва отчетеното количество вода (double). -Има [=единствено=] конструктор по подразбиране, при който отчетеното количество е нула, метод [`AddWater`], който увеличава брояча с подаденото количество вода и метод [`Print`], който изкарва стойността на брояча на екрана. +Има {b единствено} конструктор по подразбиране, при който отчетеното количество е нула, метод {` AddWater}, който увеличава брояча с подаденото количество вода и метод {` Print}, който изкарва стойността на брояча на екрана. Имплементирайте голяма четворка (когато е нужно). Имплементирайте структура сграда, която има инсталирани подаден брой водомери. -Имплементирайте метод [`SimulateDay`], който "симулира" ден в сградата - към всички датчици се добавят между 0 и 0.42 вода (разглеждаме само числа с максимум 3 цифри след запетаята). +Имплементирайте метод {` SimulateDay}, който "симулира" ден в сградата - към всички датчици се добавят между 0 и 0.42 вода (разглеждаме само числа с максимум 3 цифри след запетаята). Количеството е случайно за всеки ден. -Имплементирайте метод [`SimulateMonth`], който "симулира" 30 дена в сградата, като на всеки 5 дена се прави "отчет" - всичките водомери се [=копират=] и запазват във вътрешен масив. +Имплементирайте метод {` SimulateMonth}, който "симулира" 30 дена в сградата, като на всеки 5 дена се прави "отчет" - всичките водомери се {b копират} и запазват във вътрешен масив. На края на месеца изкарайте на екрана, на един ред, всичките водомери от първите дни (първи ден на първи отчет, първи ден на втори отчет, ...), вторите дни, ... ### 8 задача @@ -93,15 +96,15 @@ GitHub classroom: [url https://classroom.github.com/a/42ZZ56Mg classroom.github. Една интернет заявка се характеризира с тип (низ от максимум 4 знака), версия на протокола (положително число с плаваща запетая) и идентификатор (буква). Нека тези данни да са скрити, като единствено могат да се set-нат от конструктора (тоест няма set-ъри, но има get-ъри) и е имлементирана голяма четворка (когато е нужно). -Интернет сървър обработва интернет заявки, като всяка получена заявка я запазва в нормалните логове (динамично-заделен масив със заявки) [=и=] в логовете за грешки (друг динамично-заделен масив със заявки). +Интернет сървър обработва интернет заявки, като всяка получена заявка я запазва в нормалните логове (динамично-заделен масив със заявки) {b и} в логовете за грешки (друг динамично-заделен масив със заявки). -Разглеждаме четири типа заявки: [`GET`], [`HEAD`], [`POST`] и [`PUT`]. +Разглеждаме четири типа заявки: {` GET}, {` HEAD}, {` POST} и {` PUT}. За всяка сървърът съдържа динамично-заделен масив от низове. Имплементирайте методи за добавяне на низ към всеки тип. Ако съответния масив от низове е пълен, тогава трябва да го уголемите. -Имплементирайте метод [`HandleRequest`], който приема интернет заявка [=по копие=], запазва я в нормалните логове и връща първия низ от масива на съответния тип, който започва с идентификатор-буквата. -Ако такъв низ не съществува, тогава връща низа "Bad request" и добавя заявката [=и=] в логовете за грешки. +Имплементирайте метод {` HandleRequest}, който приема интернет заявка {b по копие}, запазва я в нормалните логове и връща първия низ от масива на съответния тип, който започва с идентификатор-буквата. +Ако такъв низ не съществува, тогава връща низа "Bad request" и добавя заявката {b и} в логовете за грешки. Размерите на логовете се подават на конструктора. По принцип добавяте нови заявки в края на лога. |