diff options
1 files changed, 147 insertions, 0 deletions
| -rw-r--r-- | src/teaching/oop-2025/week01/index.du | 147 |
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] |