diff options
1 files changed, 75 insertions, 52 deletions
| -rw-r--r-- | src/teaching/upp-2023/week2/index.du | 127 |
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 |= Вход |= Изход |