Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit9c9592848610f6654feb8d1be28ec9660ddb7b77 (patch)
Author
 Syndamia <kamen@syndamia.com>
2026-05-20 09:40:04 +0300
Committer
 Syndamia <kamen@syndamia.com>
2026-05-20 09:40:04 +0300
Files4cb086bfbeca620f2f4d6d913626dac22a88d63d
syndamia.com-9c9592848610f6654feb8d1be28ec9660ddb7b77.tar
syndamia.com-9c9592848610f6654feb8d1be28ec9660ddb7b77.tar.gz
syndamia.com-9c9592848610f6654feb8d1be28ec9660ddb7b77.zip
Parent955f6de5ac3d427a369eae95a37c623396b0412b (diff)
feat(teaching/oop-2025/w13): Add exercises
3 files changed, 79 insertions, 0 deletions
-rw-r--r--meta/meta.tsv1
-rw-r--r--src/teaching/oop-2025/index.du9
-rw-r--r--src/teaching/oop-2025/week13/index.du69
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`].
+Сравненията между масиви са спрямо бройката елементи.