diff options
1 files changed, 72 insertions, 47 deletions
| -rw-r--r-- | src/teaching/upp-2025/week10/index.du | 119 |
diff --git a/src/teaching/upp-2025/week10/index.du b/src/teaching/upp-2025/week10/index.du index 5ec2926..c8d7f63 100644 --- a/src/teaching/upp-2025/week10/index.du +++ b/src/teaching/upp-2025/week10/index.du @@ -1,20 +1,20 @@ -# Задачи - УПП, Седмица 10, 04.12.2025 +'def title Задачи - УПП, Седмица 10, 04.12.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 12 min -'define created 01 December 2025 -'define edited 03 December 2025 -[$pagenav] +# {title} + +{pagenav 12 min;01 December 2025;03 December 2025} .important -Едно от най-важните неща: [=всяка динамично-заделена памет трябва да се освободи преди края на програмата!=] +Едно от най-важните неща: {b всяка динамично-заделена памет трябва да се освободи преди края на програмата!} -GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] +GitHub Classroom: {url https://classroom.github.com/a/kDfmWmy7} ## За решаване ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise01.cpp} Потребителя ще въведе цяло неотрицателно число n. След това ще въведе n на брой реални числа. @@ -22,7 +22,8 @@ GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] Няма ограничения върху размера n. -:table_2 +:table +:2 |= Вход |= Изход @@ -33,16 +34,18 @@ GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] |: -24 -69 -45 93 -43 89 6 -91 -100 -15 -70 -82 -31.1 37 -53 -12 54 70 -56 86 -91 24 55 40 -19 94 -72 -90 5 91 70.01 57 -59 -59 87 -39 -46 10 -39 59 44 78 -28 63 -22 -98 45 -97 40.8 + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise02.cpp} -Реализирайте функцията [`average`], която приема масив, съставен от цели числа, с произволен размер, и връща средното аритметично на всички тези числа. +Реализирайте функцията {` average}, която приема масив, съставен от цели числа, с произволен размер, и връща средното аритметично на всички тези числа. От входа ще получите размер n и след това 2n на брой цели числа. Използвайки вашата функция, трябва да върнете средното аритметично на тези числа. -:table_2 +:table +:2 |= Вход |= Изход @@ -50,17 +53,19 @@ GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] |: -20.125 + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise03.cpp} От входа получавате размерите на матрица, съставена от неотрицателни целочислени стойности, и след това всички стойности в самата матрица. -[=В паметта=] обърнете реда на редовете и изкарайте резултата. +{b В паметта} обърнете реда на редовете и изкарайте резултата. .question Може ли да се направи по по-прост начин, отколкото ако матрицата беше статично-заделена? -:table_2 +:table +:2 |= Вход |= Изход @@ -80,16 +85,18 @@ GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] 1 2 3 + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise04.cpp} От входа получавате две матрици и трябва да върнете тяхното умножение (ред по стълб). За всяка матрица, първо получавате две цели неотрицателни стойности, размерите на матрицата, и след това получавате съответния брой реални числа. Ако умножението не е възможно, изкарайте съобщение за грешка. -:table_2 +:table +:2 |= Вход |= Изход @@ -127,19 +134,21 @@ GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] Cannot multiply! + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise05.cpp} .note -[*(07.12.2025)*] Оправено условие и пример +{i (07.12.2025)} Оправено условие и пример -Реализирайте функция [`largest`], която приема матрица, съставена от цели числа, с произволни размери, и връща най-големия елемент в нея. +Реализирайте функция {` largest}, която приема матрица, съставена от цели числа, с произволни размери, и връща най-големия елемент в нея. От входа получавате две числа, размери на матрица, и след това всички елементи в матрицата. Използвайки вашата функция, върнете най-голямото число. -:table_2 +:table +:2 |= Вход |= Изход @@ -157,15 +166,17 @@ Cannot multiply! |: 97 + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise06.cpp} От входа получавате цели числа, докато не получите числото 0. Трябва да върнете редицата, където всяко число е равно на сумата на себе си и следващото число. Последното число не го променяйте. -:table_2 +:table +:2 |= Вход |= Изход @@ -176,9 +187,10 @@ Cannot multiply! |: 1292 1284 1266 1300 1291 1280 780 777 0 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise07.cpp} Змия пълзи върху произволно голяма дъска, разделена на квадратна решетка. Тя започва в клетка (0,0), която ще зачитаме за горния ляв ъгъл на дъската. @@ -190,9 +202,10 @@ Cannot multiply! След това получавате координат в дъската, трябва да върнете дали змията някога е посетила тази клетка. .note -[*(07.12.2025)*] Разменени ред и колона в примерите +{i (07.12.2025)} Разменени ред и колона в примерите -:table_2 +:table +:2 |= Вход |= Изход @@ -215,9 +228,10 @@ Cannot multiply! |: Not visited + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise08.cpp} От входа получавате преплетени елементите в два масива, съдържащи цели числа. Тоест, първия елемент е първи на първия масив, втори елемент е първи на втория масив, третия елемент е втори на първия масив и так. нат. @@ -226,7 +240,8 @@ Cannot multiply! Числото 0 обозначава край на преплетената редица. -:table_2 +:table +:2 |= Вход |= Изход @@ -237,9 +252,10 @@ Cannot multiply! |: 10 1 2 + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise09.cpp} От входа получавате стойностите на "jagged" матрица: такава, където редовете имат различни размери в паметта. Тоест, получавате размер на текущия ред и след това всичките му стойности. @@ -248,7 +264,8 @@ Cannot multiply! Трябва да изкарате, на отделни редове, стойностите във всяка "колона" отгоре надолу, започвайки от последната "колона" към първата. Игнорирайте "дупки" от елементи. -:table_2 +:table +:2 |= Вход |= Изход @@ -269,9 +286,10 @@ Cannot multiply! 1 5 7 3 + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise10.cpp} .important Заемайте възможно най-малко памет! @@ -286,9 +304,10 @@ Cannot multiply! Трябва да върнете елементите по контура (краищата) на часовника, следвайки горното правило. .note -[*(07.12.2025)*] Поправен примера с четния размер +{i (07.12.2025)} Поправен примера с четния размер -:table_2 +:table +:2 |= Вход |= Изход @@ -323,11 +342,12 @@ Cannot multiply! |: 1 2 3 4 5 8 9 0 3 4 5 6 7 2 9 6 + ## За упражнение ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise11.cpp} От входа получавате цяло неотрицатлно число n, което обозначава степеннта на полином. След това получавате реалните коефициенти пред всяка степен (започвайки от най-голямата, n). @@ -336,9 +356,10 @@ Cannot multiply! Трябва да върнете дали числото е корен на съответния полином. .note -[*(07.12.2025)*] Поправени примерите с първа степен полином +{i (07.12.2025)} Поправени примерите с първа степен полином -:table_2 +:table +:2 |= Вход |= Изход @@ -367,9 +388,10 @@ Cannot multiply! |: Is a root + ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise12.cpp} .important Заемайте възможно най-малко памет! @@ -381,7 +403,8 @@ Cannot multiply! След това получавате индекс и трябва да върнете стойността на съответния елемент. -:table_2 +:table +:2 |= Вход |= Изход @@ -392,6 +415,7 @@ Cannot multiply! |: 0 + ### Задача 13 Магазин продава всеки ден стоки. @@ -400,24 +424,24 @@ Cannot multiply! След това влизате в "потребителски интерфейс", където от входа получавате буква, обозначаваща команда върху дневника. Командите са: .bulleted -- [`e`] обозначава край на програмата -- [`m`], получавате индекс на ден и трябва да върнете максималната продажба в този ден -- [`M`], трябва да върнете индекса на най-печелившия ден +- {` e} обозначава край на програмата +- {` m}, получавате индекс на ден и трябва да върнете максималната продажба в този ден +- {` M}, трябва да върнете индекса на най-печелившия ден -[=Пример:=] [*(вход и изход са смесени, изходът е удебелен)*] +{b Пример:} {i (вход и изход са смесени, изходът е удебелен)} ``` 3 4 0.5 100 19.99 7 0 2 500 8 m 0 -[=100=] +{b 100} m 1 -[=0=] +{b 0} m 2 -[=500=] +{b 500} M -[=2=] +{b 2} e ### Задача 14 @@ -435,7 +459,8 @@ e След това, от входа получавате ред и колона. Трябва да изкарате матрицата, без съответния ред и стълб. -:table_2 +:table +:2 |= Вход |= Изход |