diff options
| Commit | b8e2d5e25c13a691163cf266a1f4a30cc91fe7e1 (patch) | |
|---|---|---|
| Author | 2025-11-12 20:53:18 +0200 | |
| Committer | 2025-11-12 20:55:54 +0200 | |
| Files | cea0e2b843bee7acdf6f4544eb4a6add4fa4c3dd | |
| syndamia.com-b8e2d5e25c13a691163cf266a1f4a30cc91fe7e1.tar syndamia.com-b8e2d5e25c13a691163cf266a1f4a30cc91fe7e1.tar.gz syndamia.com-b8e2d5e25c13a691163cf266a1f4a30cc91fe7e1.zip | ||
| Parent | 14ef028e688d17d272410431014067f7b911cb55 (diff) | |
feat(teaching/upp-2025/w07): Add exercises
5 files changed, 507 insertions, 0 deletions
| -rw-r--r-- | meta/meta.tsv | 1 | ||||
| -rw-r--r-- | src/teaching/upp-2025/index.du | 10 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week07/img/polynomial.png | bin | 0 -> 4464 bytes | |||
| -rw-r--r-- | src/teaching/upp-2025/week07/index.du | 494 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week07/tex/polynomial.tex | 2 |
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 Binary files differnew file mode 100644 index 0000000..66fd414 --- /dev/null +++ b/src/teaching/upp-2025/week07/img/polynomial.png 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 |