Summary Files Commits Branches @commit @diff @stats
path: root / src
diff options
context:
space:
mode:
Commitebd7d137fecc781d412203c67ac765d2bb2d2d5b (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-10-26 17:35:14 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-10-26 17:35:14 +0200
Filesb418b208aa74510f64ed1e32b929ebc600756dee /src
syndamia.com-ebd7d137fecc781d412203c67ac765d2bb2d2d5b.tar
syndamia.com-ebd7d137fecc781d412203c67ac765d2bb2d2d5b.tar.gz
syndamia.com-ebd7d137fecc781d412203c67ac765d2bb2d2d5b.zip
Parent9cedbac6775cfa3b87efe9283d95d2d1a759c8d5 (diff)
feat(teaching/upp-2025/w05): Add exercises
diff --git a/src/teaching/upp-2025/index.du b/src/teaching/upp-2025/index.du
index 83b0a26..5d6e79e 100644
--- a/src/teaching/upp-2025/index.du
+++ b/src/teaching/upp-2025/index.du
@@ -60,3 +60,11 @@
|| [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04 Решения]
|| [url https://classroom.github.com/a/rOzekyCs GitHub Classroom]
:|
+
+|:5:|
+ |:30.10.2025:|
+ |:Масиви, цикли:|
+|::||::||:
+ [url ./week05 Задачи]
+ || [url https://classroom.github.com/a/6oPRMxJx GitHub Classroom]
+ :|
diff --git a/src/teaching/upp-2025/week05/img/catalan_def.png b/src/teaching/upp-2025/week05/img/catalan_def.png
new file mode 100644
index 0000000..54e7274
--- /dev/null
+++ b/src/teaching/upp-2025/week05/img/catalan_def.png
Binary files differ
diff --git a/src/teaching/upp-2025/week05/img/ln_taylor_series.png b/src/teaching/upp-2025/week05/img/ln_taylor_series.png
new file mode 100644
index 0000000..ae14115
--- /dev/null
+++ b/src/teaching/upp-2025/week05/img/ln_taylor_series.png
Binary files differ
diff --git a/src/teaching/upp-2025/week05/img/lucas_def.png b/src/teaching/upp-2025/week05/img/lucas_def.png
new file mode 100644
index 0000000..2fc41ae
--- /dev/null
+++ b/src/teaching/upp-2025/week05/img/lucas_def.png
Binary files differ
diff --git a/src/teaching/upp-2025/week05/img/sinx_taylor_series.png b/src/teaching/upp-2025/week05/img/sinx_taylor_series.png
new file mode 100644
index 0000000..4f1263d
--- /dev/null
+++ b/src/teaching/upp-2025/week05/img/sinx_taylor_series.png
Binary files differ
diff --git a/src/teaching/upp-2025/week05/index.du b/src/teaching/upp-2025/week05/index.du
new file mode 100644
index 0000000..6d06781
--- /dev/null
+++ b/src/teaching/upp-2025/week05/index.du
@@ -0,0 +1,356 @@
+# Задачи - УПП, Седмица 5, 30.10.2025
+
+'define expected-reading 14 min
+'define created 26 October 2025
+'define edited 26 October 2025
+[$pagenav]
+
+GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
+
+.warn
+Имайте предвид, че не всички задачи се решават с масиви!
+
+## За решаване
+
+### Задача 1
+
+От входа получавате 10 реални числа.
+Трябва да ги върнете в обратен ред.
+
+[$examples_bg]
+|:1 2 3 4 5 6 7 8 9 10:||:10 9 8 7 6 5 4 3 2 1:|
+|:41.4 89.95 65 34.799 18.62 100.001 84.55 69.21 6 39.8:|
+|:39.8 6 69.21 84.55 100.001 18.62 34.799 65 89.95 41.4:|
+
+### Задача 2
+
+От входа получавате 7 букви.
+Трябва да изкарате буквите в същата последователност, обаче завъртяни надясно с 3 позиции.
+
+[$examples_bg]
+|:a b c d e f g:||:e f g a b c d:|
+|:k l m l j l b:||:j l b k l m l:|
+
+### Задача 3
+
+От входа получавате 14 цели неотрицателни числа.
+Трябва да изкарате второто най-голямо число.
+Ако няма такова, просто изкарайте най-голямото.
+
+[$examples_bg]
+|:1 2 3 4 5 6 7 8 9 10 11 12 13 14:||:13:|
+|:505 19 899 0 232 61 546 6 65 259 55 389 326 760:||:760:|
+|:9 9 9 9 9 9 9 9 9 9 9 9 9 9:||:9:|
+
+### Задача 4
+
+От входа получавате две цели положителни числа.
+Трябва да върнете [url https://en.wikipedia.org/wiki/Factorial#Definition факториел] от първото число, който факториел е повдигнат на степен второто число.
+
+Факториел на едно (неотрицателно цяло) число е умножението на всички цели числа от 1 до самото число включително.
+Примерно, факториел от 5 е `[1 * 2 * 3 * 4 * 5 = 120]`.
+
+[$examples_bg]
+|:5 1:||:120:|
+|:5 2:||:14400:|
+|:3 6:||:46656:|
+|:4 3:||:13824:|
+|:1 183:||:1:|
+|:2 8:||:256:|
+
+### Задача 5
+
+От входа получавате 18 цели числа.
+Трябва да изкарате същата поредица числа, обаче всички нули са в началото на редицата.
+
+[$examples_bg]
+|:1 0 0 2 3 4 0 5 0 6 0 0 0 7 8 0 9 0:||:0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9:|
+|:0 839 643 42 -694 57 650 729 -434 0 35 155 176 873 40 0 658 0:|
+|:0 0 0 0 839 643 42 -694 57 650 729 -434 35 155 176 873 40 658:|
+
+.question
+Нужни ли са масиви, ако в условието трябваше да изкарвате нулите в края на поредицата?
+
+### Задача 6
+
+От входа получавате 15 цели числа.
+Трябва да изкарате дължината на най-дългата последователност от числа, която е подредена в нарастващ ред.
+
+Последователност от числа, която съдържа еднакви числа, също се зачита за сортирана в нарастващ ред.
+
+[$examples_bg]
+|:1 2 3 0 0 0 6 7 8 8 8 -3 -2 -1 0:||:6:|
+|:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1:||:15:|
+|:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15:||:15:|
+|:4 -4 4 -4 4 -4 4 -4 4 -4 4 -4 4 -4 4:||:2:|
+|:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1:||:1:|
+|:-539 -118 -431 53 -151 -151 -82 -40 640 -47 347 -50 -100 -198 984:||:5:|
+
+### Задача 7
+
+От входата получавате цяло неотрицателно число.
+Върнете дали то е перфектно: дали е равно на сумата на всички свои делители, освен себе си.
+
+[$examples_bg]
+|:6:||:Perfect:|
+|:7:||:Not perfect:|
+|:1337:||:Not perfect:|
+|:27:||:Not perfect:|
+|:28:||:Perfect:|
+|:29:||:Not perfect:|
+|:33550336:||:Perfect:|
+|:496:||:Perfect:|
+|:42:||:Not perfect:|
+|:8128:||:Perfect:|
+
+### Задача 8
+
+От входа получавате две редици от по 10 реални числа (т.е. първите 10 числа са от първата редица, и вторите 10 числа образуват втората редица).
+След това получавате знак - аритметича операция (`[+]`, `[-]`, `[*]`, `[/]`).
+
+Трябва да изпълните операцията върху всяка съответна двойка числа от двете редици и да върнете резултатите.
+
+[$examples_bg]
+|:1 2 3 4 5 6 7 8 9 10<br>
+ 1 2 3 4 5 6 7 8 9 10<br>
+ +:|
+|:2 4 6 8 10 12 14 16 18 20:|
+|:4.5 -16 194.1 919.01 1000.11 -27 12 444 71 0<br>
+ 0 8 12 56 10 0 3 14 1 0<br>
+ /:|
+|:inf -2 16.175 16.41 100.011 -inf 4 31.714 71 -nan:|
+
+### Задача 9
+
+От входа получавате реално число z между 0 (изключително) и 2 (включително), заедно с дължина n.
+
+Трябва да намерите стойността на логаритъм с основа &escr; ([url https://en.wikipedia.org/wiki/E_(mathematical_constant) Неперово число]) от това число, използвайки развитието по ред на Тейлър:
+
+[image ./img/ln_taylor_series.png]
+
+като n определя колко елемента от реда да използвате.
+
+[$examples_bg]
+|:1 1:||:0:|
+|:1.5 1:||:0.5:|
+|:1.5 3:||:0.416667:|
+|:1.5 9:||:0.405532:|
+|:1.5 20:||:0.405465:|
+|:0.5 1:||:-0.5:|
+|:0.5 5:||:-0.688542:|
+|:0.5 20:||:-0.693147:|
+|:0.01 20:||:-3.40687:|
+|:0.01 900:||:-4.60516:|
+|:0.01 1000:||:-4.60517:|
+
+### Задача 10
+
+От входа получавате цяло неотрицатено число с максимум 8 цифри.
+Това число представлява сериен номер под [url https://en.wikipedia.org/wiki/S10_(UPU_standard) S10 стандарта за идентификационни номера на пратки].
+
+Трябва да пресметнете "контролната цифра" (check digit) на серийния номер.
+Това става по следния начин:
+.numbered
+1. От ляво на дясно, трябва да умножите всяка цифра със съответната си "тежест": 8, 6, 4, 2, 3, 5, 9, 7
+2. Сумирате умножените цифри
+3. Пресмятате контролната цифра по формулата: `[11 - <сума> mod 11]`, където
+ ако резултата е 10, цифрата е 0 и ако резултата е 11, цифрата е 5.
+
+[$examples_bg]
+|:0:||:5:|
+|:1:||:4:|
+|:2:||:8:|
+|:8:||:0:|
+|:47312482:||:9:|
+|:87654321:||:6:|
+|:37153644:||:4:|
+|:30159181:||:5:|
+
+### Задача 11
+
+От входа получавате цяло неотрицателно число.
+
+Изкарвате [url https://en.wikipedia.org/wiki/Lucas_number числото на Лукас] след толкова на брой позиции и ако числото =[не]= е било 0, приемаме ново число и повтаряте логиката.
+
+Тоест, ако първото число е n, тогава връщате `[n]`-тото число на Лукас.\n
+Ако второто число е m, тогава връщате `[n + m]`-тото число на Лукас.
+И така нататък.
+
+Числата на Лукас се определят по следния начин:
+
+[image ./img/lucas_def.png]
+
+*[Вашия вход и изход може да са смесени!]*
+
+[$examples_bg]
+|:0:||:2:|
+|:1 0:||:1 1:|
+|:2 0:||:3 3:|
+|:5 0:||:11 11:|
+|:2 3 0:||:3 11 11:|
+|:8 16 17 0:||:47 2207 3571 3571:|
+
+### Задача 12
+
+От входа получавате 20 цели числа, всяко от които е индекс на елемент в масива (т.е. всяко е между 0 и 19 включително).
+
+Започвайки от първия елемент, вземате числената му стойност като индекс и "отивате" на тази позиция в масива.
+Аналогично, за текущия елемент, вземате числената стойност и индексирате.
+Така продължавате, докато не стигнете до последния елемент, когато алгоритъма спира.
+
+Целта е да преброите колко пъти "скачате" между различни числа и да изкарате тази бройка.
+
+Ако се поражда цикъл (посетим някое число повече от един път), тогава трябва да изкарате "Infinity".
+
+[$examples_bg]
+|:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0:||:20:|
+|:19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0:||:1:|
+|:1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0:||:Infinity:|
+|:5 3 18 19 12 2 7 14 17 16 19 13 11 6 9 19 3 1 8 1:||:8:|
+|:4 3 18 9 12 2 7 14 17 16 19 13 11 6 9 19 3 1 8 1:||:Infinity:|
+
+## За самоподготовка
+
+### Задача 13
+
+От входа получавате 8 цели числа.
+След това получавате 9то цяло число.
+
+Трябва да върнете, сред 8те цели числа, колко често се среща 9тото.
+
+[$examples_bg]
+|:1 2 3 4 5 6 7 8 9:||:0:|
+|:1 2 1 -3 2 -4 3 5 1:||:2:|
+|:8 1 7 8 8 1 7 -3 8:||:3:|
+|:0 0 0 0 0 0 0 0 0:||:8:|
+
+### Задача 14
+
+От входа получавате 16 цели числа.
+Трябва да изкарате, на два реда, първо всички четни числа и после всички нечетни.
+
+[$examples_bg]
+|:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16:||:2 4 6 8 10 12 14 16<br>1 3 5 7 9 11 13 15:|
+|:-961 -46 86 871 657 96 -40 -297 -754 468 -5 662 -9 -392 82 255:|
+|:-46 86 96 -40 -754 468 662 -392 82<br>
+ -961 871 657 -297 -5 -9 255:|
+
+### Задача 15
+
+От входа получавате 12 реални числа.
+Трябва да върнете, на отделни редове, двойки числа от тази поредица:
+.bulleted
+- Първата двойка числа съдържа първото и последното число.
+- Втората двойка има второто и пред-посленото число.
+- И така нататък.
+
+[$examples_bg]
+|:1 2 3 4 5 6 7 8 9 10 11 12:|
+|:1 12<br>
+ 2 11<br>
+ 3 10<br>
+ 4 9<br>
+ 5 8<br>
+ 6 7:|
+|:419.8 124.01 -47 915.5 31.99 769.89 505 58 -568.5 547.77 899.192 52:|
+|:419.8 52<br>
+ 124.01 899.192<br>
+ -47 547.77<br>
+ 915.5 -568.5<br>
+ 31.99 58<br>
+ 769.89 505:|
+
+### Задача 16
+
+От входа получавате две редици от по 5 цели числа (т.е. първите 5 числа са част от първата редица и вторите 5 числа са част от втората).
+
+Трябва да изкарате една редица от числа, където двете редици са преплетени: първо имаме първото число от първата редица, след това първото число от втората редица, след това второто число от първата редица и така нататък.
+
+[$examples_bg]
+|:1 2 3 4 5 6 7 8 9 10:||:1 6 2 7 3 8 4 9 5 10:|
+|:0 1 0 1 0 1 0 1 0 1:||:0 1 1 0 0 1 1 0 0 1:|
+
+### Задача 17
+
+От входа получавате цяло число в десетична бройна система.
+
+Трябва да изкарате дали то е [url https://en.wikipedia.org/wiki/Narcissistic_number число на Армстронг]: число, което е равно на сумата на цифрите си, където всяка цифра е повдигната на степен, дължината на числото.
+
+[$examples_bg]
+|:153:||:Narcissistic:|
+|:5:||:Narcissistic:|
+|:0:||:Narcissistic:|
+|:10:||:Not narcissistic:|
+|:407:||:Narcissistic:|
+|:54748:||:Narcissistic:|
+
+### Задача 18
+
+От входа получавате 8 цели числа.
+
+Трябва да намерите индекса на равновесие: позиция сред числата, такава че сумата от първото число до индекса - 1 е равна на сумата на числата от индекса + 1 до последното число.
+
+Ако такаъв индекс не съществува, изкарате "No such index".
+
+[$examples_bg]
+|:-7 1 5 2 -4 3 0:||:3:|
+|:5 5 4 2 1 3 8 0:||:No such index:|
+
+### Задача 19
+
+От входа получавате две числа: реален ъгъл в радиани x и положителен максимален индекс n.
+
+Трябва да върнете стойността на синус от този ъгъл, използвайки реда на Тейлър:
+
+[image ./img/sinx_taylor_series.png]
+
+където n определя с колко елемента от реда да смятаме.
+
+[$examples_bg]
+|:0 1:||:0:|
+|:0.52359 15:||:0.499992:|
+|:1.57079 15:||:0.998356:|
+|:4.71238 5:||:-1.08189:|
+
+### Задача 20
+
+От входа получавате цяло положително число.
+Трябва да валидирате това число използвайки [url https://en.wikipedia.org/wiki/Luhn_algorithm алгоритъма на Luhn]:
+.numbered
+1. Най-дясната цифра е "цифра за проверка", тя трябва да бъде изкарана за после.
+2. Започвайки от най-дясната цифра (от останалите цифри, т.е. втората най-дясна в числото),
+ трябва да умножите всяка втора цифра по две.
+ Ако цифрата стане по-голяма от 9, трябва да *[извадите]* 9.
+3. Сумирате всички цифри (всички умножени и неумножени).
+4. Проверявате дали цифрата за проверка е равна на `[(10 - (сумa mod 10)) mod 10]`
+
+Този алгоритъм се използва главно в проверката на номера на дебитни/кредитни карти.
+Главната цел е да се засекат някои механични грешки при въвеждане на номера.
+
+[$examples_bg]
+|:0:||:Valid:|
+|:1:||:Invalid:|
+|:1151:||:Valid:|
+|:1337:||:Invalid:|
+|:12345674:||:Valid:|
+|:13245674:||:Invalid:|
+
+### Задача 21
+
+От входа получавате цяло неотрицателно число.
+Трябва да върнете съответното по индекс [url https://en.wikipedia.org/wiki/Catalan_number число на Каталан].
+
+n-тото число на Каталан се дефинира по следния начин:
+
+[image ./img/catalan_def.png]
+
+Където `[x!]` е [url https://en.wikipedia.org/wiki/Factorial#Definition факториел] от x.
+Припомняме, че факториел на едно число е умножението на всички цели числа от 1 до самото число включително.
+
+[$examples_bg]
+|:0:||:1:|
+|:1:||:1:|
+|:2:||:2:|
+|:5:||:42:|
+|:9:||:4862:|
+|:11:||:58786:|
diff --git a/src/teaching/upp-2025/week05/tex/catalan_def.tex b/src/teaching/upp-2025/week05/tex/catalan_def.tex
new file mode 100644
index 0000000..49b8b89
--- /dev/null
+++ b/src/teaching/upp-2025/week05/tex/catalan_def.tex
@@ -0,0 +1,2 @@
+% https://latexeditor.lagrida.com/
+C_n = \frac{(2n)!}{(n+1)! \, n!}
diff --git a/src/teaching/upp-2025/week05/tex/ln_taylor_series.tex b/src/teaching/upp-2025/week05/tex/ln_taylor_series.tex
new file mode 100644
index 0000000..38f7b44
--- /dev/null
+++ b/src/teaching/upp-2025/week05/tex/ln_taylor_series.tex
@@ -0,0 +1,2 @@
+% https://latexeditor.lagrida.com/
+\ln(z) = \sum_{i=1}^{n} (-1)^{i+1} \frac{(z - 1)^i}{i} = (z-1) - \frac{(z - 1)^2}{2} + \frac{(z - 1)^3}{3} + \cdots
diff --git a/src/teaching/upp-2025/week05/tex/lucas_def.tex b/src/teaching/upp-2025/week05/tex/lucas_def.tex
new file mode 100644
index 0000000..6b5b943
--- /dev/null
+++ b/src/teaching/upp-2025/week05/tex/lucas_def.tex
@@ -0,0 +1,6 @@
+% https://latexeditor.lagrida.com/
+L_i = \left\{ \begin{matrix}
+2 & \text{ако } i = 0 \\
+1 & \text{ако } i = 1 \\
+L_{i-1} + L_{i-2} & \text{иначе}
+\end{matrix} \right.
diff --git a/src/teaching/upp-2025/week05/tex/sinx_taylor_series.tex b/src/teaching/upp-2025/week05/tex/sinx_taylor_series.tex
new file mode 100644
index 0000000..603dadf
--- /dev/null
+++ b/src/teaching/upp-2025/week05/tex/sinx_taylor_series.tex
@@ -0,0 +1,2 @@
+% https://latexeditor.lagrida.com/
+\sin(x) = \sum_{k=0}^n \frac{(-1)^k}{(2k+1)!}x^{2k+1} = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!}+\cdots