From 3bb126f0ea52bf6c42ff6d569a83cf81ca5b4af0 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Mon, 4 Mar 2024 15:29:57 +0200 Subject: [te/oop-2023/w3] Updated wording on revision exercises and added easy exercises --- src/teaching/oop-2023/week3/index.md | 85 +++++++++++++++++++++++++++++------- 1 file changed, 69 insertions(+), 16 deletions(-) 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 -- cgit v1.3.1-23-gd82d