Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / week02 / index.du
diff options
context:
space:
mode:
1 files changed, 66 insertions, 58 deletions
-rw-r--r--src/teaching/oop-2025/week02/index.du124
diff --git a/src/teaching/oop-2025/week02/index.du b/src/teaching/oop-2025/week02/index.du
index f33a2fc..5b4d35f 100644
--- a/src/teaching/oop-2025/week02/index.du
+++ b/src/teaching/oop-2025/week02/index.du
@@ -1,25 +1,26 @@
-# Задачи - ООП, Седмица 2, 25.02.2026
+'def title Задачи - ООП, Седмица 2, 25.02.2026
+'def desc Условията на задачите за упражнение.
-'define expected-reading 7 min
-'define created 24 February 2026
-'define edited 28 February 2026
-[$pagenav]
+# {title}
+
+{pagenav 7 min;24 February 2026;28 February 2026}
## За решаване
### Задача 1
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise01 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise01}
-Реализирайте структура [`Date`], която съдържа целочислени, неотрицателни полета за ден, месец и година.
+Реализирайте структура {` Date}, която съдържа целочислени, неотрицателни полета за ден, месец и година.
-Реализирайте функция [`printDate`], която приема обект от тип [`Date`] и изкарва датата във формат "<ДЕН>/<МЕСЕЦ>/<ГОДИНА>", където "<МЕСЕЦ>" е краткото име на месеца (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec).
+Реализирайте функция {` printDate}, която приема обект от тип {` Date} и изкарва датата във формат "<ДЕН>/<МЕСЕЦ>/<ГОДИНА>", където "<МЕСЕЦ>" е краткото име на месеца (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec).
-Реализирайте функция [`readDate`], която приема от входа три целочислени числа (ден, месец, година), създава обект от тип [`Date`] и връща неговата стойност.
+Реализирайте функция {` readDate}, която приема от входа три целочислени числа (ден, месец, година), създава обект от тип {` Date} и връща неговата стойност.
-Използвайки [`printDate`] и [`readDate`], прочетете от входа 3 дати и изкарайте всяка от тях.
+Използвайки {` printDate} и {` readDate}, прочетете от входа 3 дати и изкарайте всяка от тях.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -27,22 +28,24 @@
|: 1/Jan/2000 30/Aug/3105 13/Jun/1909
+
### Задача 2
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise02 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise02}
-Реализирайте структура [`Temperature`], която съхранява температура по Целзии, Келвин и Фаренхайт (числа с плаваща запетая).
+Реализирайте структура {` Temperature}, която съхранява температура по Целзии, Келвин и Фаренхайт (числа с плаваща запетая).
-Реализирайте член-функции [`fromCelsius`], [`fromKelvin`] и [`fromFahrenheit`], където всяка обновява трите температури спрямо подадената температура.
-Припомняме, че [`°F = (°C * 1.8) + 32`] и [`°K = °C + 273.15`].
+Реализирайте член-функции {` fromCelsius}, {` fromKelvin} и {` fromFahrenheit}, където всяка обновява трите температури спрямо подадената температура.
+Припомняме, че {` °F = (°C * 1.8) + 32} и {` °K = °C + 273.15}.
-Реализирайте член-функция [`Sum`], която приема втори обект от тип [`Temperature`] и връща обект от тип [`Temperature`], който е сумата на температурите по целзии (и съответната стойност във Фаренхайт и Келвин) на текущия и подадения обект.
+Реализирайте член-функция {` Sum}, която приема втори обект от тип {` Temperature} и връща обект от тип {` Temperature}, който е сумата на температурите по целзии (и съответната стойност във Фаренхайт и Келвин) на текущия и подадения обект.
-От входа получавате число с плаваща запетая (температура) и след това буква, обозначаваща типа на температурата - [`K`], [`C`] или [`F`].
+От входа получавате число с плаваща запетая (температура) и след това буква, обозначаваща типа на температурата - {` K}, {` C} или {` F}.
След това получавате втора такава двойка стойности.
-Изкарайте сумата на двете температури (чрез [`Sum`]) във всички температурни формати.
+Изкарайте сумата на двете температури (чрез {` Sum}) във всички температурни формати.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -53,27 +56,29 @@
|: −73.15 C -99.67 F 200 K
+
### Задача 3
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise03 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise03}
-Реализирайте структура [`IntArray`], която съдържа целочислен неотрицателен размер на масив и указател към динамично-заделен масив от цели числа.
+Реализирайте структура {` IntArray}, която съдържа целочислен неотрицателен размер на масив и указател към динамично-заделен масив от цели числа.
Реализирайте:
.bulleted
-- функция [`newIntArray`], която инициализира обект от типа [`IntArray`] по подаден размер.
-- член-функция [`deleteSelf`], която освобождава паметта на масива и занулява размера.
-- функция [`deleteIntArray`], която използва [`deleteSelf`], за да "деинициализира" обекта.
-- член-функция [`sum`], която връща сумата на всички елементи в масива.
+- функция {` newIntArray}, която инициализира обект от типа {` IntArray} по подаден размер.
+- член-функция {` deleteSelf}, която освобождава паметта на масива и занулява размера.
+- функция {` deleteIntArray}, която използва {` deleteSelf}, за да "деинициализира" обекта.
+- член-функция {` sum}, която връща сумата на всички елементи в масива.
От входа получавате размер на масив от цели числа и след това толкова на брой цели числа.
Изкарайте средното аритметично на елементите в масива.
Възползвайте се максимално от реализираните функции!
-.important [*(28.02.2026)*] Оправени примери
+.important {i (28.02.2026)} Оправени примери
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -87,11 +92,12 @@
|: 5.5
+
### Задача 4
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise04 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise04}
-Реализирайте структура [`Product`], която съдържа целочислено неотрицателно ID, низово име и целочислена неотрицателна бройка стока.
+Реализирайте структура {` Product}, която съдържа целочислено неотрицателно ID, низово име и целочислена неотрицателна бройка стока.
От входа получавате бройка продукти.
След това, за всеки продукт, ще получите ID и (едноредово) име.
@@ -99,7 +105,7 @@
Накрая трябва да изкарате, за всеки продукт, неговото име и бройка.
-[=Смесен вход/изход:=] [*(удебеления текст е изкаран от програмата, останалото е въведено от потребителя)*]
+{b Смесен вход/изход:} {i (удебеления текст е изкаран от програмата, останалото е въведено от потребителя)}
```
4
92 Apple
@@ -110,30 +116,31 @@
92 49
77 10
20 34
-[=Apple: 49=]
-[=Whole Wheat Bread: 34=]
-[=Apricot: 30=]
-[=Natural Honey: 10=]
+{b Apple: 49}
+{b Whole Wheat Bread: 34}
+{b Apricot: 30}
+{b Natural Honey: 10}
### Задача 5
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise05 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise05}
-Реализирайте структура [`Package`] (пакет), която съдържа 10-буквен идентификационен код и число с плаваща запетая - тежест.
-Реализирайте функция, която по подаден идентификационен код и тежест от стандартния вход, връща обект от типа [`Package`].
+Реализирайте структура {` Package} (пакет), която съдържа 10-буквен идентификационен код и число с плаваща запетая - тежест.
+Реализирайте функция, която по подаден идентификационен код и тежест от стандартния вход, връща обект от типа {` Package}.
-Реализирайте структура [`Warehouse`] (склад), която има еднобуквен идентификатор, динамично-заделен масив с [`Package`] обекти, бройка съхранени пакети и капацитет.
+Реализирайте структура {` Warehouse} (склад), която има еднобуквен идентификатор, динамично-заделен масив с {` Package} обекти, бройка съхранени пакети и капацитет.
-Реализирайте член-функция [`storePackage`], която запазва подадения пакет в текущия склад, ако има място.
-Нека функцията да връща [`bool`]: [`true`] ако пакета е успешно съхранен, [`false`] иначе.
+Реализирайте член-функция {` storePackage}, която запазва подадения пакет в текущия склад, ако има място.
+Нека функцията да връща {` bool}: {` true} ако пакета е успешно съхранен, {` false} иначе.
От входа получавате бройка складове и след това, за всеки склад, неговото еднобуквено име и капацитет.
След това получавате бройка пакети и за всеки пакет, неговия идентификационен код, тежест и склад в който трябва да се добави.
Накрая изкарайте, за всеки склад, неговия еднобуквен идентификатор, колко пакети са съхранени (от максималния капацитет) и след това идентификационните кодове на всички съхранени пакети.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -162,61 +169,62 @@ KLI18M8401
F 0/20
+
## За самоподготовка
### Задача 6
-.solution-link [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise06 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02/Exercise06}
-Реализирайте структура [`Time`], която съхранява целочислени неотрицателни час, минути и секунди.
+Реализирайте структура {` Time}, която съхранява целочислени неотрицателни час, минути и секунди.
-Реализирайте функция, която по подаден брой милисекунди от 00:00:00 часа създава обект от тип [`Time`], който съхранява съответното време.
+Реализирайте функция, която по подаден брой милисекунди от 00:00:00 часа създава обект от тип {` Time}, който съхранява съответното време.
Припомняме, че 1000 милисекунди са равни на 1 секунда.
Закръгляйте времето надолу (тоест 999 милисекунди да съответстват на 00:00:00 часа, 1000 милисекунди на 00:00:01).
-Реализирайте член-функция [`Advance`] на [`Time`], която приема обект от тип [`Time`] и добавя към текущия обект времето от подадения обект.
+Реализирайте член-функция {` Advance} на {` Time}, която приема обект от тип {` Time} и добавя към текущия обект времето от подадения обект.
### Задача 7
-Реализирайте структура [`IntMatrix`], която съдържа указател към динамично-заделена матрица от числа с плаваща запетая и нейните размери.
+Реализирайте структура {` IntMatrix}, която съдържа указател към динамично-заделена матрица от числа с плаваща запетая и нейните размери.
-Реализирайте член-функция [`Multiply`], която приема (друга) [`IntMatrix`], прави умоножение на двете матрици (ред по стълб) и връща резултатната матрица.
+Реализирайте член-функция {` Multiply}, която приема (друга) {` IntMatrix}, прави умоножение на двете матрици (ред по стълб) и връща резултатната матрица.
Ако това умножение не е възможно, да върне занулена матрица (нулеви размери, нулев указател).
### Задача 8
-Реализирайте структура [`BankAccount`], която съдържа целочислен неотрицателен идентификационен код (ID) и число с плаваща запетая - баланс на сметката.
+Реализирайте структура {` BankAccount}, която съдържа целочислен неотрицателен идентификационен код (ID) и число с плаваща запетая - баланс на сметката.
-Към структурата реализирайте член-функции [`Withdraw`] и [`Deposit`], които съответно позволяват потребител да изтегли и депозира количество пари към сметката си.
+Към структурата реализирайте член-функции {` Withdraw} и {` Deposit}, които съответно позволяват потребител да изтегли и депозира количество пари към сметката си.
Имплементирайте нужните проверки (не се изтегля повече отколкото е налично, не се депозира отрицателно количество сума, так. нат.).
От входа получавате буква, спрямо която трябва да се извърши някакво действие:
.bulleted
-- [`c`] - създава акаунт с някакво ID (програмата го избира) и нулев баланс.
+- {` c} - създава акаунт с някакво ID (програмата го избира) и нулев баланс.
Изкарва се на екрана ID-то на акаунта.
-- [`w`] - изтегляне на сума от банкова сметка.
+- {` w} - изтегляне на сума от банкова сметка.
Трябва допълнително да се въведат ID и сума за теглене.
При грешни стойности, да се изкара съобщение за грешка и да не се продължи с действието.
-- [`d`] - депозиране на сума в банкова сметка.
+- {` d} - депозиране на сума в банкова сметка.
Трябва допълнително да се въведат ID и сума за теглене.
При грешни стойности, да се изкара съобщение за грешка и да не се продължи с действието.
-[=Смесен вход/изход:=] [*(удебеления текст е изкаран от програмата, останалото е въведено от потребителя)*]
+{b Смесен вход/изход:} {i (удебеления текст е изкаран от програмата, останалото е въведено от потребителя)}
```
c
-[=100=]
+{b 100}
d
100 500
c
-[=101=]
+{b 101}
d
100 13.5
w
101 0.2
-[=Error: withdraw amount is larger than account balance=]
+{b Error: withdraw amount is larger than account balance}
w
101 -0.2
-[=Error: cannot withdraw a negative amount=]
+{b Error: cannot withdraw a negative amount}
d
100 -2
-[=Error: cannot deposit a negative amount=]
+{b Error: cannot deposit a negative amount}