diff options
1 files changed, 86 insertions, 54 deletions
| -rw-r--r-- | src/teaching/upp-2025/week03/index.du | 140 |
diff --git a/src/teaching/upp-2025/week03/index.du b/src/teaching/upp-2025/week03/index.du index 6eeb8f4..17a8ee7 100644 --- a/src/teaching/upp-2025/week03/index.du +++ b/src/teaching/upp-2025/week03/index.du @@ -1,12 +1,12 @@ -# Задачи - УПП, Седмица 3, 16.10.2025 +'def title Задачи - УПП, Седмица 3, 16.10.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 9 min -'define created 11 October 2025 -'define edited 18 October 2025 -[$pagenav] +# {title} + +{pagenav 9 min;11 October 2025;18 October 2025} .warn -Не сте учили побитови операции, затова някои задачи са преместени в [url #section-3 За любознателните]. +Не сте учили побитови операции, затова някои задачи са преместени в {url За любознателните;#section-3}. GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] @@ -14,12 +14,13 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise01.cpp} Получавате цяло число. Трябва да върнете 0 ако е нечетно и 1 ако е четно. -:table_2 +:table +:2 |= Вход |= Изход @@ -30,14 +31,16 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 1 + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise02.cpp} Получавате главна буква. Трябва да върнете съответната малка буква. -:table_2 +:table +:2 |= Вход |= Изход @@ -51,13 +54,15 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: u + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise03.cpp} Получавате 3 цели числа, трябва да върнете 1 ако образуват аритметична прогресия и 0 иначе. -:table_2 +:table +:2 |= Вход |= Изход @@ -74,16 +79,18 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 1 + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise05.cpp} -Получавате десетично число: сума в [=левове=]. -Трябва да върнете същата сума в [=евро=], като [`1 € = 1.95583 лв`]. +Получавате десетично число: сума в {b левове}. +Трябва да върнете същата сума в {b евро}, като {` 1 € = 1.95583 лв}. -[*Поради прецизност при такива числа, вашите изходи може с много малко да се различават.*] +{i Поради прецизност при такива числа, вашите изходи може с много малко да се различават.} -:table_2 +:table +:2 |= Вход |= Изход @@ -103,9 +110,10 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 230.081 + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise06.cpp} Получавате две булеви стойности. Трябва да върнете 1 ако свойството "би-импликация" е изпълнено за тях. @@ -113,9 +121,10 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] Припомняме, че би-импликацията и импликацията се дефинират по следния начин: -[image ./img/biimplication.png] +{img ./img/biimplication.png} -:table_2 +:table +:2 |= Вход |= Изход @@ -132,19 +141,21 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 1 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise07.cpp} Получавате 4 цели числа от входа. За тях трябва да изкарате: .bulleted - средно аритметично, - сума, -- сума от вида [`1/<първо число> + 1/<второ число> + ...`], +- сума от вида {` 1/<първо число> + 1/<второ число> + ...}, - умножение. -:table_2 +:table +:2 |= Вход |= Изход @@ -158,19 +169,21 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: -72.0 -288 inf 0 + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise08.cpp} -Получавате 5 реални числа: коефициентите на полином от трета степен [`a`] ([`a`] различно от 0), [`b`], [`c`], [`d`] и потенциален негов корен [`x`]. +Получавате 5 реални числа: коефициентите на полином от трета степен {` a} ({` a} различно от 0), {` b}, {` c}, {` d} и потенциален негов корен {` x}. -Трябва да върнете 1 ако [`x`] е корен на уравнението и 0 ако не е. +Трябва да върнете 1 ако {` x} е корен на уравнението и 0 ако не е. -Припомняме, че [`x`] е корен на кубично уравнение, когато: +Припомняме, че {` x} е корен на кубично уравнение, когато: -[image ./img/cubic.png] +{img ./img/cubic.png} -:table_2 +:table +:2 |= Вход |= Изход @@ -193,18 +206,20 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 1 + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise10.cpp} Получавате 6 реални числа: коефициентите на два (ортонормирани) триизмерни вектора. Върнете тяхното точково умножение. Припомняме, че алгебричата дефиниция на точковото умножение е: -[image ./img/dotproduct.png] +{img ./img/dotproduct.png} -:table_2 +:table +:2 |= Вход |= Изход @@ -221,24 +236,26 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 30 + ## За самоподготовка ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise12.cpp} -Първите релефни етикети (които човек може сам да попълни) са въведени през 1958 от [url https://en.wikipedia.org/wiki/Dymo_Corporation#History DYMO]. +Първите релефни етикети (които човек може сам да попълни) са въведени през 1958 от {url DYMO;https://en.wikipedia.org/wiki/Dymo_Corporation#History}. Механични устройства съдържат диск с букви (знаци), който се завърта докато не се избере желаната буква. Чрез стискане на дръжката, малък чук прищипва лентата върху диска (който има релефи на буквите), пластмасовата лента се изкривява и буква се отпечтва (подобно на пишеща машина). -[image ./img/dymo.JPG] +{img ./img/dymo.JPG} Нека нашия диск съдържа само малки букви. Във входа получавате две малки букви: коя буква е избрана в момента и коя буква е желана. Трябва да върнете с колко позиции на ляво (обратно на часовниковата стрелка) трябва да се завърти диска, така че желаната буква да се избере. -:table_2 +:table +:2 |= Вход |= Изход @@ -261,28 +278,30 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 7 + ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise13.cpp} -През 629, индийския математик [url https://en.wikipedia.org/wiki/Bh%C4%81skara_I Бхаскара 1ви] представя една забележителна апроксимация на синус функцията (в радиани): +През 629, индийския математик {url Бхаскара 1ви;https://en.wikipedia.org/wiki/Bh%C4%81skara_I} представя една забележителна апроксимация на синус функцията (в радиани): -[image ./img/sineapprox.png] +{img ./img/sineapprox.png} От входа ще получите два ъгъла в радиани, α и β, чиято сума е между 0 и π/2 (включително). -Използвайки [=единствено=] апроксимацията на Бхаскара 1ви, пресметнете [`tg(α + β)`].\n -[=Не може да използвате коренуване!=] +Използвайки {b единствено} апроксимацията на Бхаскара 1ви, пресметнете {` tg(α + β)}.\n +{b Не може да използвате коренуване!} За константата π, използвайте поне 5 цифри след десетичната запетая. .text <details> -<summary>[*Подсказка*]</summary> -Използвайте факта, че [url https://en.wikipedia.org/wiki/List_of_trigonometric_identities#Shifts_and_periodicity може да представите косинус чрез отместване на синус]. +<summary>{i Подсказка}</summary> +Използвайте факта, че {url може да представите косинус чрез отместване на синус;https://en.wikipedia.org/wiki/List_of_trigonometric_identities#Shifts_and_periodicity}. </details> -:table_2 +:table +:2 |= Вход |= Изход @@ -305,6 +324,7 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 1.30265 + .comment pi / 2 = 1.570795 pi / 3 = 1.047196 @@ -320,7 +340,8 @@ pi / 8 = 0.392698 Трябва да върнете 1 ако правоъгълниците се пресичат и 0 иначе. -:table_2 +:table +:2 |= Вход |= Изход @@ -340,6 +361,7 @@ pi / 8 = 0.392698 |: 1 + ## За любознателните .note @@ -351,7 +373,8 @@ pi / 8 = 0.392698 Трябва да върнете бит-а на съответната позиция в числото, като индекс 0 е най-десния бит (младши), докато 31 е най-левия бит (старши). -:table_2 +:table +:2 |= Вход |= Изход @@ -371,12 +394,14 @@ pi / 8 = 0.392698 |: 1 + ### Задача 9 Получавате цяло неотрицателно 8-битово число. Трябва да върнете 1 ако броя единици в числото е нечетно и 0 иначе. -:table_2 +:table +:2 |= Вход |= Изход @@ -396,6 +421,7 @@ pi / 8 = 0.392698 |: 1 + ### Задача 11 Нека да разделим едно цяло неотрицателно 32-битово число на 4 части, всяка по 8 бита. @@ -404,9 +430,10 @@ pi / 8 = 0.392698 Примерно, числото 2148271109 в двоичната бройна система е 10000000000011000000010000000101, което се разделя на подчислата 10000000, 00001100, 00000100 и 00000101 (128, 12, 4 и 5). Получавате две 32-битови цели неотрицателни числа. -Сумирайте [=съответните=] подчисла в двете числа и изкарайте резултаното "надчисло". +Сумирайте {b съответните} подчисла в двете числа и изкарайте резултаното "надчисло". -:table_2 +:table +:2 |= Вход |= Изход @@ -429,6 +456,7 @@ pi / 8 = 0.392698 |: 10291711 + .comment 0.0.0.3 + 0.0.0.4 = 7 0.0.0.255 + 0.0.0.1 = 0 @@ -449,7 +477,8 @@ pi / 8 = 0.392698 То представлява UNIX време. Трябва да изкарате UTC часа и датата, в "човешки" формат ("час:минути:секунди ден месец година"). -:table_2 +:table +:2 |= Вход |= Изход @@ -472,9 +501,10 @@ pi / 8 = 0.392698 |: 7:6:14 12 10 2025 + ### Задача 15 -В модерния интернет, всяко устройство се обозначава с [*уникален*] адрес. +В модерния интернет, всяко устройство се обозначава с {i уникален} адрес. Това е 32-битово цяло неотрицателно число. За човешко удобоство, това число се представя чрез "dot-decimal notation": всеки 8 бита се представят като десетично число и тези 4 числа се слепват с точки между тях. @@ -485,7 +515,8 @@ pi / 8 = 0.392698 От входа получавате цяло неотрицателно 32-битово число. Трябва да изкарате стойността му в "dot-decimal notation". -:table_2 +:table +:2 |= Вход |= Изход @@ -508,14 +539,15 @@ pi / 8 = 0.392698 |: 216.24.57.7 + ### Задача 17 -В автомобилите, за комуникация между всички електронни компоненти се използва [url https://en.wikipedia.org/wiki/CAN_bus Controller Area Network bus]. +В автомобилите, за комуникация между всички електронни компоненти се използва {url Controller Area Network bus;https://en.wikipedia.org/wiki/CAN_bus}. Различни устройства се свързват в една мрежа и си комуникират помежду си. Единичен трансфер на данни се нарича "frame". Всеки "frame" следва стандартен формат, описващ какви данни се пренасят, колко и т.н. -Как изглежда този формат може да намерите на: [url https://en.wikipedia.org/wiki/ISO_15765-2] +Как изглежда този формат може да намерите на: {url https://en.wikipedia.org/wiki/ISO_15765-2} От входа получавате осем 8-битови числа. Те представляват един CAN frame. |