Задачи - ООП, Седмица 5, 18.03.2026
За решаване
Задача 1
Реализирайте клас NumSeries, който съхранява динамично-заделен масив от числа с плаваща запетая, техния размер и индекса на последния елемент.
Класа трябва да има публични методи, достъпни и за константни обекти:
Push, който слага подадения елемент на последната позиция. Това е единствения начин да се добавят елементи. Ако цялата заделена памет е запълнена, масива да се уголеми.At, който по подаден индекс връща елемент. Да има проверка дали индекса е валиден (дали елемент на този индекс е билPush-нат). При невалиден индекс върнете NaN.Length, който връща брояPush-нати елементи
Задача 2
Реализирайте клас String, който съхранява динамично-заделен низ.
Допълнително, реализирайте конструктор, приемащ const char* и публичи методи, достъпни за константни обекти (когато смислено):
Substring, който връща нов низ, който е под-низ на текущия. Като аргументи приема начален индекс и дължина.Concat, който приема низ и го "слепва" в края на текущия низ.
Реализирайте клас Text, който съхранява динамично-заделена последователност от редове текст (String-ове).
Реализирайте публични методи, достъпни за константни обекти (когато смислено):
LineCount, който връща броя редове в текстаWordCount, който връща броя думи в текста. Дума за нашите цели е всяка последователност от букви, която не съдържа шпация.SubText, който по подадени начален и краен ред, и начална и крайна колона, връщаText, съдържащ само тези (части от) низове
Задача 3
Реализирайте клас Person, който съхранява трите имена, телефонен номер, имейл, година на раждане и ЕГН (personal number) на човек.
Препоръчително е да използвате String клас, подобен на този от предходната задача (но имплементиран от Вас).
Реализирайте конструктор, който приема тези данни.
Реализирайте клас TaxReport, който съхранява ЕГН, година, сума приходи и процент данък от приходите.
Реализирайте конструктор, който приема тези данни.
Реализирайте клас TaxDatabase, който съхранява динамичо-заделени количества от Person и TaxReport обекти.
Реализирайте публични методи, достъпни за константни обекти (когато смислено):
RegisterPerson, който добавя човек. Нека да връщаbool, дали успешно е добавен човек. ЕГН-тата, имейлите и телефонните номера трябва да са различни между всички потребители. Количеството хора е неограничено, вътрешната памет трябва да се реоразмерява.LogTagReport, който добавя данъчна декларация. Нека да връщаbool, дали е успешно добавена. Всяка декларация се различава по комбинацията от ЕГН и година. Количеството декларации е неограничено, вътрешната памет трябва да се реоразмерява.PersonalReports, който по подадено ЕГН изкарва на екрана всички данни за човека и всички данни за всички негови данъчни декларацииYearlyReports, който по подадена година изкарва на екрана всички данъчни декларации през подадената година. За всяка декларация изкарайте вместо ЕГН, първото име, фамилия и възраст на съответния човек.YearlyAvgIncome, който по подадена година връща средния приход на всички потребителиYearlyTaxedIncome, който по подадена година връща общия приход от данъци на всички потребителиGetReport, който по подадено ЕГН и година връща съответната декларацияGetReportByAge, който по подадено ЕГН и възраст връща съответната декларацияGetReports, който по подадено ЕГН, начална година и крайна година връща последователност от данъчни декларации. Ще е нужно да имплементирате помощен клас.GetReportsByAge, който по подадено ЕГН, начална възраст и крайна възраст връща последователност от данъчни декларации
Задача 4
Реализирайте клас User, който съхранява ЕГН, имейл и парола на потребител.
Реализирайте конструктор с всички тези параметри.
Реализирайте клас BankAccount, който съхранява AccountId и последователност от транзакции.
Всяка транзакция съдържа промяна по баланса (положително число за вложена сума и отрицателна за изтеглена) и дата (ден, месец, година, час, минути, секунди).
Реализирайте нужните помощни класове/структури.
Реализирайте публични методи, достъпни за константни обекти (когато смислено):
Balance, който връща текущия баланс в акаунтаBalance, който по подадена дата и час връща баланса към този момент от времетоAddTransaction, който добавя транзакция към акаунта
Реализирайте структура UserBankAccount, която съхранява ЕГН и AccountId.
Реализирайте клас BankingSystem, който съхранява последователности от User-и, BankAccount-и и UserBankAccount-и.
UserBankAccount-ите свързват User-ите и BankAccount-ите.
Реализирайте публични методи, достъпни за константни обекти (когато смислено):
RegisterBankAccount, който по подадени данни добавя потребител и неговияBankAccount(сметка). Ако се подаде нов потребител, неговите данни да се запазят. Ако потребителя вече е записан, единствено да се запише новияBankAccount(и връзката му с потребителя; един потребител може да има много сметки).RegisterTransaction, която по подадено ЕГН,AccountId, сума и време запазва съответната транзакция в акаунта на потребителяTotalBalance, която по подадено ЕГН връща общия баланс на всички сметки на потребителяNegativeBalances, която по подадено ЕГН и време връща броя сметки, които са имали отрицателен общ баланс към подаденото времеCanBeDeleted, която по подадено ЕГН връща последователност отAccountId-та на сметки, които имат баланс 0 (и следователно могат да бъдат изтрити). Ще е нужно да имплементирате помощен клас.SuspiciousAccounts, която връща всички имейли иAccountId-та на сметки, които изглеждат съмнителни. Съмнителни са тези сметки, чиито най-скорошни 20 транзакции са се случили за по-малко от минута. Може да е нужно да разширите имплементацията на някой клас.Debtors, която връща първо име, фамилия и имейл на всички на всички потребители, чиито сметки имат отрицателен баланс. Ще е нужно да имплементирате помощен клас.
За всеки клас имплементирайте голяма петица! Това включва "move" семантики!