diff options
1 files changed, 56 insertions, 47 deletions
| -rw-r--r-- | src/teaching/upp-2023/week7/index.du | 103 |
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 - става мъртва, ако тази в ляво е жива |