# Задачи - УПП, Седмица 13, 12.01.2024 \n GitHub classroom: [url https://classroom.github.com/a/bgiFD6SB classroom.github.com/a/bgiFD6SB] ## Алтернативни задачи Считайте [url https://github.com/ivanahristova/introduction-to-programming-2023-2024/tree/main/sem13 задачите от семинара] и [url ../week12/ тези от миналия път] като част от днешните задачи. Тоест, за хората които се затрудняват повечко, решете ги и след това се върнете тук. Разбира се, ще помагам и с тях. ## 1 задача От входа получавате число N, това е броя на "пробни" думи. След тях получавате още една дума, която е желаната дума. Трябва да изкарате коя пробна дума е най-близка до (различава се с най-малко знаци с) желаната дума. Всяка дума е на нов ред и е съставена от малки латински букви. Ако има няколко думи с еднаква "близкост", изкарайте последната от тях. =[Примери:]= .table |=Вход=||=Изход=| |:5\ncate\ncot\ndog\ncote\nco\ncat:||:cot:| |:4\nnask\nnmaskl\nmsdal\ntask\nmask:||:task:| ## 2 задача В началото получавате неотрицателно цяло число N. След това получавате N на брой редове. Всеки ред е във формата "(Име) (Фамилия) (Брой продадени продукти)". Редовете са разбъркани, изкарайте първо име и фамилия на хората с най-много продадени продукти. Ако има няколко хора, които са продали най-много продукти, изкарайте имената им в азбучен ред, първо по фамилия, после по име. Използвайте =[само една функция за сортиране!]= Като подсказка, използвайте указатели към функции за да променяте как тя работи. .question Какво свойство трябва да е изпълнено за сортиращата функция? =[Примери:]= .table |=Вход=||=Изход=| |:Antony Garcia 10\nJohn Doe 9\nJoseph Carmichael 10\nSteven Wayne 1\nBob Carmichael 10\nHoly Wilson 9:||:Bob Carmichael\nJoseph Carmichael\nAntony Garcia:| ## 3 задача Ще дефинираме обвито изречение, като редица от букви, за които са изпълнени следните правила: :unordered - първата е главна - последната е точка - между тях има само малки букви, цифри и шпации - всяко изречение е "обвито" до някакъв брой колони Тоест за всяко изречение са избрани максимален брой колони, и знаците са обвити, така че да се поберат. Примерно, ако имахме изречението "Hello world." и бяхме избрали 5 колони, тогава получаваме: ``` Hello worl d. От входа получавате N и M, те съответстват на матрица от символи с N реда и M колони. В матрицата имате обвити изречения, подредени по такъв начин, че между съседни има със сигурност поне една шпация (която действа като разделител). Допускаме, че при "двусмислици" възможно най-много шпации са част от изречението (а не от разделителя), тоест ако имаме: ``` A B . . тогава двете ни изречения са: ``` B. A . Изкарайте на конзолата всички обвити изречения в матрицата (редът им няма значение). =[Примери:]= .table |=Вход=||=Изход=| |:
7 13\nThi A Someth\ns i n ing.  \ns c .       \nool         \n.   Good Hel\n     luc lo.\nHa. k.      \n
:||:Something.\nAn.\nThis is cool.\nHello.\nGood luck.\nHa.\n:| |:
2 7\nB   A.\n.     
:||:
A.\nB  .
:| |:
3 7\n    A.\nB     \n.     
:||:
A.\nB  .
:| |:
4 7\n    A.\n      \nB     \n.     
:||:
A.\nB     .
:| |:
3 6\nBig   \njumper\n.     
:||:
Big   jumper.
:| ## 4 задача В префиксния (или полския) запис слагаме оператора за смятане пред (в ляво от) елементите върху които работи (нормален запис - `[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. Накрая трябва да изкарате всички стойности от последния израз. .warn Погледнете пояснението за вход/изход от [url ../week12/#4 последната задача от миналия път]. =[Пример:]= .table |=Вход=||=Изход=| |:
  1 5\n+ 2 6\n  3 7\n  4 8 .\n- 0.3 0.2 .\n* 1.0 0.1 .\n    1.0 3     0.2 3\n  - 3   0.3   0.1 1.0\n*   0.0 2.0 / 2.0 0.1 .\n$\n
:||:-3 -36 -20:|