Задачи - УПП, Седмица 10, 04.12.2025
GitHub Classroom: https://classroom.github.com/a/kDfmWmy7
За решаване
Задача 1
Потребителя ще въведе цяло неотрицателно число n. След това ще въведе n на брой реални числа. Трябва да изкарате числата в обратен ред.
Няма ограничения върху размера n.
| Вход | Изход |
|---|---|
| 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 на брой цели числа. Използвайки вашата функция, трябва да върнете средното аритметично на тези числа.
| Вход | Изход |
|---|---|
| 4 -2 38 0 2 16 -231 8 8 | -20.125 |
Задача 3
От входа получавате размерите на матрица, съставена от неотрицателни целочислени стойности, и след това всички стойности в самата матрица. В паметта обърнете реда на редовете и изкарайте резултата.
| Вход | Изход |
|---|---|
|
|
Задача 4
От входа получавате две матрици и трябва да върнете тяхното умножение (ред по стълб). За всяка матрица, първо получавате две цели неотрицателни стойности, размерите на матрицата, и след това получавате съответния брой реални числа.
Ако умножението не е възможно, изкарайте съобщение за грешка.
| Вход | Изход |
|---|---|
|
|
|
|
Задача 5
Реализирайте функция largest, която приема матрица, съставена от цели неотрицателни числа, с произволни размери, и връща най-големия елемент в нея.
От входа получавате две числа, размери на матрица, и след това всички елементи в матрицата. Използвайки вашата функция, върнете най-голямото число.
| Вход | Изход |
|---|---|
| 96 |
Задача 6
От входа получавате цели числа, докато не получите числото 0. Трябва да върнете редицата, където всяко число е равно на сумата на себе си и следващото число. Последното число не го променяйте.
| Вход | Изход |
|---|---|
| 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, докато тя не спре да се движи. След това получавате координат в дъската, трябва да върнете дали змията някога е посетила тази клетка.
| Вход | Изход |
|---|---|
| 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 обозначава край на преплетената редица.
| Вход | Изход |
|---|---|
| 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" матрица: такава, където редовете имат различни размери в паметта. Тоест, получавате размер на текущия ред и след това всичките му стойности. Ако размера е нула, приемете че матрицата е завършена.
Трябва да изкарате, на отделни редове, стойностите във всяка "колона" отгоре надолу, започвайки от последната "колона" към първата. Игнорирайте "дупки" от елементи.
| Вход | Изход |
|---|---|
|
|
Задача 10
Матрица от тип "пясъчен часовник" ще наричаме всяка матрица, където броя елементи от първия и последния ред са еднакви, от втория и пред-последния, от третия и пред-пред последния и так. нат., и размера на всеки вътрешен е с единица по-малък от предходния, докато в средата не остане само един елемент (при нечетен размер) или два елемента (при четен размер).
Върнете елементите от краищата на пясъчния часовник: първо са елементите от първия ред, след това тези от вторичния диагонал, след това тези от дъното и накрая тези от главния диагонал, като елементите се обикалят в съответната посока. Тоест, елементите на главния диагонал се обикалят в обратен ред.
От входа получавате размера на матрица пясъчен часовник и след това нейните елементите. Трябва да върнете елементите по контура (краищата) на часовника, следвайки горното правило.
| Вход | Изход |
|---|---|
| 1 2 3 4 5 6 7 4 |
| 1 2 3 4 5 7 8 9 0 6 |
| 1 2 3 4 5 8 9 0 3 4 5 6 7 2 9 6 |
За упражнение
Задача 11
От входа получавате цяло неотрицатлно число n, което обозначава степеннта на полином. След това получавате реалните коефициенти пред всяка степен (започвайки от най-голямата, n).
Накрая получавате реално число: потенциален корен. Трябва да върнете дали числото е корен на съответния полином.
| Вход | Изход |
|---|---|
| 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
От входа получавате двойки елементи: първо индекс и след това число с плаваща запетая. В масив с непознат размер (от стойности с плаваща запетая), на тези позиции са единствените ненулеви числа. Входа свършва, когато подадения индекс е отрицателно число.
След това получавате индекс и трябва да върнете стойността на съответния елемент.
| Вход | Изход |
|---|---|
| 0 81 383 9.2 100293 -4 -1 383 | 9.2 |
| 0 81 383 9.2 100293 -4 -1 100292 | 0 |
Задача 13
Магазин продава всеки ден стоки. Трябва да запазвате дневник на продажбите: от входа ще получите броя дни за които се отчитат продажбите и след това, за всеки ден, броя продажби и количеството на всяка продажба.
След това влизате в "потребителски интерфейс", където от входа получавате буква, обозначаваща команда върху дневника. Командите са:
-
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, тогава елементите на матрицата са свършили.
За дадена колона може да получите по-малко елементи отколкото трябва! В такъв случай попълнете останалите позиции с нули.
След това, от входа получавате ред и колона. Трябва да изкарате матрицата, без съответния ред и стълб.
| Вход | Изход |
|---|---|
| 1 2 3 -1001 4 5 6 7 8 9 -1001 -2222 2 1 |
|
Едно от най-важните неща: всяка динамично-заделена памет трябва да се освободи преди края на програмата!
Може ли да се направи по по-прост начин, отколкото ако матрицата беше статично-заделена?