Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / oop-2023 / week6 / index.du
blob: 5eee7f9b2846fb4d9de22f857b4e78d296be77d1 (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
'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}, които запазват/зреждат всичките достижими градове от сегашния в/от (бинарен) файл с подадено име.
Подсказвам, че не можете да запазите указателите ей-така.