Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2023 / additional2 / index.du
diff options
context:
space:
mode:
1 files changed, 115 insertions, 78 deletions
-rw-r--r--src/teaching/upp-2023/additional2/index.du193
diff --git a/src/teaching/upp-2023/additional2/index.du b/src/teaching/upp-2023/additional2/index.du
index 953288a..4a4121d 100644
--- a/src/teaching/upp-2023/additional2/index.du
+++ b/src/teaching/upp-2023/additional2/index.du
@@ -1,8 +1,11 @@
-# Допълнително упражнение 2 - УПП, 04.12.2023
+'def title Допълнително упражнение 2 - УПП, 04.12.2023
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/CrerXpf6 classroom.github.com/a/CrerXpf6]
+GitHub classroom: {url classroom.github.com/a/CrerXpf6;https://classroom.github.com/a/CrerXpf6}
.important
Следете внимателно дали триете всичката си динамична памет коректно на всяка подточка!
@@ -12,7 +15,7 @@ GitHub classroom: [url https://classroom.github.com/a/CrerXpf6 classroom.github.
Ще направим един прост текстов редактор.
От входа ще получавате редове текст, в общия случай редовете ще бъдат някакво текстово съдъражение, което ще трябва да запазите в паметта.
-Определени редове ще имат команди, чрез които ще [*редактирате*] вече въведения текст.
+Определени редове ще имат команди, чрез които ще {i редактирате} вече въведения текст.
Задачата е сравнително голяма, затова е разделена на подточки, като всяка надгражда предходната.
@@ -26,12 +29,13 @@ GitHub classroom: [url https://classroom.github.com/a/CrerXpf6 classroom.github.
Използвайте многомерен масив за запазване на редовете, вместо всичко да се запазва в един голям низ.
Това е нужно за бъдещи подточки.
-[*Само за тестване*], набързо имплементирайте проверка, ако първата буква от реда е [`Q`], тогава програмата да спре да приема вход, да изкара въведения текст до сега и да приключи.
+{i Само за тестване}, набързо имплементирайте проверка, ако първата буква от реда е {` Q}, тогава програмата да спре да приема вход, да изкара въведения текст до сега и да приключи.
-[=Пример:=]
-[*Смесен вход/изход*]
+{b Пример:}
+{i Смесен вход/изход}
-```terminal
+'def LANG terminal
+```
DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
earth-bank where a little-traveled trail led east through the pine for-
@@ -44,7 +48,7 @@ est. It was a high bank, and he paused to breathe at the top.
### б) функция за извеждане на команди
-Команда е един ред текст, като първата буква, различна от шпация, е [`:`].
+Команда е един ред текст, като първата буква, различна от шпация, е {` :}.
След нея има нула или повече шпации и още една буква, тази буква определя коя команда искаме да използваме.
В зависимост от командата, може да имаме параметри, поставени след буквата за командата.
Параметрите не съдържат шпации и параметрите са разделени помежду си с поне една шпация.
@@ -55,7 +59,7 @@ est. It was a high bank, and he paused to breathe at the top.
Командите не се запазват като част от текста.
-Имплементирайте функция [`extractCommand`], която приема низ.
+Имплементирайте функция {` extractCommand}, която приема низ.
Ако низът е команда, тогава връща масив от низове, първия от които съдържа буквата, определяща командата, докато останалите низове са параметрите.
Ако низът не е команда, тогава връща празен масив.
@@ -65,13 +69,15 @@ est. It was a high bank, and he paused to breathe at the top.
.question Как ще върнем масив? Нужно ли е да връщаме бройката елементи?
-[*Само за тестване*], след всеки въведен ред, ако е команда, изкарайте извлечените стойности от [`extractCommand`], със запетайки след всяка.
-Като при [url #section подточка a)], ако редът започва с [`Q`], спирате приемане на вход и изкарвате запазения текст.
+{i Само за тестване}, след всеки въведен ред, ако е команда, изкарайте извлечените стойности от {` extractCommand}, със запетайки след всяка.
+Като при {url подточка a);#section}, ако редът започва с {` Q}, спирате приемане на вход и изкарвате запазения текст.
-[=Пример:=]
-[*Смесен вход/изход*]
+{b Пример:}
+{i Смесен вход/изход}
-```terminal
+'def LANG terminal
+```
+'emplace
DAY HAD DAWNED COLD AND GRAY WHEN
:A bcd 012 345
A,bcd,012,345,
@@ -91,57 +97,63 @@ DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
earth-bank where a little-traveled trail led east through the pine for-
est. It was a high bank, and he paused to breathe at the top.
+'endemplace
### в) команда print
-Имплементирайте функция [`print`], която приема масив, съдържащ целия запазен текст, и го изкарва на екрана, като преди всеки ред изкарва неговия номер (първи ред има номер 1, втори има номер 2, так. нат.) с [=вмъкнати водещи нули=] (така че всяко число да бъде съставено от един и същ брой знаци).
+Имплементирайте функция {` print}, която приема масив, съдържащ целия запазен текст, и го изкарва на екрана, като преди всеки ред изкарва неговия номер (първи ред има номер 1, втори има номер 2, так. нат.) с {b вмъкнати водещи нули} (така че всяко число да бъде съставено от един и същ брой знаци).
Ако текстът е празен, не изкарва нищо.
-Тоест, ако сме въвели текст от 7 реда, [`print`] ще изкара:
+Тоест, ако сме въвели текст от 7 реда, {` print} ще изкара:
-```terminal
+'def LANG terminal
+```
1 First line
2 Second line
-...
+\...
7 Last line
Ако сме въвели 23 реда:
-```terminal
+'def LANG terminal
+```
01 First line
02 Second line
-...
+\...
09 Ninth line
10 Tenth line
11 Eleventh line
-...
+\...
23 Last line
Ако сме въвели 130 реда:
-```terminal
+'def LANG terminal
+```
001 First line
-...
+\...
009 Ninth line
010 Tenth line
-...
+\...
099 99th line
100 100th line
-...
+\...
130 Last line
-Командата, която използва тази функция, се определя с главната буква [`P`] и няма параметри.
+Командата, която използва тази функция, се определя с главната буква {` P} и няма параметри.
-За всички команди (за момента само [`P`]):
+За всички команди (за момента само {` P}):
.bulleted
- Обновете програмата, така че при валидна команда, да изпълни съответната и функция и да продължи изпълнение.
- Ако срещнете недефинирана команда, трябва да изкарате на екрана "; Not an editor command" и изпълнението на програмата да продължи.
- Ако срещнете допълнителни/излишни параметри, трябва да изкарате "; Excess parameters", но функцията да се изпълни с коректния брой параметри.
-[=Пример:=]
-[*Смесен вход/изход*]
+{b Пример:}
+{i Смесен вход/изход}
-```terminal
+'def LANG terminal
+```
+'emplace
DAY HAD DAWNED COLD AND GRAY WHEN
:P
1 DAY HAD DAWNED COLD AND GRAY WHEN
@@ -160,41 +172,48 @@ DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
earth-bank where a little-traveled trail led east through the pine for-
est. It was a high bank, and he paused to breathe at the top.
+'endemplace
### г) команда quit
-Вече може да премахнете временната функционалност, където ако реда започва с [`Q`] програмата спира и изкарва целия текст.
-Добавете командата [`Q`], която изкарва на екрана целия текст (без номера на редове) и спира програмата.
+Вече може да премахнете временната функционалност, където ако реда започва с {` Q} програмата спира и изкарва целия текст.
+Добавете командата {` Q}, която изкарва на екрана целия текст (без номера на редове) и спира програмата.
-[=Примери:=]
-[*Смесен вход/изход*]
+{b Примери:}
+{i Смесен вход/изход}
-```terminal
+'def LANG terminal
+```
+'emplace
DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
:Q
DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
+'endemplace
-```terminal
+'def LANG terminal
+```
+'emplace
DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
:Q 1 2 3
; Excess parameters
DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
+'endemplace
### д) команда delete
-Имплементирайте функцията [`deleteRow`], която получава целия текст, въведен до сега, и номер на реда (редовете се индексират от 1 до N).
+Имплементирайте функцията {` deleteRow}, която получава целия текст, въведен до сега, и номер на реда (редовете се индексират от 1 до N).
Тя променя текста, като премахва реда на дадения номер.
-.important Не забравяйте да промените размера на масива с низове! Не е решение просто да промените указателя към дадения ред на [`nullptr`], не искаме да използваме излишна памет.
+.important Не забравяйте да промените размера на масива с низове! Не е решение просто да промените указателя към дадения ред на {` nullptr}, не искаме да използваме излишна памет.
.question Какъв ще бъде типа на аргумента, който приема целия текст?
-Добавете командата [`D`], която приема един параметър - цяло положително число, и го прилага върху функцията [`deleteRow`].
+Добавете командата {` D}, която приема един параметър - цяло положително число, и го прилага върху функцията {` deleteRow}.
Ако номера на реда е невалиден, трябва да изкарате съобщение "; Invalid row number".
Имплементирайте следните функционалности за всички команди:
@@ -203,10 +222,12 @@ the man turned aside from the main Yukon trail. He climbed the high
- Ако даден параметър на команда е от невалиден тип (подадени букви, когато се иска число, примерно), изкарайте "; Invalid parameter type".
Единствените типове на параметри са цели числа и произволни низове (без шпации).
-[=Пример:=]
-[*Смесен вход/изход*]
+{b Пример:}
+{i Смесен вход/изход}
-```terminal
+'def LANG terminal
+```
+'emplace
dAY HAD DAWNED COLD AND GRAY WHEN
:P
1 dAY HAD DAWNED COLD AND GRAY WHEN
@@ -237,21 +258,24 @@ est. It was a high bank, and he paused to breathe at the top.
DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
earth-bank where a little-traveled trail led east through the pine for-
+'endemplace
### e) команда insert
-Имплементирайте функция [`insertRow`], която приема целия текст, низ и номер на реда.
-Функцията вмъква низа в целия текст като ред [=над=] този на подадения номер.
+Имплементирайте функция {` insertRow}, която приема целия текст, низ и номер на реда.
+Функцията вмъква низа в целия текст като ред {b над} този на подадения номер.
Ако номерът е над броя въведени редове до сега, редът се вмъква като последен.
-Добавете команда [`O`], която приема един параметър - неотрицателен ред.
-Следващия написан ред ще се вмъкне преди реда на дадения номер, използвайки функцията [`insertRow`].
+Добавете команда {` O}, която приема един параметър - неотрицателен ред.
+Следващия написан ред ще се вмъкне преди реда на дадения номер, използвайки функцията {` insertRow}.
Ако номера е невалиден изкарва "; Invalid row number".
-[=Пример:=]
-[*Смесен вход/изход*]
+{b Пример:}
+{i Смесен вход/изход}
-```terminal
+'def LANG terminal
+```
+'emplace
the man turned aside from the main Yukon trail. He climbed the high
:P
1 the man turned aside from the main Yukon trail. He climbed the high
@@ -282,24 +306,27 @@ He excused
3 earth-bank where a little-traveled trail led east through the pine for-
4 est. It was a high bank, and he paused to breathe at the top.
5 He excused
+'endemplace
### ж) команда join
-Имплементирайте функция [`joinRows`], която приема текстът, въведен до сега, и номер на ред N.
+Имплементирайте функция {` joinRows}, която приема текстът, въведен до сега, и номер на ред N.
Функцията вмъква текста от ред N+1 в края на ред N, като ги разделя с една шпация.
Ред N+1 се изтрива.
Ако N е 0 или номера на последния ред, не прави нищо.
-.important Не забравяйте да промените размера на масива с низове! Не е решение просто да промените указателя към дадения ред на [`nullptr`], не искаме да използваме излишна памет.
+.important Не забравяйте да промените размера на масива с низове! Не е решение просто да промените указателя към дадения ред на {` nullptr}, не искаме да използваме излишна памет.
-Добавете команда [`J`], която приема номер на ред - положително число.
-Следващия ред ще се вмъкне в края на сегашния, с една шпация между тях, използвайки функцията [`joinRows`].
+Добавете команда {` J}, която приема номер на ред - положително число.
+Следващия ред ще се вмъкне в края на сегашния, с една шпация между тях, използвайки функцията {` joinRows}.
При подаден невалиден ред изкарвате "; Invalid row number".
-[=Пример:=]
-[*Смесен вход/изход*]
+{b Пример:}
+{i Смесен вход/изход}
-```terminal
+'def LANG terminal
+```
+'emplace
DAY HAD DAWNED
COLD
AND GRAY WHEN
@@ -325,21 +352,24 @@ the man turned aside from the main Yukon trail. He climbed the high
:Q
DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
+'endemplace
### з) команда word info
-Имплементирайте функция [`wordOccurrences`], която приема целия текст и дума (низ без шпации).
+Имплементирайте функция {` wordOccurrences}, която приема целия текст и дума (низ без шпации).
Тя изкарва на екрана броя на срещания на дадената дума в целия текст, като изхода е във формата "; N occurrences" (където N е броя на срещания).
-[*Подсказвам, че за следващата подточка ще е полезно ако първо имплементирате функция, която връща броя срещания на дума в един ред.*]
+{i Подсказвам, че за следващата подточка ще е полезно ако първо имплементирате функция, която връща броя срещания на дума в един ред.}
-Добавете команда [`n`], която приема един аргумент - низ беш шпации.
-Използвайки [`wordOccurrences`] изкарва броя срещания на дадена дума в целия текст.
+Добавете команда {` n}, която приема един аргумент - низ беш шпации.
+Използвайки {` wordOccurrences} изкарва броя срещания на дадена дума в целия текст.
-[=Пример:=]
-[*Смесен вход/изход*]
+{b Пример:}
+{i Смесен вход/изход}
-```terminal
+'def LANG terminal
+```
+'emplace
DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
earth-bank where a little-traveled trail led east through the pine for-
@@ -357,18 +387,21 @@ DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
earth-bank where a little-traveled trail led east through the pine for-
est. It was a high bank, and he paused to breathe at the top.
+'endemplace
### и) команда word substitute
-Имплементирайте функция [`substituteWord`], която приема целия текст и две думи (низове без шпации).
+Имплементирайте функция {` substituteWord}, която приема целия текст и две думи (низове без шпации).
В текстът, всяко срещане на първата дума е заменено с втората дума.
.question Какво ще стане с размера на един ред, ако някоя дума/някои думи трябва да се заменят?
-Добавете команда [`s`], която приема две думи - низове без шпации.
-Използвайки функцията [`substituteWord`] замества всяко срещане на първата дума с втората.
+Добавете команда {` s}, която приема две думи - низове без шпации.
+Използвайки функцията {` substituteWord} замества всяко срещане на първата дума с втората.
-```terminal
+'def LANG terminal
+```
+'emplace
DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
earth-bank where a little-traveled trail led east through the pine for-
@@ -394,26 +427,29 @@ DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
earth-bank where a little-traveled trail led east through the pine for-
est. It was a high bank, and he paused to breathe at the top.
+'endemplace
### й) команда word delete
-Имплементирайте функция [`deleteWord`], която приема целия текст и дума (низ без шпации).
-В текстът, всяко срещане на думата, заедно с [*излишните*] шпации около нея, са премахнати.
+Имплементирайте функция {` deleteWord}, която приема целия текст и дума (низ без шпации).
+В текстът, всяко срещане на думата, заедно с {i излишните} шпации около нея, са премахнати.
Ето в кои случаи шпации са излишни (където "WORD" е подадената дума, която ще изтрием, а "\_" е някаква буква, която не е шпация):
.bulleted
-- [`WORD _`] (WORD е в началото на реда или има знаци преди нея) - шпацията след думата е излишна, трябва да стане [`_`].
- Отбелязвам, че шпациите в ляво се запазват: [` WORD _`] става [` _`].
-- [`_ WORD`] (WORD е в края на реда или има знаци след нея) - шпацията преди думата е излишна, трябва да стане [`_`].
-- [`_ WORD _`] - шпацията, която следва думата, е излишна, тоест трябва да стане [`_ _`].
- Трябва да отбележа, че шпациите в ляво се запазват така както са: [`_ WORD _`] става [`_ _`].
+- {` WORD _} (WORD е в началото на реда или има знаци преди нея) - шпацията след думата е излишна, трябва да стане {` _}.
+ Отбелязвам, че шпациите в ляво се запазват: {` WORD _} става {` _}.
+- {` _ WORD} (WORD е в края на реда или има знаци след нея) - шпацията преди думата е излишна, трябва да стане {` _}.
+- {` _ WORD _} - шпацията, която следва думата, е излишна, тоест трябва да стане {` _ _}.
+ Трябва да отбележа, че шпациите в ляво се запазват така както са: {` _ WORD _} става {` _ _}.
Във всичките случаи, като имам предвид "шпацията е излишна", означава че тази шпация, заедно с всички съседни.
-Тоест, [`WORD _`] трябва да стане [`_`], а не [` _`].
+Тоест, {` WORD _} трябва да стане {` _}, а не {` _}.
-Добавете команда [`d`], която приема един параметър - дума, низ без шпации.
-Използвайки функцията [`deleteWord`] премахва самата дума и излишните шпации.
+Добавете команда {` d}, която приема един параметър - дума, низ без шпации.
+Използвайки функцията {` deleteWord} премахва самата дума и излишните шпации.
-```terminal
+'def LANG terminal
+```
+'emplace
DAY HAD DAWNED COLD AND GRAY WHEN
the man turned aside from the main Yukon trail. He climbed the high
earth-bank where a little-traveled trail led east through the pine for-
@@ -424,3 +460,4 @@ DAY HAD DAWNED COLD AND GRAY WHEN
man turned aside from main Yukon trail. He climbed high
earth-bank where a little-traveled trail led east through pine for-
est. It was a high bank, and he paused to brea at top.
+'endemplace