'def title Задачи - ООП, Седмица 6, 28.03.2024 'def desc Условия на задачите за упражнение # {title} \n GitHub classroom: {url classroom.github.com/a/rzSTn5pu;https://classroom.github.com/a/rzSTn5pu} .warn В задачите за файлове имплементирайте всички нужни проверки и затваряния ## Преговорни ### 1 задача - Копиращ конструктор и оператор= .solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week06/Exercise01.cpp} Имплементирайте структура {` WoodenPlank}, която скрито запазва ширина, дължина и височина на дъската (целочислено), цената ѝ (число с плаваща запетая) и типа дърво (низ с максимум 1024 знака). Имплементирайте get-ъри, set-ъри, копиращ конструктор, оператор= ### 2 задача - Голяма четворка .solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week06/Exercise02.cpp} Имплементирайте структура {` DynamicString}, която скрито запазва указател към низ (в динамичната памет) и неговия размер. Имплементирайте голяма четворка. ## Лесни задачи ### 3 задача .solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week06/Exercise03.cpp} Имплементирайте програма, която отваря файл (създава го, ако вече не е създаден) и вкарва текста "Hello World!" във файла. Името на файла се подава от стандартния вход на един ред. ### 4 задача .solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week06/Exercise04.cpp} Имплементирайте програма, която приема име на файл от стандартния вход. Изкарайте последния ред от файла. Редовете са разделени със знака {` \\n}. ### 5 задача .solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week06/Exercise05.cpp} Имплементирайте програма, която приема име на файл от стандартния вход. Изкарайте броя редове и броя думи във файла. ### 6 задача .solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week06/Exercise06.cpp} От стандартния вход получавате, на два отделни реда, две имена на файлове. Вмъкнете съдържанието на втория файл по средата на първия файл. ### 7 задача .solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week06/Exercise07.cpp} От стандартния вход получавате числата m и n, както и името на файл (на свой си ред). Изкарайте на екрана от m-тата до n-тата буква (включително) от всеки ред във файла. Първата буква на един ред е на индекс 1. ### 8 задача .solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week06/Exercise08.cpp} Имплементирайте структура {` FileBuffer}, която в конструктора си приема име на файл, отваря го и запазва (копира) цялото му съдържание в динамичната памет (с указател член-данна). .question Кога трябва да затворим файла? Имплементирайте голяма четворка. ### 9 задача .solution-link {url Решение;https://github.com/Syndamia/oop-2023-solutions/blob/main/week06/Exercise09.cpp} Имплементирайте структура {` Person}, която приема име на човек (низ с максимална дължина от 1024 знака) и неговата възраст (целочислена стойност). Имплементирайте методи {` Save} и {` Load}, които съответно запазват/прочитат данните в (двоичен) файл с подадено име. ## Трудни задачи ### 10 задача Имплементирайте структура {` Table}, която запазва произволен брой колони и редове с низови стойности. Броя редове/колони може да се уразмерява по време на изпълнение. Имплементирайте голяма четворка. Имплементирайте методи {` AddRow} и {` AddColumn}, които вмъкват подадените стойности като нов ред/колона на дадения индекс. Аналогично имплементирайте методи {` RemoveRow} и {` RemoveColumn}. {b Чрез всички тези} имплементирайте метода {` ModifyValue}, който променя стойността на клетката на дадените индекси. Имплементирайте методи {` Save} и {` Load}, които запазват/зреждат таблицата в/от файл с подадено име, в текстовия CSV формат (всеки ред в таблицата е ред във файла, всички стойности в реда от таблицата са разделени със запетая в реда във файла). ### 11 задача Имплементирайте структура {` City}, която запазва името на даден град (низ с максимална дължина от 1024 знака) и масив от указатели към други градове, които са негови съседи. Имплементирайте методи {` AddNeighbour} и {` RemoveNeighbour} (броя съседи може да се променя), както и голяма четворка. Имплементирайте методи {` Save} и {` Load}, които запазват/зреждат всичките достижими градове от сегашния в/от (бинарен) файл с подадено име. Подсказвам, че не можете да запазите указателите ей-така.