diff options
| Commit | 40cfbcdf753e5666578796046ca2a5f5772aa0fb (patch) | |
|---|---|---|
| Author | 2026-02-18 09:13:11 +0200 | |
| Committer | 2026-02-18 09:13:11 +0200 | |
| Files | 6a5795ff01cb239aa431144b65a14e05d1c48f2e | |
| syndamia.com-40cfbcdf753e5666578796046ca2a5f5772aa0fb.tar syndamia.com-40cfbcdf753e5666578796046ca2a5f5772aa0fb.tar.gz syndamia.com-40cfbcdf753e5666578796046ca2a5f5772aa0fb.zip | ||
| Parent | 2bb90e0c338878edf20ff489b655626d7e7d0240 (diff) | |
feat(teaching/oop-2025/w1): Add materials and exercises
4 files changed, 245 insertions, 0 deletions
| -rw-r--r-- | meta/meta.tsv | 2 | ||||
| -rw-r--r-- | src/teaching/oop-2025/index.du | 17 | ||||
| -rw-r--r-- | src/teaching/oop-2025/week01/index.du | 147 | ||||
| -rw-r--r-- | src/teaching/oop-2025/week01/intro.du | 79 |
diff --git a/meta/meta.tsv b/meta/meta.tsv index 5be03fa..0cecda8 100644 --- a/meta/meta.tsv +++ b/meta/meta.tsv @@ -114,6 +114,8 @@ teaching/upp-2025/week14/bitwise-and-binary-representation.html Побитови teaching/upp-2025/week14/index.html Задачи - УПП, Седмица 14, 15.01.2026 Условията на задачите за упражнение. teaching/oop-2025/index.html Обектно-ориентирано програмиране - практикум, Компютърни науки, 5 група Материали на проведените през 2025/2026 практикуми по Обектно-ориентирано програмиране на Компютърни науки (2 поток), 5 група. +teaching/oop-2025/week01/intro.html Уводни бележки - ООП, Седмица 1, 18.02.2026 Бележки относно практикума и курса. +teaching/oop-2025/week01/index.html Задачи - ООП, Седмица 1, 18.02.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 52e4b20..e973be0 100644 --- a/src/teaching/oop-2025/index.du +++ b/src/teaching/oop-2025/index.du @@ -8,8 +8,25 @@ [=Директни връзки:=] [url ../upp-2025/week01/introduction.html?a#section-3 Контакт с мен] +| [url https://github.com/Syndamia/oop-2025-solutions Решения на задачи] +| [url https://github.com/18ivan18/ObjectOrientedProgramming2026 Материали от семинари] +| [url https://learn.fmi.uni-sofia.bg/course/view.php?id=12155 Курс в мудъл] :table_3 |= № |= Дата |= Материали + +|: 1 +|: 18.02.2026 +|: Въведение и преговор + +|: +|: +|: +[url ./week01/intro.html?a Уводни бележки] + +|: +|: +|: +[url ./week01 Задачи] diff --git a/src/teaching/oop-2025/week01/index.du b/src/teaching/oop-2025/week01/index.du new file mode 100644 index 0000000..bd2d034 --- /dev/null +++ b/src/teaching/oop-2025/week01/index.du @@ -0,0 +1,147 @@ +# Задачи - ООП, Седмица 1, 18.02.2026 + +'define expected-reading 2 min +'define created 17 February 2026 +'define edited 18 February 2026 +[$pagenav] + +.warn Както винаги, [=НЕ=] може да използвате външни библиотеки и (почти) всичко от стандартната библиотека! + +## За решаване + +### Задача 1 + +Реализирайте следните функции: + +```c++ +// Създава нова динамично-заделена матрица +int** newMatrix(unsigned rows, unsigned cols); +// Изтрива динамично-заделена матрица +void deleteMatrix(int**& matrix, unsigned rows); // Запишете nullptr в matrix! +// Връща сумата на всички елементи в матрицата +int sumMatrix(const int** matrix, unsigned rows, unsigned cols); + +Поставете техните имплементации във файл [`matrix.cpp`] и техните дефиниции в [`matrix.h`]. +Естествено, главната функция [=трябва да се намира извън [`arrmath.cpp`]!=] + +От входа получавате размерите и стойностите на две матрици с цели числа. +Изкарайте разликата, между сумата на елементите на първата матрица и на втората матрица. + +:table_2 +|= Вход +|= Изход + +|: +``` +3 3 +1 2 3 +4 5 6 +7 8 9 +4 2 +13 10 +-6 -5 +100 101 +-30 -20 + +|: -118 + +.comment 45 - 163 = -118 + + +### Задача 2 + +Реализирайте следните функции: + +```c++ +int sum(const int* elements, unsigned length); +int average(const int* elements, unsigned length); +int largest(const int* elements, unsigned length); +int smallest(const int* elements, unsigned length); +// Връща индекса на първото срещане на elementToSearch +unsigned findIndex(const int* elements, unsigned length, int elementToSearch); + +Поставете техните имплементации в [`arrmath.cpp`] и техните дефиниции в [`arrmath.h`]. +Направете всички нужни проверки за коректност на аргументите на функциите! + +От входа получавате цяло неотрицателно число [`N`] и след това [`N`] на брой цели числа. + +Трябва да изкарате средното аритметично на всички елементи [*между*] най-малкия и най-големия (включително). +Ако най-големия и/или най-малкия се среща повече от един път, използвайте неговото първо срещане. + +Използвайте максимално функциите от [`arrmath`]! + +:table_2 +|= Вход +|= Изход + +|: 5 2 1 3 5 4 +|: 3 + +|: 6 10 -2 17 0 0 1 +|: 4 + +|: 8 1 1 1 1 10 10 10 10 +|: 2.8 + + +### Задача 3 + +Реализирайте следните функции във файлове [`stringHelpers.cpp`] и [`stringHelpers.h`]: + +```c++ +char* newString(unsigned length); +char* newString(const char* string); +char* concatStrings(const char* first, const char* second, const char* separator); +void deleteString(char*& string); // Запишете nullptr в string! + +Реализирайте следните функции във файлове [`ioHelpers.cpp`] и [`ioHelpers.h`]: + +```c++ +// Прочита от потребителския вход цяло число между min и max включително, +// като предоставя prompt преди въведената стойност +// При невалидна стойност, пита пак за вход +int readInteger(const char* prompt, int min, int max); +double readDouble(const char* prompt, double min, double max); +char* readString(const char* prompt); + +За реализацията им използвайте [`stringHelpers`]! + +Реализирате система за запазване на ученици. +Всеки ученик има две имена и оценка (по шестобалната система, между [`2.0`] и [`6.0`]). + +Използвайки [`ioHelpers`], поискайте от потребителя брой ученици. +След това, за всеки ученик, поискайте неговото име, фамилия и оценка (поотделно). + +За всеки ученик запазаете името му като един низ във формата [`"<ИМЕ> <ФАМИЛИЯ>"`]. +Не запазвайте име и фамилия като отделни стойности! + +Накрая изкарайте данните за всички ученици. + +[=Смесен вход/изход:=] [*(удебеления текст е изкаран от програмата, останалото е въведено от потребителя)*] +``` +[=Number of students:=] 4 +[=First name:=] Ivan +[=Last name:=] Koprivan +[=Grade:=] 5.5 +[=First name:=] Dimitar +[=Last name:=] Stoianov +[=Grade:=] 3.15 +[=First name:=] Hari +[=Last name:=] Seldon +[=Grade:=] 6 +[=First name:=] Richard +[=Last name:=] Stallman +[=Grade:=] 4.53 +[=Ivan Koprivan has grade 5.5=] +[=Dimitar Stoianov has grade 3.15=] +[=Hari Seldon has grade 6=] +[=Richard Stallman has grade 4.53=] + + +## За самоподготовка + +Пререшете следните задачи от УП [=без да гледате решенията=]: +.bulleted +- [url ../../upp-2025/week13/#-21 Седмица 13, Задача 21] +- [url ../../upp-2025/week10/#-7 Седмица 10, Задача 7] +- [url ../../upp-2025/week12/#-6 Седмица 12, Задача 6] diff --git a/src/teaching/oop-2025/week01/intro.du b/src/teaching/oop-2025/week01/intro.du new file mode 100644 index 0000000..474ffb2 --- /dev/null +++ b/src/teaching/oop-2025/week01/intro.du @@ -0,0 +1,79 @@ +# Уводни бележки - ООП, Седмица 1, 18.02.2026 + +'define expected-reading 1 min +'define created 17 February 2026 +'define edited 17 February 2026 +[$pagenav] + +[$presentation-controller] + +:title_slide35 + +# Уводни бележки по ООП + + +:slide35 + +## Уроци от УП + +[$br2] + +:unordered + +- [=Решавайте задачи!=] + .unordered + - По УП са давани >200 задачи (да, много не бяха доизпипани) + - Решения ca качвани на >150 задачи + - >3700 реда код в решения + +- Питайте въпроси, за това ми плащат! + + + +:slide35 + +## Относно ООП практикум + +[$br3] + +:unordered + +- Избираема е, няма причина да не я запишете + .unordered + - Дори да не го направите, пак си идвайте + +- Ще го караме по същата схема: задачи и [=решаваме=] на живо + .unordered + - Ако искате друго, слушам, ще го обсъдим + + + +:slide35 + +## Специфики на ООП в C++ + +[$br1] + +:unordered + +- ООП не е безплатно! Дори да сте учили [`Java`]/[`C#`]/... + +- [`C++`] има много рядко-срещани обектни свойства, като: + + :ordered + + 1. Ръчно менажиране на паметта (и оператори) - няма garbage collector + + 2. Множествено наследяване - наследяване на повече от един клас + + 3. Шаблони - значително по-силни от generics ([url https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern статичен полиморфизъм], [url https://en.wikipedia.org/wiki/Template_metaprogramming#Compile-time_class_generation compile-time рекурсия], ...) + + + + +:title_slide35 + +.p +Въпроси? +Коментари? +Забележки? |