Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2025 / week01 / index.du
diff options
context:
space:
mode:
1 files changed, 147 insertions, 0 deletions
-rw-r--r--src/teaching/oop-2025/week01/index.du147
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]