Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2023 / week3 / index.du
diff options
context:
space:
mode:
1 files changed, 37 insertions, 34 deletions
-rw-r--r--src/teaching/oop-2023/week3/index.du71
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