Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2023 / week2 / index.du
diff options
context:
space:
mode:
1 files changed, 75 insertions, 52 deletions
-rw-r--r--src/teaching/upp-2023/week2/index.du127
diff --git a/src/teaching/upp-2023/week2/index.du b/src/teaching/upp-2023/week2/index.du
index 645f1c6..9ea5a69 100644
--- a/src/teaching/upp-2023/week2/index.du
+++ b/src/teaching/upp-2023/week2/index.du
@@ -1,18 +1,21 @@
-# Задачи - УПП, Седмица 2, 13.10.2023
+'def title Задачи - УПП, Седмица 2, 13.10.2023
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.com/a/Bi5dhwW7]
+GitHub classroom: {url classroom.github.com/a/Bi5dhwW7;https://classroom.github.com/a/Bi5dhwW7}
-Решения: [url https://github.com/Syndamia/upp-2023-solutions/tree/main/week02 GitHub]
+Решения: {url GitHub;https://github.com/Syndamia/upp-2023-solutions/tree/main/week02}
-## [=Важни бележки=]
+## {b Важни бележки}
.numbered
-1. Не е добре да ползвате [`using namespace std;`]
-2. Единствената библиотека, която (поне за сега) може да ползвате е [`iostream`]
-3. За хората с текстови редактори и [`gcc`], моля да погледнете в Moodle и да използвате предоставените флагове, най-важния от които е [`-std=c++17`]
-3. Като си качвате решенията в GitHub classroom, за предпочитане е имената на файловете да свършват на [`.cpp`].
+1. Не е добре да ползвате {` using namespace std;}
+2. Единствената библиотека, която (поне за сега) може да ползвате е {` iostream}
+3. За хората с текстови редактори и {` gcc}, моля да погледнете в Moodle и да използвате предоставените флагове, най-важния от които е {` -std=c++17}
+3. Като си качвате решенията в GitHub classroom, за предпочитане е имената на файловете да свършват на {` .cpp}.
Отново, не е задължително, но ми улеснява живота.
## Тема: конвертиране
@@ -21,25 +24,26 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
### Задача 1 - Конвертирания от int
-Получавате целочислено число (тип [`int`]), след това, за всеки тип от следния списък, трябва да изкарате на нов ред текст във формата "Със/без загуба тип стойност":
+Получавате целочислено число (тип {` int}), след това, за всеки тип от следния списък, трябва да изкарате на нов ред текст във формата "Със/без загуба тип стойност":
.bulleted
-- [`bool`]
-- [`long long int`]
-- [`unsigned int`]
-- [`char`]
-- [`short int`]
-- [`double`]
-- [`long int`]
-- [`unsigned char`]
+- {` bool}
+- {` long long int}
+- {` unsigned int}
+- {` char}
+- {` short int}
+- {` double}
+- {` long int}
+- {` unsigned char}
Целта е да напишете един низ, който съдържа "Със/без загуба тип", и след това да изкарате (конвертираната) стойност.
Не се иска да правите код, който намира тази информация автоматично, всичко това просто си го напишете ръчно (hardcoded).
-[=Пример=]
-  [*Нарочно са показани само първите два реда от изхода*]
+{b Пример}
+  {i Нарочно са показани само първите два реда от изхода}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -47,6 +51,7 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
|: Със загуба bool 1\nБез загуба long long int 5\n...
+
## Тема: Побитови оператори
\n
@@ -55,9 +60,10 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
Получавате положително цяло число, от него трябва да "запазите" само първите (най-десните) 6 бита и да изкарате получилото се число.
-[=Примери=]
+{b Примери}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -68,15 +74,17 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
|: 8
+
### Задача 3 - Деление и умножение
-Получавате положително цяло число [`а`], трябва да изкарате две числа (разделени с празно пространство):\n
-[`a`] (целочислено) разделено на 16 и [`а`] умножено по 8.
-[=Трябва да използвате побитови оператори за това!=]
+Получавате положително цяло число {` а}, трябва да изкарате две числа (разделени с празно пространство):\n
+{` a} (целочислено) разделено на 16 и {` а} умножено по 8.
+{b Трябва да използвате побитови оператори за това!}
-[=Пример=]
+{b Пример}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -84,6 +92,7 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
|: 4 584
+
### Задача 4 - IP адрес
Разграничаваме устройствата, свързани към интернет, по техния IP адрес.
@@ -105,13 +114,14 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
```
128 128 128 128
-И накрая изкарания резултат трябва да бъде [`128.128.128.128`]
+И накрая изкарания резултат трябва да бъде {` 128.128.128.128}
На входа получавате цяло положително число, трябва да изкарате на екрана как би изглеждало с това представяне, с точките между осморки битове.
-[=Примери=]
+{b Примери}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -125,20 +135,22 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
|: 56.135.131.240
+
## Тема: Логически оператори
\n
### Задача 5 - Дели ли се
-От входа получавате две числа: [`а`] и [`n`].
-Трябва да върнете 0 ако [`a`] не се дели на [`n`] без остатък, и 1 иначе.
+От входа получавате две числа: {` а} и {` n}.
+Трябва да върнете 0 ако {` a} не се дели на {` n} без остатък, и 1 иначе.
-[=Упътване:=] Булевата стойност [`false`] се изкарва като 0, а [`true`] се изкарва като 1, от [`std::cout`]
+{b Упътване:} Булевата стойност {` false} се изкарва като 0, а {` true} се изкарва като 1, от {` std::cout}
-[=Примери=]
+{b Примери}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -154,9 +166,10 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
Получавате от входа буква, трябва да върнете 0 ако буквата не е цифра и 1 ако е.
-[=Примери=]
+{b Примери}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -170,6 +183,7 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
|: 0
+
## Тема: Условни конструкции
\n
@@ -178,9 +192,10 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
На входа получавате три целочислени, трябва да ги изкарате в нарастващ ред.
-[=Пример=]
+{b Пример}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -188,15 +203,17 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
|: 3 5 8
+
### Задача 8 - Календар
От входа получавате число от 1 до 12: номера на месеца.
Трябва да изкарате името на месеца, където 1 съответства на "January", 2 на "February" и так. нат.
-Моля използвате [`switch`] конструкция.
+Моля използвате {` switch} конструкция.
-[=Примери=]
+{b Примери}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -207,15 +224,17 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
|: October
+
### Задача 9 - Монети
Получавате число с плаваща запетая, това ще бъде цената на даден продукт в лева.
Искате да платите използвайки само монети, като целта е да използвате възможно най-големите стойности на монети, възможно най-много (тоест ситуацията в която трябва да носите един милион монети по една стотинка не трябва да е възможност).
Изкарайте двойки "монета бройка", като работите с монети от по 50 стотинки, 20 стотинки, 10 стотинки, 5 стотинки, 1 стотинка.
-[=Примери=]
+{b Примери}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -226,10 +245,11 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
|: 0.5 6 0.2 1 0.1 1 0.05 1 0.01 2
+
### Задача 10 - ILS
При кацане, един самолет се нужда от информация дали е точно приравнен със средата на пистата, особено когато видимостта е занижена.
-Една система за тази цел се нарича [url https://www.pilotscafe.com/Understanding-ILS/ ILS], но ние ще разгледаме нейния компонент, [url https://en.wikipedia.org/wiki/Instrument_landing_system_localizer the localizer]: в края на пистата големи предаватели излъчват различни радио сигнали в двете половини на пистата.
+Една система за тази цел се нарича {url ILS;https://www.pilotscafe.com/Understanding-ILS/}, но ние ще разгледаме нейния компонент, {url the localizer;https://en.wikipedia.org/wiki/Instrument_landing_system_localizer}: в края на пистата големи предаватели излъчват различни радио сигнали в двете половини на пистата.
Ефектът е като на стерео тон колони, когато самолетът е в ляво от пистата, той приема сигнала от лявата част на пистата по-силно от този за дясната, както ако си доближиш ухото до лявата тон колона, ти ще чуваш нейния звук по-силно от дясната.
@@ -238,9 +258,10 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
Спрямо техните стойности, трябва да върнете "Turn right" ако самолетът е в ляво от пистата (ако XXX е по-голямо от YYY) и "Turn left" ако самолетът е в дясно.
Допълнително, понеже не е нужно самолетът да се намира перфектно в средата на пистата, зачитаме че ако разликата между двата интензитета е по-малка от 4, тогава самолетът е правилно подравнен и връщаме "Follow heading".
-[=Примери=]
+{b Примери}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -254,14 +275,15 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
|: Follow heading
+
### Задача 11 - GPS
-[*В тази задача има много "теория", иначе самия код е малък и лесен.*]
+{i В тази задача има много "теория", иначе самия код е малък и лесен.}
Кондензирайки възможно най-много, ще обясня как работи GPS.
На земята имаме специални методи, чрез които можем да определим позицията на всеки сателит, обаче обратното, определянето на позицията чрез сателит, става с помощта на супер прецизни часовници и малко математика.
-Понеже радио комуникацията е със скоростта на светлината, можем лесно да определим разстояния между сателит и дадена точка, считайки колко време е отнело на сателита да върне отговор (припомням формулата [`s = v * t`], или [`разстояние = скорост * време`]).
+Понеже радио комуникацията е със скоростта на светлината, можем лесно да определим разстояния между сателит и дадена точка, считайки колко време е отнело на сателита да върне отговор (припомням формулата {` s = v * t}, или {` разстояние = скорост * време}).
Обаче, така получаваме само разстоянието, това не е достатъчно за да определим точната позиция, понеже има много възможни точки на земята, които да са на това разстояние.
Решението на проблема, е че просто вземаш разстоянието от няколко сателита, твоята позиция се намира в общата точка между всички възможни области.
@@ -274,7 +296,7 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
От математика, ако знаем разстоянието на нашия приятел към трети различен човек, трите кръга върху картата ще се пресичат в само една точка, а именно позицията на нашия приятел.
В три измерения, правим същото, обаче със сфери, и ни трябват четири сателита.
-Понеже математиката в две и три измерения е малко множко, ще разгледаме всичко едноизмерно, в [url https://en.wikipedia.org/wiki/Flatland Lineland].
+Понеже математиката в две и три измерения е малко множко, ще разгледаме всичко едноизмерно, в {url Lineland;https://en.wikipedia.org/wiki/Flatland}.
\n
@@ -287,9 +309,10 @@ GitHub classroom: [url https://classroom.github.com/a/Bi5dhwW7 classroom.github.
Накрая получавате още две числа, пак координата и време, но за втория сателит.
Изкарайте къде се намираме ние, като нека скоростта на светлината да бъде 29 метра в милисекунда.
-[=Пример=]
+{b Пример}
-:table_2
+:table
+:2
|= Вход
|= Изход