Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2023 / week1 / index.du
diff options
context:
space:
mode:
1 files changed, 35 insertions, 25 deletions
-rw-r--r--src/teaching/oop-2023/week1/index.du60
diff --git a/src/teaching/oop-2023/week1/index.du b/src/teaching/oop-2023/week1/index.du
index f229343..5dd5787 100644
--- a/src/teaching/oop-2023/week1/index.du
+++ b/src/teaching/oop-2023/week1/index.du
@@ -1,17 +1,20 @@
-# Задачи - ООП, Седмица 1, 22.02.2024
+'def title Задачи - ООП, Седмица 1, 22.02.2024
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/UPJOzHty classroom.github.com/a/UPJOzHty]
+GitHub classroom: {url classroom.github.com/a/UPJOzHty;https://classroom.github.com/a/UPJOzHty}
## Задача 1
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise1.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise1.cpp}
Имплементирайте низ чрез структура.
В структурата трябва да запазвате указател към низа и неговата дължина.
-Имплементирайте функция [`concatString`], която приема две структури от този тип и връща низ, пак в същата структура, който е конкатенация (слепване) на първите два низа.
+Имплементирайте функция {` concatString}, която приема две структури от този тип и връща низ, пак в същата структура, който е конкатенация (слепване) на първите два низа.
.question Има ли значение дали типовете на аргументите, или на върнатата стойност, са референции или указатели (или нито едното)?
@@ -19,35 +22,36 @@ GitHub classroom: [url https://classroom.github.com/a/UPJOzHty classroom.github.
## Задача 2
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise2.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise2.cpp}
Имплементирайте структура за динамично-заделен масив от целочислени числа.
Тя трябва да запазва указател към масива, размера на масива и бройката на елементи в масива.
Заделянето на динамична памет е бавна операция, затова винаги ще заделяме повече клетки, отколкото са ни нужни.
-Имплементирайте функция [`resize`], която удвоява размера на масива (нека първоначалния размер на масива е 2), на подадена стойност от тип вашата структура.
+Имплементирайте функция {` resize}, която удвоява размера на масива (нека първоначалния размер на масива е 2), на подадена стойност от тип вашата структура.
-Имплементирайте функция [`addToEnd`], която приема (инстанция на) структурата ви и вмъква елемент в първата незаета позиция.
+Имплементирайте функция {` addToEnd}, която приема (инстанция на) структурата ви и вмъква елемент в първата незаета позиция.
В самия код тествайте функциите (не е нужен потребителски вход).
## Задача 3
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise3.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise3.cpp}
Разглеждате "пакети" (логове) информация от редица датчици.
Един пакет запазва времето, когато информацията е била отчетена от датчиците, и стойностите на всички датчици: температура, атмосферно налягане, влажност и надморска височина.
Всички типове данни са целочислени.
От входа получавате N, броя пакети, които трябва да запазите, и след това 5N на брой целочислени стойности.
-Накрая получавате буква: [`t`], [`p`], [`h`], [`e`], всяка съответства на някоя отделна стойност от датчиците.
+Накрая получавате буква: {` t}, {` p}, {` h}, {` e}, всяка съответства на някоя отделна стойност от датчиците.
Трябва да изкарате на екрана всичките стойности от пакетите, подредени в нарастващ ред на времето, като всички след първата са разликите им спрямо първата.
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -65,29 +69,31 @@ p
|: -15 87 109 79 3 75
+
## Задача 4
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise4.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise4.cpp}
-'footnote sabre Защото една от първите индустрии, които са се нуждаели от компютърни системи, била [url https://en.wikipedia.org/wiki/Sabre_%28travel_reservation_system%29#History авиационната индустрия].
+'footnote sabre Защото една от първите индустрии, които са се нуждаели от компютърни системи, била {url авиационната индустрия;https://en.wikipedia.org/wiki/Sabre_%28travel_reservation_system%29#History}.
-Направете структура за съхранение на полети[$sabre].
+Направете структура за съхранение на полети{sabre}.
Трябва да запазите имената на началния и крайния град като низове (допускаме, че няма шпации в имената на градовете), часът на излитане и на кацане в целочислен формат (като на циферблат на дигитален часовник, без разделителното двоеточие) и цената на полета в тип с плаваща запетая (в долари).
### а) въвеждане
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise4.cpp#L15-L36 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise4.cpp#L15-L36}
От входа получавате N, това определя броя полети, които трябва да се добавят в системата.
Всеки полет е редица от 5 стойности, в реда в който са дефинирани.
-[*Напомням, че това е нагласено да ползвате [`std::cin`] вместо ръчно да обработвате целия ред.*]
+{i Напомням, че това е нагласено да ползвате {` std::cin} вместо ръчно да обработвате целия ред.}
Изкарайте началните и крайните градове, както и цената на полетите, подредени в нарастващ ред на час на излитане.
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -109,9 +115,10 @@ Berlin Paris 140
Paris NewYork 500
+
### б) търсене
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise4.cpp#L38-L247 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise4.cpp#L38-L247}
След като се въведат всички полети, получавате от входа два низа - имена на градове.
Трябва да изкарате най-евтиния, и след него най-бързия, вариант за пътуване от първия град към втория.
@@ -119,9 +126,10 @@ Paris NewYork 500
Прикачване между полети е позволено, така че под "вариант" трябва да изкарате всичките полети, които са решение.
За един полет е нужно да изкарате само началния град, крайния град, час на излитане и цена, като градовете трябва да са подредени в нарастващ ред на часа на излитане.
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход
@@ -144,11 +152,12 @@ Quickest:
Sofia NewYork 0610 800
+
## Задача 5
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise5.cpp Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week01/Exercise5.cpp}
-Имате система за потребители, всеки потребител си има име и приятели (един приятел е [=указател към потребител=]).
+Имате система за потребители, всеки потребител си има име и приятели (един приятел е {b указател към потребител}).
В началото се въвежда N, това е броят потребители в системата.
За един потребител, първо се въвежда на нов ред името му, след това броя на неговите приятели и накрая, на отделни редове, имената на всички тези приятели.
@@ -156,9 +165,10 @@ Sofia NewYork 0610 800
Накрая получавате едно име, това е началния потребител.
Трябва да намерите, започвайки от него, с колко други потребителя има някаква приятелска връзка (директна, приятел на приятел, приятел на приятел на приятел, ...).
-[=Пример:=]
+{b Пример:}
-:table_2
+:table
+:2
|= Вход
|= Изход