# Задачи - ООП, Седмица 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]