'def title Задачи - УПП, Седмица 13, 12.01.2024 'def desc Условия на задачите за упражнение # {title} \n GitHub classroom: {url classroom.github.com/a/bgiFD6SB;https://classroom.github.com/a/bgiFD6SB} ## Алтернативни задачи Считайте {url задачите от семинара;https://github.com/ivanahristova/introduction-to-programming-2023-2024/tree/main/sem13} и {url тези от миналия път;../week12/} като част от днешните задачи. Тоест, за хората които се затрудняват повечко, решете ги и след това се върнете тук. Разбира се, ще помагам и с тях. ## 1 задача От входа получавате число N, това е броя на "пробни" думи. След тях получавате още една дума, която е желаната дума. Трябва да изкарате коя пробна дума е най-близка до (различава се с най-малко знаци с) желаната дума. Всяка дума е на нов ред и е съставена от малки латински букви. Ако има няколко думи с еднаква "близкост", изкарайте последната от тях. {b Примери:} :table :2 |= Вход |= Изход |: ``` 5 cate cot dog cote co cat |: cot |: ``` 4 nask nmaskl msdal task mask |: task ## 2 задача В началото получавате неотрицателно цяло число N. След това получавате N на брой редове. Всеки ред е във формата "(Име) (Фамилия) (Брой продадени продукти)". Редовете са разбъркани, изкарайте първо име и фамилия на хората с най-много продадени продукти. Ако има няколко хора, които са продали най-много продукти, изкарайте имената им в азбучен ред, първо по фамилия, после по име. Използвайте {b само една функция за сортиране!} Като подсказка, използвайте указатели към функции за да променяте как тя работи. .question Какво свойство трябва да е изпълнено за сортиращата функция? {b Примери:} :table :2 |= Вход |= Изход |: ``` Antony Garcia 10 John Doe 9 Joseph Carmichael 10 Steven Wayne 1 Bob Carmichael 10 Holy Wilson 9 |: ``` Bob Carmichael Joseph Carmichael Antony Garcia ## 3 задача Ще дефинираме обвито изречение, като редица от букви, за които са изпълнени следните правила: :unordered - първата е главна - последната е точка - между тях има само малки букви, цифри и шпации - всяко изречение е "обвито" до някакъв брой колони Тоест за всяко изречение са избрани максимален брой колони, и знаците са обвити, така че да се поберат. Примерно, ако имахме изречението "Hello world." и бяхме избрали 5 колони, тогава получаваме: ``` Hello worl d. От входа получавате N и M, те съответстват на матрица от символи с N реда и M колони. В матрицата имате обвити изречения, подредени по такъв начин, че между съседни има със сигурност поне една шпация (която действа като разделител). Допускаме, че при "двусмислици" възможно най-много шпации са част от изречението (а не от разделителя), тоест ако имаме: ``` A B . . тогава двете ни изречения са: ``` B. A . Изкарайте на конзолата всички обвити изречения в матрицата (редът им няма значение). {b Примери:} :table :2 |= Вход |= Изход |: ``` 7 13 Thi A Someth s i n ing. s c . ool . Good Hel luc lo. Ha. k. |: ``` Something. An. This is cool. Hello. Good luck. Ha. |: ``` 2 7 B A. . |: ``` A. B . |: ``` 3 7 A. B . |: ``` A. B . |: :code 4 7 A. B . |: ``` A. B . |: ``` 3 6 Big jumper . |: ``` 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}. {b Пример:} :table :2 |= Вход |= Изход |: ``` 1 5 + 2 6 3 7 4 8 . - 0.3 0.2 . * 1.0 0.1 . 1.0 3 0.2 3 - 3 0.3 0.1 1.0 * 0.0 2.0 / 2.0 0.1 . $ |: -3 -36 -20