# Задачи - ООП, Седмица 7, 04.04.2024 \n GitHub classroom: [url https://classroom.github.com/a/vvZENbkX classroom.github.com/a/vvZENbkX] ## Преговорни ### Задача 1 - Голяма петица .solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week07/Exercise1.cpp Решение] Една съставка е композирана от низ (с максимална дължина от 511 знака) определящ името ѝ и грамаж (число с плаваща запетая). Създайте клас `[Recipe]`, към който могат да се прибавят и премахват произволен брой съставки. Имплементирайте голяма петица (голяма четворка плюс move семантики) за него. ### Задача 2 - Работа с файлове .solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week07/Exercise2.cpp Решение] От един ред на входа получавате името на текстови файл. Изкарайте на екрана средната една трета от файла, като буквите са в обратен ред. ## Лесни задачи ### Задача 3 .solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week07/Exercise3.cpp Решение] Имплементирайте клас `[Thermometer]`, който запазва максималната и минималната възможна температура за измерване, както и сегашната температура, всичките които са цели неотрицателни числа. Имплементирайте методи `[SaveText]` и `[LoadText]`, които съответно записват и четат (тоест член-данните стават равни на тези от файла) данните си в/от =[текстови]= файл с подадено име. Аналогично имплементирайте `[SaveBinary]` и `[LoadBinary]`, които работят с =[двоични]= файлове. ### Задача 4 .solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week07/Exercise4.cpp Решение] Имплементирайте клас `[Street]`, който запазва скрито името на улицата като низ с произволна дължина и номер като цяло число. Имплементирайте голяма петица. Имплементирайте методите `[SaveText]`, `[LoadText]`, `[SaveBinary]`, `[LoadBinary]`. ### Задача 5 .solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week07/Exercise5.cpp Решение] За един транспортен билет е нужно скрито да пазим началната и крайната дестинация като динамично-заделени низове с произволна дължина, неговата цена като число с плаваща запетая и идентификационен номер като цяло неотрицателно число. Имплементирайте голяма петица и четирите функции за запазване и четене от файлове на съответния клас. ### Задача 6 .solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week07/Exercise6.cpp Решение] Имплементирайте клас `[Matrix]`, който запазва стойностите на матрица 2 на 2. Предефинирайте операторите за инкрементиране, декрементиране, събиране, изваждане, умножение и вход/изход от/към поток. Имплементирайте четирите функции за записване и четене от файлове. ### Задача 7 Имплементирайте клас `[Paragraph]`, който съдържа текст с много редове в него. Текстът се запазва като низ с произволна дължина, а редовете се разделят със знака `['\\n']`. Имплементирайте голяма петица. Имплементирайте четирите функции за записване и четене от файлове. Имплементирайте операторите за събиране, които копират текстът от подадения параграф и го вмъкват в края на сегашния; оператор[] който връща начален указател на i-тия ред; операторите за (лексикографско) сравнение; вход/изход от/към поток. ## Трудни задачи ### Задача 8 Имплементирайте клас `[MatrixNМ]`, който запазва стойностите на матрица с N реда и M колони (подадени на конструктор). Имплементирайте голяма петица. Имплементирайте четирите функции за записване и четене от файлове. Имплементирайте операторите за събиране, изваждане, умножение и деление (нека да дефинираме деление на две матрици като умножението на първата матрица по транспонираната втората матрица върху детерминантата ѝ). Ако някоя операция не е възможна, върнете съответна стойност по подразбиране. Имплементирайте оператор[], като индекса i е числена конкатенация на двете координати, разделени с нула (тоест ако искаме стойността на ред 27 и колона 9, тогава ще въведем индекса 2709). Имплементирайте оператори за равенство, инкрементиране, декрементиране, побитово отместване (прилага се върху всяка стойност в матрицата), логически (&& връща true само ако двете матрици са равни, || връща true ако имат еднакви размерности и съществува поне един равен елемент на еднакви индекси).