diff options
| Commit | 473a350697af53da85f7f36b75d02086c89ea2a9 (patch) | |
|---|---|---|
| Author | 2025-11-14 20:55:29 +0200 | |
| Committer | 2025-11-14 20:56:14 +0200 | |
| Files | c8dc8e2075bc16cf1673dbade01c4b91ddfa5c66 | |
| syndamia.com-473a350697af53da85f7f36b75d02086c89ea2a9.tar syndamia.com-473a350697af53da85f7f36b75d02086c89ea2a9.tar.gz syndamia.com-473a350697af53da85f7f36b75d02086c89ea2a9.zip | ||
| Parent | b8e2d5e25c13a691163cf266a1f4a30cc91fe7e1 (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.du | 1 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week07/index.du | 86 |
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 |