Summary Files Commits Branches @commit @diff @stats
path: root / src
diff options
context:
space:
mode:
Commitad8ac7657d94ac6afcb73308ceca2c0b8ff0b621 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-10-19 18:10:49 +0300
Committer
 Syndamia <kamen@syndamia.com>
2025-10-19 18:10:49 +0300
Filescf916b76bd23e4e01f743c1411346c4b59e4181c /src
syndamia.com-ad8ac7657d94ac6afcb73308ceca2c0b8ff0b621.tar
syndamia.com-ad8ac7657d94ac6afcb73308ceca2c0b8ff0b621.tar.gz
syndamia.com-ad8ac7657d94ac6afcb73308ceca2c0b8ff0b621.zip
Parent2bcbe48747822e97756df2e788957a08082eab3f (diff)
feat(teaching/upp-2025/w04): Add exercises
diff --git a/src/teaching/upp-2025/index.du b/src/teaching/upp-2025/index.du
index bce64e0..4264c11 100644
--- a/src/teaching/upp-2025/index.du
+++ b/src/teaching/upp-2025/index.du
@@ -51,3 +51,11 @@
|| [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03 Решения]
|| [url https://classroom.github.com/a/UMc2WhVX GitHub Classroom]
:|
+
+|:4:|
+ |:23.10.2025:|
+ |:Условни оператори, цикли:|
+|::||::||:
+ [url ./week04 Задачи]
+ || [url https://classroom.github.com/a/rOzekyCs GitHub Classroom]
+ :|
diff --git a/src/teaching/upp-2025/week04/img/harmonic_element.png b/src/teaching/upp-2025/week04/img/harmonic_element.png
new file mode 100644
index 0000000..b149442
--- /dev/null
+++ b/src/teaching/upp-2025/week04/img/harmonic_element.png
Binary files differ
diff --git a/src/teaching/upp-2025/week04/img/percent_diff.png b/src/teaching/upp-2025/week04/img/percent_diff.png
new file mode 100644
index 0000000..ca5ddaf
--- /dev/null
+++ b/src/teaching/upp-2025/week04/img/percent_diff.png
Binary files differ
diff --git a/src/teaching/upp-2025/week04/index.du b/src/teaching/upp-2025/week04/index.du
new file mode 100644
index 0000000..3ceab24
--- /dev/null
+++ b/src/teaching/upp-2025/week04/index.du
@@ -0,0 +1,360 @@
+# Задачи - УПП, Седмица 4, 23.10.2025
+
+'define expected-reading 9 min
+'define created 18 October 2025
+'define edited 19 October 2025
+[$pagenav]
+
+GitHub Classroom: [url https://classroom.github.com/a/rOzekyCs]
+
+## За решаване
+
+### Задача 1
+
+От входа получавате две реални числа.
+Трябва да ги върнете в нарастващ ред.
+
+[$examples_bg]
+|:8 7:||:7 8:|
+|:2.6 11.991:||:2.6 11.991:|
+|:-2.5 -11.1:||:-11.1 -2.5:|
+
+### Задача 2
+
+От входа получавате буква.
+Трябва да изкрате:
+.bulleted
+- "Lowercase letter" ако е малка буква,
+- "Uppercase letter" ако е главна буква,
+- "Digit" ако е цифра и
+- "Other" в останалите случаи.
+
+[$examples_bg]
+|:k:||:Lowercase letter:|
+|:Q:||:Uppercase letter:|
+|:8:||:Digit:|
+|:+:||:Other:|
+
+### Задача 3
+
+От входа получавате ден в месеца (допускаме 30-дневен месец, където първи ден е Понеделник; като месец Септември от тази година).
+Трябва да върнете името на деня от седмицата.
+
+[$examples_bg]
+|:2:||:Tuesday:|
+|:7:||:Sunday:|
+|:8:||:Monday:|
+|:19:||:Friday:|
+|:30:||:Tuesday:|
+
+### Задача 4
+
+От входа получавате реални коефициенти на квадратно уравнение: `[a]`, `[b]` и `[c]`.
+Трябва да изкарате корените на уравнението, като:
+.bulleted
+- ако има два корена, изкарвате и двата,
+- ако има един корен, изкарвате =[само]= него,
+- ако няма реални корени, изкарвате "No real roots".
+
+[$examples_bg]
+|:5 6 1:||:-0.2 -1:|
+|:5 2 1:||:No real roots:|
+|:4 -12 9:||:1.5:|
+
+### Задача 5
+
+От входа получавате буква, съответстваща на операция върху числа:
+.bulleted
+- `[_]` за закръгляне надолу на число
+- `[+]` за събиране на две числа
+- `[*]` за умножение на две числа
+- `[x]` за умножение на три числа
+- `[.]` за умножение на четири числа
+
+След тази буква ще получите съответния брой реални числа и трябва да изкарате резултата от операцията.
+
+[$examples_bg]
+|:_ 5.7:||:5:|
+|:+ 9 10:||:19:|
+|:* 2 2:||:4:|
+|:x 2 2 3:||:12:|
+|:. 8 -2 0.5:||:-8:|
+
+### Задача 6
+
+От входа получавате число, което определя фигура.
+Това число може да бъде:
+.bulleted
+- `[1]` за окръжност,
+- `[2]` за правоъгълник и
+- `[3]` за триъгълник.
+
+Спрямо типа фигура, ще приемете различен брой реални числа:
+.bulleted
+- за окръжност - радиус,
+- за правоъгълник - дължините на двете (уникални) страни,
+- за триъгълник - дължините на трите страни.
+
+Използвайки тези числа, трябва да изкарате периметър (дължина) на фигурата.
+За константата &pi; използвайте поне 5 цифри след запетаята.
+
+[$examples_bg]
+|:1 38.1:||:239.38936:|
+|:2 70 25:||:190:|
+|:3 1000 238.5 611.13:||:1849.63:|
+
+### Задача 7
+
+От входа получавате цяло число.
+Изкарайте за него таблицата на умножение от 1 до 10 включително.
+
+=[Използвайте цикъл!]=
+
+[$examples_bg]
+|:7:||:
+<pre>1 7
+2 14
+3 21
+4 28
+5 35
+6 42
+7 49
+8 56
+9 63
+10 70</pre>:|
+|:-8:||:
+<pre>1 -8
+2 -16
+3 -24
+4 -32
+5 -40
+6 -48
+7 -56
+8 -64
+9 -72
+10 -80</pre>:|
+
+### Задача 8
+
+От входа получавате две цели положителни числа, `[a]` и `[x]`.
+Пресметнете `[a]` на степен `[x]`.
+
+[$examples_bg]
+|:2 8:||:256:|
+|:1 100:||:1:|
+|:83 1:||:83:|
+|:61 5:||:844596301:|
+
+### Задача 9
+
+От входа получавате цяло положително число.
+Трябва =[поотделно]= да сумирате всички четни и нечетни числа от 1 до подаденото число, включително.
+Накрая изкарайте двете суми.
+
+[$examples_bg]
+|:10:||:30 25:|
+|:1:||:0 1:|
+|:64:||:1056 1024:|
+
+### Задача 10
+
+От входа получавате цяло положително число.
+Изкарайте за него "Prime" ако е просто и "Not prime" ако не е, последвано от най-малкия делител (различен от 1 и самото число).
+
+[$examples_bg]
+|:2:||:Prime:|
+|:4:||:Not prime 2:|
+|:3313:||:Prime:|
+|:1408969:||:Not prime 1187:|
+
+### Задача 11
+
+От входа получавате цели числа докато не срещнете числото 0.
+Трябва да върнете умножението на всички тези числа (без нулата).
+
+[$examples_bg]
+|:1 2 3 0:||:6:|
+|:-10 15 6 -3 7 0:||:18900:|
+|:-4 -50 58 9 -25 -7 -3 27 0:||:-1479870000:|
+
+### Задача 12
+
+От входа получавате знак.
+
+Ако този знак е аритметична операция (`[+]`, `[-]`, `[*]`, `[/]`), тогава ще получите две цели числа.
+Трябва да пресметнете резултата на операцията върху тези числа, да го изкарате и пак да очаквате знак.
+
+Ако този знак е точка, тогава спирате програмата.
+
+*[При вас вход и изход ще са смесени.]*
+
+[$examples_bg]
+|:+ 8 4 - 10 5 .:||:12 5:|
+|:.:||::|
+|:* 64 128 / 100 20 * 7 7 + 90 10 .:||:8192 5 49 100:|
+
+### Задача 13
+
+[url https://en.wikipedia.org/wiki/Fibonacci_sequence Редицата на Фибоначи] е последователност от числа, където всяко следващо е равно на сумата на предходните две.
+По-точно, първото число (на индекс 0) е 0, второто число (на индекс 1) е 1 и всяко следващо се определя от предходните две.
+
+От входа получавате неотрицателен индекс и трябва да изкарате съответното число на фибоначи.
+
+[$examples_bg]
+|:5:||:5:|
+|:6:||:8:|
+|:0:||:0:|
+|:1:||:1:|
+|:2:||:1:|
+|:12:||:144:|
+|:33:||:3524578:|
+
+### Задача 14
+
+От входа получавате цяло неотрицателно число.
+Трябва да обърнете реда на цифрите в числото и да изкарате резултата.
+
+[$examples_bg]
+|:123:||:321:|
+|:500:||:5:|
+|:1002:||:2001:|
+|:27644437:||:73444672:|
+
+## За самоподготовка
+
+### Задача 15
+
+Получавате реално число: оценка по шестобалната система.
+Трябва да върнете "наименованието" на оценката спрямо стойността:
+.bulleted
+- "Excellent" (за 5.5 или повече),
+- "Very good",
+- "Good",
+- "Average",
+- "Weak" (оценки от 2.99 до 2.0) и
+- "Bad" (по-малко от двойка)
+
+[$examples_bg]
+|:5:||:Very good:|
+|:7.1:||:Excellent:|
+|:3.5:||:Good:|
+|:3:||:Average:|
+|:2.8:||:Weak:|
+|:1.9:||:Bad:|
+
+### Задача 16
+
+Получавате три реални числа: ъгли в градуси.
+Трябва да върнете дали триъгълник с тези ъгли може да съществува, и ако да, дали е:
+.bulleted
+- равностранен ("Equilateral"),
+- равнобедрен ("Isosceles"),
+- остър ("Acute"),
+- тъп ("Obtuse") или
+- правоъгълен ("Right").
+
+[$examples_bg]
+|:60 60 60:||:Equilateral triangle:|
+|:30 120 30:||:Isosceles triangle:|
+|:75 25 80:||:Acute triangle:|
+|:90 60 30:||:Right triangle:|
+|:107 33 40:||:Obtuse triangle:|
+
+### Задача 17
+
+[url https://en.wikipedia.org/wiki/Factorial Факториел] е функция върху число, която представлява умножението на всички цели числа от 1 до самото число включително.
+
+От входа получавате цяло положително число.
+Трябва да изкарате неговия факториел.
+
+[$examples_bg]
+|:5:||:120:|
+|:1:||:1:|
+|:2:||:2:|
+|:9:||:362880:|
+|:3:||:6:|
+
+### Задача 18
+
+Във вашата програма запазете цяла неотрицателна константа.
+От входа получавате цели неотрицателни числа: опити да се познае.
+
+Ако подаденото число е по-малко, трябва да върнете "Higher".
+Ако е по-голямо, трябва да върнете "Lower".
+Ако бъде познато, трябва да върнете "You guessed it!" и да спрете програмата.
+
+*[В следните примери числото е 1337. Вашия вход и изход ще бъдат смесени.]*
+
+[$examples_bg]
+|:
+<pre>1000
+2000
+1500
+1250
+1251
+1400
+1300
+1350
+1340
+1337</pre>
+:||:
+<pre>Higher
+Lower
+Lower
+Higher
+Higher
+Lower
+Higher
+Lower
+Higher
+You guessed it!</pre>
+:|
+
+### Задача 19
+
+[url https://en.wikipedia.org/wiki/Harmonic_series_(mathematics) Хармоничния ред] е редица числа, където n-тото число се определя по формулата:
+
+[image ./img/harmonic_element.png]
+
+От входа ще получите положително цяло число n, трябва да върнете n-тото число в хармоничния ред.
+
+[$examples_bg]
+|:1:||:1:|
+|:2:||:1.5:|
+|:5:||:2.28333:|
+|:13:||:3.18013:|
+|:20:||:3.59774:|
+
+### Задача 20
+
+От входа получавате реално ненулево "целево" число и реално "обсег" число (в проценти).
+След това получавате редица реални ненулеви числа.
+
+Продължавате да приемате реални числа, докато сумата на всички числа в редицата не е поне с "обсег" процента *[близкост]* до целевото число.
+Накрая на програмата изкарайте тази сума.
+
+Формулата за процентова разлика между числа а и b е:
+
+[image ./img/percent_diff.png]
+
+[$examples_bg]
+|:5 80 4.5:||:4.5:|
+|:5 80 3 1.2:||:4.2:|
+|:71.12 95.9 8 13 -5.5 21.9 -6 -1 42:||:72.4:|
+|:50 1.5 20:||:20:|
+
+## За любознателните
+
+### Задача 21
+
+В година 60та, преди близко до 2000 години, гръцкия математик Херон описва алгоритъм за пресмятане на корен квадратен на подадено число S.
+Описва се редица от числа x, където всяко следващо е равно на предходното, следвайки [url https://en.wikipedia.org/wiki/Square_root_algorithms#Heron's_method просто линейно взаимоотношение].
+
+Всеки следващ член на редицата става все по-близък до истинската стойност на корена.
+
+Първия член е произволно първоначално приближение.
+Разбира се, колко е по-близко приближението до истинската стойност, толкова по-бързо се приближаваме.
+Нека за нашите цели да използваме [url https://en.wikipedia.org/wiki/Square_root_algorithms#Hyperbolic_estimates хиперболичното приближение].
+
+Получавате цяло число S и индекс на член в редицата n.
+Трябва да върнете корена на числото по метода на Херон.
diff --git a/src/teaching/upp-2025/week04/tex/harmonic_element.tex b/src/teaching/upp-2025/week04/tex/harmonic_element.tex
new file mode 100644
index 0000000..404bebe
--- /dev/null
+++ b/src/teaching/upp-2025/week04/tex/harmonic_element.tex
@@ -0,0 +1,2 @@
+% https://latexeditor.lagrida.com/
+h_n = \sum_{i=1}^{n} \frac{1}{n} = 1 + \frac{1}{2} + \frac{1}{3} + \cdots + \frac{1}{n}
diff --git a/src/teaching/upp-2025/week04/tex/percent_diff.tex b/src/teaching/upp-2025/week04/tex/percent_diff.tex
new file mode 100644
index 0000000..0de085b
--- /dev/null
+++ b/src/teaching/upp-2025/week04/tex/percent_diff.tex
@@ -0,0 +1,2 @@
+% https://latexeditor.lagrida.com/
+\frac{|a - b|}{\frac{a + b}{2}} \cdot 100