Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2025 / week07 / index.du
diff options
context:
space:
mode:
1 files changed, 106 insertions, 77 deletions
-rw-r--r--src/teaching/upp-2025/week07/index.du183
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
|= Вход
|= Изход