Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2023 / week7 / index.du
diff options
context:
space:
mode:
1 files changed, 56 insertions, 47 deletions
-rw-r--r--src/teaching/upp-2023/week7/index.du103
diff --git a/src/teaching/upp-2023/week7/index.du b/src/teaching/upp-2023/week7/index.du
index e8173b9..0a576d9 100644
--- a/src/teaching/upp-2023/week7/index.du
+++ b/src/teaching/upp-2023/week7/index.du
@@ -1,24 +1,28 @@
-# Задачи - УПП, Седмица 7, 17.11.2023
+'def title Задачи - УПП, Седмица 7, 17.11.2023
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/m5M2_CWD classroom.github.com/a/m5M2_CWD]
+GitHub classroom: {url classroom.github.com/a/m5M2_CWD;https://classroom.github.com/a/m5M2_CWD}
## Задача 1
-[*Това е почти същата задача като през [url ../week5/#1 седмица 5]*]
+{i Това е почти същата задача като през {url седмица 5;../week5/#1}}
Дефинираме двуизмерен координат като две числа с плаваща запетая.
Направете функция, която получава два двуизмерни координата, покомпонентно ги сумира и връща резултатните координати.
Няма как функцията да върне две стойности, затова добаваете още два аргумента, които да са указатели към променливи в които да запазим сумираните координати.
-.warn [=Трябва=] да използвате референции вместо указатели!
+.warn {b Трябва} да използвате референции вместо указатели!
-От входа получавате два координата, след това връщате тяхната покомпонентна сума [=използвайки функцията=].
+От входа получавате два координата, след това връщате тяхната покомпонентна сума {b използвайки функцията}.
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -26,23 +30,25 @@ GitHub classroom: [url https://classroom.github.com/a/m5M2_CWD classroom.github.
|: 6.1 -99.241
+
## Задача 2
-Един магазин продава три продукта, които ще бележим с [`a`], [`b`] и [`c`].
+Един магазин продава три продукта, които ще бележим с {` a}, {` b} и {` c}.
Правим инвентарна система за тези продукти, като за всеки от тях пазим неговата бройка в склада.
В началото имаме 0 от всеки продукт.
-Получавате букви, докато не стигнете до буквата [`$`].
-Ако буквата е [`a`], [`b`] или [`c`], тогава този продукт става "сегашния" продукт.
-Ако буквата е [`S`], тогава намаляте бройката на сегашния продукт с 1, а ако е [`R`] - увеличаваме с 10.
+Получавате букви, докато не стигнете до буквата {` $}.
+Ако буквата е {` a}, {` b} или {` c}, тогава този продукт става "сегашния" продукт.
+Ако буквата е {` S}, тогава намаляте бройката на сегашния продукт с 1, а ако е {` R} - увеличаваме с 10.
-.warn [=НЕ=] може да използвате масиви! [=Трябва=] действията на [`S`] и [`R`] да се изкарат във функции!
+.warn {b НЕ} може да използвате масиви! {b Трябва} действията на {` S} и {` R} да се изкарат във функции!
-Когато получите [`$`], изкарвате броя на всеки продукт и спирате програмата.
+Когато получите {` $}, изкарвате броя на всеки продукт и спирате програмата.
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -50,23 +56,25 @@ GitHub classroom: [url https://classroom.github.com/a/m5M2_CWD classroom.github.
|: а: 23 b: 17 c: 9
+
## Задача 3
-В началото получавате буква - тя съответства на дадена [=функция=], след това получавате 5 числа с плаваща запетая.
+В началото получавате буква - тя съответства на дадена {b функция}, след това получавате 5 числа с плаваща запетая.
След всяко въведено трябва да изкарате резултата от съответната функция при подадено входното число.
-.warn [=Трябва=] да използвате указател към функция!
+.warn {b Трябва} да използвате указател към функция!
Буквите съответстват на следните функции:
.bulleted
-- [`a`] - модул на стойност
-- [`s`] - стойност на втора степен
-- [`h`] - занулена частта след запетаята
-- [`f`] - занулена частта преди (в ляво от) запетаята
+- {` a} - модул на стойност
+- {` s} - стойност на втора степен
+- {` h} - занулена частта след запетаята
+- {` f} - занулена частта преди (в ляво от) запетаята
-[=Примери:=]
+{b Примери:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -83,6 +91,7 @@ GitHub classroom: [url https://classroom.github.com/a/m5M2_CWD classroom.github.
|: 0.5 -0.3 0.994 0 -0.003
+
## Задача 4
Ще имлементираме система за задачи.
@@ -95,25 +104,25 @@ GitHub classroom: [url https://classroom.github.com/a/m5M2_CWD classroom.github.
```
N. [C] TASK
-Където [`N`] е нейния номер (индекс), [`C`] е шпация или буквата "x" (шпация когато не е изпълнена, и "х" когато е), [`TASK`] е самия низ на задачата.
+Където {` N} е нейния номер (индекс), {` C} е шпация или буквата "x" (шпация когато не е изпълнена, и "х" когато е), {` TASK} е самия низ на задачата.
-Програмата получава букви, докато не получи буквата [`$`].
+Програмата получава букви, докато не получи буквата {` $}.
Всяка буква определя някакво действие:
.bulleted
-- при [`p`] изкарваме на екрана всички задачи
-- при [`d`] изкарваме на екрана всички завършени задачи
-- при [`t`] изкарваме на екрана всички незавършени задачи
-- след [`a`] въвеждаме нова (незавършена) задача на последния свободен индекс\n
+- при {` p} изкарваме на екрана всички задачи
+- при {` d} изкарваме на екрана всички завършени задачи
+- при {` t} изкарваме на екрана всички незавършени задачи
+- след {` a} въвеждаме нова (незавършена) задача на последния свободен индекс\n
Ако вече пазим 64 задачи, трябва да изкараме грешка на екрана и да продължим с програмата.
-- след [`c`] въвеждаме номер на задача и обръщаме нейната изпълненост: ако е изпълнена, става неизпълнена, и ако е неизпълнена, става изпълнена
+- след {` c} въвеждаме номер на задача и обръщаме нейната изпълненост: ако е изпълнена, става неизпълнена, и ако е неизпълнена, става изпълнена
В началото на програмата нямаме никакви задачи.
-[=Пример:=]
-[*Смесен вход/изход, изход е отбелязан с "> ". Забележете, че има шпации в края на низове за задачи.*]
+{b Пример:}
+{i Смесен вход/изход, изход е отбелязан с "> ". Забележете, че има шпации в края на низове за задачи.}
```
-'include ex4-io.txt
+'snippet 1 $ ex4-io.txt
## Задача 5
@@ -124,34 +133,34 @@ N. [C] TASK
След това получавате произволен брой команди - букви с възможна последователност от стойности.
Трябва да имплементирате следните команди:
.bulleted
-- [`s`] - изкарвате изображението на екрана
-- [`r`] - завъртате изображението по часовниковата стрелка с 90 градуса
-- [`l`] - завъртате изображението обратно на часовниковата стрелка с 90 градуса
-- [`h`] - обръщате изображението по хоризонтала (първи и последен ред се разменят, след това втори и предпоследен и так. нат.)
-- [`v`] - обръщате изображението по вертикалата (първа и последна колона се разменят, след това втора и предпоследна и так. нат.)
-- [`f`] - след този знак получавате още 4 стойности - това са два координата върху изображението, и трябва да запълните с бяло правоъгълна област с горен ляв ъгъл в първата точка и с долен десен ъгъл във втората точка.
+- {` s} - изкарвате изображението на екрана
+- {` r} - завъртате изображението по часовниковата стрелка с 90 градуса
+- {` l} - завъртате изображението обратно на часовниковата стрелка с 90 градуса
+- {` h} - обръщате изображението по хоризонтала (първи и последен ред се разменят, след това втори и предпоследен и так. нат.)
+- {` v} - обръщате изображението по вертикалата (първа и последна колона се разменят, след това втора и предпоследна и так. нат.)
+- {` f} - след този знак получавате още 4 стойности - това са два координата върху изображението, и трябва да запълните с бяло правоъгълна област с горен ляв ъгъл в първата точка и с долен десен ъгъл във втората точка.
В един координат първо посочваме реда и след това колоната, като координатите започват от 0, от горния ляв ъгъл.
-- [`c`] - почти същото като [`f`], обаче запълвате с черно, не с бяло
+- {` c} - почти същото като {` f}, обаче запълвате с черно, не с бяло
-[=Пример:=]
-[*Смесен вход/изход*]
+{b Пример:}
+{i Смесен вход/изход}
```
-'include ex5-io.txt
+'snippet 1 $ ex5-io.txt
## Задача 6
-Ще имплементираме програма, която намира състоянието на един [url https://en.wikipedia.org/wiki/Elementary_cellular_automaton елементарен едноклетъчен автомат] след даден брой генерации и определено правило.
+Ще имплементираме програма, която намира състоянието на един {url елементарен едноклетъчен автомат;https://en.wikipedia.org/wiki/Elementary_cellular_automaton} след даден брой генерации и определено правило.
Задачата изглежда сложна, но не е толкова зле.
За нашите цели, един "елементарен едноклетъчен автомат" е просто един голям булев масив.
-Ще наричаме стойност [`true`] жива и стойност [`false`] мъртва.
+Ще наричаме стойност {` true} жива и стойност {` false} мъртва.
За всяка клетка в масива имаме правила, в зависимост от стойностите на клетката в ляво и в дясно променяме сегашната клетка.
Направили сме една "генерация" след като обиколим всички клетки един път (от ляво на дясно) и обновим техните стойности.
-Би трябвало това да ви напомня на [url https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life играта "Живот"] от [url https://en.wikipedia.org/wiki/John_Horton_Conway John Conway].
+Би трябвало това да ви напомня на {url играта "Живот";https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life} от {url John Conway;https://en.wikipedia.org/wiki/John_Horton_Conway}.
-Конкретните правила са тези при [url https://en.wikipedia.org/wiki/Rule_30 "правило 30"].\n
+Конкретните правила са тези при {url "правило 30";https://en.wikipedia.org/wiki/Rule_30}.\n
Ако сегашната клетка е жива:
.bulleted
- става мъртва, ако тази в ляво е жива