Jump to content

Задачи - ООП, Седмица 1, 18.02.2026

warn Както винаги, НЕ може да използвате външни библиотеки и (почти) всичко от стандартната библиотека!
important (22.02.2026) По-подробни условия, оправени някои грешки в условията.

За решаване

Задача 1

Реализирайте следните функции:

// Създава нова динамично-заделена матрица
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. Естествено, главната функция трябва да се намира извън matrix.cpp!

От входа получавате размерите и стойностите на две матрици с цели числа. Изкарайте разликата, между сумата на елементите на първата матрица и на втората матрица.

Вход Изход
3 3
1 2 3
4 5 6
7 8 9
4 2
13 10
-6 -5
100 101
-30 -20
-118

Задача 2

Реализирайте следните функции:

// Сума на стойностите в elements
int sum(const int* elements, unsigned length);
// Средно аритметично на стойностите в elements
double average(const int* elements, unsigned length);
// Най-голямата стойност в elements
int largest(const int* elements, unsigned length);
// Най-малката стойност в elements
int smallest(const int* elements, unsigned length);
// Връща индекса на първото срещане на elementToSearch
unsigned findIndex(const int* elements, unsigned length, int elementToSearch);

Поставете техните имплементации в arrmath.cpp и техните дефиниции в arrmath.h. Направете всички нужни проверки за коректност на аргументите на функциите!

От входа получавате цяло неотрицателно число N и след това N на брой цели числа.

Трябва да изкарате средното аритметично на всички елементи между най-малкия и най-големия (включително). Ако най-големия и/или най-малкия се среща повече от един път, използвайте неговото първо срещане.

Използвайте максимално функциите от arrmath!

Вход Изход
5 2 1 3 5 4 3
6 10 -2 7 0 0 1 4
8 1 1 1 1 10 10 10 10 2.8

Задача 3

Реализирайте следните функции във файлове stringHelpers.cpp и stringHelpers.h:

// Създава динамично-заделен низ по подадената дължина
char* newString(unsigned length);
// Създава динамично-заделен низ, копие на подадения низ
char* newString(const char* string);
// Слепява first и second, като поставя separator между тях (ако е валиден) и
// връща резултатния (динамичо-заделен) низ
char* concatStrings(const char* first, const char* second, const char* separator);
// Освобождава паметта на динамичо-заделен низ
void deleteString(char*& string); // Запишете nullptr в string!

Реализирайте следните функции във файлове ioHelpers.cpp и ioHelpers.h:

// Прочита от потребителския вход цяло число между min и max включително,
// като предоставя prompt преди въведената стойност
// При невалидна стойност, пита пак за вход
int readInteger(const char* prompt, int min, int max);
// Прочита от потребителския вход число с плаваща запетая между min и max включително,
// като предоставя prompt преди въведената стойност
// При невалидна стойност, пита пак за вход
double readDouble(const char* prompt, double min, double max);
// Прочита от потребителския вход един ред текст,
// като предоставя prompt преди въведената стойност
// При невалидна стойност, пита пак за вход
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

За самоподготовка

Пререшете следните задачи от УП без да гледате решенията: