diff options
| Commit | 3f7d2f1d4b4bd61d0d182af5745a529bdff5a2dd (patch) | |
|---|---|---|
| Author | 2024-01-12 08:32:14 +0200 | |
| Committer | 2024-01-12 08:32:14 +0200 | |
| Files | d5ae5feb195dce5b1517d7b5383a9d4ddbd30e37 | |
| syndamia.com-3f7d2f1d4b4bd61d0d182af5745a529bdff5a2dd.tar syndamia.com-3f7d2f1d4b4bd61d0d182af5745a529bdff5a2dd.tar.gz syndamia.com-3f7d2f1d4b4bd61d0d182af5745a529bdff5a2dd.zip | ||
| Parent | f0cfdc9cefb1a2fa0058836a69352c6c4c29ea8f (diff) | |
[te/upp-2023/w13] Added exercises
2 files changed, 125 insertions, 0 deletions
| -rw-r--r-- | src/teaching/upp-2023/index.md | 1 | ||||
| -rw-r--r-- | src/teaching/upp-2023/week13/index.md | 124 |
diff --git a/src/teaching/upp-2023/index.md b/src/teaching/upp-2023/index.md index 9888181..6529f20 100644 --- a/src/teaching/upp-2023/index.md +++ b/src/teaching/upp-2023/index.md @@ -31,3 +31,4 @@ |10|15.12.2023|[Задачи](./week10) \|\| [Решения](https://github.com/Syndamia/upp-2023-solutions/tree/main/week10) \|\| [GitHub classroom](https://classroom.github.com/a/EJcTQRz4)| |11|22.12.2023|[Задачи](./week11) \|\| [Решения](https://github.com/Syndamia/upp-2023-solutions/tree/main/week11) \|\| [GitHub classroom](https://classroom.github.com/a/cZRnZj9y)| |12|05.01.2024|[Задачи](./week12) \|\| [GitHub classroom](https://classroom.github.com/a/KEDSxDjl)| +|13|12.01.2024|[Задачи](./week13) \|\| [GitHub classroom](https://classroom.github.com/a/bgiFD6SB)| diff --git a/src/teaching/upp-2023/week13/index.md b/src/teaching/upp-2023/week13/index.md new file mode 100644 index 0000000..70a2be9 --- /dev/null +++ b/src/teaching/upp-2023/week13/index.md @@ -0,0 +1,124 @@ +# Задачи - УПП, Седмица 13, 12.01.2024 + +GitHub classroom: [classroom.github.com/a/bgiFD6SB](https://classroom.github.com/a/bgiFD6SB) + +## Алтернативни задачи + +Считайте [задачите от семинара](https://github.com/ivanahristova/introduction-to-programming-2023-2024/tree/main/sem13) и [тези от миналия път](../week12/) като част от днешните задачи. +Тоест, за хората които се затрудняват повечко, решете ги и след това се върнете тук. +Разбира се, ще помагам и с тях. + + +## 1 задача + +От входа получавате число N, това е броя на "пробни" думи. +След тях получавате още една дума, която е желаната дума. +Трябва да изкарате коя пробна дума е най-близка до (различава се с най-малко знаци с) желаната дума. + +Всяка дума е на нов ред и е съставена от малки латински букви. +Ако има няколко думи с еднаква "близкост", изкарайте последната от тях. + +**Примери:** + +|Вход|Изход| +|----|-----| +|5<br>cate<br>cot<br>dog<br>cote<br>co<br>cat|cot| +|4<br>nask<br>nmaskl<br>msdal<br>task<br>mask|task| + +## 2 задача + +Ще дефинираме обвито изречение, като редица от букви, за които са изпълнени следните правила: + +- първата е главна +- последната е точка +- между тях има само малки букви, цифри и шпации +- всяко изречение е "обвито" до някакъв брой колони + + Тоест за всяко изречение са избрани максимален брой колони, и знаците са обвити, така че да се поберат. + Примерно, ако имахме изречението "Hello world." и бяхме избрали 5 колони, тогава оплучаваме: + + ``` + Hello + worl + d. + ``` + +От входа получавате N и M, те съответстват на матрица от символи с N реда и M колони. +В матрицата имате обвити изречения, подредени по такъв начин, че между съседни има със сигурност поне една шпация (която действа като разделител). +Допускаме, че при "двусмислици" възможно най-много шпации са част от изречението (а не от разделителя), тоест ако имаме: + +``` +A B +. . +``` + +тогва двете ни изречения са: + +``` +B. +A . +``` + +Изкарайте на конзолата всички обвити изречения в матрицата (редът им няма значение). + +**Примери:** + +|Вход|Изход| +|----|-----| +|<pre>7 13<br>Thi A Someth<br>s i n ing. <br>s c . <br>ool <br>. Good Hel<br> luc lo.<br>Ha. k. <br></pre>|Something.<br>An.<br>This is cool.<br>Hello.<br>Good luck.<br>Ha.<br>| +|<pre>2 7<br>B A.<br>. </pre>|<pre>A.<br>B .</pre>| +|<pre>3 7<br> A.<br>B <br>. </pre>|<pre>A.<br>B .</pre>| +|<pre>4 7<br> A.<br> <br>B <br>. </pre>|<pre>A.<br>B .</pre>| +|<pre>3 6<br>Big <br>jumper<br>. </pre>|<pre>Big jumper.</pre>| + +## 3 задача + +В префиксния (или полския) запис слагаме оператора за смятане пред (в ляво от) елементите върху които работи (нормален запис - `1 + 2`, полски запис - `+ 1 2`). +Ще разглеждаме "многоредови" изрази в полски запис, тоест изрази в които има няколко реда от целочислени стойности, така че трябва да се изчислят няколко израза с еднаква "форма", но различни стойности. + +Един такъв израз изглежда така: + +``` ++ 1 2 + 3 4 + 5 6 . +``` + +Точката на края на последния ред задава край на израза. +В този пример ще изчислим `1 + 2`, `3 + 4` и `5 + 6`, тоест ще "върне" три стойности: 3, 7 и 11. +Всяка колона в израза е от един и същи "тип", тоест в една колона винаги ще има числова стойност или някакъв знак. +С изключение на точката, всеки знак може да се постави на произволен ред (обаче в една колона не може да има повече от един знак). + +Примерно: + +``` + 1 - 2 2 63 ++ 3 4 7 7 + 5 6 * 8 9 . +``` + +Това ще изчисли `1 + (2 - 2 * 63)`, `3 + (4 - 7 * 7)` и `5 + (6 - 8 * 9)`. +Израза би направил същото нещо ако примерно всички знаци бяха на първия ред или на последния. + +От входа получавате няколко такива израза, докато не получите знака `$`. + +Може да достъпвате стойност от предходни изрази чрез синтаксиса "ИНДЕКС.ИНДЕКС", където индексите са от 0, първия определя нормера на израза, докато втория определя коя стойност искаме. +Примерно: + +``` + 1 2 ++ 3 4 + 5 6 . +* 0.0 0.2 . +``` + +В последния израз умножаваме от нулевия израз, първата и третата стойност, тоест умножаваме 3 и 11. + +Накрая трябва да изкарате всички стойности от последния израз. + + +**Пример:** + +|Вход|Изход| +|----|-----| +|<pre> 1 5<br>+ 2 6<br> 3 7<br> 4 8 .<br>- 0.3 0.2 .<br>* 1.0 0.1 .<br> 1.0 3 0.2 3<br> - 3 0.3 0.1 1.0<br>* 0.0 2.0 / 2.0 0.1 .<br>$<br></pre>|-3 -36 -20| |