diff options
1 files changed, 37 insertions, 34 deletions
| -rw-r--r-- | src/teaching/oop-2023/week3/index.du | 71 |
diff --git a/src/teaching/oop-2023/week3/index.du b/src/teaching/oop-2023/week3/index.du index 9617d36..663b70b 100644 --- a/src/teaching/oop-2023/week3/index.du +++ b/src/teaching/oop-2023/week3/index.du @@ -1,16 +1,19 @@ -# Задачи - ООП, Седмица 3, 07.03.2024 +'def title Задачи - ООП, Седмица 3, 07.03.2024 +'def desc Условия на задачите за упражнение + +# {title} \n -GitHub classroom: [url https://classroom.github.com/a/KPMqXsFp classroom.github.com/a/KPMqXsFp] +GitHub classroom: {url classroom.github.com/a/KPMqXsFp;https://classroom.github.com/a/KPMqXsFp} ## Преговорни ### Задача 1 - Структури -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise1.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise1.cpp} -Имплементирайте структура [`Lightbulb`], която запазва идентифициращите данни за една крушка: +Имплементирайте структура {` Lightbulb}, която запазва идентифициращите данни за една крушка: .bulleted - диаметър и дължина: и двете са целочислени стойности - тип: низ с максимална дължина от 100 знака @@ -18,9 +21,9 @@ GitHub classroom: [url https://classroom.github.com/a/KPMqXsFp classroom.github. ### Задача 2 - Капсулация -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise2.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise2.cpp} -Имплементирайте структура [`Alarm`], която съдържа следните [=скрити=] данни: +Имплементирайте структура {` Alarm}, която съдържа следните {b скрити} данни: .bulleted - име на модел: низ с максимална дължина от 1024 знака - пин код: целочислено число @@ -38,57 +41,57 @@ GitHub classroom: [url https://classroom.github.com/a/KPMqXsFp classroom.github. ### Задача 3 - Капсулация с динамична памет -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise3.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise3.cpp} -Имплементирайте структура [`Person`], която запазва двете имена на човек, възраст като целочислено число и неговия имейл. +Имплементирайте структура {` Person}, която запазва двете имена на човек, възраст като целочислено число и неговия имейл. Имената и имейла са низвое с произволна дължина. -Направете конструктор, който приема възрастта и тези три низа, и [=копира=] стойностите им в динамичната памет. +Направете конструктор, който приема възрастта и тези три низа, и {b копира} стойностите им в динамичната памет. Също напишете и деструктор, който коректно трие нужните данни. ### Задача 4 - Динамично-заделени структури в други структури -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise4.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise4.cpp} -Имплементирайте структура [`Bus`], която публично запазва капацитета хора и километража на един автобус. +Имплементирайте структура {` Bus}, която публично запазва капацитета хора и километража на един автобус. -Имплементирайте структура [`BusWarehouse`], която запазва динамично-заделен масив от автобуси. -В конструктора се въвежда максималния брой автобуси, който може един [`BusWarehouse`] да съдържа. +Имплементирайте структура {` BusWarehouse}, която запазва динамично-заделен масив от автобуси. +В конструктора се въвежда максималния брой автобуси, който може един {` BusWarehouse} да съдържа. Имплементирайте конструктор, който само инициализира нужните данни, и деструктор който трие каквото трябва. -Имплементирайте член-функция [`AddBus`], която добавя автобус в инстанция на [`BusWarehouse`], ако има място за него. +Имплементирайте член-функция {` AddBus}, която добавя автобус в инстанция на {` BusWarehouse}, ако има място за него. ## Лесни задачи ### Задача 5 -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise5.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise5.cpp} -Имплементирайте структура [`Car`], всяка кола пази скрито своя модел като низ с произволна дължина, брой врати и брой седалки като целочислени числа. +Имплементирайте структура {` Car}, всяка кола пази скрито своя модел като низ с произволна дължина, брой врати и брой седалки като целочислени числа. Направете съответните get-ъри, set-ъри, конструктор и деструктор. -Имплементирайте структура [`TrafficJam`], която пази произволно дълга редица коли в задръстване. -Направете и член-функция [`AddCar`], която вмъква кола в края на редицата. +Имплементирайте структура {` TrafficJam}, която пази произволно дълга редица коли в задръстване. +Направете и член-функция {` AddCar}, която вмъква кола в края на редицата. Тази функция може да се извиква произволен брой пъти, затова имплементирайте и оразмеряване на вътрешната редица. -[`TrafficJam`] трябва да има конструктор, деструктор и тази член-функция. +{` TrafficJam} трябва да има конструктор, деструктор и тази член-функция. ### Задача 6 -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise6.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise6.cpp} Ще работите с N-мерна шахматна дъска. -Направете структура [`ChessPiece`], която запазва цвета и типа на фигурата от шах, като първото е целочислена стойност, второто е буква. +Направете структура {` ChessPiece}, която запазва цвета и типа на фигурата от шах, като първото е целочислена стойност, второто е буква. -Направете структура [`ChessBoard`], която по подадено N в конструктора създава шахматна дъска с размер NxN с [=указатели=] към съответните фигури на дъската. +Направете структура {` ChessBoard}, която по подадено N в конструктора създава шахматна дъска с размер NxN с {b указатели} към съответните фигури на дъската. Разбира се, някои от тези указатели трябва да сочат към някакви създадени шахматни фигури. При създаване на дъската, трябва да подредите фигурите. На най-долните два реда присъстват белите фигури, на най-горните два - черните. За дъска 8х8, фигурите са подредени както нормално: -[image https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/The_chess_board_from_Chess.jpg/1024px-The_chess_board_from_Chess.jpg?20210610045654] +{img https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/The_chess_board_from_Chess.jpg/1024px-The_chess_board_from_Chess.jpg?20210610045654} При по-големи дъски започвате да повтаряте редиците, докато при по-малките ги режете, от дясната страна. Тоест в дъска 10x10 първите 8 колони изглеждат като на картинката, на 9та колона (отгоре-надолу) имате черен топ, черна пешка, 6 празни места, бяла пешка, бял топ и на последната колона са черен кон, черна пешка, 6 празни места, бяла пешка, бял кон. @@ -98,22 +101,22 @@ GitHub classroom: [url https://classroom.github.com/a/KPMqXsFp classroom.github. ### Задача 7 -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise7.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise7.cpp} Имате затворени интервали от целочислени числа. Разглеждаме смесване на интервали: .bulleted -- смеската на допиращи се интервали е тяхното слепване, тоест смеската на [`[0, 3]`] и [`[3, 5]`] е [`[0, 5]`] -- смеската на препокриващи се интервали е тяхното обединение, тоест смеската на [`[0, 5]`] и [`[3, 8]`] е [`[0, 8]`] +- смеската на допиращи се интервали е тяхното слепване, тоест смеската на {` [0, 3]} и {` [3, 5]} е {` [0, 5]} +- смеската на препокриващи се интервали е тяхното обединение, тоест смеската на {` [0, 5]} и {` [3, 8]} е {` [0, 8]} -В противен случай не можем да смесим интервалите (примерно не можем да смесим [`[0, 3]`] и [`[4, 8]`]). +В противен случай не можем да смесим интервалите (примерно не можем да смесим {` [0, 3]} и {` [4, 8]}). Започвайки от някакво множество с интервали, смесете колкото се може повече от тях и изкарайте всичките резултатни интервали, които не могат повече да се смесят. Използвайте структури и член-функции. ### Задача 8 -.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise8.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week03/Exercise8.cpp} "Моделирайте" (тоест сами се сетете за типовете данни и нужните структури) един град със следните харакетристики. @@ -125,7 +128,7 @@ GitHub classroom: [url https://classroom.github.com/a/KPMqXsFp classroom.github. Градът трябва да пази всички отделни сгради, като допълнително за всяка жилищна трябва да съхранява общата бройка жители, a за всяка търговска - общата бройка отворени магазини. Освен това трябва да се съхрани и нещо като карта на всичките сгради: допускаме Старозагоско/Манхатънско подреждане на сградите, тоест всички сгради се намират върху някаква "решетка". -.question Познавате ли структурата [`Pair`]? +.question Познавате ли структурата {` Pair}? Имплементирайте възможност за построяване и събаряне на сгради. Направете нужните проверки на всички данни: цената да не е отрицателна, бройката жители да не надвишава капацитета на сградата и так. нат. @@ -153,25 +156,25 @@ GitHub classroom: [url https://classroom.github.com/a/KPMqXsFp classroom.github. Винаги започваме с една празна начална директория. Двете функции, за създаване и изтриване, трябва да приемат масив от низове, който определя път от директории към желания файл, започвайки от началния файл. -Тоест, ако бяха подадени низовете [`Documents`], [`Personal`], [`Health`], [`receipt.txt`], тогава от началния файл намираме името [`Documents`] и "влизаме" в директорията със съответния идентификационен номер, в нея намираме името [`Personal`] и так. нат. +Тоест, ако бяха подадени низовете {` Documents}, {` Personal}, {` Health}, {` receipt.txt}, тогава от началния файл намираме името {` Documents} и "влизаме" в директорията със съответния идентификационен номер, в нея намираме името {` Personal} и так. нат. ### Задача 10 -Намираме се в равнината, при която всички (двуизмерни) координати са [=целочислени=]. +Намираме се в равнината, при която всички (двуизмерни) координати са {b целочислени}. В нея имаме стъклени панели (прави отсечки), дефинирани с координатите на двете им крайни точки. Допълнително всеки панел си има свой цвят (като проценти, между 0 и 1, от цветовете червено, зелено и синьо) и прозрачност (като процент, между 0 и 1). Също имаме и един лъч, той се характеризира с началния си координат и единичен двуизмерен вектор, определящ неговата посока на движение. -Този лъч не се пречупва и винаги се движи напред (преместването на лъча се извършва чрез [`позиция = позиция + посока`]). +Този лъч не се пречупва и винаги се движи напред (преместването на лъча се извършва чрез {` позиция = позиция + посока}). Чрез този лъч трябва да изкарате композитния цвят, след като лъча е минал през всички стъклени панели пред него. Нека също композитния цвят винаги да има 100% прозрачност. -Примерно, ако лъча премине през един панел с цветови проценти [`0,1,0`] и прозрачност [`0.5`] и още един панел с цветови проценти [`0,1,1`] и прозрачност [`0.5`], тогава композитния цвят е [`0,1,0.5`]. +Примерно, ако лъча премине през един панел с цветови проценти {` 0,1,0} и прозрачност {` 0.5} и още един панел с цветови проценти {` 0,1,1} и прозрачност {` 0.5}, тогава композитния цвят е {` 0,1,0.5}. .question Колко структури ще ви трябват? ## Признания -Изображението на шахматната дъска от chess.com, направено от Hfjhjoiijklij4 за [url https://commons.wikimedia.org/w/index.php?curid=106440749 Уикипедия] под лиценз CC BY-SA 4.0 +Изображението на шахматната дъска от chess.com, направено от Hfjhjoiijklij4 за {url Уикипедия;https://commons.wikimedia.org/w/index.php?curid=106440749} под лиценз CC BY-SA 4.0 |