diff options
| Commit | d5069c74de2f3d5281ace03343b07129a61c4ad8 (patch) | |
|---|---|---|
| Author | 2025-12-03 22:29:58 +0200 | |
| Committer | 2025-12-03 22:29:58 +0200 | |
| Files | 76b462aa52eed85c4a733f6fa0884f7d92b318af | |
| syndamia.com-d5069c74de2f3d5281ace03343b07129a61c4ad8.tar syndamia.com-d5069c74de2f3d5281ace03343b07129a61c4ad8.tar.gz syndamia.com-d5069c74de2f3d5281ace03343b07129a61c4ad8.zip | ||
| Parent | 7d1e0b1ab99ddea824d8e99022e7f4071dce3083 (diff) | |
feat(teaching/upp-2025/w10): Add exercises
3 files changed, 425 insertions, 0 deletions
| -rw-r--r-- | meta/meta.tsv | 1 | ||||
| -rw-r--r-- | src/teaching/upp-2025/index.du | 10 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week10/index.du | 414 |
diff --git a/meta/meta.tsv b/meta/meta.tsv index 2370fea..608927e 100644 --- a/meta/meta.tsv +++ b/meta/meta.tsv @@ -106,6 +106,7 @@ teaching/upp-2025/week06/index.html Задачи - УПП, Седмица 6, 06. teaching/upp-2025/week07/index.html Задачи - УПП, Седмица 7, 13.11.2025 Условията на задачите за упражнение. teaching/upp-2025/week08/index.html Задачи - УПП, Седмица 8, 20.11.2025 Условията на задачите за упражнение. teaching/upp-2025/week09/index.html Задачи - УПП, Седмица 9, 27.11.2025 Условията на задачите за упражнение. +teaching/upp-2025/week10/index.html Задачи - УПП, Седмица 10, 04.12.2025 Условията на задачите за упражнение. blog/connect-to-mysql-in-dotnet-ef/index.html Connect to MySql in .NET and Entity Framework Connecting a .NET application to a MySql database (with Entity Framework) can be tricky. Here is what works for me. diff --git a/src/teaching/upp-2025/index.du b/src/teaching/upp-2025/index.du index d2ef602..8c1c9c3 100644 --- a/src/teaching/upp-2025/index.du +++ b/src/teaching/upp-2025/index.du @@ -132,3 +132,13 @@ [url ./week09 Задачи] || [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week09 Решения] || [url https://classroom.github.com/a/ZYFDdLi4 GitHub Classroom] + +|: 10 +|: 04.12.2025 +|: Динамична памет + +|: +|: +|: +[url ./week10 Задачи] +|| [url https://classroom.github.com/a/kDfmWmy7 GitHub Classroom] diff --git a/src/teaching/upp-2025/week10/index.du b/src/teaching/upp-2025/week10/index.du new file mode 100644 index 0000000..3015dee --- /dev/null +++ b/src/teaching/upp-2025/week10/index.du @@ -0,0 +1,414 @@ +# Задачи - УПП, Седмица 10, 04.12.2025 + +'define expected-reading 12 min +'define created 01 December 2025 +'define edited 03 December 2025 +[$pagenav] + +.important +Едно от най-важните неща: =[всяка динамично-заделена памет трябва да се освободи преди края на програмата!]= + +GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] + +## За решаване + +### Задача 1 + +Потребителя ще въведе цяло неотрицателно число n. +След това ще въведе n на брой реални числа. +Трябва да изкарате числата в обратен ред. + +Няма ограничения върху размера n. + +:table_2 +|= Вход +|= Изход + +|: 5 1 2 3 4 5 +|: 5 4 3 2 1 + +|: 49 40.8 -97 45 -98 -22 63 -28 78 44 59 -39 10 -46 -39 87 -59 -59 57 70.01 91 5 -90 -72 94 -19 40 55 24 -91 86 -56 70 54 -12 -53 37 -31.1 -82 -70 -15 -100 -91 6 89 -43 93 -45 -69 -24 +|: -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 + +Реализирайте функцията `[average]`, която приема масив, съставен от цели числа, с произволен размер, и връща средното аритметично на всички тези числа. + +От входа ще получите размер n и след това 2n на брой цели числа. +Използвайки вашата функция, трябва да върнете средното аритметично на тези числа. + +:table_2 +|= Вход +|= Изход + +|: 4 -2 38 0 2 16 -231 8 8 +|: -20.125 + + +### Задача 3 + +От входа получавате размерите на матрица, съставена от неотрицателни целочислени стойности, и след това всички стойности в самата матрица. +=[В паметта]= обърнете реда на редовете и изкарайте резултата. + +.question +Може ли да се направи по по-прост начин, отколкото ако матрицата беше статично-заделена? + +:table_2 +|= Вход +|= Изход + +|: +``` +4 3 +1 2 3 +4 5 6 +7 8 9 +0 1 2 + +|: +``` +0 1 2 +7 8 9 +4 5 6 +1 2 3 + + +### Задача 4 + +От входа получавате две матрици и трябва да върнете тяхното умножение (ред по стълб). +За всяка матрица, първо получавате две цели неотрицателни стойности, размерите на матрицата, и след това получавате съответния брой реални числа. + +Ако умножението не е възможно, изкарайте съобщение за грешка. + +:table_2 +|= Вход +|= Изход + +|: +``` +3 3 +1 2 3 +4 5 6 +7 8 9 +3 3 +1 2 1 +2 1 2 +1 2 1 + +|: +``` +8 10 8 +20 25 20 +32 40 32 + +|: +``` +4 2 +28.1 10 +7 0 +-93.9 -40 +5 68 +3 2 +10 11 +3 -1 +0 0 + +|: +``` +Cannot multiply! + + +### Задача 5 + +Реализирайте функция `[largest]`, която приема матрица, съставена от цели неотрицателни числа, с произволни размери, и връща най-големия елемент в нея. + +От входа получавате две числа, размери на матрица, и след това всички елементи в матрицата. +Използвайки вашата функция, върнете най-голямото число. + +:table_2 +|= Вход +|= Изход + +|: +``` +5 7 +-25 52 87 -79 -25 +-6 96 42 90 26 +60 -100 97 -12 -89 +32 -7 31 89 -83 +-70 84 -61 38 31 +-8 22 -36 -99 -41 +27 -70 -65 44 87 + +|: 96 + + +### Задача 6 + +От входа получавате цели числа, докато не получите числото 0. +Трябва да върнете редицата, където всяко число е равно на сумата на себе си и следващото число. +Последното число не го променяйте. + +:table_2 +|= Вход +|= Изход + +|: 1 2 3 4 5 0 +|: 15 14 12 9 5 + +|: 8 18 -34 9 11 500 3 777 0 +|: 1292 1284 1266 1300 1291 1280 780 777 0 + + +### Задача 7 + +Змия пълзи върху произволно голяма дъска, разделена на квадратна решетка. +Тя започва в клетка (0,0), която ще зачитаме за горния ляв ъгъл на дъската. + +Във всеки момент тя (главата ѝ) отива на някоя съседна клетка: горна, долна, лява или дясна. +Ако тази клетка е невалидна или змията вече е била на тази клетка, тя спира да се движи. + +От входа получавате движенията на змията чрез буквите u, d, l, r, докато тя не спре да се движи. +След това получавате координат в дъската, трябва да върнете дали змията някога е посетила тази клетка. + +:table_2 +|= Вход +|= Изход + +|: r r d l u 0 1 +|: Not visited + +|: r r d l u 1 0 +|: Visited + +|: r r d l u 13 85 +|: Not visited + +|: r l 1 0 +|: Visited + +|: l 0 0 +|: Visited + +|: r r d d r r u u l l 3 1 +|: Not visited + + +### Задача 8 + +От входа получавате преплетени елементите в два масива, съдържащи цели числа. +Тоест, първия елемент е първи на първия масив, втори елемент е първи на втория масив, третия елемент е втори на първия масив и так. нат. + +Трябва да върнете елементите, пак преплетени, но по друга схема: елементите от втората редица са в обратен ред и първия елемент (от ляво на дясно) е елемент на втората редица. + +Числото 0 обозначава край на преплетената редица. + +:table_2 +|= Вход +|= Изход + +|: 1 10 2 20 3 30 4 40 5 50 0 +|: 50 1 40 2 30 3 20 4 10 5 + +|: 1 10 2 0 +|: 10 1 2 + + +### Задача 9 + +От входа получавате стойностите на "jagged" матрица: такава, където редовете имат различни размери в паметта. +Тоест, получавате размер на текущия ред и след това всичките му стойности. +Ако размера е нула, приемете че матрицата е завършена. + +Трябва да изкарате, на отделни редове, стойностите във всяка "колона" отгоре надолу, започвайки от последната "колона" към първата. +Игнорирайте "дупки" от елементи. + +:table_2 +|= Вход +|= Изход + +|: +``` +4 1 2 3 4 +2 5 6 +5 7 8 9 1 2 +1 3 +0 + +|: +``` +2 +4 1 +3 9 +2 6 8 +1 5 7 3 + + +### Задача 10 + +.important +Заемайте възможно най-малко памет! + +Матрица от тип "пясъчен часовник" ще наричаме всяка матрица, където броя елементи от първия и последния ред са еднакви, от втория и пред-последния, от третия и пред-пред последния и так. нат., и размера на всеки вътрешен е с единица по-малък от предходния, докато в средата не остане само един елемент (при нечетен размер) или два елемента (при четен размер). + +Върнете елементите от краищата на пясъчния часовник: първо са елементите от първия ред, след това тези от вторичния диагонал, след това тези от дъното и накрая тези от главния диагонал, като елементите се обикалят в съответната посока. +Тоест, елементите на главния диагонал се обикалят в обратен ред. + + +От входа получавате размера на матрица пясъчен часовник и след това нейните елементите. +Трябва да върнете елементите по контура (краищата) на часовника, следвайки горното правило. + +:table_2 +|= Вход +|= Изход + +|: +``` +3 +1 2 3 + 4 +5 6 7 + +|: 1 2 3 4 5 6 7 4 + +|: +``` +4 +1 2 3 4 + 5 6 +7 8 9 0 + +|: 1 2 3 4 5 7 8 9 0 6 + +|: +``` +5 +1 2 3 4 5 + 6 7 8 + 9 + 0 1 2 +3 4 5 6 7 + +|: 1 2 3 4 5 8 9 0 3 4 5 6 7 2 9 6 + + +## За упражнение + +### Задача 11 + +От входа получавате цяло неотрицатлно число n, което обозначава степеннта на полином. +След това получавате реалните коефициенти пред всяка степен (започвайки от най-голямата, n). + +Накрая получавате реално число: потенциален корен. +Трябва да върнете дали числото е корен на съответния полином. + +:table_2 +|= Вход +|= Изход + +|: 2 1 -5 6 2 +|: Is a root + +|: 2 1 -5 6 3 +|: Is a root + +|: 2 1 -5 6 5 +|: Not a root + +|: 0 5 0 +|: Not a root + +|: 0 5 5 +|: Not a root + +|: 1 5 -5 +|: Is a root + +|: 1 5 0 +|: Not a root + +|: 7 0 0 1 -5 14 0.5 -2.2 7 -0.78691 +|: Is a root + + +### Задача 12 + +.important +Заемайте възможно най-малко памет! + +От входа получавате двойки елементи: първо индекс и след това число с плаваща запетая. +В масив с непознат размер (от стойности с плаваща запетая), на тези позиции са единствените ненулеви числа. +Входа свършва, когато подадения индекс е отрицателно число. + + +След това получавате индекс и трябва да върнете стойността на съответния елемент. + +:table_2 +|= Вход +|= Изход + +|: 0 81 383 9.2 100293 -4 -1 383 +|: 9.2 + +|: 0 81 383 9.2 100293 -4 -1 100292 +|: 0 + + +### Задача 13 + +Магазин продава всеки ден стоки. +Трябва да запазвате дневник на продажбите: от входа ще получите броя дни за които се отчитат продажбите и след това, за всеки ден, броя продажби и количеството на всяка продажба. + +След това влизате в "потребителски интерфейс", където от входа получавате буква, обозначаваща команда върху дневника. +Командите са: +.bulleted +- `[e]` обозначава край на програмата +- `[m]`, получавате индекс на ден и трябва да върнете максималната продажба в този ден +- `[M]`, трябва да върнете индекса на най-печелившия ден + +=[Пример:]= *[(вход и изход са смесени, изходът е удебелен)]* +``` +3 +4 0.5 100 19.99 7 +0 +2 500 8 +m 0 +=[100]= +m 1 +=[0]= +m 2 +=[500]= +M +=[2]= +e + +### Задача 14 + +От входа получавате матрица по следния начин: първия елемент е на позиция (1,1) (горня ляв елемент на матрицата), втория елемент е (1,m) (горния десен елемент на матрицата), третия елемент е (2,1), четвъртия е (2, m). +Така, докато не се запълнят първата и последната колона. +Схемата продължава по същия начин, но и за вторатата и пред-последната колона. + +Стойностите в матрицата са целочислени. +Когато получите елемента -1001, тогава тогава елементите за двете колони са свършили и продължавате със следващата двойка колони. +Когато получите -2222, тогава елементите на матрицата са свършили. + +За дадена колона може да получите по-малко елементи отколкото трябва! В такъв случай попълнете останалите позиции с нули. + +След това, от входа получавате ред и колона. +Трябва да изкарате матрицата, без съответния ред и стълб. + +:table_2 +|= Вход +|= Изход + +|: 1 2 3 -1001 4 5 6 7 8 9 -1001 -2222 2 1 +.comment +1 4 5 2 +3 6 7 + 8 9 + +|: +``` +1 5 2 +3 7 |