'def title Задачи - ООП, Седмица 1, 18.02.2026 'def desc Условията на задачите за упражнение. # {title} {pagenav 2 min;17 February 2026;22 February 2026} .warn Както винаги, {b НЕ} може да използвате външни библиотеки и (почти) всичко от стандартната библиотека! .important {i (22.02.2026)} По-подробни условия, оправени някои грешки в условията. ## За решаване ### Задача 1 .solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week01/Exercise01} Реализирайте следните функции: ```cpp // Създава нова динамично-заделена матрица 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}. Естествено, главната функция {b трябва да се намира извън {` matrix.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 .solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week01/Exercise02} Реализирайте следните функции: ```cpp // Сума на стойностите в elements int sum(const int* elements, unsigned length); // Средно аритметично на стойностите в elements double average(const int* elements, unsigned length); // Най-голямата стойност в elements int largest(const int* elements, unsigned length); // Най-малката стойност в elements int smallest(const int* elements, unsigned length); // Връща индекса на първото срещане на elementToSearch unsigned findIndex(const int* elements, unsigned length, int elementToSearch); Поставете техните имплементации в {` arrmath.cpp} и техните дефиниции в {` arrmath.h}. Направете всички нужни проверки за коректност на аргументите на функциите! От входа получавате цяло неотрицателно число {` N} и след това {` N} на брой цели числа. Трябва да изкарате средното аритметично на всички елементи {i между} най-малкия и най-големия (включително). Ако най-големия и/или най-малкия се среща повече от един път, използвайте неговото първо срещане. Използвайте максимално функциите от {` arrmath}! :table :2 |= Вход |= Изход |: 5 2 1 3 5 4 |: 3 |: 6 10 -2 7 0 0 1 |: 4 |: 8 1 1 1 1 10 10 10 10 |: 2.8 ### Задача 3 .solution-link {url Решение;https://github.com/Syndamia/oop-2025-solutions/tree/main/Week01/Exercise03} Реализирайте следните функции във файлове {` stringHelpers.cpp} и {` stringHelpers.h}: ```cpp // Създава динамично-заделен низ по подадената дължина char* newString(unsigned length); // Създава динамично-заделен низ, копие на подадения низ char* newString(const char* string); // Слепява first и second, като поставя separator между тях (ако е валиден) и // връща резултатния (динамичо-заделен) низ char* concatStrings(const char* first, const char* second, const char* separator); // Освобождава паметта на динамичо-заделен низ void deleteString(char*& string); // Запишете nullptr в string! Реализирайте следните функции във файлове {` ioHelpers.cpp} и {` ioHelpers.h}: ```cpp // Прочита от потребителския вход цяло число между min и max включително, // като предоставя prompt преди въведената стойност // При невалидна стойност, пита пак за вход int readInteger(const char* prompt, int min, int max); // Прочита от потребителския вход число с плаваща запетая между min и max включително, // като предоставя prompt преди въведената стойност // При невалидна стойност, пита пак за вход double readDouble(const char* prompt, double min, double max); // Прочита от потребителския вход един ред текст, // като предоставя prompt преди въведената стойност // При невалидна стойност, пита пак за вход char* readString(const char* prompt); За реализацията им използвайте {` stringHelpers}! Реализирате система за запазване на ученици. Всеки ученик има две имена и оценка (по шестобалната система, между {` 2.0} и {` 6.0}). Използвайки {` ioHelpers}, поискайте от потребителя брой ученици. След това, за всеки ученик, поискайте неговото име, фамилия и оценка (поотделно). За всеки ученик запазаете името му като един низ във формата {` "<ИМЕ> <ФАМИЛИЯ>"}. Не запазвайте име и фамилия като отделни стойности! Накрая изкарайте данните за всички ученици. {b Смесен вход/изход:} {i (удебеления текст е изкаран от програмата, останалото е въведено от потребителя)} ``` {b Number of students:} 4 {b First name:} Ivan {b Last name:} Koprivan {b Grade:} 5.5 {b First name:} Dimitar {b Last name:} Stoianov {b Grade:} 3.15 {b First name:} Hari {b Last name:} Seldon {b Grade:} 6 {b First name:} Richard {b Last name:} Stallman {b Grade:} 4.53 {b Ivan Koprivan has grade 5.5} {b Dimitar Stoianov has grade 3.15} {b Hari Seldon has grade 6} {b Richard Stallman has grade 4.53} ## За самоподготовка Пререшете следните задачи от УП {b без да гледате решенията}: .bulleted - {url Седмица 13, Задача 21;../../upp-2025/week13/#-21} - {url Седмица 10, Задача 7;../../upp-2025/week10/#-7} - {url Седмица 12, Задача 6;../../upp-2025/week12/#-6}