Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2025 / week04 / index.du
diff options
context:
space:
mode:
1 files changed, 115 insertions, 76 deletions
-rw-r--r--src/teaching/upp-2025/week04/index.du191
diff --git a/src/teaching/upp-2025/week04/index.du b/src/teaching/upp-2025/week04/index.du
index 8b138fa..89cd0db 100644
--- a/src/teaching/upp-2025/week04/index.du
+++ b/src/teaching/upp-2025/week04/index.du
@@ -1,17 +1,17 @@
-# Задачи - УПП, Седмица 4, 23.10.2025
+'def title Задачи - УПП, Седмица 4, 23.10.2025
+'def desc Условията на задачите за упражнение.
-'define expected-reading 9 min
-'define created 18 October 2025
-'define edited 25 October 2025
-[$pagenav]
+# {title}
-GitHub Classroom: [url https://classroom.github.com/a/rOzekyCs]
+{pagenav 9 min;18 October 2025;25 October 2025}
+
+GitHub Classroom: {url https://classroom.github.com/a/rOzekyCs}
:important
.p
-При [`if`]-ове [=ще=] вземаме точки за изрази от типа:
+При {` if}-ове {b ще} вземаме точки за изрази от типа:
-```c++
+```cpp
if (condition)
std::cout << 1;
else
@@ -20,7 +20,7 @@ else
.p
или
-```c++
+```cpp
if (condition)
std::cout << false;
else
@@ -29,7 +29,7 @@ else
.p
или
-```c++
+```cpp
if (condition)
std::cout << '0';
else
@@ -43,12 +43,13 @@ else
### Задача 1
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise01.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise01.cpp}
От входа получавате две реални числа.
Трябва да ги върнете в нарастващ ред.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -62,9 +63,10 @@ else
|: -11.1 -2.5
+
### Задача 2
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise02.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise02.cpp}
От входа получавате буква.
Трябва да изкрате:
@@ -74,7 +76,8 @@ else
- "Digit" ако е цифра и
- "Other" в останалите случаи.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -91,14 +94,16 @@ else
|: Other
+
### Задача 3
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise03.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise03.cpp}
От входа получавате ден в месеца (допускаме 30-дневен месец, където първи ден е Понеделник; като месец Септември от тази година).
Трябва да върнете името на деня от седмицата.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -118,18 +123,20 @@ else
|: Tuesday
+
### Задача 4
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise04.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise04.cpp}
-От входа получавате реални коефициенти на квадратно уравнение: [`a`], [`b`] и [`c`].
+От входа получавате реални коефициенти на квадратно уравнение: {` a}, {` b} и {` c}.
Трябва да изкарате корените на уравнението, като:
.bulleted
- ако има два корена, изкарвате и двата,
-- ако има един корен, изкарвате [=само=] него,
+- ако има един корен, изкарвате {b само} него,
- ако няма реални корени, изкарвате "No real roots".
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -143,21 +150,23 @@ else
|: 1.5
+
### Задача 5
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise05.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise05.cpp}
От входа получавате буква, съответстваща на операция върху числа:
.bulleted
-- [`_`] за закръгляне надолу на число
-- [`+`] за събиране на две числа
-- [`*`] за умножение на две числа
-- [`x`] за умножение на три числа
-- [`.`] за умножение на четири числа
+- {` _} за закръгляне надолу на число
+- {` +} за събиране на две числа
+- {` *} за умножение на две числа
+- {` x} за умножение на три числа
+- {` .} за умножение на четири числа
След тази буква ще получите съответния брой реални числа и трябва да изкарате резултата от операцията.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -177,16 +186,17 @@ else
|: -8
+
### Задача 6
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise06.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise06.cpp}
От входа получавате число, което определя фигура.
Това число може да бъде:
.bulleted
-- [`1`] за окръжност,
-- [`2`] за правоъгълник и
-- [`3`] за триъгълник.
+- {` 1} за окръжност,
+- {` 2} за правоъгълник и
+- {` 3} за триъгълник.
Спрямо типа фигура, ще приемете различен брой реални числа:
.bulleted
@@ -197,7 +207,8 @@ else
Използвайки тези числа, трябва да изкарате периметър (дължина) на фигурата.
За константата &pi; използвайте поне 5 цифри след запетаята.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -211,16 +222,18 @@ else
|: 1849.63
+
### Задача 7
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise07.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise07.cpp}
От входа получавате цяло число.
Изкарайте за него таблицата на умножение от 1 до 10 включително.
-[=Използвайте цикъл!=]
+{b Използвайте цикъл!}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -253,14 +266,16 @@ else
10 -80
+
### Задача 8
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise08.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise08.cpp}
-От входа получавате две цели положителни числа, [`a`] и [`x`].
-Пресметнете [`a`] на степен [`x`].
+От входа получавате две цели положителни числа, {` a} и {` x}.
+Пресметнете {` a} на степен {` x}.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -277,15 +292,17 @@ else
|: 844596301
+
### Задача 9
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise09.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise09.cpp}
От входа получавате цяло положително число.
-Трябва [=поотделно=] да сумирате всички четни и нечетни числа от 1 до подаденото число, включително.
+Трябва {b поотделно} да сумирате всички четни и нечетни числа от 1 до подаденото число, включително.
Накрая изкарайте двете суми.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -299,14 +316,16 @@ else
|: 1056 1024
+
### Задача 10
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise10.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise10.cpp}
От входа получавате цяло положително число.
Изкарайте за него "Prime" ако е просто и "Not prime" ако не е, последвано от най-малкия делител (различен от 1 и самото число).
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -323,14 +342,16 @@ else
|: Not prime 1187
+
### Задача 11
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise11.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise11.cpp}
От входа получавате цели числа докато не срещнете числото 0.
Трябва да върнете умножението на всички тези числа (без нулата).
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -344,20 +365,22 @@ else
|: -1479870000
+
### Задача 12
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise12.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise12.cpp}
От входа получавате знак.
-Ако този знак е аритметична операция ([`+`], [`-`], [`*`], [`/`]), тогава ще получите две цели числа.
+Ако този знак е аритметична операция ({` +}, {` -}, {` *}, {` /}), тогава ще получите две цели числа.
Трябва да пресметнете резултата на операцията върху тези числа, да го изкарате и пак да очаквате знак.
Ако този знак е точка, тогава спирате програмата.
-[*При вас вход и изход ще са смесени.*]
+{i При вас вход и изход ще са смесени.}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -371,16 +394,18 @@ else
|: 8192 5 49 100
+
### Задача 13
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise13.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise13.cpp}
-[url https://en.wikipedia.org/wiki/Fibonacci_sequence Редицата на Фибоначи] е последователност от числа, където всяко следващо е равно на сумата на предходните две.
+{url Редицата на Фибоначи;https://en.wikipedia.org/wiki/Fibonacci_sequence} е последователност от числа, където всяко следващо е равно на сумата на предходните две.
По-точно, първото число (на индекс 0) е 0, второто число (на индекс 1) е 1 и всяко следващо се определя от предходните две.
От входа получавате неотрицателен индекс и трябва да изкарате съответното число на фибоначи.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -406,14 +431,16 @@ else
|: 3524578
+
### Задача 14
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise14.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise14.cpp}
От входа получавате цяло неотрицателно число.
Трябва да обърнете реда на цифрите в числото и да изкарате резултата.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -430,11 +457,12 @@ else
|: 73444672
+
## За самоподготовка
### Задача 15
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise15.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise15.cpp}
Получавате реално число: оценка по шестобалната система.
Трябва да върнете "наименованието" на оценката спрямо стойността:
@@ -446,7 +474,8 @@ else
- "Weak" (оценки от 2.99 до 2.0) и
- "Bad" (по-малко от двойка)
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -469,9 +498,10 @@ else
|: Bad
+
### Задача 16
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise16.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise16.cpp}
Получавате три реални числа: ъгли в градуси.
Трябва да върнете дали триъгълник с тези ъгли може да съществува, и ако да, дали е:
@@ -482,7 +512,8 @@ else
- тъп ("Obtuse") или
- правоъгълен ("Right").
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -502,16 +533,18 @@ else
|: Obtuse triangle
+
### Задача 17
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise17.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise17.cpp}
-[url https://en.wikipedia.org/wiki/Factorial Факториел] е функция върху число, която представлява умножението на всички цели числа от 1 до самото число включително.
+{url Факториел;https://en.wikipedia.org/wiki/Factorial} е функция върху число, която представлява умножението на всички цели числа от 1 до самото число включително.
От входа получавате цяло положително число.
Трябва да изкарате неговия факториел.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -531,9 +564,10 @@ else
|: 6
+
### Задача 18
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise18.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise18.cpp}
Във вашата програма запазете цяла неотрицателна константа.
От входа получавате цели неотрицателни числа: опити да се познае.
@@ -542,9 +576,10 @@ else
Ако е по-голямо, трябва да върнете "Lower".
Ако бъде познато, трябва да върнете "You guessed it!" и да спрете програмата.
-[*В следните примери числото е 1337. Вашия вход и изход ще бъдат смесени.*]
+{i В следните примери числото е 1337. Вашия вход и изход ще бъдат смесени.}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -578,15 +613,16 @@ You guessed it!
### Задача 19
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise19.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise19.cpp}
-[url https://en.wikipedia.org/wiki/Harmonic_series_(mathematics) Хармоничния ред] е редица числа, където n-тото число се определя по формулата:
+{url Хармоничния ред;https://en.wikipedia.org/wiki/Harmonic_series_(mathematics)} е редица числа, където n-тото число се определя по формулата:
-[image ./img/harmonic_element.png]
+{img ./img/harmonic_element.png}
От входа ще получите положително цяло число n, трябва да върнете n-тото число в хармоничния ред.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -606,21 +642,23 @@ You guessed it!
|: 3.59774
+
### Задача 20
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise20.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise20.cpp}
От входа получавате реално ненулево "целево" число и реално "обсег" число (в проценти).
След това получавате редица реални ненулеви числа.
-Продължавате да приемате реални числа, докато сумата на всички числа в редицата не е поне с "обсег" процента [*близкост*] до целевото число.
+Продължавате да приемате реални числа, докато сумата на всички числа в редицата не е поне с "обсег" процента {i близкост} до целевото число.
Накрая на програмата изкарайте тази сума.
Формулата за процентова разлика между числа а и b е:
-[image ./img/percent_diff.png]
+{img ./img/percent_diff.png}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -637,20 +675,21 @@ You guessed it!
|: 20
+
## За любознателните
### Задача 21
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise21.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise21.cpp}
В година 60та, преди близко до 2000 години, гръцкия математик Херон описва алгоритъм за пресмятане на корен квадратен на подадено число S.
-Описва се редица от числа x, където всяко следващо е равно на предходното, следвайки [url https://en.wikipedia.org/wiki/Square_root_algorithms#Heron's_method просто линейно взаимоотношение].
+Описва се редица от числа x, където всяко следващо е равно на предходното, следвайки {url просто линейно взаимоотношение;https://en.wikipedia.org/wiki/Square_root_algorithms#Heron's_method}.
Всеки следващ член на редицата става все по-близък до истинската стойност на корена.
Първия член е произволно първоначално приближение.
Разбира се, колко е по-близко приближението до истинската стойност, толкова по-бързо се приближаваме.
-Нека за нашите цели да използваме [url https://en.wikipedia.org/wiki/Square_root_algorithms#Hyperbolic_estimates хиперболичното приближение].
+Нека за нашите цели да използваме {url хиперболичното приближение;https://en.wikipedia.org/wiki/Square_root_algorithms#Hyperbolic_estimates}.
Получавате цяло число S и индекс на член в редицата n.
Трябва да върнете корена на числото по метода на Херон.