Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2025 / week05 / index.du
diff options
context:
space:
mode:
1 files changed, 113 insertions, 72 deletions
-rw-r--r--src/teaching/upp-2025/week05/index.du185
diff --git a/src/teaching/upp-2025/week05/index.du b/src/teaching/upp-2025/week05/index.du
index f19ff04..6e545e7 100644
--- a/src/teaching/upp-2025/week05/index.du
+++ b/src/teaching/upp-2025/week05/index.du
@@ -1,9 +1,9 @@
-# Задачи - УПП, Седмица 5, 30.10.2025
+'def title Задачи - УПП, Седмица 5, 30.10.2025
+'def desc Условията на задачите за упражнение.
-'define expected-reading 14 min
-'define created 26 October 2025
-'define edited 01 November 2025
-[$pagenav]
+# {title}
+
+{pagenav 14 min;26 October 2025;01 November 2025}
GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
@@ -14,12 +14,13 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
### Задача 1
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise01.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise01.cpp}
От входа получавате 10 реални числа.
Трябва да ги върнете в обратен ред.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -30,14 +31,16 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: 39.8 6 69.21 84.55 100.001 18.62 34.799 65 89.95 41.4
+
### Задача 2
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise02.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise02.cpp}
От входа получавате 7 букви.
Трябва да изкарате буквите в същата последователност, обаче завъртяни надясно с 3 позиции.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -48,15 +51,17 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: j l b k l m l
+
### Задача 3
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise03.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise03.cpp}
От входа получавате 14 цели неотрицателни числа.
Трябва да изкарате второто най-голямо число.
Ако няма такова, просто изкарайте най-голямото.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -70,17 +75,19 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: 9
+
### Задача 4
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise04.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise04.cpp}
От входа получавате две цели положителни числа.
-Трябва да върнете [url https://en.wikipedia.org/wiki/Factorial#Definition факториел] от първото число, който факториел е повдигнат на степен второто число.
+Трябва да върнете {url факториел;https://en.wikipedia.org/wiki/Factorial#Definition} от първото число, който факториел е повдигнат на степен второто число.
Факториел на едно (неотрицателно цяло) число е умножението на всички цели числа от 1 до самото число включително.
-Примерно, факториел от 5 е [`1 * 2 * 3 * 4 * 5 = 120`].
+Примерно, факториел от 5 е {` 1 * 2 * 3 * 4 * 5 = 120}.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -103,14 +110,16 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: 256
+
### Задача 5
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise05.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise05.cpp}
От входа получавате 18 цели числа.
Трябва да изкарате същата поредица числа, обаче всички нули са в началото на редицата.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -121,12 +130,13 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: 0 0 0 0 839 643 42 -694 57 650 729 -434 35 155 176 873 40 658
+
.question
Нужни ли са масиви, ако в условието трябваше да изкарвате нулите в края на поредицата?
### Задача 6
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise06.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise06.cpp}
От входа получавате 15 цели числа.
Трябва да изкарате дължината на най-дългата последователност от числа, която е подредена в нарастващ ред.
@@ -134,9 +144,10 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
Последователност от числа, която съдържа еднакви числа, също се зачита за сортирана в нарастващ ред.
.note
-[=(01.11.2025)=] Поправен е изхода в първия пример, от 6 на 8.
+{b (01.11.2025)} Поправен е изхода в първия пример, от 6 на 8.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -159,14 +170,16 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: 5
+
### Задача 7
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise07.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise07.cpp}
От входата получавате цяло неотрицателно число.
Върнете дали то е перфектно: дали е равно на сумата на всички свои делители, освен себе си.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -201,16 +214,18 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: Perfect
+
### Задача 8
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise08.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise08.cpp}
От входа получавате две редици от по 10 реални числа (т.е. първите 10 числа са от първата редица, и вторите 10 числа образуват втората редица).
-След това получавате знак - аритметича операция ([`+`], [`-`], [`*`], [`/`]).
+След това получавате знак - аритметича операция ({` +}, {` -}, {` *}, {` /}).
Трябва да изпълните операцията върху всяка съответна двойка числа от двете редици и да върнете резултатите.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -231,19 +246,21 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: inf -2 16.175 16.41 100.011 -inf 4 31.714 71 -nan
+
### Задача 9
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise09.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise09.cpp}
От входа получавате реално число z между 0 (изключително) и 2 (включително), заедно с дължина n.
-Трябва да намерите стойността на логаритъм с основа ℯ ([url https://en.wikipedia.org/wiki/E_(mathematical_constant) Неперово число]) от това число, използвайки развитието по ред на Тейлър:
+Трябва да намерите стойността на логаритъм с основа ℯ ({url Неперово число;https://en.wikipedia.org/wiki/E_(mathematical_constant)}) от това число, използвайки развитието по ред на Тейлър:
-[image ./img/ln_taylor_series.png]
+{img ./img/ln_taylor_series.png}
като n определя колко елемента от реда да използвате.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -281,22 +298,24 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: -4.60517
+
### Задача 10
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise10.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise10.cpp}
От входа получавате цяло неотрицатено число с максимум 8 цифри.
-Това число представлява сериен номер под [url https://en.wikipedia.org/wiki/S10_(UPU_standard) S10 стандарта за идентификационни номера на пратки].
+Това число представлява сериен номер под {url S10 стандарта за идентификационни номера на пратки;https://en.wikipedia.org/wiki/S10_(UPU_standard)}.
Трябва да пресметнете "контролната цифра" (check digit) на серийния номер.
Това става по следния начин:
.numbered
1. От ляво на дясно, трябва да умножите всяка цифра със съответната си "тежест": 8, 6, 4, 2, 3, 5, 9, 7
2. Сумирате умножените цифри
-3. Пресмятате контролната цифра по формулата: [`11 - <сума> mod 11`], където
+3. Пресмятате контролната цифра по формулата: {` 11 - <сума> mod 11}, където
ако резултата е 10, цифрата е 0 и ако резултата е 11, цифрата е 5.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -325,28 +344,30 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: 5
+
### Задача 11
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise11.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise11.cpp}
От входа получавате цяло неотрицателно число.
-Изкарвате [url https://en.wikipedia.org/wiki/Lucas_number числото на Лукас] след толкова на брой позиции и ако числото [=не=] е било 0, приемаме ново число и повтаряте логиката.
+Изкарвате {url числото на Лукас;https://en.wikipedia.org/wiki/Lucas_number} след толкова на брой позиции и ако числото {b не} е било 0, приемаме ново число и повтаряте логиката.
-Тоест, ако първото число е n, тогава връщате [`n`]-тото число на Лукас.\n
-Ако второто число е m, тогава връщате [`n + m`]-тото число на Лукас.
+Тоест, ако първото число е n, тогава връщате {` n}-тото число на Лукас.\n
+Ако второто число е m, тогава връщате {` n + m}-тото число на Лукас.
И така нататък.
Числата на Лукас се определят по следния начин:
-[image ./img/lucas_def.png]
+{img ./img/lucas_def.png}
.note
-[=(01.11.2025)=] Входа на последния пример е поправен.
+{b (01.11.2025)} Входа на последния пример е поправен.
-[*Вашия вход и изход може да са смесени!*]
+{i Вашия вход и изход може да са смесени!}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -369,9 +390,10 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: 47 2207 3571 3571
+
### Задача 12
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise12.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise12.cpp}
От входа получавате 20 цели числа, всяко от които е индекс на елемент в масива (т.е. всяко е между 0 и 19 включително).
@@ -384,9 +406,10 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
Ако се поражда цикъл (посетим някое число повече от един път), тогава трябва да изкарате "Infinity".
.note
-[=(01.11.2025)=] Входа на първия пример е поправен.
+{b (01.11.2025)} Входа на първия пример е поправен.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -406,18 +429,20 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: Infinity
+
## За самоподготовка
### Задача 13
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise13.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise13.cpp}
От входа получавате 8 цели числа.
След това получавате 9то цяло число.
Трябва да върнете, сред 8те цели числа, колко често се среща 9тото.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -434,14 +459,16 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: 8
+
### Задача 14
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise14.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise14.cpp}
От входа получавате 16 цели числа.
Трябва да изкарате, на два реда, първо всички четни числа и после всички нечетни.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -458,9 +485,10 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
-961 871 657 -297 -5 -9 255
+
### Задача 15
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise15.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise15.cpp}
От входа получавате 12 реални числа.
Трябва да върнете, на отделни редове, двойки числа от тази поредица:
@@ -469,7 +497,8 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
- Втората двойка има второто и пред-посленото число.
- И така нататък.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -494,15 +523,17 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
769.89 505
+
### Задача 16
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise16.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise16.cpp}
От входа получавате две редици от по 5 цели числа (т.е. първите 5 числа са част от първата редица и вторите 5 числа са част от втората).
Трябва да изкарате една редица от числа, където двете редици са преплетени: първо имаме първото число от първата редица, след това първото число от втората редица, след това второто число от първата редица и така нататък.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -513,15 +544,17 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: 0 1 1 0 0 1 1 0 0 1
+
### Задача 17
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise17.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise17.cpp}
От входа получавате цяло число в десетична бройна система.
-Трябва да изкарате дали то е [url https://en.wikipedia.org/wiki/Narcissistic_number число на Армстронг]: число, което е равно на сумата на цифрите си, където всяка цифра е повдигната на степен, дължината на числото.
+Трябва да изкарате дали то е {url число на Армстронг;https://en.wikipedia.org/wiki/Narcissistic_number}: число, което е равно на сумата на цифрите си, където всяка цифра е повдигната на степен, дължината на числото.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -544,12 +577,13 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: Narcissistic
+
### Задача 18
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise18.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise18.cpp}
.note
-[=(01.11.2025)=] Поправени бройката на входните цели числа и втория пример.
+{b (01.11.2025)} Поправени бройката на входните цели числа и втория пример.
От входа получавате 7 цели числа.
@@ -557,7 +591,8 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
Ако такаъв индекс не съществува, изкарате "No such index".
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -568,19 +603,21 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: No such index
+
### Задача 19
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise19.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise19.cpp}
От входа получавате две числа: реален ъгъл в радиани x и положителен максимален индекс n.
Трябва да върнете стойността на синус от този ъгъл, използвайки реда на Тейлър:
-[image ./img/sinx_taylor_series.png]
+{img ./img/sinx_taylor_series.png}
където n определя с колко елемента от реда да смятаме.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -597,27 +634,29 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: -1.08189
+
### Задача 20
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise20.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise20.cpp}
От входа получавате цяло положително число.
-Трябва да валидирате това число използвайки [url https://en.wikipedia.org/wiki/Luhn_algorithm алгоритъма на Luhn]:
+Трябва да валидирате това число използвайки {url алгоритъма на Luhn;https://en.wikipedia.org/wiki/Luhn_algorithm}:
.numbered
1. Най-дясната цифра е "цифра за проверка", тя трябва да бъде изкарана за после.
2. Започвайки от най-дясната цифра (от останалите цифри, т.е. втората най-дясна в числото),
трябва да умножите всяка втора цифра по две.
- Ако цифрата стане по-голяма от 9, трябва да [*извадите*] 9.
+ Ако цифрата стане по-голяма от 9, трябва да {i извадите} 9.
3. Сумирате всички цифри (всички умножени и неумножени).
-4. Проверявате дали цифрата за проверка е равна на [`(10 - (сумa mod 10)) mod 10`]
+4. Проверявате дали цифрата за проверка е равна на {` (10 - (сумa mod 10)) mod 10}
Този алгоритъм се използва главно в проверката на номера на дебитни/кредитни карти.
Главната цел е да се засекат някои механични грешки при въвеждане на номера.
.note
-[=(01.11.2025)=] Поправен е входа на третия пример.
+{b (01.11.2025)} Поправен е входа на третия пример.
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -640,21 +679,23 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx]
|: Invalid
+
### Задача 21
-.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise21.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise21.cpp}
От входа получавате цяло неотрицателно число.
-Трябва да върнете съответното по индекс [url https://en.wikipedia.org/wiki/Catalan_number число на Каталан].
+Трябва да върнете съответното по индекс {url число на Каталан;https://en.wikipedia.org/wiki/Catalan_number}.
n-тото число на Каталан се дефинира по следния начин:
-[image ./img/catalan_def.png]
+{img ./img/catalan_def.png}
-Където [`x!`] е [url https://en.wikipedia.org/wiki/Factorial#Definition факториел] от x.
+Където {` x!} е {url факториел;https://en.wikipedia.org/wiki/Factorial#Definition} от x.
Припомняме, че факториел на едно число е умножението на всички цели числа от 1 до самото число включително.
-:table_2
+:table
+:2
|= Вход
|= Изход