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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
# Задачи - ООП, Седмица 1, 18.02.2026
'define expected-reading 2 min
'define created 17 February 2026
'define edited 18 February 2026
[$pagenav]
.warn Както винаги, [=НЕ=] може да използвате външни библиотеки и (почти) всичко от стандартната библиотека!
## За решаване
### Задача 1
Реализирайте следните функции:
```c++
// Създава нова динамично-заделена матрица
int** newMatrix(unsigned rows, unsigned cols);
// Изтрива динамично-заделена матрица
void deleteMatrix(int**& matrix, unsigned rows); // Запишете nullptr в matrix!
// Връща сумата на всички елементи в матрицата
int sumMatrix(const int** matrix, unsigned rows, unsigned cols);
Поставете техните имплементации във файл [`matrix.cpp`] и техните дефиниции в [`matrix.h`].
Естествено, главната функция [=трябва да се намира извън [`arrmath.cpp`]!=]
От входа получавате размерите и стойностите на две матрици с цели числа.
Изкарайте разликата, между сумата на елементите на първата матрица и на втората матрица.
:table_2
|= Вход
|= Изход
|:
```
3 3
1 2 3
4 5 6
7 8 9
4 2
13 10
-6 -5
100 101
-30 -20
|: -118
.comment 45 - 163 = -118
### Задача 2
Реализирайте следните функции:
```c++
int sum(const int* elements, unsigned length);
int average(const int* elements, unsigned length);
int largest(const int* elements, unsigned length);
int smallest(const int* elements, unsigned length);
// Връща индекса на първото срещане на elementToSearch
unsigned findIndex(const int* elements, unsigned length, int elementToSearch);
Поставете техните имплементации в [`arrmath.cpp`] и техните дефиниции в [`arrmath.h`].
Направете всички нужни проверки за коректност на аргументите на функциите!
От входа получавате цяло неотрицателно число [`N`] и след това [`N`] на брой цели числа.
Трябва да изкарате средното аритметично на всички елементи [*между*] най-малкия и най-големия (включително).
Ако най-големия и/или най-малкия се среща повече от един път, използвайте неговото първо срещане.
Използвайте максимално функциите от [`arrmath`]!
:table_2
|= Вход
|= Изход
|: 5 2 1 3 5 4
|: 3
|: 6 10 -2 17 0 0 1
|: 4
|: 8 1 1 1 1 10 10 10 10
|: 2.8
### Задача 3
Реализирайте следните функции във файлове [`stringHelpers.cpp`] и [`stringHelpers.h`]:
```c++
char* newString(unsigned length);
char* newString(const char* string);
char* concatStrings(const char* first, const char* second, const char* separator);
void deleteString(char*& string); // Запишете nullptr в string!
Реализирайте следните функции във файлове [`ioHelpers.cpp`] и [`ioHelpers.h`]:
```c++
// Прочита от потребителския вход цяло число между min и max включително,
// като предоставя prompt преди въведената стойност
// При невалидна стойност, пита пак за вход
int readInteger(const char* prompt, int min, int max);
double readDouble(const char* prompt, double min, double max);
char* readString(const char* prompt);
За реализацията им използвайте [`stringHelpers`]!
Реализирате система за запазване на ученици.
Всеки ученик има две имена и оценка (по шестобалната система, между [`2.0`] и [`6.0`]).
Използвайки [`ioHelpers`], поискайте от потребителя брой ученици.
След това, за всеки ученик, поискайте неговото име, фамилия и оценка (поотделно).
За всеки ученик запазаете името му като един низ във формата [`"<ИМЕ> <ФАМИЛИЯ>"`].
Не запазвайте име и фамилия като отделни стойности!
Накрая изкарайте данните за всички ученици.
[=Смесен вход/изход:=] [*(удебеления текст е изкаран от програмата, останалото е въведено от потребителя)*]
```
[=Number of students:=] 4
[=First name:=] Ivan
[=Last name:=] Koprivan
[=Grade:=] 5.5
[=First name:=] Dimitar
[=Last name:=] Stoianov
[=Grade:=] 3.15
[=First name:=] Hari
[=Last name:=] Seldon
[=Grade:=] 6
[=First name:=] Richard
[=Last name:=] Stallman
[=Grade:=] 4.53
[=Ivan Koprivan has grade 5.5=]
[=Dimitar Stoianov has grade 3.15=]
[=Hari Seldon has grade 6=]
[=Richard Stallman has grade 4.53=]
## За самоподготовка
Пререшете следните задачи от УП [=без да гледате решенията=]:
.bulleted
- [url ../../upp-2025/week13/#-21 Седмица 13, Задача 21]
- [url ../../upp-2025/week10/#-7 Седмица 10, Задача 7]
- [url ../../upp-2025/week12/#-6 Седмица 12, Задача 6]
|