diff options
| Commit | 9c9592848610f6654feb8d1be28ec9660ddb7b77 (patch) | |
|---|---|---|
| Author | 2026-05-20 09:40:04 +0300 | |
| Committer | 2026-05-20 09:40:04 +0300 | |
| Files | 4cb086bfbeca620f2f4d6d913626dac22a88d63d | |
| syndamia.com-9c9592848610f6654feb8d1be28ec9660ddb7b77.tar syndamia.com-9c9592848610f6654feb8d1be28ec9660ddb7b77.tar.gz syndamia.com-9c9592848610f6654feb8d1be28ec9660ddb7b77.zip | ||
| Parent | 955f6de5ac3d427a369eae95a37c623396b0412b (diff) | |
feat(teaching/oop-2025/w13): Add exercises
3 files changed, 79 insertions, 0 deletions
| -rw-r--r-- | meta/meta.tsv | 1 | ||||
| -rw-r--r-- | src/teaching/oop-2025/index.du | 9 | ||||
| -rw-r--r-- | src/teaching/oop-2025/week13/index.du | 69 |
diff --git a/meta/meta.tsv b/meta/meta.tsv index c0b9a51..7f846d7 100644 --- a/meta/meta.tsv +++ b/meta/meta.tsv @@ -128,6 +128,7 @@ teaching/oop-2025/week09/index.html Задачи - ООП, Седмица 9, 15. teaching/oop-2025/week10/index.html Задачи - ООП, Седмица 10, 22.04.2026 Условията на задачите за упражнение. teaching/oop-2025/week11/index.html Задачи - ООП, Седмица 11, 29.04.2026 Условията на задачите за упражнение. teaching/oop-2025/week12/index.html Задачи - ООП, Седмица 12, 13.05.2026 Условията на задачите за упражнение. +teaching/oop-2025/week13/index.html Задачи - ООП, Седмица 13, 20.05.2026 Условията на задачите за упражнение. blog/connect-to-mysql-in-dotnet-ef/index.html Connect to MySql in .NET and Entity Framework Connecting a .NET application to a MySql database (with Entity Framework) can be tricky. Here is what works for me. 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`]. +Сравненията между масиви са спрямо бройката елементи. |