diff options
| Commit | 652a8b52fe492538ee9f5721c1d94cd401016230 (patch) | |
|---|---|---|
| Author | 2026-02-25 09:10:51 +0200 | |
| Committer | 2026-02-25 09:10:51 +0200 | |
| Files | a86abb0bde241eafea26938f80c6d07c12993da3 /src/teaching | |
| syndamia.com-652a8b52fe492538ee9f5721c1d94cd401016230.tar syndamia.com-652a8b52fe492538ee9f5721c1d94cd401016230.tar.gz syndamia.com-652a8b52fe492538ee9f5721c1d94cd401016230.zip | ||
| Parent | 2c1f436bce8401d14c7887825695b2e2684e9a88 (diff) | |
feat(teaching/oop-2025/w2): Add exercises
2 files changed, 217 insertions, 0 deletions
| -rw-r--r-- | src/teaching/oop-2025/index.du | 9 | ||||
| -rw-r--r-- | src/teaching/oop-2025/week02/index.du | 208 |
diff --git a/src/teaching/oop-2025/index.du b/src/teaching/oop-2025/index.du index 4a2e2b4..7f17acd 100644 --- a/src/teaching/oop-2025/index.du +++ b/src/teaching/oop-2025/index.du @@ -31,3 +31,12 @@ |: [url ./week01 Задачи] || [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week01 Решения] + +|: 2 +|: 25.02.2026 +|: Структури и член-функции + +|: +|: +|: +[url ./week02 Задачи] 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=] |