Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit473a350697af53da85f7f36b75d02086c89ea2a9 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-11-14 20:55:29 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-11-14 20:56:14 +0200
Filesc8dc8e2075bc16cf1673dbade01c4b91ddfa5c66
syndamia.com-473a350697af53da85f7f36b75d02086c89ea2a9.tar
syndamia.com-473a350697af53da85f7f36b75d02086c89ea2a9.tar.gz
syndamia.com-473a350697af53da85f7f36b75d02086c89ea2a9.zip
Parentb8e2d5e25c13a691163cf266a1f4a30cc91fe7e1 (diff)
feat(teaching/upp-2025/w07): Add solutions and exercise fixes
2 files changed, 71 insertions, 16 deletions
-rw-r--r--src/teaching/upp-2025/index.du1
-rw-r--r--src/teaching/upp-2025/week07/index.du86
diff --git a/src/teaching/upp-2025/index.du b/src/teaching/upp-2025/index.du
index 59b3abf..af84eb8 100644
--- a/src/teaching/upp-2025/index.du
+++ b/src/teaching/upp-2025/index.du
@@ -105,4 +105,5 @@
|:
|:
[url ./week07 Задачи]
+|| [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07 Решения]
|| [url https://classroom.github.com/a/clYBilXQ GitHub Classroom]
diff --git a/src/teaching/upp-2025/week07/index.du b/src/teaching/upp-2025/week07/index.du
index e4a5a48..b23dcd5 100644
--- a/src/teaching/upp-2025/week07/index.du
+++ b/src/teaching/upp-2025/week07/index.du
@@ -2,7 +2,7 @@
'define expected-reading 13 min
'define created 10 November 2025
-'define edited 11 November 2025
+'define edited 14 November 2025
[$pagenav]
GitHub Classroom: [url https://classroom.github.com/a/clYBilXQ]
@@ -35,6 +35,8 @@ int* f() {
### Задача 1
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise01.cpp Решение]
+
Напишете функция, която приема цяло число и връща дали е четно и положително.
Нека вашата функция да следва декларацията:
@@ -60,6 +62,8 @@ bool evenAndPositive(int x);
### Задача 2
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise02.cpp Решение]
+
Напишете функция, която приема цяло неотрицателно число `[n]` и връща n-тото число на фибоначи.
Припомняме, че нулевото число на фибоначи е 0, първото число е 1 и всяко следващо е сумата на предходните две.
@@ -96,6 +100,8 @@ unsigned int fib(unsigned int n);
### Задача 3
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise03.cpp Решение]
+
Напишете функция, която приема масив от 15 цели числа и намира средното аритметично на всички тях.
Нека вашата функция да следва декларацията:
@@ -105,6 +111,9 @@ double average(int numbers[15]);
От входа получавате 15 цели числа.
Използвайки `[average]`, трябва да изкарате средното аритметично на всички тях.
+.note
+*[(14.11.2025)]* Оправен изхода на втори пример.
+
:table_2
|= Вход
|= Изход
@@ -113,14 +122,16 @@ double average(int numbers[15]);
|: 8
|: 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0
-|: 5.5
+|: 3.66667
|: -77 21 -78 -55 53 -19 51 81 77 -73 -26 51 79 -73 -86
-|: -4.933
+|: -4.93333
### Задача 4
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise04.cpp Решение]
+
Напишете функция, която приема число с плаваща запетая и *[връща]* две числа:
.numbered
1. числото, разделено на половина и
@@ -147,6 +158,8 @@ void calc(float number, double &half, int* integer);
### Задача 5
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise05.cpp Решение]
+
Напишете функция `[maxElem]`, която приема масив от числа с плаваща запетая и негов размер =[поотделно]=!
Това означава, че на функцията може да ѝ бъде подаден масив с 10, 15, 2 или ... елемента.
@@ -176,11 +189,13 @@ void calc(float number, double &half, int* integer);
### Задача 6
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise06.cpp Решение]
+
Напишете функция, която приема масив с произволна дължина (масива и размера се подават поотделно), съствен от цели числа, и *[върнете]* най-големия и най-малкия му елемент.
Нека вашата функция да следва декларацията:
```c++
-void minmaxElems(int* arr, unsigned size, int *min, int *max);
+void minmaxElems(int* arr, unsigned size, int* min, int* max);
От входа получавате две редици от по 10 и 8 цели числа съответно.
Използвайки `[minmaxElems]`, върнете най-големия и най-малкия елемент на всяка редица.
@@ -212,6 +227,8 @@ void minmaxElems(int* arr, unsigned size, int *min, int *max);
### Задача 7
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise07.cpp Решение]
+
Напишете функция, която приема масив с произволна дължина, съставен от цели числа, и връща сумата на всички елементи.
Нека вашата функция да следва декларацията:
@@ -223,6 +240,9 @@ unsigned sumElems(int* arr, unsigned size);
Ако няма такава, не изкарвайте нищо.
+.note
+*[(14.11.2025)]* Оправен изхода на трети пример.
+
:table_2
|= Вход
|= Изход
@@ -234,11 +254,13 @@ unsigned sumElems(int* arr, unsigned size);
|:
|: -2 -1 0 1 -1 3 4 -4 -4 5 8
-|: 0 1 -1
+|: -1 0 1
### Задача 8
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise08.cpp Решение]
+
Напишете функция, която приема масив с произволен размер, съставен от цели неотрицателни числа, и неотрицателно число: ротация.
Трябва да завъртите елементите в масива с ротация на брой позиции на дясно.
@@ -279,6 +301,11 @@ unsigned sumElems(int* arr, unsigned size);
### Задача 9
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise09.cpp Решение]
+
+.note
+*[(14.11.2025)]* Оправена декларацията на функцията, примери и добавено упътване.
+
.warn
НЕ може да използвате "вградената" функция `[pow]`!
@@ -286,7 +313,7 @@ unsigned sumElems(int* arr, unsigned size);
Нека вашата функция да следва декларацията:
```c++
-unsigned int topower(double x, unsigned int a);
+double topower(double x, unsigned int a);
От входа получавате 11 реални числа.
Първите 10 са коефициентите в полином от 10та степен.
@@ -298,26 +325,33 @@ unsigned int topower(double x, unsigned int a);
[image ./img/polynomial.png]
+=[Упътване:]=
+За някои примери, прецизността на въведения корен не е достатъчна.
+Може да приемете, че ако (абсолютната стойност на) сумата е по-малка от 0.0001, то сумата на практика е 0.
+
:table_2
|= Вход
|= Изход
-|: 0 0 0 0 0 0 0 0 0 5 5
+|: 0 0 0 0 0 0 0 0 0 0 0 0
|: Is a root
-|: 0 0 0 0 0 0 0 0 0 5 9
+|: 0 0 0 0 0 0 0 0 0 0 5 5
|: Not a root
-|: 0 0 0 0 0 0 2 3 -11 -6 -0.5
+|: 0 0 0 0 0 0 0 0 0 -5 5 1
+|: Is a root
+
+|: 0 0 0 0 0 0 0 2 3 -11 -6 -0.5
|: Is a root
-|: 0 0 0 0 0 0 2 3 -11 -6 -2
+|: 0 0 0 0 0 0 0 2 3 -11 -6 -2
|: Not a root
-|: 1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 5.56706
+|: 1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 5.56705510103
|: Is a root
-|: 1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 -0.986779
+|: 1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 -0.9867787287
|: Is a root
|: 1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 2.14882
@@ -326,6 +360,8 @@ unsigned int topower(double x, unsigned int a);
### Задача 10
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise10.cpp Решение]
+
Напишете функция, която приема два масива с произволни размери, съставени от цели числа, и връща колко от елементите на двата масива съвпадат по стойност на еднакви индекси.
Тоест, на колко еднакви позиции срещаме еднакви елементи.
@@ -337,6 +373,9 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int*
От входа получавате две редици от по 10 и 15 цели числа.
Трябва да върнете бройката на съвпадащи стойности на съвпадащи индекси, използвайки `[countSameElementsOnSameIndecies]`.
+.note
+*[14.11.2025]* Оправен вход на последния пример.
+
:table_2
|= Вход
|= Изход
@@ -358,7 +397,7 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int*
|:
```
33 12 -97 -28 -48 -11 68 -42 88 -97
-51 12 -97 -36 -47 -11 69 -42 6 88 -100 -79 -74
+51 12 -97 -36 -47 -11 69 -42 6 88 -100 -79 -74 91 0
|: 4
@@ -367,6 +406,8 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int*
### Задача 11
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise11.cpp Решение]
+
Напишете функция, която приема неотрицателно цяло число и връща дали е просто.
От входа получавате две естествени числа.
@@ -388,6 +429,8 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int*
### Задача 12
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise12.cpp Решение]
+
Напишете функция, която получава масив с произволен размер, съствен от цели числа, и инкрементира всеки елемент.
Получавате две редици от по 10 и 9 елемента.
@@ -420,10 +463,15 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int*
### Задача 13
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise13.cpp Решение]
+
Напишете функция, която получава масив от 4 букви и връща дали трите буква образуват последователност "буква, цифра, буква, цифра".
От входа получавате 12 букви и трябва да върнете дали целия масив образува последователността "буква, цифра, буква, цифра, буква, цифрва, ...", използвайки вашата функция.
+.note
+*[(14.11.2025)]* Оправен трети пример.
+
:table_2
|= Вход
|= Изход
@@ -434,12 +482,14 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int*
|: a b c d e f g h i j k l
|: Does not follow pattern
-|: k 912 h 84 m 10 q 7 q 7 i 19
+|: k 9 H 8 m 0 Q 7 Q 7 i 1
|: Follows pattern
### Задача 14
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise14.cpp Решение]
+
Напишете функция, която получава масив от 10 реални числа и *[връща]* масив от 5 реални числа.
Резултатния масив се формира по следния начин:
.numbered
@@ -469,6 +519,8 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int*
### Задача 15
+.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise15.cpp Решение]
+
Напишете две функции, всяка от които приема масив с 5 естествени числа.
Нека първата да повдига всяко число на втора степен и втората да умножава всяко число по 3.
Тези операции трябва да се извършват върху входните за функциите елементи (inplace).
@@ -479,15 +531,17 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int*
Когато това се случи, изкарайте редицата с 5 числа.
Допуснете, че винаги ще срещнете целевото число.
Използвайте вашите функции.
+.note
+*[(14.11.2025)]* Оправени входове на първите два примера.
:table_2
|= Вход
|= Изход
-|: 1 2 3 4 5 6 48
+|: 1 2 3 4 5 48
|: 3 12 27 48 75
-|: 1 2 3 4 5 6 47775744
+|: 1 2 3 4 5 47775744
|: 729 186624 4782969 47775744 284765625
|: 6 5 3 6 7 3586355551445647360