diff options
1 files changed, 115 insertions, 76 deletions
| -rw-r--r-- | src/teaching/upp-2025/week04/index.du | 191 |
diff --git a/src/teaching/upp-2025/week04/index.du b/src/teaching/upp-2025/week04/index.du index 8b138fa..89cd0db 100644 --- a/src/teaching/upp-2025/week04/index.du +++ b/src/teaching/upp-2025/week04/index.du @@ -1,17 +1,17 @@ -# Задачи - УПП, Седмица 4, 23.10.2025 +'def title Задачи - УПП, Седмица 4, 23.10.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 9 min -'define created 18 October 2025 -'define edited 25 October 2025 -[$pagenav] +# {title} -GitHub Classroom: [url https://classroom.github.com/a/rOzekyCs] +{pagenav 9 min;18 October 2025;25 October 2025} + +GitHub Classroom: {url https://classroom.github.com/a/rOzekyCs} :important .p -При [`if`]-ове [=ще=] вземаме точки за изрази от типа: +При {` if}-ове {b ще} вземаме точки за изрази от типа: -```c++ +```cpp if (condition) std::cout << 1; else @@ -20,7 +20,7 @@ else .p или -```c++ +```cpp if (condition) std::cout << false; else @@ -29,7 +29,7 @@ else .p или -```c++ +```cpp if (condition) std::cout << '0'; else @@ -43,12 +43,13 @@ else ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise01.cpp} От входа получавате две реални числа. Трябва да ги върнете в нарастващ ред. -:table_2 +:table +:2 |= Вход |= Изход @@ -62,9 +63,10 @@ else |: -11.1 -2.5 + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise02.cpp} От входа получавате буква. Трябва да изкрате: @@ -74,7 +76,8 @@ else - "Digit" ако е цифра и - "Other" в останалите случаи. -:table_2 +:table +:2 |= Вход |= Изход @@ -91,14 +94,16 @@ else |: Other + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise03.cpp} От входа получавате ден в месеца (допускаме 30-дневен месец, където първи ден е Понеделник; като месец Септември от тази година). Трябва да върнете името на деня от седмицата. -:table_2 +:table +:2 |= Вход |= Изход @@ -118,18 +123,20 @@ else |: Tuesday + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise04.cpp} -От входа получавате реални коефициенти на квадратно уравнение: [`a`], [`b`] и [`c`]. +От входа получавате реални коефициенти на квадратно уравнение: {` a}, {` b} и {` c}. Трябва да изкарате корените на уравнението, като: .bulleted - ако има два корена, изкарвате и двата, -- ако има един корен, изкарвате [=само=] него, +- ако има един корен, изкарвате {b само} него, - ако няма реални корени, изкарвате "No real roots". -:table_2 +:table +:2 |= Вход |= Изход @@ -143,21 +150,23 @@ else |: 1.5 + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise05.cpp} От входа получавате буква, съответстваща на операция върху числа: .bulleted -- [`_`] за закръгляне надолу на число -- [`+`] за събиране на две числа -- [`*`] за умножение на две числа -- [`x`] за умножение на три числа -- [`.`] за умножение на четири числа +- {` _} за закръгляне надолу на число +- {` +} за събиране на две числа +- {` *} за умножение на две числа +- {` x} за умножение на три числа +- {` .} за умножение на четири числа След тази буква ще получите съответния брой реални числа и трябва да изкарате резултата от операцията. -:table_2 +:table +:2 |= Вход |= Изход @@ -177,16 +186,17 @@ else |: -8 + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise06.cpp} От входа получавате число, което определя фигура. Това число може да бъде: .bulleted -- [`1`] за окръжност, -- [`2`] за правоъгълник и -- [`3`] за триъгълник. +- {` 1} за окръжност, +- {` 2} за правоъгълник и +- {` 3} за триъгълник. Спрямо типа фигура, ще приемете различен брой реални числа: .bulleted @@ -197,7 +207,8 @@ else Използвайки тези числа, трябва да изкарате периметър (дължина) на фигурата. За константата π използвайте поне 5 цифри след запетаята. -:table_2 +:table +:2 |= Вход |= Изход @@ -211,16 +222,18 @@ else |: 1849.63 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise07.cpp} От входа получавате цяло число. Изкарайте за него таблицата на умножение от 1 до 10 включително. -[=Използвайте цикъл!=] +{b Използвайте цикъл!} -:table_2 +:table +:2 |= Вход |= Изход @@ -253,14 +266,16 @@ else 10 -80 + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise08.cpp} -От входа получавате две цели положителни числа, [`a`] и [`x`]. -Пресметнете [`a`] на степен [`x`]. +От входа получавате две цели положителни числа, {` a} и {` x}. +Пресметнете {` a} на степен {` x}. -:table_2 +:table +:2 |= Вход |= Изход @@ -277,15 +292,17 @@ else |: 844596301 + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise09.cpp} От входа получавате цяло положително число. -Трябва [=поотделно=] да сумирате всички четни и нечетни числа от 1 до подаденото число, включително. +Трябва {b поотделно} да сумирате всички четни и нечетни числа от 1 до подаденото число, включително. Накрая изкарайте двете суми. -:table_2 +:table +:2 |= Вход |= Изход @@ -299,14 +316,16 @@ else |: 1056 1024 + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise10.cpp} От входа получавате цяло положително число. Изкарайте за него "Prime" ако е просто и "Not prime" ако не е, последвано от най-малкия делител (различен от 1 и самото число). -:table_2 +:table +:2 |= Вход |= Изход @@ -323,14 +342,16 @@ else |: Not prime 1187 + ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise11.cpp} От входа получавате цели числа докато не срещнете числото 0. Трябва да върнете умножението на всички тези числа (без нулата). -:table_2 +:table +:2 |= Вход |= Изход @@ -344,20 +365,22 @@ else |: -1479870000 + ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise12.cpp} От входа получавате знак. -Ако този знак е аритметична операция ([`+`], [`-`], [`*`], [`/`]), тогава ще получите две цели числа. +Ако този знак е аритметична операция ({` +}, {` -}, {` *}, {` /}), тогава ще получите две цели числа. Трябва да пресметнете резултата на операцията върху тези числа, да го изкарате и пак да очаквате знак. Ако този знак е точка, тогава спирате програмата. -[*При вас вход и изход ще са смесени.*] +{i При вас вход и изход ще са смесени.} -:table_2 +:table +:2 |= Вход |= Изход @@ -371,16 +394,18 @@ else |: 8192 5 49 100 + ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise13.cpp} -[url https://en.wikipedia.org/wiki/Fibonacci_sequence Редицата на Фибоначи] е последователност от числа, където всяко следващо е равно на сумата на предходните две. +{url Редицата на Фибоначи;https://en.wikipedia.org/wiki/Fibonacci_sequence} е последователност от числа, където всяко следващо е равно на сумата на предходните две. По-точно, първото число (на индекс 0) е 0, второто число (на индекс 1) е 1 и всяко следващо се определя от предходните две. От входа получавате неотрицателен индекс и трябва да изкарате съответното число на фибоначи. -:table_2 +:table +:2 |= Вход |= Изход @@ -406,14 +431,16 @@ else |: 3524578 + ### Задача 14 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise14.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise14.cpp} От входа получавате цяло неотрицателно число. Трябва да обърнете реда на цифрите в числото и да изкарате резултата. -:table_2 +:table +:2 |= Вход |= Изход @@ -430,11 +457,12 @@ else |: 73444672 + ## За самоподготовка ### Задача 15 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise15.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise15.cpp} Получавате реално число: оценка по шестобалната система. Трябва да върнете "наименованието" на оценката спрямо стойността: @@ -446,7 +474,8 @@ else - "Weak" (оценки от 2.99 до 2.0) и - "Bad" (по-малко от двойка) -:table_2 +:table +:2 |= Вход |= Изход @@ -469,9 +498,10 @@ else |: Bad + ### Задача 16 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise16.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise16.cpp} Получавате три реални числа: ъгли в градуси. Трябва да върнете дали триъгълник с тези ъгли може да съществува, и ако да, дали е: @@ -482,7 +512,8 @@ else - тъп ("Obtuse") или - правоъгълен ("Right"). -:table_2 +:table +:2 |= Вход |= Изход @@ -502,16 +533,18 @@ else |: Obtuse triangle + ### Задача 17 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise17.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise17.cpp} -[url https://en.wikipedia.org/wiki/Factorial Факториел] е функция върху число, която представлява умножението на всички цели числа от 1 до самото число включително. +{url Факториел;https://en.wikipedia.org/wiki/Factorial} е функция върху число, която представлява умножението на всички цели числа от 1 до самото число включително. От входа получавате цяло положително число. Трябва да изкарате неговия факториел. -:table_2 +:table +:2 |= Вход |= Изход @@ -531,9 +564,10 @@ else |: 6 + ### Задача 18 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise18.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise18.cpp} Във вашата програма запазете цяла неотрицателна константа. От входа получавате цели неотрицателни числа: опити да се познае. @@ -542,9 +576,10 @@ else Ако е по-голямо, трябва да върнете "Lower". Ако бъде познато, трябва да върнете "You guessed it!" и да спрете програмата. -[*В следните примери числото е 1337. Вашия вход и изход ще бъдат смесени.*] +{i В следните примери числото е 1337. Вашия вход и изход ще бъдат смесени.} -:table_2 +:table +:2 |= Вход |= Изход @@ -578,15 +613,16 @@ You guessed it! ### Задача 19 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise19.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise19.cpp} -[url https://en.wikipedia.org/wiki/Harmonic_series_(mathematics) Хармоничния ред] е редица числа, където n-тото число се определя по формулата: +{url Хармоничния ред;https://en.wikipedia.org/wiki/Harmonic_series_(mathematics)} е редица числа, където n-тото число се определя по формулата: -[image ./img/harmonic_element.png] +{img ./img/harmonic_element.png} От входа ще получите положително цяло число n, трябва да върнете n-тото число в хармоничния ред. -:table_2 +:table +:2 |= Вход |= Изход @@ -606,21 +642,23 @@ You guessed it! |: 3.59774 + ### Задача 20 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise20.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise20.cpp} От входа получавате реално ненулево "целево" число и реално "обсег" число (в проценти). След това получавате редица реални ненулеви числа. -Продължавате да приемате реални числа, докато сумата на всички числа в редицата не е поне с "обсег" процента [*близкост*] до целевото число. +Продължавате да приемате реални числа, докато сумата на всички числа в редицата не е поне с "обсег" процента {i близкост} до целевото число. Накрая на програмата изкарайте тази сума. Формулата за процентова разлика между числа а и b е: -[image ./img/percent_diff.png] +{img ./img/percent_diff.png} -:table_2 +:table +:2 |= Вход |= Изход @@ -637,20 +675,21 @@ You guessed it! |: 20 + ## За любознателните ### Задача 21 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise21.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise21.cpp} В година 60та, преди близко до 2000 години, гръцкия математик Херон описва алгоритъм за пресмятане на корен квадратен на подадено число S. -Описва се редица от числа x, където всяко следващо е равно на предходното, следвайки [url https://en.wikipedia.org/wiki/Square_root_algorithms#Heron's_method просто линейно взаимоотношение]. +Описва се редица от числа x, където всяко следващо е равно на предходното, следвайки {url просто линейно взаимоотношение;https://en.wikipedia.org/wiki/Square_root_algorithms#Heron's_method}. Всеки следващ член на редицата става все по-близък до истинската стойност на корена. Първия член е произволно първоначално приближение. Разбира се, колко е по-близко приближението до истинската стойност, толкова по-бързо се приближаваме. -Нека за нашите цели да използваме [url https://en.wikipedia.org/wiki/Square_root_algorithms#Hyperbolic_estimates хиперболичното приближение]. +Нека за нашите цели да използваме {url хиперболичното приближение;https://en.wikipedia.org/wiki/Square_root_algorithms#Hyperbolic_estimates}. Получавате цяло число S и индекс на член в редицата n. Трябва да върнете корена на числото по метода на Херон. |