Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2023 / week12 / index.du
diff options
context:
space:
mode:
1 files changed, 42 insertions, 31 deletions
-rw-r--r--src/teaching/upp-2023/week12/index.du73
diff --git a/src/teaching/upp-2023/week12/index.du b/src/teaching/upp-2023/week12/index.du
index 3fa25ff..ed4dc89 100644
--- a/src/teaching/upp-2023/week12/index.du
+++ b/src/teaching/upp-2023/week12/index.du
@@ -1,14 +1,17 @@
-# Задачи - УПП, Седмица 12, 05.01.2024
+'def title Задачи - УПП, Седмица 12, 05.01.2024
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/KEDSxDjl classroom.github.com/a/KEDSxDjl]
+GitHub classroom: {url classroom.github.com/a/KEDSxDjl;https://classroom.github.com/a/KEDSxDjl}
-.important Във всички задачи [=трябва=] да използвате рекурсия!
+.important Във всички задачи {b трябва} да използвате рекурсия!
## Алтернативни задачи
-Считайте [url https://github.com/ivanahristova/introduction-to-programming-2023-2024/tree/main/sem12 задачите от семинара] и [url ../week11/ тези от миналия път] като част от днешните задачи.
+Считайте {url задачите от семинара;https://github.com/ivanahristova/introduction-to-programming-2023-2024/tree/main/sem12} и {url тези от миналия път;../week11/} като част от днешните задачи.
Тоест, за хората които се затрудняват повечко, решете ги и след това се върнете тук.
Разбира се, ще помагам и с тях.
@@ -21,9 +24,10 @@ GitHub classroom: [url https://classroom.github.com/a/KEDSxDjl classroom.github.
Накрая получавате максималната обща тежест за раницата.
Трябва да изкарате на екрана максималната възможна обща ценност.
-[=Примери:=]
+{b Примери:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -62,11 +66,12 @@ GitHub classroom: [url https://classroom.github.com/a/KEDSxDjl classroom.github.
.comment https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/knapsack_01.html
+
## Задача 2
Получавате N и M, съответно броя редове и колони в дъска.
Всяка клетка от дъската е пълна или празна.
-След това получавате NxM на брой символа за всяка клетка, като [`-`] означава празна клетка, докато [`#`] означава пълна.
+След това получавате NxM на брой символа за всяка клетка, като {` -} означава празна клетка, докато {` #} означава пълна.
Накрая получавате две числа - координати (започващи от нула, като 0,0 е горния-ляв ъгъл) в дъската.
От подадените координати трябва да запълните "фигурата" в която се намира (фигурата която огражда) дадената плочка.
@@ -74,11 +79,12 @@ GitHub classroom: [url https://classroom.github.com/a/KEDSxDjl classroom.github.
Оцветяването да се случва само в 4те прави посоки (без диагонали).
-[image https://upload.wikimedia.org/wikipedia/commons/7/7e/Recursive_Flood_Fill_4_%28aka%29.gif]
+{img https://upload.wikimedia.org/wikipedia/commons/7/7e/Recursive_Flood_Fill_4_%28aka%29.gif}
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -101,6 +107,7 @@ GitHub classroom: [url https://classroom.github.com/a/KEDSxDjl classroom.github.
- - # # - - - - - - -
+
## Задача 3
Имате шахматна дъска (8 на 8) и върху нея имате 8 царици.
@@ -109,14 +116,15 @@ GitHub classroom: [url https://classroom.github.com/a/KEDSxDjl classroom.github.
Интересуваме се от такова поставяне на всички царици, че нито една няма да вземе никоя друга царица в един ход.
Пример:
-[image https://upload.wikimedia.org/wikipedia/commons/6/69/Solution_A_for_8_Queen_Puzzles.png]
+{img https://upload.wikimedia.org/wikipedia/commons/6/69/Solution_A_for_8_Queen_Puzzles.png}
Напишете програма, която намира броя на възможните такива поставяния на цариците.
От входа не получавате нищо.
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -124,45 +132,47 @@ GitHub classroom: [url https://classroom.github.com/a/KEDSxDjl classroom.github.
|: 92
-[=Бонус:=] направете програмата да изкарва всяко решение
+
+{b Бонус:} направете програмата да изкарва всяко решение
## Задача 4
.comment https://mathcenter.oxford.emory.edu/site/cs171/probSetUsingStacks/
-Нормално ние представяме математически операции чрез "инфиксен" запис, тоест операторът е по средата, между нещата върху които работи (пример: [`1 + 2`]).
-Обаче, това не е задължително, по обратната полска нотация винаги слагаме оператът след нещата върху които работи (пример: [`1 2 +`]).
+Нормално ние представяме математически операции чрез "инфиксен" запис, тоест операторът е по средата, между нещата върху които работи (пример: {` 1 + 2}).
+Обаче, това не е задължително, по обратната полска нотация винаги слагаме оператът след нещата върху които работи (пример: {` 1 2 +}).
Бонусът на това, е че не ни трябва скобуване и ред на операциите.
-В инфиксния израз [`(2 + 3) * (2 ^^ 2)`], без скобите, сбора ще се извърши след умножението и степенуването ще се извърши след умножението.
-Обаче, ако искаме да изразим това в обратен полски запис, просто правим [`2 3 + 2 2 ^^ *`].
-А ако искаме оригиналното действие, без скоби, записваме [`2 3 2 * 2 ^^ +`].
+В инфиксния израз {` (2 + 3) * (2 ^^ 2)}, без скобите, сбора ще се извърши след умножението и степенуването ще се извърши след умножението.
+Обаче, ако искаме да изразим това в обратен полски запис, просто правим {` 2 3 + 2 2 ^^ *}.
+А ако искаме оригиналното действие, без скоби, записваме {` 2 3 2 * 2 ^^ +}.
Ако изглежда объркващо, идеята е че всеки оператор работи върху предходните две стойности, изчисляваме изразите от ляво надясно и заместваме веднага.
-Тоест, при последния пример, пропускаме първите три числа, стигаме до [`*`], умножаваме последните две и заместваме трите неща ([`3 2 *`]) с резултата, следователно имаме [`2 6 2 ^^ +`], пропускаме две, стигаме до [`^^`] и так.нат.
+Тоест, при последния пример, пропускаме първите три числа, стигаме до {` *}, умножаваме последните две и заместваме трите неща ({` 3 2 *}) с резултата, следователно имаме {` 2 6 2 ^^ +}, пропускаме две, стигаме до {` ^^} и так.нат.
-Направете програма, която чисто рекурсивно изчислиява изрази в обратен полски запис, който поддържа цели числа и операциите събиране, умножение, деление, изваждане и степенуване (за степенуване ще използваме знакът [`^`]).
+Направете програма, която чисто рекурсивно изчислиява изрази в обратен полски запис, който поддържа цели числа и операциите събиране, умножение, деление, изваждане и степенуване (за степенуване ще използваме знакът {` ^}).
.important Обаче, за едно извикване на рекурсивната функция, може да пазите само един елемент на израза (число или оператор)!
-Изразът винаги завършва на знака [`$`].
+Изразът винаги завършва на знака {` $}.
:warn
.p
-Относно вход/изход, понеже няма как да знаем дали i-тата стойност е число или знак (операция), трябва да използваме функцията [`std::cin.fail()`], която връща булева стойност, която ни казва дали записването на входа е било успешно.
+Относно вход/изход, понеже няма как да знаем дали i-тата стойност е число или знак (операция), трябва да използваме функцията {` std::cin.fail()}, която връща булева стойност, която ни казва дали записването на входа е било успешно.
.p
-Тоест, може винаги да запазвате входа в целочислен тип, когато стигнете до знак [`std::cin.fail()`] ще върне [`true`].
-След това трябва да "забравите" за грешката чрез [`std::cin.clear()`] и може втори път да запазите входа (провалените данни ще се препрочетат) в променлива от знаков тип.
+Тоест, може винаги да запазвате входа в целочислен тип, когато стигнете до знак {` std::cin.fail()} ще върне {` true}.
+След това трябва да "забравите" за грешката чрез {` std::cin.clear()} и може втори път да запазите входа (провалените данни ще се препрочетат) в променлива от знаков тип.
.p
-Но това поражда друг проблем, понеже записваме в целочислен тип, когато въведем [`+`] или [`-`], [`std::cin`] ще очаква това да е водещ знак на число, и ще продължи да чака входа докато не въведем друг знак, тоест [`+`] и [`-`] ще бъдат пропуснати.
-Като компромисен вариант, просто пред тях винаги ще слагаме [`'`] и в кода ще го пропускаме.
+Но това поражда друг проблем, понеже записваме в целочислен тип, когато въведем {` +} или {` -}, {` std::cin} ще очаква това да е водещ знак на число, и ще продължи да чака входа докато не въведем друг знак, тоест {` +} и {` -} ще бъдат пропуснати.
+Като компромисен вариант, просто пред тях винаги ще слагаме {` '} и в кода ще го пропускаме.
-[=Примери:=]
+{b Примери:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -173,8 +183,9 @@ GitHub classroom: [url https://classroom.github.com/a/KEDSxDjl classroom.github.
|: 35
+
## Attribution
.bulleted
-- Анимация в [url #2 Задача 2] от André Karwath (Aka) на [url https://commons.wikimedia.org/w/index.php?curid=481651 Уикипедия] под лиценз CC BY-SA 2.5
-- Изображение на шахматна дъска в [url #3 Задача 3] от Encik Tekateki в [url https://commons.wikimedia.org/w/index.php?curid=77832290 Уикипедия] под лиценз CC BY-SA 4.0
+- Анимация в {url Задача 2;#2} от André Karwath (Aka) на {url Уикипедия;https://commons.wikimedia.org/w/index.php?curid=481651} под лиценз CC BY-SA 2.5
+- Изображение на шахматна дъска в {url Задача 3;#3} от Encik Tekateki в {url Уикипедия;https://commons.wikimedia.org/w/index.php?curid=77832290} под лиценз CC BY-SA 4.0