Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
1 files changed, 69 insertions, 16 deletions
-rw-r--r--src/teaching/oop-2023/week3/index.md85
diff --git a/src/teaching/oop-2023/week3/index.md b/src/teaching/oop-2023/week3/index.md
index 9b7a3e6..9e947c8 100644
--- a/src/teaching/oop-2023/week3/index.md
+++ b/src/teaching/oop-2023/week3/index.md
@@ -6,21 +6,21 @@
### Задача 1 - Структури
-Имплементирайте структура `LightBulb`, която запазва идентифициращите данни за една крушка:
+Имплементирайте структура `Lightbulb`, която запазва идентифициращите данни за една крушка:
-- диаметър и дължина, и двете целочислени стойности
-- тип, низ с максимална дължина от 100 знака
-- серия, главна буква на латиница
+- диаметър и дължина: и двете са целочислени стойности
+- тип: низ с максимална дължина от 100 знака
+- серия: буква на латиница
### Задача 2 - Капсулация
-Имплементирайте структура `Alarm`, която съдържа скрити следните данни:
+Имплементирайте структура `Alarm`, която съдържа следните **скрити** данни:
-- име на модел, низ с максимална дължина от 1024 знака
-- пин код, целочислено число
-- ревизия на модела, число с плаваща запетая
+- име на модел: низ с максимална дължина от 1024 знака
+- пин код: целочислено число
+- ревизия на модела: число с плаваща запетая
-За всяка данна трябва да създадете съответните get-ъри и set-ъри, публични член-функции които съответно връщат и записват всяка от изброените скрити стойности.
+За всяка данна трябва да създадете съответните get-ъри и set-ъри: публични член-функции, които съответно връщат и записват всяка от изброените скрити стойности.
При set-ърите имплементирайте следните проверки:
@@ -28,28 +28,81 @@
- пин кода трябва да бъде 4 цифри (нули са позволени)
- ревизията трябва да бъде положително число
+Ако дадена проверка не е изпълнена, не записвате новата стойност (и оставяте старата).
+
### Задача 3 - Капсулация с динамична памет
Имплементирайте структура `Person`, която запазва двете имена на човек, възраст като целочислено число и неговия имейл.
-Имената и имейла могат да имат произволна дължина.
+Имената и имейла са низвое с произволна дължина.
-Направете конструктор, който приема възрастта и тези три низа, и копира стойностите им в динамичната памет.
+Направете конструктор, който приема възрастта и тези три низа, и **копира** стойностите им в динамичната памет.
Също напишете и деструктор, който коректно трие нужните данни.
### Задача 4 - Динамично-заделени структури в други структури
-Имплементирайте структура `Bus`, която запазва публично капацитета хора и километража на един автобус.
+Имплементирайте структура `Bus`, която публично запазва капацитета хора и километража на един автобус.
Имплементирайте структура `BusWarehouse`, която запазва динамично-заделен масив от автобуси.
-Имплементирайте конструктор, който само инициализира нужните данни, и деструктор който трие каквото трябва.
+В конструктора се въвежда максималния брой автобуси, който може един `BusWarehouse` да съдържа.
-Имплементирайте член-функция `AddBus`, която добавя автобус в инстанция на `BusWarehouse`.
-Може да добавят произволен брой автобуси, тоест вътрешния динамичен масив трябва да променя размера си.
+Имплементирайте конструктор, който само инициализира нужните данни, и деструктор който трие каквото трябва.
+Имплементирайте член-функция `AddBus`, която добавя автобус в инстанция на `BusWarehouse`, ако има място за него.
## Лесни задачи
-*Ще бъдат попълнени в бъдеще*
+### Задача 5
+
+Имплементирайте структура `Car`, всяка кола пази скрито своя модел като низ с произволна дължина, брой врати и брой седалки като целочислени числа.
+Направете съответните get-ъри, set-ъри, конструктор и деструктор.
+
+Имплементирайте структура `TrafficJam`, която пази произволно дълга редица коли в задръстване.
+Направете и член-функция `AddCar`, която вмъква кола в края на редицата.
+Тази функция може да се извиква произволен брой пъти, затова имплементирайте и оразмеряване на вътрешната редица.
+
+`TrafficJam` трябва да има конструктор, деструктор и тази член-функция.
+
+### Задача 6
+
+Ще работите с N-мерна шахматна дъска.
+
+Направете структура `ChessPiece`, която запазва цвета и типа на фигурата от шах, като първото е целочислена стойност, второто е буква.
+
+Направете структура `ChessBoard`, която по подадено N в конструктора създава шахматна дъска с размер NxN с **указатели** към съответните фигури на дъската.
+Разбира се, някои от тези указатели трябва да сочат към някакви създадени шахматни фигури.
+
+При създаване на дъската, трябва да подредите фигурите.
+На най-долните два реда присъстват белите фигури, на най-горните два - черните.
+За дъска 8х8, фигурите са подредени както нормално:
+
+![](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 празни места, бяла пешка, бял кон.
+
+Ако N не е поне 5, програмата ви трябва да хвърли грешка.
+Не забравяйте да напишете и деструктор.
+
+## Задача 7
+
+"Моделирайте" (тоест сами се сетете за типовете данни и нужните структури) един град със следните харакетристики.
+
+В града имате два типа сгради: жилищни и търговски.
+
+- Жилищните се харакетиризират с цена на апратамент, бройката етажи, количеството хора, които се побират на един етаж (една стойност за всички етажи) и дали имат мазе, паркомясто и/или таван.
+- Търговските се характеризират с цена на магазин, бройка етажи с паркинг, бройка етажи с магазини и максимално количество магазини, които се побират на един етаж (една стойност за всички етажи).
+
+Градът трябва да пази всички отделни сгради, като допълнително за всяка жилищна трябва да съхранява общата бройка жители, a за всяка търговска - общата бройка отворени магазини.
+Освен това трябва да се съхрани и нещо като карта на всичките сгради: допускаме Старозагоско/Манхатънско подреждане на сградите, тоест всички сгради се намират върху някаква "решетка".
+
+&:question Познавате ли структурата `Pair`?
+
+Имплементирайте възможност за построяване и събаряне на сгради.
+Направете нужните проверки на всички данни: цената да не е отрицателна, бройката жители да не надвишава капацитета на сградата и так. нат.
## Трудни задачи
*Ще бъдат попълнени в бъдеще*
+
+## Признания
+
+Изображението на шахматната дъска от chess.com, направено от Hfjhjoiijklij4 за [Уикипедия](https://commons.wikimedia.org/w/index.php?curid=106440749) под лиценз CC BY-SA 4.0