From 9c9592848610f6654feb8d1be28ec9660ddb7b77 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Wed, 20 May 2026 09:40:04 +0300 Subject: feat(teaching/oop-2025/w13): Add exercises --- src/teaching/oop-2025/index.du | 9 +++++ src/teaching/oop-2025/week13/index.du | 69 +++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 src/teaching/oop-2025/week13/index.du (limited to 'src') diff --git a/src/teaching/oop-2025/index.du b/src/teaching/oop-2025/index.du index 625a8bf..28790c8 100644 --- a/src/teaching/oop-2025/index.du +++ b/src/teaching/oop-2025/index.du @@ -143,3 +143,12 @@ |: |: [url ./week12 Задачи] + +|: 13 +|: 20.05.2026 +|: Виртуални функции, полиморфизъм, множествено наследяване + +|: +|: +|: +[url ./week13 Задачи] diff --git a/src/teaching/oop-2025/week13/index.du b/src/teaching/oop-2025/week13/index.du new file mode 100644 index 0000000..7a9d920 --- /dev/null +++ b/src/teaching/oop-2025/week13/index.du @@ -0,0 +1,69 @@ +# Задачи - ООП, Седмица 13, 20.05.2026 + +'define expected-reading 3 min +'define created 20 May 2026 +'define edited 20 May 2026 +[$pagenav] + +## За решаване + +### Задача 1 + +Реализирайте абстрактен клас [`Numeric`], който съдържа чисто виртуални функции: +.bulleted +- [`operator+`] +- унарен [`operator-`] + +И имплементира член-функциите: +.bulleted +- бинарен [`operator-`] +- [`operator+=`] +- [`operator-=`] + +Реализирайте негови наследници [`Integer`] и [`Float`], които съответно имплементират операции върху [`int`] и [`float`] стойности. + +### Задача 2 + +Реализирайте клас [`User`], който съхранява идентификационен номер и входен ПИН код. +Имплементирайте (виртуална) член-функция [`LogIn`], която връща дали подадения ѝ ПИН код съответства на запазения. + +Реализирайте наследник [`Citizen`], който разширява функцията [`LogIn`], така че винаги да отказва числа, които имат повече от 4 цифри. + +Реализирайте наследник (на [`User`]) [`Clerk`], който допълнително съхранява статичен код. +[`LogIn`] в този случай е успешен, когато [`((ВХОДЕН_ПИН + СЪХРАНЕН_ПИН) * СТАТИЧЕН_КОД) % 115249 = 347`]. +Пример за валидни стойности са 700 за съхранен пин, 3141 за входен пин и 47978 за статичен код. + +Реализирайте наследник (на [`User`]) [`System`], при който [`LogIn`] е валидно, когато подадения пин е точен квадрат на съхранения пин. + +От входа получавате неотрицателно цяло число [`N`] и след това данни за [`N`] на брой потребителя. +При всеки потребител се поисква буква, определяща неговия тип: [`c`] за [`Citizen`], [`l`] за [`Clerk`] и [`s`] за [`System`]. +Трябва да съхраните всички потребители в [=полиморфен=] масив с елементи от тип [`User*`]. + +След това от входа ще получавате идентификационен номер и пин код, и трябва да върнете дали подадените данни са валидни за влизане в акаунта. + +### Задача 3 + +Реализирайте клас [`String`], който съхранява динамично-задлен низ. +Освен голяма петица, имплементирайте виртуален мутатор и константен селектор към низа. + +Реализирайте клас [`Username`], наследник на [`String`], чиито мутатор приема единствено низове, които съдържат само главни и малки латински букви. + +Реализирайте клас [`Match`], наследник на [`String`], който съхранява допълнителен динамично-заделен низ [`pattern`] и бройка [`matches`]. +За [`pattern`] има друг селектор и мутатор. +При всяка промяна на [`pattern`] и оригиналния низ, [`matches`] се обновява с бройката (потенциално препокриващи се) срещания на [`pattern`] в низа. + +### Задача 4 + +Реализирайте клас [`Indexable`], който съхранява чисто-виртуален не-константен [`operator[]`], и имплементира константен [`operator[]`], базиран на не-константния. + +Реализирайте клас [`Compareable`], който съхранява чисто-виртуални [`operator<`] и [`operator==`], и имплементира останалите оператори за сравнение ([`<=`], [`>`], [`>=`], [`!=`]), използвайки чисто-виртуалните. + +Реализирайте клас [`Dynamic`], който въхранява чисто-виртуални не-публични методи [`free`], [`copyFrom`] и [`init`], и имплементира компонентите от голямата петица, използвайки тези методи. + +Реализирайте клас [`Vector`], който съхранява динамично-заделен масив от елементи и е наследник и на трите класа. +Сравненията между вектори са спрямо бройката елементи. + +Реализирайте клас [`Integer`], който съхранява динамично-заделен [`int`] и наследява [`Compareable`] и [`Dynamic`]. + +Реализирайте шаблонен клас [`Array`], който съхранява статично-заделен масив, чиито елементи и тяхна бройка се подават като част от типа, и който наследява [`Indexable`] и [`Compareable`]. +Сравненията между масиви са спрямо бройката елементи. -- cgit v1.3.1-23-gd82d