Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2023 / week7 / index.du
blob: f64265a404c1e4c5f13cd7a42d405db18bab09a5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
'def title Задачи - ООП, Седмица 7, 04.04.2024
'def  desc Условия на задачите за упражнение

# {title}

\n

GitHub classroom: {url classroom.github.com/a/vvZENbkX;https://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}, които съответно записват и четат (тоест член-данните стават равни на тези от файла) данните си в/от {b текстови} файл с подадено име.
Аналогично имплементирайте {` SaveBinary} и {` LoadBinary}, които работят с {b двоични} файлове.

### Задача 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 ако имат еднакви размерности и съществува поне един равен елемент на еднакви индекси).