From 44d085f265583f0e3cbef294bbe2c8e300aaa452 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Wed, 3 Apr 2024 17:47:07 +0300 Subject: [w6] Added exercise descriptions and solutions to 1-9 --- week06/README.md | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 week06/README.md (limited to 'week06/README.md') diff --git a/week06/README.md b/week06/README.md new file mode 100644 index 0000000..3675b0e --- /dev/null +++ b/week06/README.md @@ -0,0 +1,84 @@ +# Задачи - ООП, Седмица 6, 28.03.2024 + +*Този файл е копие на задачите от: [syndamia.com/teaching/oop-2023/week6](https://syndamia.com/teaching/oop-2023/week6)* + +&:warn В задачите за файлове имплементирайте всички нужни проверки и затваряния + +## Преговорни + +### 1 задача - Копиращ конструктор и оператор= + +Имплементирайте структура `WoodenPlank`, която скрито запазва ширина, дължина и височина на дъската (целочислено), цената ѝ (число с плаваща запетая) и типа дърво (низ с максимум 1024 знака). + +Имплементирайте get-ъри, set-ъри, копиращ конструктор, оператор= + +### 2 задача - Голяма четворка + +Имплементирайте структура `DynamicString`, която скрито запазва указател към низ (в динамичната памет) и неговия размер. + +Имплементирайте голяма четворка. + +## Лесни задачи + +### 3 задача + +Имплементирайте програма, която отваря файл (създава го, ако вече не е създаден) и вкарва текста "Hello World!" във файла. +Името на файла се подава от стандартния вход на един ред. + +### 4 задача + +Имплементирайте програма, която приема име на файл от стандартния вход. +Изкарайте последния ред от файла. + +Редовете са разделени със знака `\n`. + +### 5 задача + +Имплементирайте програма, която приема име на файл от стандартния вход. +Изкарайте броя редове и броя думи във файла. + +### 6 задача + +От стандартния вход получавате, на два отделни реда, две имена на файлове. +Вмъкнете съдържанието на втория файл по средата на първия файл. + +### 7 задача + +От стандартния вход получавате числата m и n, както и името на файл (на свой си ред). +Изкарайте на екрана от m-тата до n-тата буква (включително) от всеки ред във файла. +Първата буква на един ред е на индекс 1. + +### 8 задача + +Имплементирайте структура `FileBuffer`, която в конструктора си приема име на файл, отваря го и запазва (копира) цялото му съдържание в динамичната памет (с указател член-данна). + +&:question Кога трябва да затворим файла? + +Имплементирайте голяма четворка. + +### 9 задача + +Имплементирайте структура `Person`, която приема име на човек (низ с максимална дължина от 1024 знака) и неговата възраст (целочислена стойност). +Имплементирайте методи `Save` и `Load`, които съответно запазват/прочитат данните в (двоичен) файл с подадено име. + +## Трудни задачи + +### 10 задача + +Имплементирайте структура `Table`, която запазва произволен брой колони и редове с низови стойности. +Броя редове/колони може да се уразмерява по време на изпълнение. +Имплементирайте голяма четворка. + +Имплементирайте методи `AddRow` и `AddColumn`, които вмъкват подадените стойности като нов ред/колона на дадения индекс. +Аналогично имплементирайте методи `RemoveRow` и `RemoveColumn`. +**Чрез всички тези** имплементирайте метода `ModifyValue`, който променя стойността на клетката на дадените индекси. + +Имплементирайте методи `Save` и `Load`, които запазват/зреждат таблицата в/от файл с подадено име, в текстовия CSV формат (всеки ред в таблицата е ред във файла, всички стойности в реда от таблицата са разделени със запетая в реда във файла). + +### 11 задача + +Имплементирайте структура `City`, която запазва името на даден град (низ с максимална дължина от 1024 знака) и масив от указатели към други градове, които са негови съседи. +Имплементирайте методи `AddNeighbour` и `RemoveNeighbour` (броя съседи може да се променя), както и голяма четворка. + +Имплементирайте методи `Save` и `Load`, които запазват/зреждат всичките достижими градове от сегашния в/от (бинарен) файл с подадено име. +Подсказвам, че не можете да запазите указателите ей-така. -- cgit v1.2.3