# Задачи - ООП, Седмица 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=]