Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2025 / week03 / index.du
diff options
context:
space:
mode:
1 files changed, 86 insertions, 54 deletions
-rw-r--r--src/teaching/upp-2025/week03/index.du140
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}
От входа ще получите два ъгъла в радиани, &alpha; и &beta;, чиято сума е между 0 и &pi;/2 (включително).
-Използвайки [=единствено=] апроксимацията на Бхаскара 1ви, пресметнете [`tg(&alpha; + &beta;)`].\n
-[=Не може да използвате коренуване!=]
+Използвайки {b единствено} апроксимацията на Бхаскара 1ви, пресметнете {` tg(&alpha; + &beta;)}.\n
+{b Не може да използвате коренуване!}
За константата &pi;, използвайте поне 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.