Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / week02 / index.du
diff options
context:
space:
mode:
1 files changed, 208 insertions, 0 deletions
-rw-r--r--src/teaching/oop-2025/week02/index.du208
diff --git a/src/teaching/oop-2025/week02/index.du b/src/teaching/oop-2025/week02/index.du
new file mode 100644
index 0000000..b1b4196
--- /dev/null
+++ b/src/teaching/oop-2025/week02/index.du
@@ -0,0 +1,208 @@
+# Задачи - ООП, Седмица 2, 25.02.2026
+
+'define expected-reading 7 min
+'define created 24 February 2026
+'define edited 25 February 2026
+[$pagenav]
+
+## За решаване
+
+### Задача 1
+
+Реализирайте структура [`Date`], която съдържа целочислени, неотрицателни полета за ден, месец и година.
+
+Реализирайте функция [`printDate`], която приема обект от тип [`Date`] и изкарва датата във формат "<ДЕН>/<МЕСЕЦ>/<ГОДИНА>", където "<МЕСЕЦ>" е краткото име на месеца (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec).
+
+Реализирайте функция [`readDate`], която приема от входа три целочислени числа (ден, месец, година), създава обект от тип [`Date`] и връща неговата стойност.
+
+Използвайки [`printDate`] и [`readDate`], прочетете от входа 3 дати и изкарайте всяка от тях.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 1 1 2000 30 8 3105 13 6 1909
+|: 1/Jan/2000 30/Aug/3105 13/Jun/1909
+
+
+### Задача 2
+
+Реализирайте структура [`Temperature`], която съхранява температура по Целзии, Келвин и Фаренхайт (числа с плаваща запетая).
+
+Реализирайте член-функции [`fromCelsius`], [`fromKelvin`] и [`fromFahrenheit`], където всяка обновява трите температури спрямо подадената температура.
+Припомняме, че [`°F = (°C * 1.8) + 32`] и [`°K = °C + 273.15`].
+
+Реализирайте член-функция [`Sum`], която приема втори обект от тип [`Temperature`] и връща обект от тип [`Temperature`], който е сумата на температурите на текущия и подадения обект.
+
+От входа получавате число с плаваща запетая (температура) и след това буква, обозначаваща типа на температурата - [`K`], [`C`] или [`F`].
+След това получавате втора такава двойка стойности.
+Изкарайте сумата на двете температури в всички температурни формати.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 20 C 30 F
+|: 18.8889 C 66 F 292.04 K
+
+|: 140 F 140 K
+|: −73.15 C -99.67 F 200 K
+
+
+### Задача 3
+
+Реализирайте структура [`IntArray`], която съдържа целочислен неотрицателен размер на масив и указател към динамично-заделен масив от цели числа.
+
+Реализирайте:
+.bulleted
+- функция [`newIntArray`], която инициализира обект от типа [`IntArray`] по подаден размер.
+- член-функция [`deleteSelf`], която освобождава паметта на масива и занулява размера.
+- функция [`deleteIntArray`], която използва [`deleteSelf`], за да "деинициализира" обекта.
+- член-функция [`sum`], която връща сумата на всички елементи в масива.
+
+От входа получавате размер на масив от цели числа и след това толкова на брой цели числа.
+Изкарайте средното аритметично на елементите в масива.
+
+Възползвайте се максимално от реализираните функции!
+
+:table_2
+|= Вход
+|= Изход
+
+|: 5 2 1 3 5 4
+|: 3
+
+|: 6 10 -2 7 0 0 1
+|: 4
+
+|: 8 1 1 1 1 10 10 10 10
+|: 2.8
+
+
+### Задача 4
+
+Реализирайте структура [`Product`], която съдържа целочислено неотрицателно ID, низово име и целочислена неотрицателна бройка стока.
+
+От входа получавате бройка продукти.
+След това, за всеки продукт, ще получите ID и (едноредово) име.
+След това, за всеки продукт, ще получите ID и бройка (реда на въвеждане на имената на продукти и на бройката може да се различават).
+
+Накрая трябва да изкарате, за всеки продукт, неговото име и бройка.
+
+[=Смесен вход/изход:=] [*(удебеления текст е изкаран от програмата, останалото е въведено от потребителя)*]
+```
+4
+92 Apple
+20 Whole Wheat Bread
+ 1 Apricot
+77 Natural Honey
+ 1 30
+92 49
+77 10
+20 34
+[=Apple: 49=]
+[=Whole Wheat Bread: 34=]
+[=Apricot: 30=]
+[=Natural Honey: 10=]
+
+
+### Задача 5
+
+Реализирайте структура [`Package`] (пакет), която съдържа 10-буквен идентификационен код и число с плаваща запетая - тежест.
+Реализирайте функция, която по подаден идентификационен код и тежест, връща обект от типа [`Package`].
+
+Реализирайте структура [`Warehouse`] (склад), която има еднобуквен идентификатор, динамично-заделен масив с [`Package`] обекти, бройка съхранени пакети и капацитет.
+
+Реализирайте член-функция [`storePackage`], която запазва подадения пакет в текущия склад, ако има място.
+Нека функцията да връща [`bool`]: [`true`] ако пакета е успешно съхранен, [`false`] иначе.
+
+От входа получавате бройка складове и след това, за всеки склад, неговото еднобуквено име и капацитет.
+След това получавате бройка пакети и за всеки пакет, неговия идентификационен код, тежест и склад в който трябва да се добави.
+
+Накрая изкарайте, за всеки склад, неговия еднобуквен идентификатор, колко пакети са съхранени (от максималния капацитет) и след това идентификационните кодове на всички съхранени пакети.
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+3
+U 38
+X 5
+F 20
+5
+AA849201UK 10 X
+AB443020RO 2.5 U
+KLI18M8401 17 X
+PI1773MALI 100 U
+8501837103 1 U
+
+|:
+```
+U 3/38
+AB443020RO
+PI1773MALI
+8501837103
+X 2/5
+AA849201UK
+KLI18M8401
+F 0/20
+
+
+## За самоподготовка
+
+### Задача 6
+
+Реализирайте структура [`Time`], която съхранява целочислени неотрицателни час, минути и секунди.
+
+Реализирайте функция, която по подаден брой милисекунди от 00:00:00 часа създава обект от тип [`Time`], който съхранява съответното време.
+Припомняме, че 1000 милисекунди са равни на 1 секунда.
+Закръгляйте времето надолу (тоест 999 милисекунди да съответстват на 00:00:00 часа, 1000 милисекунди на 00:00:01).
+
+Реализирайте член-функция [`Advance`] на [`Time`], която приема обект от тип [`Time`] и добавя към текущия обект времето от подадения обект.
+
+### Задача 7
+
+Реализирайте структура [`IntMatrix`], която съдържа указател към динамично-заделена матрица от числа с плаваща запетая и нейните размери.
+
+Реализирайте член-функция [`Multiply`], която приема (друга) [`IntMatrix`], прави умоножение на двете матрици (ред по стълб) и връща резултатната матрица.
+Ако това умножение не е възможно, да върне занулена матрица (нулеви размери, нулев указател).
+
+### Задача 8
+
+Реализирайте структура [`BankAccount`], която съдържа целочислен неотрицателен идентификационен код (ID) и число с плаваща запетая - баланс на сметката.
+
+Към структурата реализирайте член-функции [`Withdraw`] и [`Deposit`], които съответно позволяват потребител да изтегли и депозира количество пари към сметката си.
+Имплементирайте нужните проверки (не се изтегля повече отколкото е налично, не се депозира отрицателно количество сума, так. нат.).
+
+От входа получавате буква, спрямо която трябва да се извърши някакво действие:
+.bulleted
+- [`c`] - създава акаунт с някакво ID (програмата го избира) и нулев баланс.
+ Изкарва се на екрана ID-то на акаунта.
+- [`w`] - изтегляне на сума от банкова сметка.
+ Трябва допълнително да се въведат ID и сума за теглене.
+ При грешни стойности, да се изкара съобщение за грешка и да не се продължи с действието.
+- [`d`] - депозиране на сума в банкова сметка.
+ Трябва допълнително да се въведат ID и сума за теглене.
+ При грешни стойности, да се изкара съобщение за грешка и да не се продължи с действието.
+
+[=Смесен вход/изход:=] [*(удебеления текст е изкаран от програмата, останалото е въведено от потребителя)*]
+```
+c
+[=100=]
+d
+100 500
+c
+[=101=]
+d
+100 13.5
+w
+101 0.2
+[=Error: withdraw amount is larger than account balance=]
+w
+101 -0.2
+[=Error: cannot withdraw a negative amount=]
+d
+100 -2
+[=Error: cannot deposit a negative amount=]