Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitb8e2d5e25c13a691163cf266a1f4a30cc91fe7e1 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-11-12 20:53:18 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-11-12 20:55:54 +0200
Filescea0e2b843bee7acdf6f4544eb4a6add4fa4c3dd
syndamia.com-b8e2d5e25c13a691163cf266a1f4a30cc91fe7e1.tar
syndamia.com-b8e2d5e25c13a691163cf266a1f4a30cc91fe7e1.tar.gz
syndamia.com-b8e2d5e25c13a691163cf266a1f4a30cc91fe7e1.zip
Parent14ef028e688d17d272410431014067f7b911cb55 (diff)
feat(teaching/upp-2025/w07): Add exercises
5 files changed, 507 insertions, 0 deletions
-rw-r--r--meta/meta.tsv1
-rw-r--r--src/teaching/upp-2025/index.du10
-rw-r--r--src/teaching/upp-2025/week07/img/polynomial.pngbin0 -> 4464 bytes
-rw-r--r--src/teaching/upp-2025/week07/index.du494
-rw-r--r--src/teaching/upp-2025/week07/tex/polynomial.tex2
diff --git a/meta/meta.tsv b/meta/meta.tsv
index 9b440f3..fa8d5d7 100644
--- a/meta/meta.tsv
+++ b/meta/meta.tsv
@@ -102,6 +102,7 @@ teaching/upp-2025/week03/index.html Задачи - УПП, Седмица 3, 16.
teaching/upp-2025/week04/index.html Задачи - УПП, Седмица 4, 23.10.2025 Условията на задачите за упражнение.
teaching/upp-2025/week05/index.html Задачи - УПП, Седмица 5, 30.10.2025 Условията на задачите за упражнение.
teaching/upp-2025/week06/index.html Задачи - УПП, Седмица 6, 06.11.2025 Условията на задачите за упражнение.
+teaching/upp-2025/week07/index.html Задачи - УПП, Седмица 7, 13.11.2025 Условията на задачите за упражнение.
blog/connect-to-mysql-in-dotnet-ef/index.html Connect to MySql in .NET and Entity Framework Connecting a .NET application to a MySql database (with Entity Framework) can be tricky. Here is what works for me.
diff --git a/src/teaching/upp-2025/index.du b/src/teaching/upp-2025/index.du
index 8e7fa47..59b3abf 100644
--- a/src/teaching/upp-2025/index.du
+++ b/src/teaching/upp-2025/index.du
@@ -96,3 +96,13 @@
[url ./week06 Задачи]
|| [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06 Решения]
|| [url https://classroom.github.com/a/JSB1UK_f GitHub Classroom]
+
+|: 7
+|: 13.11.2025
+|: Функции, указатели
+
+|:
+|:
+|:
+[url ./week07 Задачи]
+|| [url https://classroom.github.com/a/clYBilXQ GitHub Classroom]
diff --git a/src/teaching/upp-2025/week07/img/polynomial.png b/src/teaching/upp-2025/week07/img/polynomial.png
new file mode 100644
index 0000000..66fd414
--- /dev/null
+++ b/src/teaching/upp-2025/week07/img/polynomial.png
Binary files differ
diff --git a/src/teaching/upp-2025/week07/index.du b/src/teaching/upp-2025/week07/index.du
new file mode 100644
index 0000000..e4a5a48
--- /dev/null
+++ b/src/teaching/upp-2025/week07/index.du
@@ -0,0 +1,494 @@
+# Задачи - УПП, Седмица 7, 13.11.2025
+
+'define expected-reading 13 min
+'define created 10 November 2025
+'define edited 11 November 2025
+[$pagenav]
+
+GitHub Classroom: [url https://classroom.github.com/a/clYBilXQ]
+
+:important
+
+.p Както при `[if]`-ове, следното е лоша практика и ще се вземат точки:
+
+```c++
+bool f() {
+ if (condition)
+ return true;
+ else
+ return false;
+}
+
+
+:important
+
+.p Следното е =[грешно]= и ще се вземат точки:
+
+```c++
+int* f() {
+ int numbers[5] = { 0 };
+ return numbers;
+}
+
+
+## За решаване
+
+### Задача 1
+
+Напишете функция, която приема цяло число и връща дали е четно и положително.
+Нека вашата функция да следва декларацията:
+
+```c++
+bool evenAndPositive(int x);
+
+От входа получавате цяло число.
+Използвайки `[evenAndPositive]`, върнете дали е четно и положително.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 6
+|: Even and positive
+
+|: -4
+|: Not even and positive
+
+|: 15
+|: Not even and positive
+
+
+### Задача 2
+
+Напишете функция, която приема цяло неотрицателно число `[n]` и връща n-тото число на фибоначи.
+Припомняме, че нулевото число на фибоначи е 0, първото число е 1 и всяко следващо е сумата на предходните две.
+
+Нека вашата функция да следва декларацията:
+
+```c++
+unsigned int fib(unsigned int n);
+
+От входа получавате цяло неотрицателно число.
+Използвайки `[fib]`, трябва да изкарате n-тото число на фибоначи.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 0
+|: 0
+
+|: 1
+|: 1
+
+|: 2
+|: 1
+
+|: 3
+|: 2
+
+|: 12
+|: 144
+
+|: 33
+|: 3524578
+
+
+### Задача 3
+
+Напишете функция, която приема масив от 15 цели числа и намира средното аритметично на всички тях.
+Нека вашата функция да следва декларацията:
+
+```c++
+double average(int numbers[15]);
+
+От входа получавате 15 цели числа.
+Използвайки `[average]`, трябва да изкарате средното аритметично на всички тях.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+|: 8
+
+|: 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0
+|: 5.5
+
+|: -77 21 -78 -55 53 -19 51 81 77 -73 -26 51 79 -73 -86
+|: -4.933
+
+
+### Задача 4
+
+Напишете функция, която приема число с плаваща запетая и *[връща]* две числа:
+.numbered
+1. числото, разделено на половина и
+2. числото, закръглено надолу към най-близкото цяло число.
+
+Нека вашата функция да следва декларацията:
+
+```c++
+void calc(float number, double &half, int* integer);
+
+От входа получавате число с плаваща запетая.
+Използвайки `[calc]`, трябва да изкарате двете *[върнати]* стойности.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 3.14
+|: 1.57 3
+
+|: -9.99
+|: -4.995 -9
+
+
+### Задача 5
+
+Напишете функция `[maxElem]`, която приема масив от числа с плаваща запетая и негов размер =[поотделно]=!
+Това означава, че на функцията може да ѝ бъде подаден масив с 10, 15, 2 или ... елемента.
+
+Нека вашата функция да върне най-големия елемент в масива.
+
+От входа получавате една редица от 5 реални числа и втора редица от 7 реални числа.
+Използвайки `[maxElem]`, върнете най-големия елемент в първата и във втората редица.
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+1 2 3 4 5
+1 2 3 4 5 6 7
+
+|: 5 7
+
+|:
+```
+12.01 28 50.5 -16.4 -72.22
+37.4 0.9 -100.34 19 -1 37.9 -52
+
+|: 50.5 37.9
+
+
+### Задача 6
+
+Напишете функция, която приема масив с произволна дължина (масива и размера се подават поотделно), съствен от цели числа, и *[върнете]* най-големия и най-малкия му елемент.
+Нека вашата функция да следва декларацията:
+
+```c++
+void minmaxElems(int* arr, unsigned size, int *min, int *max);
+
+От входа получавате две редици от по 10 и 8 цели числа съответно.
+Използвайки `[minmaxElems]`, върнете най-големия и най-малкия елемент на всяка редица.
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+1 2 3 4 5 6 7 8 9 10
+1 2 3 4 5 6 7 8
+
+|:
+```
+10 1
+8 1
+
+|:
+```
+98 42 -86 81 -27 98 46 -48 8 -48
+14 22 -65 10 -3 -97 -76 86
+
+|:
+```
+98 -86
+86 -97
+
+
+### Задача 7
+
+Напишете функция, която приема масив с произволна дължина, съставен от цели числа, и връща сумата на всички елементи.
+Нека вашата функция да следва декларацията:
+
+```
+unsigned sumElems(int* arr, unsigned size);
+
+От входа получавате 11 цели числа.
+Трябва да върнете първата последователност от 3 елемента, чиято сума е 0, използвайки `[sumElems]`.
+
+Ако няма такава, не изкарвайте нищо.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 5 12 -3 1 2 6 -10 4 7 11 -2
+|: -3 1 2
+
+|: 1 2 3 4 5 6 7 8 9 10 11
+|:
+
+|: -2 -1 0 1 -1 3 4 -4 -4 5 8
+|: 0 1 -1
+
+
+### Задача 8
+
+Напишете функция, която приема масив с произволен размер, съставен от цели неотрицателни числа, и неотрицателно число: ротация.
+Трябва да завъртите елементите в масива с ротация на брой позиции на дясно.
+
+Тоест, ако масива е `[1 2 3 4]`, тогава след ротация с една позиция, масива ще е `[4 1 2 3]`.
+Ако имахме две ротации, тогава щяхме да получим `[3 4 1 2]`.
+
+Не модифицирайте оригиналния масив!
+Трябва да *[върнете]* друг масив със завъртяните елементи.
+
+От входа получавате две редици от по 6 и 7 цели числа.
+След всяка редица получавате ротация.
+Трябва да изкарате двете редици, обаче завъртяни, използвайки вашата функция.
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+1 2 3 4 5 6 1
+1 2 3 4 5 6 7 0
+
+|:
+```
+6 1 2 3 4 5
+1 2 3 4 5 6 7
+
+|:
+```
+1 2 3 4 5 6 8
+1 2 3 4 5 6 7 17
+
+|:
+```
+5 6 1 2 3 4
+5 6 7 1 2 3 4
+
+
+### Задача 9
+
+.warn
+НЕ може да използвате "вградената" функция `[pow]`!
+
+Напишете функция, която приема число с плаваща запетая и цяло неотрицателно число, и връща първото число на степен второто.
+Нека вашата функция да следва декларацията:
+
+```c++
+unsigned int topower(double x, unsigned int a);
+
+От входа получавате 11 реални числа.
+Първите 10 са коефициентите в полином от 10та степен.
+11тото е потенциален корен.
+
+Трябва да върнете дали 11тото действително е корен на уравнението, използвайки `[topower]`.
+
+Припомняме, че едно число `[x]` е корен на полином от 10та степен, когато:
+
+[image ./img/polynomial.png]
+
+:table_2
+|= Вход
+|= Изход
+
+|: 0 0 0 0 0 0 0 0 0 5 5
+|: Is a root
+
+|: 0 0 0 0 0 0 0 0 0 5 9
+|: Not a root
+
+|: 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
+|: Not a root
+
+|: 1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 5.56706
+|: Is a root
+
+|: 1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 -0.986779
+|: Is a root
+
+|: 1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 2.14882
+|: Not a root
+
+
+### Задача 10
+
+Напишете функция, която приема два масива с произволни размери, съставени от цели числа, и връща колко от елементите на двата масива съвпадат по стойност на еднакви индекси.
+Тоест, на колко еднакви позиции срещаме еднакви елементи.
+
+Нека вашата функция да следва декларацията:
+
+```c++
+unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* arr2, unsigned int size2);
+
+От входа получавате две редици от по 10 и 15 цели числа.
+Трябва да върнете бройката на съвпадащи стойности на съвпадащи индекси, използвайки `[countSameElementsOnSameIndecies]`.
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+1 2 3 4 5 6 7 8 9 10
+1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+
+|: 10
+
+|:
+```
+1 2 3 4 5 6 7 8 9 10
+2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+
+|: 0
+
+|:
+```
+33 12 -97 -28 -48 -11 68 -42 88 -97
+51 12 -97 -36 -47 -11 69 -42 6 88 -100 -79 -74
+
+|: 4
+
+
+## За самоподготовка
+
+### Задача 11
+
+Напишете функция, която приема неотрицателно цяло число и връща дали е просто.
+
+От входа получавате две естествени числа.
+Трябва да върнете бройката на всички прости числа между тези две числа (включително), използвайки вашата функция.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 2 5
+|: 3
+
+|: 1 10
+|: 4
+
+|: 17 832
+|: 139
+
+
+### Задача 12
+
+Напишете функция, която получава масив с произволен размер, съствен от цели числа, и инкрементира всеки елемент.
+
+Получавате две редици от по 10 и 9 елемента.
+Трябва да върнете двете редици, обаче всеки елемент е инкрементиран, използвайки вашата фунцкия.
+
+:table_2
+|= Вход
+|= Изход
+
+|:
+```
+1 2 3 4 5 6 7 8 9 10
+10 20 30 40 50 60 70 80 90
+
+|:
+```
+2 3 4 5 6 7 8 9 10 11
+11 21 31 41 51 61 71 81 91
+
+|:
+```
+-70 93 -39 99 21 -86 48 70 -53 0
+25 100 28 -32 32 -70 -95 -98 -86
+
+|:
+```
+-69 94 -38 100 22 -85 49 71 -52 1
+26 101 29 -31 33 -69 -94 -97 -85
+
+
+### Задача 13
+
+Напишете функция, която получава масив от 4 букви и връща дали трите буква образуват последователност "буква, цифра, буква, цифра".
+
+От входа получавате 12 букви и трябва да върнете дали целия масив образува последователността "буква, цифра, буква, цифра, буква, цифрва, ...", използвайки вашата функция.
+
+:table_2
+|= Вход
+|= Изход
+
+|: a 0 a 0 a 0 a 0 a 0 a 0
+|: Follows pattern
+
+|: 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
+|: Follows pattern
+
+
+### Задача 14
+
+Напишете функция, която получава масив от 10 реални числа и *[връща]* масив от 5 реални числа.
+Резултатния масив се формира по следния начин:
+.numbered
+1. Първия елемент на *[върнатия]* масив е разликата на втория от първия елемент на входния (получения) масив.
+2. Втория елемент на *[върнатия]* масив е разликата на четвъртия от третия елемент на входния масив.
+3. И така нататък.
+
+От входа получавате масив с 10 елемента.
+Трябва да *[върнете]* резултатния 5-елементен масив от вашата функция.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 1 2 3 4 5 6 7 8 9 10
+|: 1 1 1 1 1
+
+|: 1 2 3 5 6 9 10 14 15 20
+|: 1 2 3 4 5
+
+|: 1 1 1 1 1 1 1 1 1 1
+|: 0 0 0 0 0
+
+|: 38 70 -34 84 -84 -15 10 92 27 -22
+|: 32 118 69 82 -49
+
+
+### Задача 15
+
+Напишете две функции, всяка от които приема масив с 5 естествени числа.
+Нека първата да повдига всяко число на втора степен и втората да умножава всяко число по 3.
+Тези операции трябва да се извършват върху входните за функциите елементи (inplace).
+
+От входа получавате 5 неотрицателни цели числа и 6то целево число.
+Започвайки с 5те числа, първо ги повдигате на втора степен, след това умножавате по 3, след това повдигате пак, след това умножавате пак, и така докато целевото число не се срещне в редицата.
+
+Когато това се случи, изкарайте редицата с 5 числа.
+Допуснете, че винаги ще срещнете целевото число.
+Използвайте вашите функции.
+
+:table_2
+|= Вход
+|= Изход
+
+|: 1 2 3 4 5 6 48
+|: 3 12 27 48 75
+
+|: 1 2 3 4 5 6 47775744
+|: 729 186624 4782969 47775744 284765625
+
+|: 6 5 3 6 7 3586355551445647360
+|: 3586355551445647360 2189469451904296875 617673396283947 3586355551445647360 15687628237922985707
diff --git a/src/teaching/upp-2025/week07/tex/polynomial.tex b/src/teaching/upp-2025/week07/tex/polynomial.tex
new file mode 100644
index 0000000..01160ad
--- /dev/null
+++ b/src/teaching/upp-2025/week07/tex/polynomial.tex
@@ -0,0 +1,2 @@
+% https://latexeditor.lagrida.com/
+ax^{10} + bx^9 + cx^8 + \cdots + ix + j = 0