Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2023 / week10 / index.du
diff options
context:
space:
mode:
1 files changed, 54 insertions, 51 deletions
-rw-r--r--src/teaching/oop-2023/week10/index.du105
diff --git a/src/teaching/oop-2023/week10/index.du b/src/teaching/oop-2023/week10/index.du
index d36406b..1cc62a5 100644
--- a/src/teaching/oop-2023/week10/index.du
+++ b/src/teaching/oop-2023/week10/index.du
@@ -1,8 +1,11 @@
-# Задачи - ООП, Седмица 10, 25.04.2024
+'def title Задачи - ООП, Седмица 10, 25.04.2024
+'def desc Условия на задачите за упражнение
+
+# {title}
\n
-GitHub classroom: [url https://classroom.github.com/a/PbkITWhF classroom.github.com/a/PbkITWhF]
+GitHub classroom: {url classroom.github.com/a/PbkITWhF;https://classroom.github.com/a/PbkITWhF}
## Преговорни
@@ -10,14 +13,14 @@ GitHub classroom: [url https://classroom.github.com/a/PbkITWhF classroom.github.
### Задача 1 - Шаблони
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise01 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise01}
-Реализирайте шаблонен клас [`Array`], който запазва динамично-заделен и оразмеряем масив от елементи с подаден тип.
+Реализирайте шаблонен клас {` Array}, който запазва динамично-заделен и оразмеряем масив от елементи с подаден тип.
Имплементирайте голяма четворка.
### Задача 2 - Оператори
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise02 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise02}
За предходния шаблонен клас имплементирайте оператори:
@@ -28,11 +31,11 @@ GitHub classroom: [url https://classroom.github.com/a/PbkITWhF classroom.github.
### Задача 3 - Грешки
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise03 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise03}
Имплементирайте функция, която приема име на текстов файл и изкарва на екрана първия ред от него.
Ако файлът не може да бъде отворен, хвърлете грешка - низ.
-Ако във файлът няма други редове (няма знакът [`'\\n'`]), тогава хвърлете грешка число - размерът на файла.
+Ако във файлът няма други редове (няма знакът {` '\\n'}), тогава хвърлете грешка число - размерът на файла.
В главната функция, приемете името на файла от потребителския вход и извикайте функцията.
Ако файлът не може да бъде отворен, тогава изкарайте хвърлената грешка на терминала и приключете програмата (успешно).
@@ -42,85 +45,85 @@ GitHub classroom: [url https://classroom.github.com/a/PbkITWhF classroom.github.
### Задача 4
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise04 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise04}
-Реализирайте клас [`Time24`], който запазва час и минути (в 24-часов формат) в две отделни целичислени член-данни.
-Имплементирайте член-функция [`Print24`], която изкарва часа на екрана в 24-часов формат.
+Реализирайте клас {` Time24}, който запазва час и минути (в 24-часов формат) в две отделни целичислени член-данни.
+Имплементирайте член-функция {` Print24}, която изкарва часа на екрана в 24-часов формат.
Нека конструкторът му приема две целочислени променливи, една за часа и втора за минутите.
-Реализирайте негов наследник [`Time12`], който имплементира метод [`Print12`], принтиращ часа в 12-часов формат.
+Реализирайте негов наследник {` Time12}, който имплементира метод {` Print12}, принтиращ часа в 12-часов формат.
Имплементирайте и негов конструктор, който приема две целочислени променливи (една за часа и една за минутите), заедно с булева променлива описваща дали часа е следобеден или не.
### Задача 5
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise05 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise05}
-Реализирайте клас [`FN`], който запазва факултетен номер като неотрицателно цяло число от 5 цифри.
-Реализирайте негов наследник [`ModernFN`], който запазва и начален (префиксен) низ, състоящ се от цифра, две букви и още две цифри.
+Реализирайте клас {` FN}, който запазва факултетен номер като неотрицателно цяло число от 5 цифри.
+Реализирайте негов наследник {` ModernFN}, който запазва и начален (префиксен) низ, състоящ се от цифра, две букви и още две цифри.
-Имплементирайте конструктори, като този на [`FN`] приема число, докато този на [`ModernFN`] приема низ, състоящ се от целия факултетен номер (и трябва да конвертирате последните 5 цифри към число).
-Имплементирайте метод [`PrintOldFN`] на класа [`FN`] и метод [`PrintNewFN`] на класа [`ModernFN`], които изкарват целия факултетен номер на съответния клас.
+Имплементирайте конструктори, като този на {` FN} приема число, докато този на {` ModernFN} приема низ, състоящ се от целия факултетен номер (и трябва да конвертирате последните 5 цифри към число).
+Имплементирайте метод {` PrintOldFN} на класа {` FN} и метод {` PrintNewFN} на класа {` ModernFN}, които изкарват целия факултетен номер на съответния клас.
### Задача 6
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise06 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise06}
-Реализирайте клас [`Grade`], който запазва оценка (от 2 до 6) като неотрицателна целочислена член-данна.
-Реализирайте и негов наследник [`GradeWithName`], който запазва и името на оценката като низ с произволна дължина.
+Реализирайте клас {` Grade}, който запазва оценка (от 2 до 6) като неотрицателна целочислена член-данна.
+Реализирайте и негов наследник {` GradeWithName}, който запазва и името на оценката като низ с произволна дължина.
-Конструктора на [`Grade`] приема само числовата стойност, докато този на наследника приема и името на оценката.
-Имплементирайте голяма петица на [`GradeWithName`].
+Конструктора на {` Grade} приема само числовата стойност, докато този на наследника приема и името на оценката.
+Имплементирайте голяма петица на {` GradeWithName}.
### Задача 7
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise07 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise07}
-Реализирайте клас [`String`], който запазва низ с произволна дължина.
-Имплементирайте голяма петица и член-функция [`At`], която приема индекс и връща референция към буквата на този индекс (при невалиден индекс хвърляте грешка).
+Реализирайте клас {` String}, който запазва низ с произволна дължина.
+Имплементирайте голяма петица и член-функция {` At}, която приема индекс и връща референция към буквата на този индекс (при невалиден индекс хвърляте грешка).
-Реализирайте негов наследник [`FileString`], който запазва и името на текстов файл като низ с произволна дължина.
+Реализирайте негов наследник {` FileString}, който запазва и името на текстов файл като низ с произволна дължина.
Ако е нужно, имплементирайте голяма петица.
-Самия низ в [`FileString`] е първия низ (начало първата буква и край [`'\\n'`]) от файла с подадено име.
+Самия низ в {` FileString} е първия низ (начало първата буква и край {` '\\n'}) от файла с подадено име.
-Имплементирайте метод [`ChangeAt`], който приема индекс и нова буква, променя буквата на дадения индекс с подадената и обновява файла със запазеното име.
+Имплементирайте метод {` ChangeAt}, който приема индекс и нова буква, променя буквата на дадения индекс с подадената и обновява файла със запазеното име.
### Задача 8
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise08 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise08}
-Реализирайте клас [`User`], който запава име и парола като два низа с произволна дължина.
-Реализирайте негов наследник [`Moderator`], който запазва и подпис, който също е низ с произволна дължина.
-Реализирайте наследник [`Administrator`] на [`Moderator`], който запазва и оразмеряващ се масив от цели числа.
+Реализирайте клас {` User}, който запава име и парола като два низа с произволна дължина.
+Реализирайте негов наследник {` Moderator}, който запазва и подпис, който също е низ с произволна дължина.
+Реализирайте наследник {` Administrator} на {` Moderator}, който запазва и оразмеряващ се масив от цели числа.
Идеята е, че всяко действие от модератор или администратор се "подписва" публично (за да се знае, че той го е направил, дори да си смени името), а за администратор допълнително пазим масив от идентификатори на форуми, които администрира.
За всеки клас имплементирайте голяма петица и гетъри и сетъри за името и паролата, когато е нужно.
-За [`Moderator`] имплементирайте гетър за подписа, но без сетър.
-За [`Administrator`] имплементирайте методи за добавяне и премахване на идентификатор на форум.
+За {` Moderator} имплементирайте гетър за подписа, но без сетър.
+За {` Administrator} имплементирайте методи за добавяне и премахване на идентификатор на форум.
### Задача 9
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise09 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise09}
-Реализирайте клас [`CommunicationPacket`], който запазва начален и краен адрес като две неотрицателни цели числа, заедно с трето число за размера на данните.
+Реализирайте клас {` CommunicationPacket}, който запазва начален и краен адрес като две неотрицателни цели числа, заедно с трето число за размера на данните.
В този клас никога няма данни, затова размера винаги е нула.
-Реализирайте негови наследници [`StringPacket`] и [`IntPacket`], където първия запазва и низ с произволна дължина (и дължината му е размера на данните) докато втория запазва и едно цяло число (и размера на [`int`] е размера на данните).
+Реализирайте негови наследници {` StringPacket} и {` IntPacket}, където първия запазва и низ с произволна дължина (и дължината му е размера на данните) докато втория запазва и едно цяло число (и размера на {` int} е размера на данните).
Размерът не се подава на конструктори, а се изчислява в конструктори.
Имплементирайте голяма петица и конструктори с нужните параметри.
### Задача 10
-.solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise10 Решение]
+.solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week10/Exercise10}
-Реализирайте клас [`String`], който запазва низ с произволна дължина, и имплементира оператори ==, !=, + (който връща нов низ с конкатенацията на двата низа).
+Реализирайте клас {` String}, който запазва низ с произволна дължина, и имплементира оператори ==, !=, + (който връща нов низ с конкатенацията на двата низа).
-Реализирайте негов наследник [`ModifiableString`], който имплементира оператор[] (връщащ референция към буквата на дадения индекс) и оператор+=.
+Реализирайте негов наследник {` ModifiableString}, който имплементира оператор[] (връщащ референция към буквата на дадения индекс) и оператор+=.
-Реализирайте наследник на [`ModifiableString`], [`ShowableString`], който имплементира оператори << и >>.
-Реализирайте наследник на [`ModifiableString`], [`SaveableString`], който имплементира методи write и read, приемащи име на двоичен файл и записващи или четещи низа от този файл.
+Реализирайте наследник на {` ModifiableString}, {` ShowableString}, който имплементира оператори << и >>.
+Реализирайте наследник на {` ModifiableString}, {` SaveableString}, който имплементира методи write и read, приемащи име на двоичен файл и записващи или четещи низа от този файл.
За всички класове имплементирайте голяма петица, когато е нужно.
@@ -128,23 +131,23 @@ GitHub classroom: [url https://classroom.github.com/a/PbkITWhF classroom.github.
### Задача 11
-Реализирайте шаблонен клас [`Array`], който запазва оразмеряем масив с елементи от подаден тип.
-Имплементирайте оператор== и оператор!=, заедно с метод [`isEmpty`].
+Реализирайте шаблонен клас {` Array}, който запазва оразмеряем масив с елементи от подаден тип.
+Имплементирайте оператор== и оператор!=, заедно с метод {` isEmpty}.
Концептуално идеята е, че този масив не може да се променя след като му се въведат стойностите от конструктора.
-Реализирайте негов наследник [`PrintableArray`], който имплементира оператори << и >>.
-Реализирайте наследник [`SaveableArray`] на [`Array`], който имплементира методи write и read, приемащи име на файл и булева стойност дали е двоичен или не, и съответно прочитат или запазват елементите от този масив във файла.
+Реализирайте негов наследник {` PrintableArray}, който имплементира оператори << и >>.
+Реализирайте наследник {` SaveableArray} на {` Array}, който имплементира методи write и read, приемащи име на файл и булева стойност дали е двоичен или не, и съответно прочитат или запазват елементите от този масив във файла.
-Реализирайте трети наследник, [`ModifiableArray`], на [`Array`], в който са имплементирани член-функции:
+Реализирайте трети наследник, {` ModifiableArray}, на {` Array}, в който са имплементирани член-функции:
.unordered
-- [`push`], която приема елемент и го вмъква в (десния) края на масива
-- [`pop`], който премахва елемент от (десния) края на масива
-- [`last`], който връща последния елемент от масива
+- {` push}, която приема елемент и го вмъква в (десния) края на масива
+- {` pop}, който премахва елемент от (десния) края на масива
+- {` last}, който връща последния елемент от масива
Може да се налага масива да се оразмерява.
Като подсказка, имплементирайте си метод, наличен за класа и наследници, който вмъква елемент на произволен индекс.
-Реализирайте наследник [`IndexableArray`] на [`ModifiableArray`], който имплементира оператор[].
+Реализирайте наследник {` IndexableArray} на {` ModifiableArray}, който имплементира оператор[].
Ако индекса е след края, тогава "вмъквате" елементи по подразбиране между края и подадения индекс, и връщате елемента от сега новия край.
-Реализирайте наследник [`FrontableArray`] на [`ModifiableArray`], който имплементира методи [`pushf`] и [`popf`], които работят като [`push`] и [`pop`], но с елемента в началото на масива (първия елемент).
+Реализирайте наследник {` FrontableArray} на {` ModifiableArray}, който имплементира методи {` pushf} и {` popf}, които работят като {` push} и {` pop}, но с елемента в началото на масива (първия елемент).