diff options
1 files changed, 106 insertions, 77 deletions
| -rw-r--r-- | src/teaching/upp-2025/week07/index.du | 183 |
diff --git a/src/teaching/upp-2025/week07/index.du b/src/teaching/upp-2025/week07/index.du index 3f671b0..8c1cbfc 100644 --- a/src/teaching/upp-2025/week07/index.du +++ b/src/teaching/upp-2025/week07/index.du @@ -1,17 +1,17 @@ -# Задачи - УПП, Седмица 7, 13.11.2025 +'def title Задачи - УПП, Седмица 7, 13.11.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 13 min -'define created 10 November 2025 -'define edited 14 November 2025 -[$pagenav] +# {title} -GitHub Classroom: [url https://classroom.github.com/a/clYBilXQ] +{pagenav 13 min;10 November 2025;14 November 2025} + +GitHub Classroom: {url https://classroom.github.com/a/clYBilXQ} :important -.p Както при [`if`]-ове, следното е лоша практика и ще се вземат точки: +.p Както при {` if}-ове, следното е лоша практика и ще се вземат точки: -```c++ +```cpp bool f() { if (condition) return true; @@ -22,9 +22,9 @@ bool f() { :important -.p Следното е [=грешно=] и ще се вземат точки: +.p Следното е {b грешно} и ще се вземат точки: -```c++ +```cpp int* f() { int numbers[5] = { 0 }; return numbers; @@ -35,18 +35,19 @@ int* f() { ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise01.cpp} Напишете функция, която приема цяло число и връща дали е четно и положително. Нека вашата функция да следва декларацията: -```c++ +```cpp bool evenAndPositive(int x); От входа получавате цяло число. -Използвайки [`evenAndPositive`], върнете дали е четно и положително. +Използвайки {` evenAndPositive}, върнете дали е четно и положително. -:table_2 +:table +:2 |= Вход |= Изход @@ -60,22 +61,24 @@ bool evenAndPositive(int x); |: Not even and positive + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise02.cpp} -Напишете функция, която приема цяло неотрицателно число [`n`] и връща n-тото число на фибоначи. +Напишете функция, която приема цяло неотрицателно число {` n} и връща n-тото число на фибоначи. Припомняме, че нулевото число на фибоначи е 0, първото число е 1 и всяко следващо е сумата на предходните две. Нека вашата функция да следва декларацията: -```c++ +```cpp unsigned int fib(unsigned int n); От входа получавате цяло неотрицателно число. -Използвайки [`fib`], трябва да изкарате n-тото число на фибоначи. +Използвайки {` fib}, трябва да изкарате n-тото число на фибоначи. -:table_2 +:table +:2 |= Вход |= Изход @@ -98,23 +101,25 @@ unsigned int fib(unsigned int n); |: 3524578 + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise03.cpp} Напишете функция, която приема масив от 15 цели числа и намира средното аритметично на всички тях. Нека вашата функция да следва декларацията: -```c++ +```cpp double average(int numbers[15]); От входа получавате 15 цели числа. -Използвайки [`average`], трябва да изкарате средното аритметично на всички тях. +Използвайки {` average}, трябва да изкарате средното аритметично на всички тях. .note -[*(14.11.2025)*] Оправен изхода на втори пример. +{i (14.11.2025)} Оправен изхода на втори пример. -:table_2 +:table +:2 |= Вход |= Изход @@ -128,24 +133,26 @@ double average(int numbers[15]); |: -4.93333 + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise04.cpp} -Напишете функция, която приема число с плаваща запетая и [*връща*] две числа: +Напишете функция, която приема число с плаваща запетая и {i връща} две числа: .numbered 1. числото, разделено на половина и 2. числото, закръглено надолу към най-близкото цяло число. Нека вашата функция да следва декларацията: -```c++ +```cpp void calc(float number, double &half, int* integer); От входа получавате число с плаваща запетая. -Използвайки [`calc`], трябва да изкарате двете [*върнати*] стойности. +Използвайки {` calc}, трябва да изкарате двете {i върнати} стойности. -:table_2 +:table +:2 |= Вход |= Изход @@ -156,19 +163,21 @@ void calc(float number, double &half, int* integer); |: -4.995 -9 + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise05.cpp} -Напишете функция [`maxElem`], която приема масив от числа с плаваща запетая и негов размер [=поотделно=]! +Напишете функция {` maxElem}, която приема масив от числа с плаваща запетая и негов размер {b поотделно}! Това означава, че на функцията може да ѝ бъде подаден масив с 10, 15, 2 или ... елемента. Нека вашата функция да върне най-големия елемент в масива. От входа получавате една редица от 5 реални числа и втора редица от 7 реални числа. -Използвайки [`maxElem`], върнете най-големия елемент в първата и във втората редица. +Използвайки {` maxElem}, върнете най-големия елемент в първата и във втората редица. -:table_2 +:table +:2 |= Вход |= Изход @@ -187,20 +196,22 @@ void calc(float number, double &half, int* integer); |: 50.5 37.9 + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise06.cpp} -Напишете функция, която приема масив с произволна дължина (масива и размера се подават поотделно), съствен от цели числа, и [*върнете*] най-големия и най-малкия му елемент. +Напишете функция, която приема масив с произволна дължина (масива и размера се подават поотделно), съствен от цели числа, и {i върнете} най-големия и най-малкия му елемент. Нека вашата функция да следва декларацията: -```c++ +```cpp void minmaxElems(int* arr, unsigned size, int* min, int* max); От входа получавате две редици от по 10 и 8 цели числа съответно. -Използвайки [`minmaxElems`], върнете най-големия и най-малкия елемент на всяка редица. +Използвайки {` minmaxElems}, върнете най-големия и най-малкия елемент на всяка редица. -:table_2 +:table +:2 |= Вход |= Изход @@ -225,9 +236,10 @@ void minmaxElems(int* arr, unsigned size, int* min, int* max); 86 -97 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise07.cpp} Напишете функция, която приема масив с произволна дължина, съставен от цели числа, и връща сумата на всички елементи. Нека вашата функция да следва декларацията: @@ -236,14 +248,15 @@ void minmaxElems(int* arr, unsigned size, int* min, int* max); unsigned sumElems(int* arr, unsigned size); От входа получавате 11 цели числа. -Трябва да върнете първата последователност от 3 елемента, чиято сума е 0, използвайки [`sumElems`]. +Трябва да върнете първата последователност от 3 елемента, чиято сума е 0, използвайки {` sumElems}. Ако няма такава, не изкарвайте нищо. .note -[*(14.11.2025)*] Оправен изхода на трети пример. +{i (14.11.2025)} Оправен изхода на трети пример. -:table_2 +:table +:2 |= Вход |= Изход @@ -257,24 +270,26 @@ unsigned sumElems(int* arr, unsigned size); |: -1 0 1 + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise08.cpp} Напишете функция, която приема масив с произволен размер, съставен от цели неотрицателни числа, и неотрицателно число: ротация. Трябва да завъртите елементите в масива с ротация на брой позиции на дясно. -Тоест, ако масива е [`1 2 3 4`], тогава след ротация с една позиция, масива ще е [`4 1 2 3`]. -Ако имахме две ротации, тогава щяхме да получим [`3 4 1 2`]. +Тоест, ако масива е {` 1 2 3 4}, тогава след ротация с една позиция, масива ще е {` 4 1 2 3}. +Ако имахме две ротации, тогава щяхме да получим {` 3 4 1 2}. Не модифицирайте оригиналния масив! -Трябва да [*върнете*] друг масив със завъртяните елементи. +Трябва да {i върнете} друг масив със завъртяните елементи. От входа получавате две редици от по 6 и 7 цели числа. След всяка редица получавате ротация. Трябва да изкарате двете редици, обаче завъртяни, използвайки вашата функция. -:table_2 +:table +:2 |= Вход |= Изход @@ -299,37 +314,39 @@ unsigned sumElems(int* arr, unsigned size); 5 6 7 1 2 3 4 + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise09.cpp} .note -[*(14.11.2025)*] Оправена декларацията на функцията, примери и добавено упътване. +{i (14.11.2025)} Оправена декларацията на функцията, примери и добавено упътване. .warn -НЕ може да използвате "вградената" функция [`pow`]! +НЕ може да използвате "вградената" функция {` pow}! Напишете функция, която приема число с плаваща запетая и цяло неотрицателно число, и връща първото число на степен второто. Нека вашата функция да следва декларацията: -```c++ +```cpp double topower(double x, unsigned int a); От входа получавате 11 реални числа. Първите 10 са коефициентите в полином от 10та степен. 11тото е потенциален корен. -Трябва да върнете дали 11тото действително е корен на уравнението, използвайки [`topower`]. +Трябва да върнете дали 11тото действително е корен на уравнението, използвайки {` topower}. -Припомняме, че едно число [`x`] е корен на полином от 10та степен, когато: +Припомняме, че едно число {` x} е корен на полином от 10та степен, когато: -[image ./img/polynomial.png] +{img ./img/polynomial.png} -[=Упътване:=] +{b Упътване:} За някои примери, прецизността на въведения корен не е достатъчна. Може да приемете, че ако (абсолютната стойност на) сумата е по-малка от 0.0001, то сумата на практика е 0. -:table_2 +:table +:2 |= Вход |= Изход @@ -358,25 +375,27 @@ double topower(double x, unsigned int a); |: Not a root + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise10.cpp} Напишете функция, която приема два масива с произволни размери, съставени от цели числа, и връща колко от елементите на двата масива съвпадат по стойност на еднакви индекси. Тоест, на колко еднакви позиции срещаме еднакви елементи. Нека вашата функция да следва декларацията: -```c++ +```cpp unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* arr2, unsigned int size2); От входа получавате две редици от по 10 и 15 цели числа. -Трябва да върнете бройката на съвпадащи стойности на съвпадащи индекси, използвайки [`countSameElementsOnSameIndecies`]. +Трябва да върнете бройката на съвпадащи стойности на съвпадащи индекси, използвайки {` countSameElementsOnSameIndecies}. .note -[*14.11.2025*] Оправен вход на последния пример. +{i 14.11.2025} Оправен вход на последния пример. -:table_2 +:table +:2 |= Вход |= Изход @@ -402,18 +421,20 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* |: 4 + ## За самоподготовка ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise11.cpp} Напишете функция, която приема неотрицателно цяло число и връща дали е просто. От входа получавате две естествени числа. Трябва да върнете бройката на всички прости числа между тези две числа (включително), използвайки вашата функция. -:table_2 +:table +:2 |= Вход |= Изход @@ -427,16 +448,18 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* |: 139 + ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise12.cpp} Напишете функция, която получава масив с произволен размер, съствен от цели числа, и инкрементира всеки елемент. Получавате две редици от по 10 и 9 елемента. Трябва да върнете двете редици, обаче всеки елемент е инкрементиран, използвайки вашата фунцкия. -:table_2 +:table +:2 |= Вход |= Изход @@ -461,18 +484,20 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* 26 101 29 -31 33 -69 -94 -97 -85 + ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise13.cpp} Напишете функция, която получава масив от 4 букви и връща дали трите буква образуват последователност "буква, цифра, буква, цифра". От входа получавате 12 букви и трябва да върнете дали целия масив образува последователността "буква, цифра, буква, цифра, буква, цифрва, ...", използвайки вашата функция. .note -[*(14.11.2025)*] Оправен трети пример. +{i (14.11.2025)} Оправен трети пример. -:table_2 +:table +:2 |= Вход |= Изход @@ -486,21 +511,23 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* |: Follows pattern + ### Задача 14 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise14.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise14.cpp} -Напишете функция, която получава масив от 10 реални числа и [*връща*] масив от 5 реални числа. +Напишете функция, която получава масив от 10 реални числа и {i връща} масив от 5 реални числа. Резултатния масив се формира по следния начин: .numbered -1. Първия елемент на [*върнатия*] масив е разликата на втория от първия елемент на входния (получения) масив. -2. Втория елемент на [*върнатия*] масив е разликата на четвъртия от третия елемент на входния масив. +1. Първия елемент на {i върнатия} масив е разликата на втория от първия елемент на входния (получения) масив. +2. Втория елемент на {i върнатия} масив е разликата на четвъртия от третия елемент на входния масив. 3. И така нататък. От входа получавате масив с 10 елемента. -Трябва да [*върнете*] резултатния 5-елементен масив от вашата функция. +Трябва да {i върнете} резултатния 5-елементен масив от вашата функция. -:table_2 +:table +:2 |= Вход |= Изход @@ -517,9 +544,10 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* |: 32 118 69 82 -49 + ### Задача 15 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise15.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise15.cpp} Напишете две функции, всяка от които приема масив с 5 естествени числа. Нека първата да повдига всяко число на втора степен и втората да умножава всяко число по 3. @@ -532,9 +560,10 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* Допуснете, че винаги ще срещнете целевото число. Използвайте вашите функции. .note -[*(14.11.2025)*] Оправени входове на първите два примера. +{i (14.11.2025)} Оправени входове на първите два примера. -:table_2 +:table +:2 |= Вход |= Изход |