diff options
1 files changed, 54 insertions, 51 deletions
| -rw-r--r-- | src/teaching/oop-2023/week10/index.du | 105 |
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}, но с елемента в началото на масива (първия елемент). |