Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitaeca0d6b2f3dfc30286180cc85fe99ea274cfc46 (patch)
Author
 Syndamia <kamen@syndamia.com>
2023-12-15 08:27:51 +0200
Committer
 Syndamia <kamen@syndamia.com>
2023-12-15 08:27:51 +0200
Filesd416b9be0cece7cf835ae7e39448d2cf8e300e1e
syndamia.com-aeca0d6b2f3dfc30286180cc85fe99ea274cfc46.tar
syndamia.com-aeca0d6b2f3dfc30286180cc85fe99ea274cfc46.tar.gz
syndamia.com-aeca0d6b2f3dfc30286180cc85fe99ea274cfc46.zip
Parente747f80bb029216e3faa7a27fe995f1d157ba7a4 (diff)
[te/upp-2023/w10] Added exercises
3 files changed, 90 insertions, 0 deletions
-rw-r--r--src/teaching/upp-2023/index.md1
-rw-r--r--src/teaching/upp-2023/week10/img/fib.pngbin0 -> 6292 bytes
-rw-r--r--src/teaching/upp-2023/week10/index.md89
diff --git a/src/teaching/upp-2023/index.md b/src/teaching/upp-2023/index.md
index 9ef5d77..7e8c1f4 100644
--- a/src/teaching/upp-2023/index.md
+++ b/src/teaching/upp-2023/index.md
@@ -28,3 +28,4 @@
|8 |24.11.2023|[Задачи](./week8) \|\| [Решения](https://github.com/Syndamia/upp-2023-solutions/tree/main/week08) \|\| [GitHub classroom](https://classroom.github.com/a/Big7FRUG)|
|9 |01.12.2023|[Задачи](./week9) \|\| [GitHub classroom](https://classroom.github.com/a/lGXxCRZO)|
| |04.12.2023|[Допълнително упражнение 2](./additional2/) \|\| [GitHub classroom](https://classroom.github.com/a/CrerXpf6)|
+|10|15.12.2023|[Задачи](./week10) \|\| [GitHub classroom](https://classroom.github.com/a/EJcTQRz4)|
diff --git a/src/teaching/upp-2023/week10/img/fib.png b/src/teaching/upp-2023/week10/img/fib.png
new file mode 100644
index 0000000..b0bc958
--- /dev/null
+++ b/src/teaching/upp-2023/week10/img/fib.png
Binary files differ
diff --git a/src/teaching/upp-2023/week10/index.md b/src/teaching/upp-2023/week10/index.md
new file mode 100644
index 0000000..c7d5b86
--- /dev/null
+++ b/src/teaching/upp-2023/week10/index.md
@@ -0,0 +1,89 @@
+# Задачи - УПП, Седмица 10, 15.12.2023
+
+GitHub classroom: [classroom.github.com/a/EJcTQRz4](https://classroom.github.com/a/EJcTQRz4)
+
+&&important Във всички задачи **трябва** да използвате рекурсия!
+
+## Задача 1
+
+Най-големия общ делител на числата `a` и `b` е най-голямото, число което ги дели без остатък.
+Евклидовият алгоритъм се базира на факта, че за две положителни числа `a` и `b`, като `a > b`, НОД на `a` и `b` е същия като НОД на `a - b` и `b` и когато `a = b`, тогава НОД на `a` и `b` е тяхната стойност.
+
+От входа получавате две цели положителни числа и трябва да изкарате техния НОК, чрез алгоритъма на Евклид **имплементиран с рекурсия**.
+
+**Примери:**
+
+|Вход|Изход|
+|----|-----|
+|6 6 |6 |
+|48 18|6 |
+
+## Задача 2
+
+От входа получавате неотрицателно число `N` и трябва да изкарате `N`-тото число на Фибоначи **чрез рекурсия**, като нулевото число е 0, първото е 1, второто е 1, третото е 2, четвъртото е 3 и так. нат.
+Напомням, че математически фибоначи се дефинира така:
+
+<!--
+\begin{align*}
+F_n = \left\{ \begin{array}{ll}
+0, & n=0 \\
+1, & n=1 \\
+F_{n-1} + F_{n-2} & \text{иначе} \\
+\end{array} \right.
+\end{align*}
+-->
+
+![F(0) = 0; F(1) = 1; F(n) = F(n-1) + F(n-2)](./img/fib.png)
+
+**Примери:**
+
+|Вход|Изход|
+|----|-----|
+|0 |0 |
+|1 |1 |
+|4 |3 |
+|12 |144 |
+|17 |1597 |
+|24 |46368|
+
+## Задача 3
+
+От входа получавате положително число `N`, трябва да изкарате на екрана "рисунка", показваща формата на пясъчен часовник с височина `2N` (вижте примерите).
+
+**Примери:**
+
+|Вход|Изход|
+|----|-----|
+|1 |<pre>+<br>#</pre>|
+|2 |<pre>+++<br> +<br> #<br>###</pre>|
+|3 |<pre>+++++<br> +++<br> +<br> #<br> ###<br>#####</pre>|
+|5 |<pre>+++++++++<br> +++++++<br> +++++<br> +++<br> +<br> #<br> ###<br> #####<br> #######<br>#########</pre>|
+
+## Задача 4
+
+От входа получавате число `N`, след това тябва да изкарате на нови редове, в нарастващ ред, всички двоични числа, които могат да се представят с `N`-бита.
+Вкарвате и водещи нули, тоест всяко число е съставено от точно `N` букви (`N` нули и единици).
+
+**Примери:**
+
+|Вход|Изход|
+|----|-----|
+|1 |0<br>1|
+|2 |00<br>01<br>10<br>11|
+|3 |000<br>001<br>010<br>011<br>100<br>101<br>110<br>111|
+|4 |0000<br>0001<br>...<br>0111<br>1000<br>1001<br>...<br>1101<br>1110<br>1111|
+
+## Задача 5
+
+Получавате един ред от терминала, в който ще имате скоби, знакът `+` и `*`, шпации и числа.
+Това е прост математически израз, трябва да изкарате резултата след неговото пресмятане, като винаги около `число + число` и `число * число` има скоби (тоест не е нужно да се притеснявате от приоритет и асоциативност).
+
+За удобство спокойно може да ползвате `atoi` за конверитране на числовите части от низа в числа.
+
+**Примери:**
+
+|Вход|Изход|
+|----|-----|
+|(1 + 2)|3 |
+|((2 + 9) * 3)|33|
+|(((8 * 1) * (56 + 4)) + (19 * 2))|518|