diff options
| Commit | ad8ac7657d94ac6afcb73308ceca2c0b8ff0b621 (patch) | |
|---|---|---|
| Author | 2025-10-19 18:10:49 +0300 | |
| Committer | 2025-10-19 18:10:49 +0300 | |
| Files | cf916b76bd23e4e01f743c1411346c4b59e4181c /src | |
| syndamia.com-ad8ac7657d94ac6afcb73308ceca2c0b8ff0b621.tar syndamia.com-ad8ac7657d94ac6afcb73308ceca2c0b8ff0b621.tar.gz syndamia.com-ad8ac7657d94ac6afcb73308ceca2c0b8ff0b621.zip | ||
| Parent | 2bcbe48747822e97756df2e788957a08082eab3f (diff) | |
feat(teaching/upp-2025/w04): Add exercises
6 files changed, 372 insertions, 0 deletions
| -rw-r--r-- | src/teaching/upp-2025/index.du | 8 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week04/img/harmonic_element.png | bin | 0 -> 5163 bytes | |||
| -rw-r--r-- | src/teaching/upp-2025/week04/img/percent_diff.png | bin | 0 -> 2718 bytes | |||
| -rw-r--r-- | src/teaching/upp-2025/week04/index.du | 360 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week04/tex/harmonic_element.tex | 2 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week04/tex/percent_diff.tex | 2 |
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 Binary files differnew file mode 100644 index 0000000..b149442 --- /dev/null +++ b/src/teaching/upp-2025/week04/img/harmonic_element.png diff --git a/src/teaching/upp-2025/week04/img/percent_diff.png b/src/teaching/upp-2025/week04/img/percent_diff.png Binary files differnew file mode 100644 index 0000000..ca5ddaf --- /dev/null +++ b/src/teaching/upp-2025/week04/img/percent_diff.png 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 +- за окръжност - радиус, +- за правоъгълник - дължините на двете (уникални) страни, +- за триъгълник - дължините на трите страни. + +Използвайки тези числа, трябва да изкарате периметър (дължина) на фигурата. +За константата π използвайте поне 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 |