From aeca0d6b2f3dfc30286180cc85fe99ea274cfc46 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Fri, 15 Dec 2023 08:27:51 +0200 Subject: [te/upp-2023/w10] Added exercises --- src/teaching/upp-2023/index.md | 1 + src/teaching/upp-2023/week10/img/fib.png | Bin 0 -> 6292 bytes src/teaching/upp-2023/week10/index.md | 89 +++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 src/teaching/upp-2023/week10/img/fib.png create mode 100644 src/teaching/upp-2023/week10/index.md (limited to 'src') 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 Binary files /dev/null and b/src/teaching/upp-2023/week10/img/fib.png 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 и так. нат. +Напомням, че математически фибоначи се дефинира така: + + + +![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 |
+
#
| +|2 |
+++
+
#
###
| +|3 |
+++++
+++
+
#
###
#####
| +|5 |
+++++++++
+++++++
+++++
+++
+
#
###
#####
#######
#########
| + +## Задача 4 + +От входа получавате число `N`, след това тябва да изкарате на нови редове, в нарастващ ред, всички двоични числа, които могат да се представят с `N`-бита. +Вкарвате и водещи нули, тоест всяко число е съставено от точно `N` букви (`N` нули и единици). + +**Примери:** + +|Вход|Изход| +|----|-----| +|1 |0
1| +|2 |00
01
10
11| +|3 |000
001
010
011
100
101
110
111| +|4 |0000
0001
...
0111
1000
1001
...
1101
1110
1111| + +## Задача 5 + +Получавате един ред от терминала, в който ще имате скоби, знакът `+` и `*`, шпации и числа. +Това е прост математически израз, трябва да изкарате резултата след неговото пресмятане, като винаги около `число + число` и `число * число` има скоби (тоест не е нужно да се притеснявате от приоритет и асоциативност). + +За удобство спокойно може да ползвате `atoi` за конверитране на числовите части от низа в числа. + +**Примери:** + +|Вход|Изход| +|----|-----| +|(1 + 2)|3 | +|((2 + 9) * 3)|33| +|(((8 * 1) * (56 + 4)) + (19 * 2))|518| -- cgit v1.3.1-23-gd82d