From ce685413934d90c6077c8a27ebfb5860b3a15277 Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 26 Nov 2025 02:56:44 +0500 Subject: [PATCH 01/18] Add solution in addition.cpp --- 01_week/tasks/addition/addition.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/01_week/tasks/addition/addition.cpp b/01_week/tasks/addition/addition.cpp index 92872802..29b7c4e6 100644 --- a/01_week/tasks/addition/addition.cpp +++ b/01_week/tasks/addition/addition.cpp @@ -1,7 +1,8 @@ #include #include - -int64_t Addition(int a, int b) { - throw std::runtime_error{"Not implemented"}; +int64_t Addition(int a, int b) +{ + // throw std::runtime_error{"Not implemented"}; + return static_cast(a) + b; } \ No newline at end of file From 5e04fb1597cf9215595f3a2112998b16f84a381f Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 26 Nov 2025 03:16:44 +0500 Subject: [PATCH 02/18] Add solution in char_changer.cpp --- 01_week/tasks/char_changer/char_changer.cpp | 111 +++++++++++++++++++- 1 file changed, 109 insertions(+), 2 deletions(-) diff --git a/01_week/tasks/char_changer/char_changer.cpp b/01_week/tasks/char_changer/char_changer.cpp index 3a7344d9..066810ca 100644 --- a/01_week/tasks/char_changer/char_changer.cpp +++ b/01_week/tasks/char_changer/char_changer.cpp @@ -1,7 +1,114 @@ #include #include +#include +size_t CharChanger(char array[], size_t size, char delimiter = ' ') +{ + // throw std::runtime_error{"Not implemented"}; + size_t j = 0; + size_t i = 0; -size_t CharChanger(char array[], size_t size, char delimiter = ' ') { - throw std::runtime_error{"Not implemented"}; + while (i < size && array[i] != '\0') + { + if (array[i] == ' ') + { + // Пропускаем все пробелы + size_t spaces = 0; + while (i < size && array[i] == ' ') + { + i++; + spaces++; + } + + // Записываем разделитель если нужно + if (spaces > 0) + { + if (j == 0 || array[j - 1] != delimiter) + { + if (j < size - 1) + { + array[j] = delimiter; + j++; + } + else + { + break; + } + } + } + } + else + { + // Определяем длину последовательности одинаковых символов + char original = array[i]; + size_t count = 0; + while (i + count < size && array[i + count] == original && array[i + count] != '\0') + { + count++; + } + + // Преобразуем символ + char current = original; + if (std::isdigit(static_cast(original))) + { + current = '*'; + } + else if (std::islower(static_cast(original))) + { + current = std::toupper(static_cast(original)); + } + else if (!std::isupper(static_cast(original))) + { + current = '_'; + } + + // Записываем результат с учетом правила повторений + if (count == 1) + { + if (j < size - 1) + { + array[j] = current; + j++; + } + else + { + break; + } + } + else + { + if (j + 1 < size - 1) + { + array[j] = current; + if (count >= 10) + { + array[j + 1] = '0'; + } + else + { + array[j + 1] = '0' + count; + } + j += 2; + } + else + { + break; + } + } + + i += count; + } + } + + // Завершаем строку + if (j < size) + { + array[j] = '\0'; + } + else if (size > 0) + { + array[size - 1] = '\0'; + } + + return j; } From 6c6fa039ee56a0ab5fa1bfbcc390c5d551049cf5 Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 26 Nov 2025 03:21:46 +0500 Subject: [PATCH 03/18] Add solution in check_flags.cpp --- 01_week/tasks/check_flags/check_flags.cpp | 58 +++++++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/01_week/tasks/check_flags/check_flags.cpp b/01_week/tasks/check_flags/check_flags.cpp index 75e7c652..e1aa25a0 100644 --- a/01_week/tasks/check_flags/check_flags.cpp +++ b/01_week/tasks/check_flags/check_flags.cpp @@ -1,8 +1,10 @@ #include #include +#include +#include - -enum class CheckFlags : uint8_t { +enum class CheckFlags : uint8_t +{ NONE = 0, TIME = (1 << 0), DATE = (1 << 1), @@ -13,6 +15,54 @@ enum class CheckFlags : uint8_t { ALL = TIME | DATE | USER | CERT | KEYS | DEST }; -void PrintCheckFlags(CheckFlags flags) { - throw std::runtime_error{"Not implemented"}; +void PrintCheckFlags(CheckFlags flags) +{ + // throw std::runtime_error{"Not implemented"}; + uint8_t value = static_cast(flags); + + // Проверка на выход за диапазон + if (value > static_cast(CheckFlags::ALL)) + { + return; + } + + std::vector active_flags; + + // Проверяем каждый флаг в правильном порядке + if (value & static_cast(CheckFlags::TIME)) + { + active_flags.push_back("TIME"); + } + if (value & static_cast(CheckFlags::DATE)) + { + active_flags.push_back("DATE"); + } + if (value & static_cast(CheckFlags::USER)) + { + active_flags.push_back("USER"); + } + if (value & static_cast(CheckFlags::CERT)) + { + active_flags.push_back("CERT"); + } + if (value & static_cast(CheckFlags::KEYS)) + { + active_flags.push_back("KEYS"); + } + if (value & static_cast(CheckFlags::DEST)) + { + active_flags.push_back("DEST"); + } + + // Формируем вывод + std::cout << "["; + for (size_t i = 0; i < active_flags.size(); ++i) + { + if (i > 0) + { + std::cout << ","; + } + std::cout << active_flags[i]; + } + std::cout << "]"; } From b1e00ef8274f0af589575dcbcb19ab8f2026ae22 Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 26 Nov 2025 03:24:07 +0500 Subject: [PATCH 04/18] Add solution in length_lit.cpp --- 01_week/tasks/length_lit/length_lit.cpp | 136 ++++++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/01_week/tasks/length_lit/length_lit.cpp b/01_week/tasks/length_lit/length_lit.cpp index e69de29b..926ebdf2 100644 --- a/01_week/tasks/length_lit/length_lit.cpp +++ b/01_week/tasks/length_lit/length_lit.cpp @@ -0,0 +1,136 @@ +#include + +// Константы преобразования +constexpr double FEET_TO_METERS = 0.3048; +constexpr double INCHES_TO_METERS = 0.0254; +constexpr double METERS_TO_FEET = 1.0 / FEET_TO_METERS; +constexpr double METERS_TO_INCHES = 1.0 / INCHES_TO_METERS; +constexpr double FEET_TO_INCHES = 12.0; +constexpr double INCHES_TO_FEET = 1.0 / FEET_TO_INCHES; +constexpr double METERS_TO_CM = 100.0; +constexpr double CM_TO_METERS = 0.01; + +// Футы в другие единицы +constexpr double operator"" _ft_to_m(long double feet) +{ + return feet * FEET_TO_METERS; +} + +constexpr double operator"" _ft_to_cm(long double feet) +{ + return feet * FEET_TO_METERS * METERS_TO_CM; +} + +constexpr double operator"" _ft_to_in(long double feet) +{ + return feet * FEET_TO_INCHES; +} + +// Дюймы в другие единицы +constexpr double operator"" _in_to_m(long double inches) +{ + return inches * INCHES_TO_METERS; +} + +constexpr double operator"" _in_to_cm(long double inches) +{ + return inches * INCHES_TO_METERS * METERS_TO_CM; +} + +constexpr double operator"" _in_to_ft(long double inches) +{ + return inches * INCHES_TO_FEET; +} + +// Метры в другие единицы +constexpr double operator"" _m_to_ft(long double meters) +{ + return meters * METERS_TO_FEET; +} + +constexpr double operator"" _m_to_in(long double meters) +{ + return meters * METERS_TO_INCHES; +} + +constexpr double operator"" _m_to_cm(long double meters) +{ + return meters * METERS_TO_CM; +} + +// Сантиметры в другие единицы +constexpr double operator"" _cm_to_m(long double centimeters) +{ + return centimeters * CM_TO_METERS; +} + +constexpr double operator"" _cm_to_ft(long double centimeters) +{ + return centimeters * CM_TO_METERS * METERS_TO_FEET; +} + +constexpr double operator"" _cm_to_in(long double centimeters) +{ + return centimeters * CM_TO_METERS * METERS_TO_INCHES; +} + +// Перегрузки для целочисленных литералов +constexpr double operator"" _ft_to_m(unsigned long long feet) +{ + return static_cast(feet) * FEET_TO_METERS; +} + +constexpr double operator"" _ft_to_cm(unsigned long long feet) +{ + return static_cast(feet) * FEET_TO_METERS * METERS_TO_CM; +} + +constexpr double operator"" _ft_to_in(unsigned long long feet) +{ + return static_cast(feet) * FEET_TO_INCHES; +} + +constexpr double operator"" _in_to_m(unsigned long long inches) +{ + return static_cast(inches) * INCHES_TO_METERS; +} + +constexpr double operator"" _in_to_cm(unsigned long long inches) +{ + return static_cast(inches) * INCHES_TO_METERS * METERS_TO_CM; +} + +constexpr double operator"" _in_to_ft(unsigned long long inches) +{ + return static_cast(inches) * INCHES_TO_FEET; +} + +constexpr double operator"" _m_to_ft(unsigned long long meters) +{ + return static_cast(meters) * METERS_TO_FEET; +} + +constexpr double operator"" _m_to_in(unsigned long long meters) +{ + return static_cast(meters) * METERS_TO_INCHES; +} + +constexpr double operator"" _m_to_cm(unsigned long long meters) +{ + return static_cast(meters) * METERS_TO_CM; +} + +constexpr double operator"" _cm_to_m(unsigned long long centimeters) +{ + return static_cast(centimeters) * CM_TO_METERS; +} + +constexpr double operator"" _cm_to_ft(unsigned long long centimeters) +{ + return static_cast(centimeters) * CM_TO_METERS * METERS_TO_FEET; +} + +constexpr double operator"" _cm_to_in(unsigned long long centimeters) +{ + return static_cast(centimeters) * CM_TO_METERS * METERS_TO_INCHES; +} \ No newline at end of file From 5f38c892b03293bc4cefd5711d247774f4929b95 Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 26 Nov 2025 03:26:28 +0500 Subject: [PATCH 05/18] Add solution in quadratic.cpp --- 01_week/tasks/quadratic/quadratic.cpp | 62 ++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/01_week/tasks/quadratic/quadratic.cpp b/01_week/tasks/quadratic/quadratic.cpp index abf7d632..ce52d1c5 100644 --- a/01_week/tasks/quadratic/quadratic.cpp +++ b/01_week/tasks/quadratic/quadratic.cpp @@ -1,6 +1,64 @@ #include +#include +#include +#include +#include +void SolveQuadratic(int a, int b, int c) +{ + // throw std::runtime_error{"Not implemented"}; + std::cout << std::setprecision(6); -void SolveQuadratic(int a, int b, int c) { - throw std::runtime_error{"Not implemented"}; + // Случай: a = 0 (линейное уравнение) + if (a == 0) + { + // Случай: b = 0 + if (b == 0) + { + if (c == 0) + { + std::cout << "infinite solutions"; + } + else + { + std::cout << "no solutions"; + } + } + else + { + // Линейное уравнение: bx + c = 0 + double root = -static_cast(c) / b; + std::cout << root; + } + return; + } + + // Квадратное уравнение + double discriminant = static_cast(b) * b - 4.0 * a * c; + + if (discriminant < 0) + { + std::cout << "no solutions"; + } + else if (discriminant == 0) + { + // Один корень + double root = -static_cast(b) / (2.0 * a); + std::cout << root; + } + else + { + // Два корня + double sqrt_d = std::sqrt(discriminant); + double root1 = (-b - sqrt_d) / (2.0 * a); + double root2 = (-b + sqrt_d) / (2.0 * a); + + // Упорядочиваем корни по возрастанию + if (root1 > root2) + { + std::swap(root1, root2); + } + + std::cout << root1 << " " << root2; + } } \ No newline at end of file From 58447fce000f23c96cb11372e578098b7299dffa Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 26 Nov 2025 03:27:47 +0500 Subject: [PATCH 06/18] Add solution in print_bits.cpp --- 01_week/tasks/print_bits/print_bits.cpp | 48 +++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/01_week/tasks/print_bits/print_bits.cpp b/01_week/tasks/print_bits/print_bits.cpp index a48a43c1..568e1d82 100644 --- a/01_week/tasks/print_bits/print_bits.cpp +++ b/01_week/tasks/print_bits/print_bits.cpp @@ -1,7 +1,51 @@ #include #include +#include +void PrintBits(long long value, size_t bytes) +{ + // throw std::runtime_error{"Not implemented"}; + // Проверяем допустимость размера + if (bytes == 0 || bytes > 8) + { + return; + } -void PrintBits(long long value, size_t bytes) { - throw std::runtime_error{"Not implemented"}; + // Вычисляем общее количество битов + size_t total_bits = bytes * 8; + + // Создаем маску для извлечения нужного количества байтов + unsigned long long mask = 0; + if (bytes == 8) + { + mask = ~0ULL; // Все биты установлены в 1 + } + else + { + mask = (1ULL << total_bits) - 1; + } + + // Приводим значение к беззнаковому типу и применяем маску + unsigned long long unsigned_value = static_cast(value); + unsigned_value &= mask; + + // Выводим префикс + std::cout << "0b"; + + // Выводим биты группами по 4 + for (int i = static_cast(total_bits) - 1; i >= 0; i--) + { + // Получаем текущий бит + unsigned long long bit = (unsigned_value >> i) & 1; + std::cout << (bit ? '1' : '0'); + + // Добавляем апостроф после каждой группы из 4 битов (кроме последней) + if (i > 0 && i % 4 == 0) + { + std::cout << "'"; + } + } + + // Завершаем вывод переводом строки + std::cout << "\n"; } From 9cdb47140c4f44279992f72973ef16ddb3e4cc84 Mon Sep 17 00:00:00 2001 From: Victor Milov <38189218+lVictorl@users.noreply.github.com> Date: Fri, 28 Nov 2025 08:48:23 +0500 Subject: [PATCH 07/18] Add solution in rms.cpp --- 01_week/tasks/rms/rms.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/01_week/tasks/rms/rms.cpp b/01_week/tasks/rms/rms.cpp index 6882f0a9..9aa912ac 100644 --- a/01_week/tasks/rms/rms.cpp +++ b/01_week/tasks/rms/rms.cpp @@ -3,5 +3,19 @@ double CalculateRMS(double values[], size_t size) { - throw std::runtime_error{"Not implemented"}; -} \ No newline at end of file + //throw std::runtime_error{"Not implemented"}; + // Обработка особых случаев: пустой массив или nullptr + if (values == nullptr || size == 0) { + return 0.0; + } + + // Вычисление суммы квадратов элементов + double sum_of_squares = 0.0; + for (size_t i = 0; i < size; ++i) { + sum_of_squares += values[i] * values[i]; + } + + // Вычисление среднего значения квадратов и извлечение корня + double mean_of_squares = sum_of_squares / size; + return std::sqrt(mean_of_squares); +} From 8c07ce02b3b8d4e89c6f599025e94a893921cde1 Mon Sep 17 00:00:00 2001 From: Victor Milov <38189218+lVictorl@users.noreply.github.com> Date: Fri, 28 Nov 2025 08:51:23 +0500 Subject: [PATCH 08/18] Fix handler in rms.cpp --- 01_week/tasks/rms/rms.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_week/tasks/rms/rms.cpp b/01_week/tasks/rms/rms.cpp index 9aa912ac..a1e89462 100644 --- a/01_week/tasks/rms/rms.cpp +++ b/01_week/tasks/rms/rms.cpp @@ -1,4 +1,4 @@ -#include +#include #include From d810d454725561f7997d47fb215b3afecb09931a Mon Sep 17 00:00:00 2001 From: Victor Milov <38189218+lVictorl@users.noreply.github.com> Date: Fri, 28 Nov 2025 09:11:30 +0500 Subject: [PATCH 09/18] Fix bug with output results in quadratic.cpp --- 01_week/tasks/quadratic/quadratic.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/01_week/tasks/quadratic/quadratic.cpp b/01_week/tasks/quadratic/quadratic.cpp index ce52d1c5..5bfc5e7f 100644 --- a/01_week/tasks/quadratic/quadratic.cpp +++ b/01_week/tasks/quadratic/quadratic.cpp @@ -4,6 +4,14 @@ #include #include +void PrintRoot(double root) { + if (std::abs(root) < 1e-10) { // Проверяем, близок ли корень к нулю + std::cout << "0"; + } else { + std::cout << root; + } +} + void SolveQuadratic(int a, int b, int c) { // throw std::runtime_error{"Not implemented"}; @@ -28,7 +36,7 @@ void SolveQuadratic(int a, int b, int c) { // Линейное уравнение: bx + c = 0 double root = -static_cast(c) / b; - std::cout << root; + PrintRoot(root); } return; } @@ -44,7 +52,7 @@ void SolveQuadratic(int a, int b, int c) { // Один корень double root = -static_cast(b) / (2.0 * a); - std::cout << root; + PrintRoot(root); } else { @@ -58,7 +66,8 @@ void SolveQuadratic(int a, int b, int c) { std::swap(root1, root2); } - - std::cout << root1 << " " << root2; + PrintRoot(root1); + std::cout << " "; + PrintRoot(root2); } -} \ No newline at end of file +} From 0a689716902a285dc2f77c3d12cdee3ea7d921bc Mon Sep 17 00:00:00 2001 From: Victor Milov <38189218+lVictorl@users.noreply.github.com> Date: Fri, 28 Nov 2025 09:44:03 +0500 Subject: [PATCH 10/18] Fix bugs in char_changer.cpp --- 01_week/tasks/char_changer/char_changer.cpp | 97 +++++++-------------- 1 file changed, 32 insertions(+), 65 deletions(-) diff --git a/01_week/tasks/char_changer/char_changer.cpp b/01_week/tasks/char_changer/char_changer.cpp index 066810ca..177da052 100644 --- a/01_week/tasks/char_changer/char_changer.cpp +++ b/01_week/tasks/char_changer/char_changer.cpp @@ -7,108 +7,75 @@ size_t CharChanger(char array[], size_t size, char delimiter = ' ') // throw std::runtime_error{"Not implemented"}; size_t j = 0; size_t i = 0; - - while (i < size && array[i] != '\0') - { - if (array[i] == ' ') - { + + while (i < size && array[i] != '\0') { + if (array[i] == ' ') { // Пропускаем все пробелы size_t spaces = 0; - while (i < size && array[i] == ' ') - { + while (i < size && array[i] == ' ') { i++; spaces++; } - - // Записываем разделитель если нужно - if (spaces > 0) - { - if (j == 0 || array[j - 1] != delimiter) - { - if (j < size - 1) - { - array[j] = delimiter; - j++; - } - else - { - break; - } + + // Записываем разделитель если есть пробелы + if (spaces > 0) { + if (j < size - 1) { + array[j] = delimiter; + j++; + } else { + break; } } - } - else - { + } else { // Определяем длину последовательности одинаковых символов char original = array[i]; size_t count = 0; - while (i + count < size && array[i + count] == original && array[i + count] != '\0') - { + while (i + count < size && array[i + count] == original && array[i + count] != '\0') { count++; } - + // Преобразуем символ char current = original; - if (std::isdigit(static_cast(original))) - { + if (std::isdigit(static_cast(original))) { current = '*'; - } - else if (std::islower(static_cast(original))) - { + } else if (std::islower(static_cast(original))) { current = std::toupper(static_cast(original)); - } - else if (!std::isupper(static_cast(original))) - { + } else if (!std::isupper(static_cast(original))) { current = '_'; } - + // Записываем результат с учетом правила повторений - if (count == 1) - { - if (j < size - 1) - { + if (count == 1) { + if (j < size - 1) { array[j] = current; j++; - } - else - { + } else { break; } - } - else - { - if (j + 1 < size - 1) - { + } else { + if (j + 1 < size - 1) { array[j] = current; - if (count >= 10) - { + if (count >= 10) { array[j + 1] = '0'; - } - else - { + } else { array[j + 1] = '0' + count; } j += 2; - } - else - { + } else { break; } } - + i += count; } } - + // Завершаем строку - if (j < size) - { + if (j < size) { array[j] = '\0'; - } - else if (size > 0) - { + } else if (size > 0) { array[size - 1] = '\0'; } - + return j; } From b28a1864b3b232bc7ee2d779e61e221e00111f14 Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 3 Dec 2025 00:59:31 +0500 Subject: [PATCH 11/18] pull upstream main --- 02_week/02_cv_ref_ptr.md | 728 ++++++++++++++++++++ 02_week/02_cv_ref_ptr.pdf | Bin 0 -> 251817 bytes 02_week/CMakeLists.txt | 20 + 02_week/examples/const_cast.cpp | 83 +++ 02_week/examples/ptr_access.cpp | 19 + 02_week/examples/ptr_address.cpp | 43 ++ 02_week/examples/ptr_arithmetic.cpp | 24 + 02_week/examples/ref.cpp | 25 + 02_week/examples/reinterpret.cpp | 21 + 02_week/tasks/CMakeLists.txt | 6 + 02_week/tasks/func_array/CMakeLists.txt | 1 + 02_week/tasks/func_array/README.md | 12 + 02_week/tasks/func_array/func_array.cpp | 6 + 02_week/tasks/func_array/test.cpp | 89 +++ 02_week/tasks/last_of_us/CMakeLists.txt | 1 + 02_week/tasks/last_of_us/README.md | 14 + 02_week/tasks/last_of_us/last_of_us.cpp | 6 + 02_week/tasks/last_of_us/test.cpp | 167 +++++ 02_week/tasks/little_big/CMakeLists.txt | 1 + 02_week/tasks/little_big/README.md | 23 + 02_week/tasks/little_big/little_big.cpp | 10 + 02_week/tasks/little_big/test.cpp | 145 ++++ 02_week/tasks/longest/CMakeLists.txt | 1 + 02_week/tasks/longest/README.md | 16 + 02_week/tasks/longest/longest.cpp | 6 + 02_week/tasks/longest/test.cpp | 215 ++++++ 02_week/tasks/pretty_array/CMakeLists.txt | 1 + 02_week/tasks/pretty_array/README.md | 29 + 02_week/tasks/pretty_array/pretty_array.cpp | 6 + 02_week/tasks/pretty_array/test.cpp | 158 +++++ 02_week/tasks/swap_ptr/CMakeLists.txt | 2 + 02_week/tasks/swap_ptr/README.md | 8 + 02_week/tasks/swap_ptr/swap_ptr.cpp | 6 + 02_week/tasks/swap_ptr/test.cpp | 172 +++++ grading/deadlines.json | 68 ++ 35 files changed, 2132 insertions(+) create mode 100644 02_week/02_cv_ref_ptr.md create mode 100644 02_week/02_cv_ref_ptr.pdf create mode 100644 02_week/CMakeLists.txt create mode 100644 02_week/examples/const_cast.cpp create mode 100644 02_week/examples/ptr_access.cpp create mode 100644 02_week/examples/ptr_address.cpp create mode 100644 02_week/examples/ptr_arithmetic.cpp create mode 100644 02_week/examples/ref.cpp create mode 100644 02_week/examples/reinterpret.cpp create mode 100644 02_week/tasks/CMakeLists.txt create mode 100644 02_week/tasks/func_array/CMakeLists.txt create mode 100644 02_week/tasks/func_array/README.md create mode 100644 02_week/tasks/func_array/func_array.cpp create mode 100644 02_week/tasks/func_array/test.cpp create mode 100644 02_week/tasks/last_of_us/CMakeLists.txt create mode 100644 02_week/tasks/last_of_us/README.md create mode 100644 02_week/tasks/last_of_us/last_of_us.cpp create mode 100644 02_week/tasks/last_of_us/test.cpp create mode 100644 02_week/tasks/little_big/CMakeLists.txt create mode 100644 02_week/tasks/little_big/README.md create mode 100644 02_week/tasks/little_big/little_big.cpp create mode 100644 02_week/tasks/little_big/test.cpp create mode 100644 02_week/tasks/longest/CMakeLists.txt create mode 100644 02_week/tasks/longest/README.md create mode 100644 02_week/tasks/longest/longest.cpp create mode 100644 02_week/tasks/longest/test.cpp create mode 100644 02_week/tasks/pretty_array/CMakeLists.txt create mode 100644 02_week/tasks/pretty_array/README.md create mode 100644 02_week/tasks/pretty_array/pretty_array.cpp create mode 100644 02_week/tasks/pretty_array/test.cpp create mode 100644 02_week/tasks/swap_ptr/CMakeLists.txt create mode 100644 02_week/tasks/swap_ptr/README.md create mode 100644 02_week/tasks/swap_ptr/swap_ptr.cpp create mode 100644 02_week/tasks/swap_ptr/test.cpp create mode 100644 grading/deadlines.json diff --git a/02_week/02_cv_ref_ptr.md b/02_week/02_cv_ref_ptr.md new file mode 100644 index 00000000..b5391afa --- /dev/null +++ b/02_week/02_cv_ref_ptr.md @@ -0,0 +1,728 @@ +# Лекция 2. CV-квалификаторы. Ссылки. Указатели + +1. [CV-квалификаторы](#cv_type_qualifiers) + - [`const`](#const) + - [`volatile`](#volatile) + - [`const volatile`](#const_volatile) + - [Оператор `const_cast`](#const_cast) +1. [Ссылка (_reference_)](#reference) + - [Оператор доступа `[]`](#ref_operator_access) + - [Ссылка на константу](#ref_const) + - [Ссылка на массив](#ref_array) + - [Итерирование по контейнеру](#ref_range_based_for) +1. [Указатель (_pointer_)](#pointer) + - [Оператор взятия адреса `&` (_address-of_)](#operator_address_of) + - [Использование амперсанда `&`](#use_ampersand) + - [Получение адреса `std::addressof()` (_C++11_)](#std_addressof) + - [Оператор разыменования `*` (_indirection_)](#operator_indirection) + - [Использование звездочки `*`](#use_asterisk) + - [Стиль кода амперсанда и звездочки](#code_style_ampersand_asterisk) + - [Совместное использование амперсанда и звездочки](#use_ampersand_asterisk) + - [Константность указателя](#ptr_const) + - [Нулевой указатель `nullptr`](#ptr_nullptr) + - [Арифметика указателей](#ptr_arithmetic) + - [Сравнение указателей](#ptr_comparison) + - [Расстояние между указателями](#ptr_distance) + - [Передача массива через указатели](#ptr_array_to_func) + - [Ссылка на указатель](#ref_to_ptr) + - [Указатель на указатель](#ptr_to_ptr) + - [Указатель на `void`](#ptr_to_void) + - [Оператор `reinterpret_cast`](#reinterpret_cast) + - [Указатель на функцию](#ptr_to_func) + - [Преобразование _function to function pointer_](#func_to_func_ptr_conversion) + - [Сложные объявления с указателями](#dificult_declaration) +1. [Передача аргументов в функцию](#pass_func_args) + - [Продление жизни ссылки на константу](#const_ref_lifetime_expansion) + - [Почему нет продления жизни не константной ссылки](#ref_no_lifetime_expansion) + - [Висячая ссылка (_dangling reference_)](#dangling_reference) + - [Невалидный указатель (_invalid pointer_)](#invalid_pointer) + + +## CV-квалификаторы + +В языке C++ существуют квалификаторы типа. + +CV означает `const` `volatile` + +Квалификаторы могут быть применены к типам переменных и методам (функциям внутри класса) + +### `const` + +Квалификатор типа отвечающий за константность. + +Означает, что объект данного типа нельзя изменять + +Если тип объявлен с данным квалификатором, то компилятор не разрешает пользователю +изменять данную сущность. Что позволяет находить ошибки в коде на этапе +компиляции (например, при попытке изменить переменную с квалификатором `const`) + +Все глобальные переменные рекомендуется объявлять константными. + +Можно написать как **ДО** типа так и **ПОСЛЕ**: + +```c++ +const int a = 0; +int const b = 0; +``` +- **НО** принято писать **ДО** типа + +Невозможно делать операции с переменной данного типа, подразумевающие изменение +(инкремент/декремент, присваивания, ...) + +### `volatile` + +Квалификатор типа отвечающий за изменчивость. + +Означает, что объект данного типа может неожиданно измениться +(из-за действий в другом потоке, по другим причинам) и его можно изменять +пользователю. + +Сообщает компилятору, что переменная видима извне, а значит не нужно оптимизировать +код, связанный с данной переменной. + +```c++ +volatile int a = 0; +int volatile b = 0; +``` + +### `const volatile` + +Можно использовать оба квалификатора. + +Означает, что объект нельзя изменять пользователю, но он может неожиданно +измениться. + +### Оператор `const_cast` + +`const_cast` - оператор приведения типа, который необходим для добавления +или удаления квалификаторов `const`, `volatile`. + +Синтаксис: `const_cast()` +- `new_type` - тип, к которому необходимо привести +- `` - выражение, результат которого необходимо привести к указанному +типу + +- Используется в _legacy_ коде, так как в языке C нет `const` +- Возможно удалить `const` с объектов, которые не были объявлены `const` +но стали константными в результате передачи в функцию. + +```c++ +void change_const_value(const int& value) { + int& mutable_value = const_cast(value); + mutable_value = 100; // только если оригинал не const +} + +int main() { + int original = 42; + std::cout << "before const_cast: " << original << std::endl; + change_const_value(original); + std::cout << "after const_cast: " << original << std::endl; +} +``` + +## Ссылка (_reference_) + +Ссылка представляет собой псевдоним для переменной. + +Ссылка позволяет использовать объект избегая копирования, ссылка не хранит значение. + +Для создания ссылки используется амперсанд `&` после имени типа. + +Синтаксис: `& = ;` +- `` - имя ссылки +- `` - имя существующей переменной + +Представляет собой новый составной тип: ссылка на тип. + +**Особенности:** + +- нельзя создать ссылку без инициализации +- ссылка может быть связанна с переменной один раз +- cсылки на ссылку не существует + +Ссылка позволяет изменять исходный объект: ` = ` + +```c++ +int x = 0; +int& y = x; +y = 1; +std::cout << x; // 1 +``` + +```c++ +int x = 0, z = 5; +int& y = x; +y = z; // change x, not change ref for y +std::cout << x; // 5 +``` + +### Оператор доступа `[]` + +Оператор `[]` возвращает ссылку на объект: + +```c++ +int arr[] = {1, 2, 3, 4, 5}; +int& value = arr[2]; +value = 0; // arr = {1, 2, 0, 4, 5} +arr[3] = 8; // arr = {1, 2, 0, 8, 5} +``` + +### Ссылка на константу + +Ссылку на константу часто называют константной ссылкой. + +При добавлении константности к ссылке, нельзя поменять переменную через ссылку + +```c++ +int x = 0; +const int& ref = x; +ref = 1; // compile error +``` + +На константную переменную может ссылаться только ссылка на константу: + +```c++ +const int value = 100; +int& ref = value; // compile error +const int& cref = value; // ok +``` + +На литерал нельзя сделать ссылку, потому что литерал это константа времени +компиляции. Но можно сделать константную ссылку на литерал, поскольку в языке +принято продление жизни константных ссылок (_lifetime expansion_) + +```c++ +int& ref = 10; // compile error +const int& cref = 10; // ok +``` +- В этот момент создается объект со значением литерала, на который создается ссылка + +### Ссылка на массив + +Ссылку на массив можно создать следующим образом: + +```c++ +int arr[10]; +int (&ref_a)[10] = arr; +int matrix[3][4]; +int (&ref_m)[3][4] = matrix; +``` +- Придется явно указать размерность. +- При передачи в функцию сохраняется воможность итерироваться по массиву в цикле +_range-based for_ + +### Итерирование по контейнеру + +Для тяжелых типов важно правильно итерироваться по контейнерам и стандартным +массивам. + +Спецификатор типа `auto` срезает тип, а именно ссылку и константность. +Поэтому его нужно уточнять с помощью `const` и `&`. + +Копирование не подходит для тяжелых объектов (`std::string` - строка C++, +может быть тяжелым объектом). + +```c++ +std::vector book_names; +// some code to fill book_names... +for (auto book_name : book_names) { + // do something... +} +``` + +Если необходимо изменять объект в цикле, то используется ссылка `auto&`. +Для тяжелых объектов позволяет избежать копирования и значительно ускорить +итерирование по контейнеру. + +```c++ +std::vector book_names; +// some code to fill book_names... +for (auto& book_name : book_names) { + // change book_names strings through ref book_name... +} +``` + +Если **НЕТ** необходимости менять объект используется `const auto&` + +```c++ +std::vector book_names; +// some code to fill book_names... +for (const auto& book_name : book_names) { + // do something without changing of book_name... +} +``` + +**ВАЖНО** для легких типов (фундаментальных, перечислений, типов до 8-16 байт), +если нет необходимости изменять объект, использовать не `const auto&`, а +копирование через `auto`. Это будет быстрее. + +```c++ +std::vector values; +// some code to fill values... +for (auto value : values) { + std::cout << value << std::endl; +} +``` + +## Указатель (_pointer_) + +Указатель это тип, который позволяет хранить адрес другого объекта в памяти. + +Синтаксис: `* =
;` +- `*` - обозначение указателя +- `` - тип объекта, на который указывает указатель +- `` - имя для указателя, иногда начинается с `ptr_` +- `
` - адрес объекта в памяти на который указывает указатель + +```c++ +int x = 0xBADC0FFE; +int* ptr_x = &x; +std::cout << x << std::endl; +std::cout << ptr_x << std::endl; +std::cout << *ptr_x << std::endl; +``` + +**Особенности:** + +- указатели могут быть не инициализированы (но так не стоит делать) +- можно поменять объект на который указывает указатель +- можно создавать указатель на указатель + +### Оператор взятия адреса `&` (_address-of_) + +- Унарный оператор, который используется перед именем сущности для взятия адреса. + +```c++ +int x = 42; +std::cout << &x << std::endl; // address-of x +const double pi = 3.1415926; +std::cout << &pi << std::endl; // address-of pi +int& y = x; +std::cout << &y << std::endl; // address-of x +``` + +### Использование амперсанда `&` + +- Символ используется в разных контекстах: + +```c++ +int x = 0; +// Побитовое И +auto y = x & 0xBADC0FFE; +// Объявление ссылки +int& ref = x; +// Взятие адреса +auto addr = &x; +``` + +### Получение адреса `std::addressof()` (_C++11_) + +В стандартной библиотеке языка C++ в заголовочном файле `` присутствует +шаблонная функция `std::addressof`, которая позволяет взять правильный адрес объекта, +даже если перегружен оператор амперсанд `&`. + +Функция возвращает указатель на тип аргумента (адрес аргумента). + +```c++ +int x = 10; +std::cout << std::addressof(x) << std::cou; +``` + +### Оператор разыменования `*` (_indirection_) + +- Унарный оператор, позволяющий по адресу получить доступ к объекту, который лежит по +данному адресу. Называется `indirection` или `dereference`. + +```c++ +int x = 0xBADC0FFE; +int* ptr_x = &x; +std::cout << *ptr_x << std::endl; // dereference ptr_x +int y = *ptr_x; // dereference ptr_x +``` + +Как правило, возвращает ссылку на объект, поэтому можно изменять значение: + +```c++ +int x = 5; +int* ptr = &x; +*ptr = 6; +std::cout << x << std::endl; // 6 +``` + +### Использование звездочки `*` + +- Символ используется в разных контекстах: + +```c++ +int x = 42; +// Умножение +auto mul = x * 42; +// Объявление указателя +int* ptr = &x; +// Разыменование указателя +auto y = *ptr; // copy +auto& ref = *ptr; // ref +``` + +### Стиль кода амперсанда и звездочки + +Это не обсуждается, используем первый вариант! + +```c++ +int* ptr = &x; +int& ref = x; +``` + +Так тоже можно: + +```c++ +int * ptr = &x; +int & ref = x; +``` + +_Legacy_ языка C: + +```c++ +int *ptr = &x; +int &ref = x; +``` + +Может пригодиться при объявлении цепочки указателей + +```c++ +int *p = nullptr, *p1 = nullptr, *p3 = nullptr; +``` +- но нормальный _style guide_ просит объявлять переменные в отдельной строке + +### Совместное использование амперсанда и звездочки + +Операторы разыменования и взятия адреса можно использовать совместно + +```c++ +int x = 0; +int& ref = *&x; // взять адрес а затем разыменовать +int* ptr = &x; +int* ptr2 = &*ptr // разыменовать, а затем взять адресс переменной +``` + +### Константность указателя + +На константную переменную **НЕ** может указывать обычный указатель: + +```c++ +const int x = 5; +int* ptr = &x; // compile error +int& ref = x; // compile error +``` +- аналогично для ссылок + +На константную переменную может указывать указатель на константу: + +```c++ +const int x = 5; +const int* ptr = &x; +const int& ref = x; +``` +- аналогично для ссылок + +Константный указатель на константную переменную: + +```c++ +const int x = 5; +const int* const ptr = &x; +``` +- нельзя менять (перевешивать на другую переменную) указатель и сами данные + +### Нулевой указатель `nullptr` + +`nullptr` - нулевой указатель, необходим для инициализации указателей, которые +никуда не указывают. + +Рассмотрим следующий пример: + +```c++ +double* ptr; +if (condition) { + ptr = &value; +} +if (ptr) { + std::cout << *ptr << std::endl; // UB because ptr has random address +} +``` + +Для правильной работы кода, необходимо инициализировать указатель значением `nullptr`: + +```c++ +double* ptr = nullptr; +``` + +### Арифметика указателей + +Над указателями можно проводит **арифметические операции** сложения и вычитание +указателя с числом, инкремент/декремент. + +Арифметика указателей приводит к смещению указателя на другой блок памяти, +поскольку указатель знает тип, на адресс объекта которого указывает, то известен +и размер шага. + +При арифметике указателей изменяется адрес, хранимый указателем на столько же +байт, сколько отведено под хранение переменной типа. + +Естественно это работает для неконстантных указателей, которые могут быть +перевешаны на другой объект. + +### Сравнение указателей + +Можно производить сравнение указателей, сравнение с `nullptr`. + +Указатель на начало массива будет меньше указателя на конец. + +Работает, в том числе, для константных указателей. + +### Расстояние между указателями + +Можно определить расстояние между двумя указателями: + +```c++ +int arr[5] = {1, 2, 3, 4, 5}; +int* begin = arr; // pointer to 1 +int* end = arr + 5; // pointer to pos after end of array +auto distance = end - begin; // 5 type is std::ptrdiff_t +``` +- `std::ptrdiff_t` - тип используемый для расстояния между указателями + +### Передача массива через указатели + +Возможно передать массив в функцию через пару указателей. + +Синтаксис функции: ` (* begin, * end)` + +Получение указателей на начало и конец: + +```c++ +int arr[5] = {1, 2, 3, 4, 5}; +int* begin = arr; // pointer to 1 +int* end = arr + 5; // pointer to pos after end of array +``` + +В заголовочном файле `` есть удобные функции для получения указателя +на начало (`std::begin()`) и конец (`std::end()`) массива. Способ более +предпочтителен для современного C++ + +```c++ +int arr[5] = {1, 2, 3, 4, 5}; +int* begin = std::begin(arr); // pointer to 1 +int* end = std::end(arr); // pointer to pos after end of array +``` + +Пример с функцией: + +```c++ +void Print(int* begin, int* end) { + for (; begin != end; ++begin) { + std::cout << *begin << std::endl; + } +} + +int main() { + int arr[5] = {1, 2, 3, 4, 5}; + int* begin = std::begin(arr); // pointer to 1 + int* end = std::end(arr); // pointer to pos after end of array + Print(begin, end); + Print(std::begin(arrv), std::end(arr)); +} +``` + +### Ссылка на указатель + +Можно объявить ещё одно имя для указателя посредством ссылки: + +```c++ +int x = 0; +int* ptr = &x; +int*& ptr2 = ptr; +``` + +### Указатель на указатель + +Можно получить указатель на указатель. Нужно помнить, что каждая вложенность +указателя увеличивает уровень косвенности (не прямого обращения), что может +замедлять работу с исходным объектом под указателем. + +```c++ +int x; +int* ptr = &x; // pointer to int +int** pptr = &ptr; // pointer to pointer to int +int* const* npptr = &ptr; // non-const pointer to const pointer to int +``` + +Поскольку в языке есть преобразование `array to pointer`, то функцию `main` +с аргументами можно записать двумя способами: + +- `int main(int argc, char* argv[]) {}` +- `int main(int argc, char** argv) {}` + +### Указатель на `void` + +Указатель на void — это указатель общего назначения, который может хранить адрес +объекта любого типа, но не имеет информации о типе этого объекта. + +Синтаксис: `void* ;` + +Особенности: +- Может указывать на данные любого типа +- **НЕ** может быть разыменован напрямую +- **НЕ** поддерживает арифметику указателей +- Требует явного приведения для использования + +### Оператор `reinterpret_cast` + +- `reinterpret_cast` - это оператор приведения, который интерпретирует +битовое представление объекта одного типа как битовое представление объекта +другого типа. + +Синтаксис: `reinterpret_cast()` +- `new_type` - тип в который преобразовать +- `` - выражение, результат которого необходимо преобразовать + +Не выполняет никаких преобразований. + +Позволяет считать битовое представление числа в памяти: + +```c++ +int number = 0x12345678; +int* ptr_int = &number; +char* ptr_char = reinterpret_cast(ptr_int); + +std::cout << "original int = " << std::hex << number << std::endl; +std::cout << "reinterpret as bytes = "; +for (int i = 0; i < sizeof(int); ++i) { + std::cout << std::hex << static_cast(char_ptr[i]) << " "; +} +std::cout << std::endl; +``` + +### Указатель на функцию + +Указатель на функцию — это переменная, которая хранит адрес функции, а не данных. + +Позволяет: +- Передавать функции как аргументы в другие функции +- Создавать массивы функций +- Реализовывать стратегии и `callback` вызов функции + +Синтаксис объявление указателя на функцию: ` (*)();` +- `` - возвращаемое значение функции +- `` - имя указателя +- `` - типы аргументов функции + +### Преобразование _function to function pointer_ + +В языке присутствует стандартное преобразование функции в указатель на функцию. +Поэтому там, где требуется указатель на функцию не обязательно передавать +адрес функции, можно просто передать имя функции. + +### Сложные объявления с указателями + +Ниже приведены примеры сложных объявлений с участием указателей: + +```c++ +int* arr[10]; // array with 10 int* elements +int (*ptr_arr)[10]; // pointer to array with 10 int elements +void (*ptr_func)(int) // pointer to function with type void(int) +void (*arr_ptr_func[10])(int) // array with 10 elements of pointer to function with type void(int) +void (*(*arr_ptr_func_r_ptr_func[10])(int))(int) +``` + +## Передача аргументов в функцию + +Передача по значению, копируем объект: + +```c++ +int func(std::string s); +``` + +Передача по ссылке, не копируем объект, можем изменять существующий: + +```c++ +int func(std::string& s); +``` + +Передача по константной ссылке, не копируем объект, нельзя изменять существующий: + +```c++ +int func(const std::string& s); +``` + +Передача по указателю, не копируем объект, можем изменять существующий: + +```c++ +int func(std::string* s); +``` + +Передача по указателю на константу, не копируем объект, нельзя изменять существующий: + +```c++ +int func(const std::string* s); +``` + +### Продление жизни ссылки на константу + +Синтаксис: `const & ref = ` + +- Константная ссылка создает себе объект и становится его именем + +Константные ссылки можно инициализировать через **_rvalue_** (_lifetime expansion_) + +### Почему нет продления жизни не константной ссылки + +```c++ +void func(size_t& counter) { + ++counter; +} + +int main() { + int x = 0; + func(x); + std::cout << x << std::endl; +} +``` + +### Висячая ссылка (_dangling reference_) + +В C++ не запрещено возвращать ссылку на локальную переменную, но поскольку +по выходу из функции локальная переменная уничтожается, то ссылка становится +висячей (битой) и обращение к ней приведет к UB необратимым последствиям:) + +```c++ +int& func(int& value) { + int x = 5; + return x; +} + +int main() { + int value = 5; + int& x = func(value); + std::cout << x << std::endl; // UB +} +``` + +Компилятор может выдавать предупреждение, это зависит от версии. + +### Невалидный указатель (_invalid pointer_) + +Нельзя разыменовывать указатель, который указывает на память, уже +не принадлежащую объекту. Шучу, это же C++ разыменовать можно, но +программа скорей всего упадет, так как разыменование невалидного +указателя это **UB**! + +```c++ +int main() { + int* ptr = nullptr; + { + int x = 42; + ptr = &x; + } + std::cout << *ptr << std::endl; // UB +} +``` diff --git a/02_week/02_cv_ref_ptr.pdf b/02_week/02_cv_ref_ptr.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3c98566071d8479e0c86114713d014d2c02da19b GIT binary patch literal 251817 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 + +void _change_const_value(const int& value) { + int& mutable_value = const_cast(value); + mutable_value = 100; +} + +void change_const_value() { + std::cout << __func__ << ':' << std::endl; + int value = 42; + std::cout << "before const_cast: " << value << std::endl; + _change_const_value(value); + std::cout << "after const_cast: " << value << std::endl; + std::cout << std::endl; + + std::cout << "UB: " << std::endl; + const int cvalue = 42; + std::cout << "before const_cast: " << cvalue << std::endl; + _change_const_value(cvalue); // UB + std::cout << "after const_cast: " << cvalue << std::endl; + std::cout << std::endl; +} + +void dangerous_example_ref() { + std::cout << __func__ << ':' << std::endl; + const int truly_const = 42; + std::cout << "before const_cast: " << truly_const << std::endl; + + int& ref = const_cast(truly_const); // UB + ref = 100; + + std::cout << "after const_cast: " << truly_const << std::endl; // maybe 42 + std::cout << "ref: " << ref << std::endl; // maybe 100 + + std::cout << "&truly_const: " << &truly_const << std::endl; + std::cout << "&ref: " << &ref << std::endl; + std::cout << std::endl; +} + +void const_cast_pointers() { + std::cout << __func__ << ':' << std::endl; + int value = 100; + const int* const_ptr = &value; + std::cout << "value before modification: " << value << std::endl; + + int* mutable_ptr = const_cast(const_ptr); // const_cast + *mutable_ptr = 200; + std::cout << "value after modification: " << value << std::endl; + std::cout << std::endl; + + const int* new_const_ptr = const_cast(mutable_ptr); + // *new_const_ptr = 300; // compile error + + std::cout << "UB: " << std::endl; + const int cvalue = 100; + std::cout << "value before modification: " << cvalue << std::endl; + const int* ptr = &cvalue; + int* cmutable_ptr = const_cast(ptr); + *cmutable_ptr = 200; + std::cout << "value after modification: " << cvalue << std::endl; + std::cout << std::endl; +} + +void dangerous_example_ptr() { + std::cout << __func__ << ':' << std::endl; + const int cvalue = 100; + const int* ptr = &cvalue; + int* mutable_ptr = const_cast(ptr); + *mutable_ptr = 200; + + std::cout << "value before modification: " << cvalue << std::endl; + std::cout << "value after modification: " << cvalue << std::endl; + std::cout << "ptr: " << ptr << std::endl; + std::cout << "mutable_ptr: " << mutable_ptr << std::endl; + std::cout << std::endl; +} + +int main() { + change_const_value(); + dangerous_example_ref(); + const_cast_pointers(); + dangerous_example_ptr(); +} \ No newline at end of file diff --git a/02_week/examples/ptr_access.cpp b/02_week/examples/ptr_access.cpp new file mode 100644 index 00000000..7c529784 --- /dev/null +++ b/02_week/examples/ptr_access.cpp @@ -0,0 +1,19 @@ +#include + + +void ptr_access() { + std::cout << __func__ << ':' << std::endl; + int abc = 0xBADC0FEE; + std::cout << abc << std::endl; + int* ptr_abc = &abc; + std::cout << "address-of abc = " << &abc << std::endl; + std::cout << "ptr_abc = " << ptr_abc << std::endl; + std::cout << "access using [0] = " << ptr_abc[0] << std::endl; + std::cout << "access using * = " << *ptr_abc << std::endl; + std::cout << "address-of ptr_abc = " << &ptr_abc << std::endl; + std::cout << std::endl; +} + +int main() { + ptr_access(); +} \ No newline at end of file diff --git a/02_week/examples/ptr_address.cpp b/02_week/examples/ptr_address.cpp new file mode 100644 index 00000000..f5103fdc --- /dev/null +++ b/02_week/examples/ptr_address.cpp @@ -0,0 +1,43 @@ +#include + +// compile with clang++ and g++ +void ptr_address() { + std::cout << __func__ << ':' << std::endl; + int x = 0; + int y = 1; + std::cout << "&x: " << &x << '\n' << "&y: " << &y << std::endl; + + int* ptr_x = &x; + std::cout << "sizeof(int*): " << sizeof(ptr_x) << '\n' + << "ptr_x: " << ptr_x << '\n' + << "&ptr_x: " << &ptr_x << std::endl; + + int* ptr_y = &y; + std::cout << "sizeof(int*): " << sizeof(ptr_y) << '\n' + << "ptr_y: " << ptr_y << '\n' + << "&ptr_y: " << &ptr_y << std::endl; + + int z = 2; + std::cout << "&z: " << &z << std::endl; + std::cout << std::endl; +} + +void ptr_type() { + std::cout << __func__ << ':' << std::endl; + int x = 0; + int* ptr_x = &x; + std::cout << "type for int*: " << typeid(ptr_x).name() << std::endl; + + double y = 0; + double* ptr_y = &y; + std::cout << "type for double*: " << typeid(ptr_y).name() << std::endl; + + int** ptr_ptr_x = &ptr_x; + std::cout << "type for int**: " << typeid(ptr_ptr_x).name() << std::endl; + std::cout << std::endl; +} + +int main() { + ptr_address(); + ptr_type(); +} \ No newline at end of file diff --git a/02_week/examples/ptr_arithmetic.cpp b/02_week/examples/ptr_arithmetic.cpp new file mode 100644 index 00000000..f3ca7803 --- /dev/null +++ b/02_week/examples/ptr_arithmetic.cpp @@ -0,0 +1,24 @@ +#include + + +void ptr_arithmetic() { + std::cout << __func__ << ':' << std::endl; + int arr[5] = {1, 2, 3, 4, 5}; + int* begin = arr; // pointer to 1 + std::cout << *begin << std::endl; + std::cout << begin[1] << std::endl; + std::cout << begin << std::endl; + std::cout << ++begin << std::endl; + std::cout << *(++begin) << std::endl; + std::cout << begin[0] << std::endl; + std::cout << *(begin + 2) << std::endl; + int* end = arr + 5; // pointer to pos after end of array + auto distance = end - begin; // type is std::ptrdiff_t + std::cout << distance << std::endl; + std::cout << std::endl; +} + +int main() { + ptr_arithmetic(); +} + diff --git a/02_week/examples/ref.cpp b/02_week/examples/ref.cpp new file mode 100644 index 00000000..7f666029 --- /dev/null +++ b/02_week/examples/ref.cpp @@ -0,0 +1,25 @@ +#include + +void ref_changes() { + std::cout << __func__ << ':' << std::endl; + int x = 0; + std::cout << "x = " << x << std::endl; // 0 + + int& y = x; + std::cout << "y = " << y << std::endl; // 0 + y = 1; + std::cout << "after y = 1:" << std::endl; + std::cout << "x = " << x << std::endl; // 1 + std::cout << "y = " << y << std::endl; // 1 + + int z = 5; + y = z; // change x, not change ref for y + std::cout << "after y = z:" << std::endl; + std::cout << "x = " << x << std::endl; // 5 + std::cout << "y = " << y << std::endl; // 5 + std::cout << std::endl; +} + +int main() { + ref_changes(); +} \ No newline at end of file diff --git a/02_week/examples/reinterpret.cpp b/02_week/examples/reinterpret.cpp new file mode 100644 index 00000000..1d95544a --- /dev/null +++ b/02_week/examples/reinterpret.cpp @@ -0,0 +1,21 @@ +#include + + +void reinterpret() { + std::cout << __func__ << ':' << std::endl; + int number = 0x12345678; + int* ptr_int = &number; + char* ptr_char = reinterpret_cast(ptr_int); + + std::cout << "original int = " << std::hex << number << std::endl; + std::cout << "reinterpret as bytes = "; + for (int i = 0; i < sizeof(int); ++i) { + std::cout << std::hex << static_cast(ptr_char[i]) << " "; + } + std::cout << std::endl; + std::cout << std::endl; +} + +int main() { + reinterpret(); +} \ No newline at end of file diff --git a/02_week/tasks/CMakeLists.txt b/02_week/tasks/CMakeLists.txt new file mode 100644 index 00000000..d0361ea1 --- /dev/null +++ b/02_week/tasks/CMakeLists.txt @@ -0,0 +1,6 @@ +add_subdirectory(swap_ptr) +add_subdirectory(func_array) +add_subdirectory(longest) +add_subdirectory(last_of_us) +add_subdirectory(little_big) +add_subdirectory(pretty_array) \ No newline at end of file diff --git a/02_week/tasks/func_array/CMakeLists.txt b/02_week/tasks/func_array/CMakeLists.txt new file mode 100644 index 00000000..5627ab73 --- /dev/null +++ b/02_week/tasks/func_array/CMakeLists.txt @@ -0,0 +1 @@ +add_gtest(test_func_array test.cpp) \ No newline at end of file diff --git a/02_week/tasks/func_array/README.md b/02_week/tasks/func_array/README.md new file mode 100644 index 00000000..be31788b --- /dev/null +++ b/02_week/tasks/func_array/README.md @@ -0,0 +1,12 @@ +# Массив функций + +Необходимо написать функцию `ApllyOperations`, которая будет принимать +два вещественных числа типа `double`, массив функций математических операций +с типом `double`, размер массива функций, и возвращать сумму результатов +выполненных операций. + +## Примечание + +- Запрещено использовать STL алгоритмы (только чистые циклы) и контейнеры. +- В случае пустого массива операций возвращать 0.0. +- Функции операций не должны модифицировать исходные числа. diff --git a/02_week/tasks/func_array/func_array.cpp b/02_week/tasks/func_array/func_array.cpp new file mode 100644 index 00000000..b327e68d --- /dev/null +++ b/02_week/tasks/func_array/func_array.cpp @@ -0,0 +1,6 @@ +#include + + +double ApplyOperations(double a, double b /* other arguments */) { + throw std::runtime_error{"Not implemented"}; +} \ No newline at end of file diff --git a/02_week/tasks/func_array/test.cpp b/02_week/tasks/func_array/test.cpp new file mode 100644 index 00000000..7fad5714 --- /dev/null +++ b/02_week/tasks/func_array/test.cpp @@ -0,0 +1,89 @@ +#include + +#include + +#include "func_array.cpp" + + +double Add(double a, double b) { + return a + b; +} + +double Subtract(double a, double b) { + return a - b; +} + +double Multiply(double a, double b) { + return a * b; +} + +double Divide(double a, double b) { + return a / b; +} + +double SquareSum(double a, double b) { + return a * a + b * b; +} + +double Max(double a, double b) { + return a > b ? a : b; +} + +double Min(double a, double b) { + return a < b ? a : b; +} + +using FuncTypeTest = double (*)(double, double); + +TEST(MathOperationsTest, BasicOperations) { + std::vector ops{Add, Subtract, Multiply, Divide}; + double a = 10.0, b = 5.0; + double result = ApplyOperations(a, b, ops.data(), ops.size()); + EXPECT_DOUBLE_EQ(result, 72.0); +} + +TEST(MathOperationsTest, SingleOperation) { + std::vector ops{Multiply}; + double a = 8.0, b = 2.0; + double result = ApplyOperations(a, b, ops.data(), ops.size()); + EXPECT_DOUBLE_EQ(result, 16.0); +} + +TEST(MathOperationsTest, EmptyOperationsArray) { + double a = 10.0, b = 5.0; + double result = ApplyOperations(a, b, nullptr, 0); + EXPECT_DOUBLE_EQ(result, 0.0); + + std::vector ops; + result = ApplyOperations(a, b, ops.data(), 0); + EXPECT_DOUBLE_EQ(result, 0.0); +} + +TEST(MathOperationsTest, WithPowerOperation) { + std::vector ops{Add, SquareSum, Multiply}; + double a = 2.0, b = 3.0; + double result = ApplyOperations(a, b, ops.data(), ops.size()); + EXPECT_DOUBLE_EQ(result, 24.0); +} + +TEST(MathOperationsTest, NegativeNumbers) { + std::vector ops{Add, Multiply}; + double a = -5.0, b = 3.0; + double result = ApplyOperations(a, b, ops.data(), ops.size()); + EXPECT_DOUBLE_EQ(result, -17.0); +} + +TEST(MathOperationsTest, CustomOperations) { + auto Average = [](double a, double b) { return (a + b) / 2.0; }; + std::vector ops{SquareSum, Average}; + double a = 3.0, b = 4.0; + double result = ApplyOperations(a, b, ops.data(), ops.size()); + EXPECT_DOUBLE_EQ(result, 28.5); +} + +TEST(MathOperationsTest, ArrayWithNullptr) { + std::vector ops{Add, nullptr, Multiply, nullptr}; + double a = 10.0, b = 2.0; + double result = ApplyOperations(a, b, ops.data(), ops.size()); + EXPECT_DOUBLE_EQ(result, 32.0); +} diff --git a/02_week/tasks/last_of_us/CMakeLists.txt b/02_week/tasks/last_of_us/CMakeLists.txt new file mode 100644 index 00000000..ea0d05fa --- /dev/null +++ b/02_week/tasks/last_of_us/CMakeLists.txt @@ -0,0 +1 @@ +add_gtest(test_last_of_us test.cpp) \ No newline at end of file diff --git a/02_week/tasks/last_of_us/README.md b/02_week/tasks/last_of_us/README.md new file mode 100644 index 00000000..56fee4ec --- /dev/null +++ b/02_week/tasks/last_of_us/README.md @@ -0,0 +1,14 @@ +# Найти последний элемент удовлетворяющий условию + +Необходимо написать функцию `FindLastElement`, которая находит последний +элемент, удовлетворяющий условию функции предиката. Функция принимает два +указателя на начало и конец целочисленного массива, а также указатель на +функцию предикат, и возвращает указатель на найденный элемент. Если элемент +не найден, то возвращается указатель за последний элемент. + +Указатели соответствуют диапазону $[begin, end)$. + +## Примечание + +- Если передан некорректный диапазон или некорректный указатель, то + возвращается указатель `end` diff --git a/02_week/tasks/last_of_us/last_of_us.cpp b/02_week/tasks/last_of_us/last_of_us.cpp new file mode 100644 index 00000000..c7bf1a25 --- /dev/null +++ b/02_week/tasks/last_of_us/last_of_us.cpp @@ -0,0 +1,6 @@ +#include + + +/* return_type */ FindLastElement(/* ptr_type */ begin, /* ptr_type */ end, /* func_type */ predicate) { + throw std::runtime_error{"Not implemented"}; +} \ No newline at end of file diff --git a/02_week/tasks/last_of_us/test.cpp b/02_week/tasks/last_of_us/test.cpp new file mode 100644 index 00000000..6a20ff0a --- /dev/null +++ b/02_week/tasks/last_of_us/test.cpp @@ -0,0 +1,167 @@ +#include + +#include "last_of_us.cpp" + +#include +#include +#include + +bool IsPositive(int x) { + return x > 0; +} + +bool IsNegative(int x) { + return x < 0; +} + +bool IsEven(int x) { + return x % 2 == 0; +} + +bool IsOdd(int x) { + return x % 2 != 0; +} + +class FindLastElementTest : public ::testing::Test { +protected: + void SetUp() override { + test_array_ = {1, -2, 3, -4, 5, -6, 7, -8, 9, -10}; + empty_array_ = {}; + single_element_ = {42}; + mixed_array_ = {2, 4, 6, 8, 10, 1, 3, 5, 7, 9}; + palindromes_ = {121, 1331, 12321, 45654, 1, 22, 333}; + } + + std::vector test_array_; + std::vector empty_array_; + std::vector single_element_; + std::vector mixed_array_; + std::vector palindromes_; +}; + +TEST_F(FindLastElementTest, BasicPositiveNumbers) { + const int* result = FindLastElement(test_array_.data(), test_array_.data() + test_array_.size(), IsPositive); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(*result, 9); + EXPECT_EQ(result, test_array_.data() + 8); +} + +TEST_F(FindLastElementTest, BasicNegativeNumbers) { + const int* result = FindLastElement(test_array_.data(), test_array_.data() + test_array_.size(), IsNegative); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(*result, -10); + EXPECT_EQ(result, test_array_.data() + 9); +} + +TEST_F(FindLastElementTest, BasicNotFound) { + const int* result = FindLastElement(test_array_.data(), test_array_.data() + test_array_.size(), + [](int value) { return value > 10; }); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(result, test_array_.data() + test_array_.size()); +} + +TEST_F(FindLastElementTest, BasicFirstElement) { + const int* result = FindLastElement(test_array_.data(), test_array_.data() + test_array_.size(), + [](int value) { return value == 1; }); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(result, test_array_.data()); + EXPECT_EQ(*result, 1); +} + +TEST_F(FindLastElementTest, EmptyArray) { + const int* result = FindLastElement(empty_array_.data(), empty_array_.data(), IsPositive); + EXPECT_EQ(result, empty_array_.data()); +} + +TEST_F(FindLastElementTest, SingleElementPositive) { + const int* result = FindLastElement(single_element_.data(), single_element_.data() + 1, IsPositive); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(*result, 42); +} + +TEST_F(FindLastElementTest, SingleElementNotFound) { + const int* result = FindLastElement(single_element_.data(), single_element_.data() + 1, IsNegative); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(result, single_element_.data() + 1); +} + +TEST_F(FindLastElementTest, EvenNumbers) { + const int* result = FindLastElement(mixed_array_.data(), mixed_array_.data() + mixed_array_.size(), IsEven); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(*result, 10); + EXPECT_EQ(result, mixed_array_.data() + 4); +} + +TEST_F(FindLastElementTest, OddNumbers) { + const int* result = FindLastElement(mixed_array_.data(), mixed_array_.data() + mixed_array_.size(), IsOdd); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(*result, 9); + EXPECT_EQ(result, mixed_array_.data() + 9); +} + +TEST_F(FindLastElementTest, InRange) { + const int* result = FindLastElement(mixed_array_.data(), mixed_array_.data() + mixed_array_.size(), + [](int value) { return value >= 0 && value <= 2; }); + ASSERT_NE(result, nullptr); + EXPECT_EQ(*result, 1); + EXPECT_EQ(result, mixed_array_.data() + 5); +} + +TEST_F(FindLastElementTest, InvalidPointers) { + const int* result = FindLastElement(nullptr, test_array_.data() + 5, IsPositive); + EXPECT_EQ(result, test_array_.data() + 5); + + result = FindLastElement(test_array_.data(), nullptr, IsPositive); + EXPECT_EQ(result, nullptr); + + result = FindLastElement(nullptr, nullptr, IsPositive); + EXPECT_EQ(result, nullptr); + + result = FindLastElement(test_array_.data() + 5, test_array_.data(), IsPositive); + EXPECT_EQ(result, test_array_.data()); +} + +TEST_F(FindLastElementTest, RandomArray) { + std::vector random_array(100); + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution<> dist(-100, 100); + + for (int& val : random_array) { + val = dist(gen); + } + + const int* expected = nullptr; + for (size_t i = 0; i < random_array.size(); ++i) { + if (random_array[i] > 0) { + expected = random_array.data() + i; + } + } + + const int* result = FindLastElement(random_array.data(), random_array.data() + random_array.size(), IsPositive); + + if (expected == nullptr) { + EXPECT_EQ(result, nullptr); + } else { + ASSERT_NE(result, nullptr); + EXPECT_EQ(result, expected); + EXPECT_EQ(*result, *expected); + } +} + +TEST_F(FindLastElementTest, ConstCorrectness) { + const std::vector const_array = {1, 2, 3, 4, 5}; + const int* result = FindLastElement(const_array.data(), const_array.data() + const_array.size(), IsEven); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(*result, 4); + EXPECT_EQ(result, const_array.data() + 3); +} \ No newline at end of file diff --git a/02_week/tasks/little_big/CMakeLists.txt b/02_week/tasks/little_big/CMakeLists.txt new file mode 100644 index 00000000..51939457 --- /dev/null +++ b/02_week/tasks/little_big/CMakeLists.txt @@ -0,0 +1 @@ +add_gtest(test_little_big test.cpp) \ No newline at end of file diff --git a/02_week/tasks/little_big/README.md b/02_week/tasks/little_big/README.md new file mode 100644 index 00000000..28b9851c --- /dev/null +++ b/02_week/tasks/little_big/README.md @@ -0,0 +1,23 @@ +[представление числа double]: https://en.wikipedia.org/wiki/Double-precision_floating-point_format +[порядок байт (little-endian и big-endian)]: https://en.wikipedia.org/wiki/Endianness + +# Представление числа в памяти + +Необходимо написать функцию `PrintMemory`, которая будет печатать битовое +представление числа в памяти. Функция выводит на экран битовое представление +числа в шестнадцатеричном формате `0xYYYY` соответствующей размерности. + +В конце вывода необходим перевод строки. + +Одна версия функции должна принимать должна принимать число типа `int`, +другая `double`. Вторым аргументом функция принимает флаг, который +инвертирует порядок байт, по умолчанию порядок не инвертируется. + +## Ограничения + +- Запрещено использовать С-style cast и специализированные контейнеры. + +## Примечание + +- Прочитать про [представление числа double] +- Прочитать про [порядок байт (little-endian и big-endian)] \ No newline at end of file diff --git a/02_week/tasks/little_big/little_big.cpp b/02_week/tasks/little_big/little_big.cpp new file mode 100644 index 00000000..abe24379 --- /dev/null +++ b/02_week/tasks/little_big/little_big.cpp @@ -0,0 +1,10 @@ +#include + + +void PrintMemory(int /* write arguments here */) { + throw std::runtime_error{"Not implemented"}; +} + +void PrintMemory(double /* write arguments here */) { + throw std::runtime_error{"Not implemented"}; +} \ No newline at end of file diff --git a/02_week/tasks/little_big/test.cpp b/02_week/tasks/little_big/test.cpp new file mode 100644 index 00000000..008a54b0 --- /dev/null +++ b/02_week/tasks/little_big/test.cpp @@ -0,0 +1,145 @@ +#include + +#include +#include +#include +#include +#include + +#include "little_big.cpp" + + +class PrintMemoryTest : public ::testing::Test { +protected: + void SetUp() override { + origin_cout = std::cout.rdbuf(buffer.rdbuf()); + } + + void TearDown() override { + std::cout.rdbuf(origin_cout); + } + + std::string GetOutput() { + return buffer.str(); + } + + std::stringstream buffer; + std::streambuf* origin_cout; +}; + +TEST(FunctionSignatureTest, IntSignature) { + static_assert(std::is_same_v(&PrintMemory)), void (*)(int, bool)>, + "function must have signature: void PrintMemory(int, bool)"); +} + +TEST(FunctionSignatureTest, DoubleSignature) { + static_assert(std::is_same_v(&PrintMemory)), void (*)(double, bool)>, + "function must have signature: void PrintMemory(double, bool)"); +} + +TEST_F(PrintMemoryTest, IntZero) { + PrintMemory(0); + std::string output = GetOutput(); + EXPECT_EQ(output, "0x00000000\n"); +} + +TEST_F(PrintMemoryTest, IntNegative) { + PrintMemory(-1); + std::string output = GetOutput(); + EXPECT_EQ(output, "0xFFFFFFFF\n"); +} + +TEST_F(PrintMemoryTest, IntHex) { + { + PrintMemory(0x12345678); + std::string output = GetOutput(); + EXPECT_EQ(output, "0x78563412\n"); + } + buffer.str(""); + { + PrintMemory(static_cast(0x89ABCDEF)); + std::string output = GetOutput(); + EXPECT_EQ(output, "0xEFCDAB89\n"); + } +} + +TEST_F(PrintMemoryTest, IntReverseChecks) { + { + PrintMemory(0x12345678, true); + std::string output = GetOutput(); + EXPECT_EQ(output, "0x12345678\n"); + } + buffer.str(""); + { + PrintMemory(0x12345678, false); + std::string output = GetOutput(); + EXPECT_EQ(output, "0x78563412\n"); + } +} + +TEST_F(PrintMemoryTest, BothFunctionsWork) { + PrintMemory(42); + std::string int_output = GetOutput(); + + buffer.str(""); + + PrintMemory(42.0); + std::string double_output = GetOutput(); + + EXPECT_NE(int_output, double_output); +} + +TEST_F(PrintMemoryTest, DoubleZero) { + PrintMemory(0.0); + std::string output = GetOutput(); + EXPECT_EQ(output, "0x0000000000000000\n"); +} + +TEST_F(PrintMemoryTest, DoublePositive) { + PrintMemory(36.6); + std::string output = GetOutput(); + EXPECT_EQ(output, "0xCDCCCCCCCC4C424\n"); +} + +TEST_F(PrintMemoryTest, DoubleNegative) { + PrintMemory(-42.0); + std::string output = GetOutput(); + EXPECT_EQ(output, "0x00000000000045C0\n"); +} + +TEST_F(PrintMemoryTest, DoubleExponent) { + PrintMemory(-1.6513e47); + std::string output = GetOutput(); + EXPECT_EQ(output, "0x6DD2606FAFECBCC9\n"); +} + +std::string GetReverse(const std::string& str) { + std::string result = str; + for (int i = str.size() - 2, j = 2; i > 1; i-=2, j+=2) { + result[j] = str[i - 1]; + result[j + 1] = str[i]; + } + return result; +} + +TEST_F(PrintMemoryTest, DoubleReverseChecks) { + { + PrintMemory(3.123456e37, true); + std::string output = GetOutput(); + std::string r_output = GetReverse(output); + buffer.str(""); + PrintMemory(3.123456e37, false); + output = GetOutput(); + EXPECT_EQ(r_output, output); + } + buffer.str(""); + { + PrintMemory(3.123456e-37, true); + std::string output = GetOutput(); + std::string r_output = GetReverse(output); + buffer.str(""); + PrintMemory(3.123456e-37, false); + output = GetOutput(); + EXPECT_EQ(r_output, output); + } +} diff --git a/02_week/tasks/longest/CMakeLists.txt b/02_week/tasks/longest/CMakeLists.txt new file mode 100644 index 00000000..1862930c --- /dev/null +++ b/02_week/tasks/longest/CMakeLists.txt @@ -0,0 +1 @@ +add_gtest(test_longest test.cpp) \ No newline at end of file diff --git a/02_week/tasks/longest/README.md b/02_week/tasks/longest/README.md new file mode 100644 index 00000000..7666e7c4 --- /dev/null +++ b/02_week/tasks/longest/README.md @@ -0,0 +1,16 @@ +# Найти наибольшую подпоследовательность + +Необходимо написать функцию `FindLongestSubsequence`, которая находит +подпоследовательность наибольшей длины. Функция принимает два +указателя на начало и конец массива символов, и возвращает указатель +на начало самой длинной подпоследовательности. Длина подпоследовательности +возвращается через третий аргумент функции. + +Указатели соответствуют диапазону $[begin, end)$. + +## Примечание + +- Если передан некорректный диапазон или некорректный указатель, то + возвращается нулевой указатель. +- Если подпоследовательностей одинаковой длины несколько, то возвращается + первая \ No newline at end of file diff --git a/02_week/tasks/longest/longest.cpp b/02_week/tasks/longest/longest.cpp new file mode 100644 index 00000000..04b3c354 --- /dev/null +++ b/02_week/tasks/longest/longest.cpp @@ -0,0 +1,6 @@ +#include + + +/* return_type */ FindLongestSubsequence(/* ptr_type */ begin, /* ptr_type */ end, /* type */ count) { + throw std::runtime_error{"Not implemented"}; +} diff --git a/02_week/tasks/longest/test.cpp b/02_week/tasks/longest/test.cpp new file mode 100644 index 00000000..4bed4cba --- /dev/null +++ b/02_week/tasks/longest/test.cpp @@ -0,0 +1,215 @@ +#include + +#include "longest.cpp" + +#include +#include +#include + + +TEST(LongestSubsequenceTest, BasicString) { + std::string str = "aaabbbccc"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 3); + EXPECT_EQ(*result, 'a'); + EXPECT_EQ(result, str.data()); +} + +TEST(LongestSubsequenceTest, BasicStringNotFirst) { + std::string str = "abbbccddde"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 3); + EXPECT_EQ(*result, 'b'); + EXPECT_EQ(result, str.data() + 1); +} + +TEST(LongestSubsequenceTest, AllSameCharacters) { + std::string str = "aaaaa"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 5); + EXPECT_EQ(*result, 'a'); + EXPECT_EQ(result, str.data()); +} + +TEST(LongestSubsequenceTest, AllDifferentCharacters) { + std::string str = "abcde"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 1); + EXPECT_EQ(*result, 'a'); + EXPECT_EQ(result, str.data()); +} + +TEST(LongestSubsequenceTest, MultipleEqualSequences) { + std::string str = "aabbbaacccaa"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 3); + EXPECT_EQ(result, str.data() + 2); + EXPECT_EQ(*result, 'b'); +} + +TEST(LongestSubsequenceTest, BinaryString) { + std::string str = "1110001111"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 4); + EXPECT_EQ(*result, '1'); + EXPECT_EQ(result, str.data() + 6); +} + +TEST(LongestSubsequenceTest, EmptyString) { + std::string str = ""; + size_t count = 100; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + EXPECT_EQ(result, nullptr); + EXPECT_EQ(count, 0); +} + +TEST(LongestSubsequenceTest, SingleCharacter) { + std::string str = "a"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 1); + EXPECT_EQ(*result, 'a'); + EXPECT_EQ(result, str.data()); +} + +TEST(LongestSubsequenceTest, WithSpaces) { + std::string str = "a bb ccc"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 3); + EXPECT_EQ(*result, ' '); + EXPECT_EQ(result, str.data() + 5); +} + +TEST(LongestSubsequenceTest, MixedCase) { + std::string str = "AbBBAaAACCCcDD"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 3); + EXPECT_EQ(*result, 'C'); + EXPECT_EQ(result, str.data() + 8); +} + +TEST(LongestSubsequenceTest, InvalidPointers) { + std::string str = "test"; + size_t count = 10; + + const char* result = FindLongestSubsequence(nullptr, str.data() + str.size(), count); + EXPECT_EQ(result, nullptr); + EXPECT_EQ(count, 0); + + result = FindLongestSubsequence(str.data(), nullptr, count); + EXPECT_EQ(result, nullptr); + EXPECT_EQ(count, 0); + + result = FindLongestSubsequence(str.data() + 2, str.data(), count); + EXPECT_EQ(result, nullptr); + EXPECT_EQ(count, 0); +} + +TEST(LongestSubsequenceTest, MutableString) { + std::string str = "aaabbbccc"; + size_t count = 0; + + char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 3); + EXPECT_EQ(*result, 'a'); + + result[0] = 'X'; + result[1] = 'X'; + result[2] = 'X'; + EXPECT_EQ(str, "XXXbbbccc"); +} + +TEST(LongestSubsequenceTest, LongString) { + std::string str; + str.append(10, 'a'); + str.append(5, 'b'); + str.append(15, 'c'); + str.append(8, 'd'); + str.append(12, 'e'); + + size_t count = 0; + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 15); + EXPECT_EQ(*result, 'c'); + EXPECT_EQ(result, str.data() + 15); +} + +TEST(LongestSubsequenceTest, ConstCorrectnes) { + const std::string str = "aaabbbccc"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 3); + EXPECT_EQ(*result, 'a'); +} + +TEST(LongestSubsequenceTest, MixedTwoCharSequence) { + std::string str = "xyxxyxyy"; + size_t count = 0; + + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, 2); // "xxxx" в начале + EXPECT_EQ(*result, 'x'); + EXPECT_EQ(result, str.data() + 2); +} + +TEST(LongestSubsequenceTest, VeryLongSequence) { + const size_t LENGTH = 1000; + std::string str(LENGTH, 'z'); // 1000 символов 'z' + + str.insert(0, "ab"); + str.append("cd"); + + size_t count = 0; + const char* result = FindLongestSubsequence(str.data(), str.data() + str.size(), count); + + ASSERT_NE(result, nullptr); + EXPECT_EQ(count, LENGTH); + EXPECT_EQ(*result, 'z'); + EXPECT_EQ(result, str.data() + 2); +} \ No newline at end of file diff --git a/02_week/tasks/pretty_array/CMakeLists.txt b/02_week/tasks/pretty_array/CMakeLists.txt new file mode 100644 index 00000000..bc1e58cf --- /dev/null +++ b/02_week/tasks/pretty_array/CMakeLists.txt @@ -0,0 +1 @@ +add_gtest(test_pretty_array test.cpp) \ No newline at end of file diff --git a/02_week/tasks/pretty_array/README.md b/02_week/tasks/pretty_array/README.md new file mode 100644 index 00000000..bdc095b4 --- /dev/null +++ b/02_week/tasks/pretty_array/README.md @@ -0,0 +1,29 @@ +# Форматированный вывод массива + +Необходимо написать функцию `PrintArray`, которая принимает два указателя +`begin`, `end` на начало и за конец целочисленного массива +($arr \in [begin, end)$) и выводит на экран элементы массива внутри +квадратных скобок `[]` через запятую. + +В конце вывода необходим перевод строки. + +Кроме того, функция принимает ограничитель длины элементов в одной строке. +Ограничитель по умолчанию имеет значение 0, что означает нет ограничения. + +Если количество элементов больше ограничителя, то в конце строки после +последнего элемента, ставится запятая и через пробел троеточие, +а новая строка начинается с отступа в один пробел. + +Если указатель на `end` меньше указателя на `begin` то это значит что +массив выводится в обратном порядке + +Для массива `{1, 2, 3, 4, 5}`: +- вывод без ограничителя: +``` +[1, 2, 3, 4, 5] +``` +- вывод с ограничителем 3: +``` +[1, 2, 3, ... + 4, 5] +``` \ No newline at end of file diff --git a/02_week/tasks/pretty_array/pretty_array.cpp b/02_week/tasks/pretty_array/pretty_array.cpp new file mode 100644 index 00000000..48eab341 --- /dev/null +++ b/02_week/tasks/pretty_array/pretty_array.cpp @@ -0,0 +1,6 @@ +#include + + +void PrintArray(/* write arguments here */) { + throw std::runtime_error{"Not implemented"}; +} \ No newline at end of file diff --git a/02_week/tasks/pretty_array/test.cpp b/02_week/tasks/pretty_array/test.cpp new file mode 100644 index 00000000..93cfe013 --- /dev/null +++ b/02_week/tasks/pretty_array/test.cpp @@ -0,0 +1,158 @@ +#include + +#include +#include +#include +#include +#include + +#include "pretty_array.cpp" + + +class PrintArrayTest : public ::testing::Test { +protected: + void SetUp() override { + origin_cout = std::cout.rdbuf(buffer.rdbuf()); + } + + void TearDown() override { + std::cout.rdbuf(origin_cout); + } + + std::string GetOutput() { + return buffer.str(); + } + + std::stringstream buffer; + std::streambuf* origin_cout; +}; + +TEST(FunctionSignatureTest, IntSignature) { + static_assert(std::is_same_v(&PrintMemory)), void (*)(int, bool)>, + "function must have signature: void PrintMemory(int, bool)"); +} + +TEST(FunctionSignatureTest, DoubleSignature) { + static_assert(std::is_same_v(&PrintMemory)), void (*)(double, bool)>, + "function must have signature: void PrintMemory(double, bool)"); +} + +TEST_F(PrintArrayTest, EmptyArray) { + int arr[] = {1}; + PrintArray(arr, arr); + EXPECT_EQ(GetOutput(), "[]\n"); +} + +TEST_F(PrintArrayTest, Nullptr) { + PrintArray(nullptr, nullptr); + EXPECT_EQ(GetOutput(), "[]\n"); +} + +TEST_F(PrintArrayTest, SingleElement) { + int arr[] = {42}; + PrintArray(arr, arr + 1); + EXPECT_EQ(GetOutput(), "[42]\n"); +} + +TEST_F(PrintArrayTest, BasicArrayNoLimit) { + int arr[] = {1, 2, 3, 4, 5}; + PrintArray(arr, arr + 5); + EXPECT_EQ(GetOutput(), "[1, 2, 3, 4, 5]\n"); +} + +TEST_F(PrintArrayTest, PartialArray) { + int arr[] = {1, 2, 3, 4, 5}; + PrintArray(arr + 1, arr + 4); + EXPECT_EQ(GetOutput(), "[2, 3, 4]\n"); +} + +TEST_F(PrintArrayTest, ArrayWithLimitExact) { + int arr[] = {1, 2, 3, 4, 5, 6}; + PrintArray(arr, arr + 6, 3); + std::string expected = "[1, 2, 3, ...\n 4, 5, 6]\n"; + EXPECT_EQ(GetOutput(), expected); +} + +TEST_F(PrintArrayTest, ArrayWithLimitPartialLastLine) { + int arr[] = {1, 2, 3, 4, 5}; + PrintArray(arr, arr + 5, 3); + std::string expected = "[1, 2, 3, ...\n 4, 5]\n"; + EXPECT_EQ(GetOutput(), expected); +} + +TEST_F(PrintArrayTest, ArrayWithLimitMultipleLines) { + int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + PrintArray(arr, arr + 9, 2); + std::string expected = "[1, 2, ...\n 3, 4, ...\n 5, 6, ...\n 7, 8, ...\n 9]\n"; + EXPECT_EQ(GetOutput(), expected); +} + +TEST_F(PrintArrayTest, ArrayWithLimitMultipleLinesAndOneElement) { + int arr[] = {1, 2, 3, 4, 5}; + PrintArray(arr, arr + 5, 1); + std::string expected = "[1, ...\n 2, ...\n 3, ...\n 4, ...\n 5]\n"; + EXPECT_EQ(GetOutput(), expected); +} + +TEST_F(PrintArrayTest, ArrayWithExplicitNoLimit) { + int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + PrintArray(arr, arr + 9, 0); + std::string expected = "[1, 2, 3, 4, 5, 6, 7, 8, 9]\n"; + EXPECT_EQ(GetOutput(), expected); +} + +TEST_F(PrintArrayTest, LimitLargerThanArray) { + int arr[] = {1, 2, 3}; + PrintArray(arr, arr + 3, 5); + EXPECT_EQ(GetOutput(), "[1, 2, 3]\n"); +} + +TEST_F(PrintArrayTest, LimitEqualToArraySize) { + int arr[] = {1, 2, 3}; + PrintArray(arr, arr + 3, 3); + EXPECT_EQ(GetOutput(), "[1, 2, 3]\n"); +} + +TEST_F(PrintArrayTest, ReverseRange) { + int arr[] = {1, 2, 3}; + PrintArray(arr + 2, arr - 1); + EXPECT_EQ(GetOutput(), "[3, 2, 1]\n"); +} + +TEST_F(PrintArrayTest, ReverseRangeWithLimit) { + int arr[] = {1, 2, 3, 4, 5}; + PrintArray(arr + 4, arr - 1, 3); + EXPECT_EQ(GetOutput(), "[5, 4, 3, ...\n 2, 1]\n"); +} + +TEST_F(PrintArrayTest, WorkWithConstArray) { + const int arr[] = {1, 2, 3, 4, 5}; + PrintArray(arr, arr + 5); + EXPECT_EQ(GetOutput(), "[1, 2, 3, 4, 5]\n"); +} + +size_t CountSubstring(const std::string& str, const std::string& substr) { + size_t count = 0; + size_t pos = 0; + while ((pos = str.find(substr, pos)) != std::string::npos) { + ++count; + pos += substr.length(); + } + return count; +} + +TEST_F(PrintArrayTest, LargeArrayWithLimit) { + const int SIZE = 100; + int arr[SIZE]; + for (int i = 0; i < SIZE; ++i) { + arr[i] = i + 1; + } + size_t limit = 17; + PrintArray(arr, arr + SIZE, limit); + std::string output = GetOutput(); + + size_t expected_newlines = limit ? (SIZE + limit - 1) / limit : 1; + size_t expected_dots = expected_newlines - 1; + EXPECT_EQ(CountSubstring(output,"..."), expected_dots); + EXPECT_EQ(CountSubstring(output,"\n"), expected_newlines); +} diff --git a/02_week/tasks/swap_ptr/CMakeLists.txt b/02_week/tasks/swap_ptr/CMakeLists.txt new file mode 100644 index 00000000..b319a5c0 --- /dev/null +++ b/02_week/tasks/swap_ptr/CMakeLists.txt @@ -0,0 +1,2 @@ +add_gtest(test_swap_ptr test.cpp) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/swap_ptr.cpp DESTINATION ${CMAKE_BINARY_TASKS_DIR}) \ No newline at end of file diff --git a/02_week/tasks/swap_ptr/README.md b/02_week/tasks/swap_ptr/README.md new file mode 100644 index 00000000..548ce1c9 --- /dev/null +++ b/02_week/tasks/swap_ptr/README.md @@ -0,0 +1,8 @@ +# Обмен указателей + +Необходимо написать функцию `SwapPtr`, которая меняет местами два указателя +на тип `int`. + +## Ограничения + +- Нельзя использовать `std::swap` из стандартной библиотеки \ No newline at end of file diff --git a/02_week/tasks/swap_ptr/swap_ptr.cpp b/02_week/tasks/swap_ptr/swap_ptr.cpp new file mode 100644 index 00000000..93db625d --- /dev/null +++ b/02_week/tasks/swap_ptr/swap_ptr.cpp @@ -0,0 +1,6 @@ +#include + + +void SwapPtr(/* write arguments here */) { + throw std::runtime_error{"Not implemented"}; +} \ No newline at end of file diff --git a/02_week/tasks/swap_ptr/test.cpp b/02_week/tasks/swap_ptr/test.cpp new file mode 100644 index 00000000..08fa95e9 --- /dev/null +++ b/02_week/tasks/swap_ptr/test.cpp @@ -0,0 +1,172 @@ +#include + +#include +#include + +#include "swap_ptr.cpp" + +namespace fs = std::filesystem; + +fs::path FindSourceCode() { + std::vector search_paths = { + "02_week/tasks/swap_ptr/swap_ptr.cpp", + "tasks/swap_ptr/swap_ptr.cpp", + "swap_ptr/swap_ptr.cpp", + "swap_ptr.cpp", + "tasks/swap_ptr.cpp" + }; + + for (const auto& path : search_paths) { + if (fs::exists(path) && fs::is_regular_file(path)) { + return fs::absolute(path); + } + } + + return {}; +} + +TEST(CodeInspectionTest, NoBitsetInCode) { + fs::path code_path = FindSourceCode(); + std::ifstream file(code_path); + std::string content((std::istreambuf_iterator(file)), + std::istreambuf_iterator()); + ASSERT_TRUE(content.size()) << "Run the test from the root of repository\n"; + size_t pos = content.find("swap"); + EXPECT_EQ(pos, std::string::npos) + << "Обнаружено использование swap в коде! " << pos; +} + +TEST(SwapPtrTest, SwapIntPointers) { + int a = 10, b = 20; + int* ptr1 = &a; + int* ptr2 = &b; + + EXPECT_EQ(ptr1, &a); + EXPECT_EQ(ptr2, &b); + EXPECT_EQ(*ptr1, 10); + EXPECT_EQ(*ptr2, 20); + + SwapPtr(ptr1, ptr2); + + EXPECT_EQ(ptr1, &b); + EXPECT_EQ(ptr2, &a); + EXPECT_EQ(*ptr1, 20); + EXPECT_EQ(*ptr2, 10); +} + +TEST(SwapPtrTest, SwapIntPointersTwice) { + int a = 10, b = 20; + int* ptr1 = &a; + int* ptr2 = &b; + + EXPECT_EQ(ptr1, &a); + EXPECT_EQ(ptr2, &b); + EXPECT_EQ(*ptr1, 10); + EXPECT_EQ(*ptr2, 20); + + SwapPtr(ptr1, ptr2); + SwapPtr(ptr1, ptr2); + + EXPECT_EQ(ptr1, &a); + EXPECT_EQ(ptr2, &b); + EXPECT_EQ(*ptr1, 10); + EXPECT_EQ(*ptr2, 20); +} + +TEST(SwapPtrTest, SwapWithNullptr) { + int value = 42; + int* ptr1 = &value; + int* ptr2 = nullptr; + + SwapPtr(ptr1, ptr2); + + EXPECT_EQ(ptr1, nullptr); + EXPECT_EQ(ptr2, &value); + EXPECT_EQ(*ptr2, 42); +} + +TEST(SwapPtrTest, SwapBothNullptr) { + int* ptr1 = nullptr; + int* ptr2 = nullptr; + + SwapPtr(ptr1, ptr2); + + EXPECT_EQ(ptr1, nullptr); + EXPECT_EQ(ptr2, nullptr); +} + +TEST(SwapPtrTest, SwapPtrToSameObject) { + int value = 123; + int* ptr1 = &value; + int* ptr2 = &value; + + SwapPtr(ptr1, ptr2); + + EXPECT_EQ(ptr1, &value); + EXPECT_EQ(ptr2, &value); + EXPECT_EQ(*ptr1, 123); + EXPECT_EQ(*ptr2, 123); +} + +TEST(SwapPtrTest, SwapArrayPointers) { + int arr1[] = {1, 2, 3}; + int arr2[] = {4, 5, 6}; + int* ptr1 = arr1; + int* ptr2 = arr2; + + SwapPtr(ptr1, ptr2); + + EXPECT_EQ(ptr1, arr2); + EXPECT_EQ(ptr2, arr1); + + EXPECT_EQ(ptr1[0], 4); + EXPECT_EQ(ptr1[1], 5); + EXPECT_EQ(ptr1[2], 6); + EXPECT_EQ(ptr2[0], 1); + EXPECT_EQ(ptr2[1], 2); + EXPECT_EQ(ptr2[2], 3); +} + +TEST(SwapPtrTest, SwapConstPointers) { + int a = 10, b = 20; + const int* ptr1 = &a; + const int* ptr2 = &b; + + SwapPtr(ptr1, ptr2); + + EXPECT_EQ(ptr1, &b); + EXPECT_EQ(ptr2, &a); + EXPECT_EQ(*ptr1, 20); + EXPECT_EQ(*ptr2, 10); +} + +TEST(SwapPtrTest, SwapPointerToPointer) { + int a = 100, b = 200; + int* ptr1 = &a; + int* ptr2 = &b; + int** pptr1 = &ptr1; + int** pptr2 = &ptr2; + + SwapPtr(pptr1, pptr2); + + EXPECT_EQ(pptr1, &ptr2); + EXPECT_EQ(pptr2, &ptr1); + EXPECT_EQ(ptr1, &a); + EXPECT_EQ(ptr2, &b); + EXPECT_EQ(**pptr1, b); + EXPECT_EQ(**pptr2, a); +} + +TEST(SwapPtrTest, VerifyValuesNotChanged) { + int a = 10, b = 20; + int* ptr1 = &a; + int* ptr2 = &b; + + SwapPtr(ptr1, ptr2); + + EXPECT_EQ(a, 10); + EXPECT_EQ(b, 20); + + EXPECT_EQ(*ptr1, 20); + EXPECT_EQ(*ptr2, 10); +} diff --git a/grading/deadlines.json b/grading/deadlines.json new file mode 100644 index 00000000..7c07c7e8 --- /dev/null +++ b/grading/deadlines.json @@ -0,0 +1,68 @@ +{ + "addition": { + "max_score": 100, + "deadline": "2025-12-31 23:59", + "description": "Сложение чисел" + }, + "rms": { + "max_score": 100, + "deadline": "2025-11-28 23:59", + "description": "Вычисление RMS" + }, + "print_bits": { + "max_score": 100, + "deadline": "2025-11-28 23:59", + "description": "Битовое представление числа" + }, + "check_flags": { + "max_score": 100, + "deadline": "2025-11-28 23:59", + "description": "Флаги битовой маски" + }, + "length_lit": { + "max_score": 100, + "deadline": "2025-11-28 23:59", + "description": "Пользовательские литералы длины" + }, + "quadratic": { + "max_score": 200, + "deadline": "2025-11-28 23:59", + "description": "Решение квадратного уравнения" + }, + "char_changer": { + "max_score": 300, + "deadline": "2025-11-28 23:59", + "description": "Изменение символов" + }, + + "swap_ptr": { + "max_score": 100, + "deadline": "2025-12-09 23:59", + "description": "Обмен указателей" + }, + "func_array": { + "max_score": 100, + "deadline": "2025-12-09 23:59", + "description": "Массив функций" + }, + "longest": { + "max_score": 200, + "deadline": "2025-12-09 23:59", + "description": "Найти самую длинную подпоследовательность" + }, + "last_of_us": { + "max_score": 200, + "deadline": "2025-12-09 23:59", + "description": "Найти последний элемент удовлетворяющий условию" + }, + "little_big": { + "max_score": 200, + "deadline": "2025-12-09 23:59", + "description": "Представление числа в памяти" + }, + "pretty_array": { + "max_score": 200, + "deadline": "2025-12-09 23:59", + "description": "Форматированный вывод массива" + } +} \ No newline at end of file From 93e9601313d5cff0f3ff5157844694d77c8ee9ec Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 3 Dec 2025 01:05:19 +0500 Subject: [PATCH 12/18] add solution in func_array.cpp --- 02_week/tasks/func_array/func_array.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/02_week/tasks/func_array/func_array.cpp b/02_week/tasks/func_array/func_array.cpp index b327e68d..aa6a8311 100644 --- a/02_week/tasks/func_array/func_array.cpp +++ b/02_week/tasks/func_array/func_array.cpp @@ -1,6 +1,21 @@ #include +double ApplyOperations(double a, double b, double (**operations)(double, double), size_t size) +{ + // throw std::runtime_error{"Not implemented"}; + if (operations == nullptr || size == 0) + { + return 0.0; + } -double ApplyOperations(double a, double b /* other arguments */) { - throw std::runtime_error{"Not implemented"}; + double sum = 0.0; + for (size_t i = 0; i < size; ++i) + { + if (operations[i] != nullptr) + { + sum += operations[i](a, b); + } + } + + return sum; } \ No newline at end of file From 781c3d4c28264b53b3843721ecc1d3ab7a20ac54 Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 3 Dec 2025 01:16:11 +0500 Subject: [PATCH 13/18] add solution in last_of_us.cpp --- 02_week/tasks/last_of_us/last_of_us.cpp | 42 +++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/02_week/tasks/last_of_us/last_of_us.cpp b/02_week/tasks/last_of_us/last_of_us.cpp index c7bf1a25..b547ec6f 100644 --- a/02_week/tasks/last_of_us/last_of_us.cpp +++ b/02_week/tasks/last_of_us/last_of_us.cpp @@ -1,6 +1,44 @@ #include +const int *FindLastElement(const int *begin, const int *end, bool (*predicate)(int)) +{ + // throw std::runtime_error{"Not implemented"}; + // Проверка на некорректные указатели + if (begin == nullptr || end == nullptr) + { + return end; // Если end тоже nullptr, вернется nullptr + } -/* return_type */ FindLastElement(/* ptr_type */ begin, /* ptr_type */ end, /* func_type */ predicate) { - throw std::runtime_error{"Not implemented"}; + // Проверка на некорректный диапазон (begin > end) + if (begin > end) + { + return end; + } + + // Если диапазон пустой + if (begin == end) + { + return end; + } + + // Ищем последний элемент, удовлетворяющий условию + const int *current = end - 1; // Начинаем с последнего элемента + + while (current >= begin) + { + if (predicate(*current)) + { + return current; + } + + // Проверяем, не вышли ли за начало массива + if (current == begin) + { + break; + } + current--; + } + + // Если элемент не найден, возвращаем end + return end; } \ No newline at end of file From d91ae688ebcdf391910f4751c4de6ed75b420260 Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 3 Dec 2025 01:26:49 +0500 Subject: [PATCH 14/18] Add solution in longest.cpp --- 02_week/tasks/longest/longest.cpp | 56 +++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/02_week/tasks/longest/longest.cpp b/02_week/tasks/longest/longest.cpp index 04b3c354..b4a1b74b 100644 --- a/02_week/tasks/longest/longest.cpp +++ b/02_week/tasks/longest/longest.cpp @@ -1,6 +1,58 @@ #include +const char *FindLongestSubsequence(const char *begin, const char *end, size_t &count) +{ + // throw std::runtime_error{"Not implemented"}; + // Проверка на некорректные указатели или диапазон + if (begin == nullptr || end == nullptr || begin > end) + { + count = 0; + return nullptr; + } -/* return_type */ FindLongestSubsequence(/* ptr_type */ begin, /* ptr_type */ end, /* type */ count) { - throw std::runtime_error{"Not implemented"}; + // Проверка на пустой диапазон + if (begin == end) + { + count = 0; + return nullptr; + } + + const char *current_start = begin; + const char *longest_start = begin; + size_t current_length = 1; + size_t max_length = 1; + + const char *current = begin + 1; + + while (current < end) + { + // Если текущий символ совпадает с символом в current_start + if (*current == *(current_start)) + { + current_length++; + } + else + { + // Если текущая подпоследовательность длиннее максимальной + if (current_length > max_length) + { + max_length = current_length; + longest_start = current_start; + } + // Начинаем новую подпоследовательность + current_start = current; + current_length = 1; + } + current++; + } + + // Проверяем последнюю подпоследовательность + if (current_length > max_length) + { + max_length = current_length; + longest_start = current_start; + } + + count = max_length; + return longest_start; } From 8ae3194edc0a64a315208c539371b49291d659f5 Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 3 Dec 2025 01:30:49 +0500 Subject: [PATCH 15/18] Add solution in little_big.cpp --- 02_week/tasks/little_big/little_big.cpp | 77 +++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 4 deletions(-) diff --git a/02_week/tasks/little_big/little_big.cpp b/02_week/tasks/little_big/little_big.cpp index abe24379..a2f443fa 100644 --- a/02_week/tasks/little_big/little_big.cpp +++ b/02_week/tasks/little_big/little_big.cpp @@ -1,10 +1,79 @@ +#include #include +#include +void PrintMemory(int value, bool reverse) +{ + // throw std::runtime_error{"Not implemented"}; + unsigned char bytes[sizeof(int)]; + std::memcpy(bytes, &value, sizeof(int)); -void PrintMemory(int /* write arguments here */) { - throw std::runtime_error{"Not implemented"}; + std::cout << "0x"; + if (reverse) + { + // Big-endian + for (int i = sizeof(int) - 1; i >= 0; --i) + { + // Ручной вывод hex + unsigned char high = (bytes[i] >> 4) & 0x0F; + unsigned char low = bytes[i] & 0x0F; + std::cout.put(high < 10 ? '0' + high : 'A' + (high - 10)); + std::cout.put(low < 10 ? '0' + low : 'A' + (low - 10)); + } + } + else + { + // Little-endian + for (size_t i = 0; i < sizeof(int); ++i) + { + unsigned char high = (bytes[i] >> 4) & 0x0F; + unsigned char low = bytes[i] & 0x0F; + std::cout.put(high < 10 ? '0' + high : 'A' + (high - 10)); + std::cout.put(low < 10 ? '0' + low : 'A' + (low - 10)); + } + } + std::cout.put('\n'); } -void PrintMemory(double /* write arguments here */) { - throw std::runtime_error{"Not implemented"}; +void PrintMemory(double value, bool reverse) +{ + // throw std::runtime_error{"Not implemented"}; + unsigned char bytes[sizeof(double)]; + std::memcpy(bytes, &value, sizeof(double)); + + std::cout << "0x"; + if (reverse) + { + // Big-endian + for (int i = sizeof(double) - 1; i >= 0; --i) + { + unsigned char high = (bytes[i] >> 4) & 0x0F; + unsigned char low = bytes[i] & 0x0F; + std::cout.put(high < 10 ? '0' + high : 'A' + (high - 10)); + std::cout.put(low < 10 ? '0' + low : 'A' + (low - 10)); + } + } + else + { + // Little-endian + for (size_t i = 0; i < sizeof(double); ++i) + { + unsigned char high = (bytes[i] >> 4) & 0x0F; + unsigned char low = bytes[i] & 0x0F; + std::cout.put(high < 10 ? '0' + high : 'A' + (high - 10)); + std::cout.put(low < 10 ? '0' + low : 'A' + (low - 10)); + } + } + std::cout.put('\n'); +} + +// Перегрузки с одним параметром +void PrintMemory(int value) +{ + PrintMemory(value, false); +} + +void PrintMemory(double value) +{ + PrintMemory(value, false); } \ No newline at end of file From dafec21ec5fd21ba8e79b688ea6703cdc5f69866 Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 3 Dec 2025 01:36:51 +0500 Subject: [PATCH 16/18] Add solution in pretty_array.cpp --- 02_week/tasks/pretty_array/pretty_array.cpp | 96 ++++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/02_week/tasks/pretty_array/pretty_array.cpp b/02_week/tasks/pretty_array/pretty_array.cpp index 48eab341..31283bd7 100644 --- a/02_week/tasks/pretty_array/pretty_array.cpp +++ b/02_week/tasks/pretty_array/pretty_array.cpp @@ -1,6 +1,98 @@ #include +#include +void PrintArray(const int *begin, const int *end, size_t limit = 0) +{ + // throw std::runtime_error{"Not implemented"}; + // Проверка на nullptr или пустой массив + if (begin == nullptr || end == nullptr) + { + std::cout << "[]\n"; + return; + } -void PrintArray(/* write arguments here */) { - throw std::runtime_error{"Not implemented"}; + // Вычисляем количество элементов + size_t count = 0; + bool reverse = false; + const int *current = nullptr; + + if (end > begin) + { + // Обычный порядок + count = end - begin; + current = begin; + reverse = false; + } + else if (end < begin) + { + // Обратный порядок + count = begin - end; + current = begin; + reverse = true; + } + else + { + // Пустой массив + std::cout << "[]\n"; + return; + } + + std::cout << '['; + + if (limit == 0 || limit >= count) + { + // Вывод без ограничения + for (size_t i = 0; i < count; ++i) + { + if (i > 0) + std::cout << ", "; + std::cout << *current; + + if (reverse) + { + --current; + } + else + { + ++current; + } + } + std::cout << "]\n"; + return; + } + + // Вывод с ограничением + size_t elements_printed = 0; + size_t elements_in_current_line = 0; + + while (elements_printed < count) + { + if (elements_in_current_line > 0) + { + std::cout << ", "; + } + + std::cout << *current; + ++elements_printed; + ++elements_in_current_line; + + // Переход к следующему элементу + if (reverse) + { + --current; + } + else + { + ++current; + } + + // Проверяем, нужно ли переносить строку + if (elements_in_current_line == limit && elements_printed < count) + { + std::cout << ", ...\n "; + elements_in_current_line = 0; + } + } + + std::cout << "]\n"; } \ No newline at end of file From 06610334cedc54f0f6cd429d798e423e8cc3fe7c Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 3 Dec 2025 01:39:44 +0500 Subject: [PATCH 17/18] Add solution in swap_ptr.cpp --- 02_week/tasks/swap_ptr/swap_ptr.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/02_week/tasks/swap_ptr/swap_ptr.cpp b/02_week/tasks/swap_ptr/swap_ptr.cpp index 93db625d..f0e275bc 100644 --- a/02_week/tasks/swap_ptr/swap_ptr.cpp +++ b/02_week/tasks/swap_ptr/swap_ptr.cpp @@ -1,6 +1,23 @@ #include +void SwapPtr(int *&ptr1, int *&ptr2) +{ + // throw std::runtime_error{"Not implemented"}; + int *temp = ptr1; + ptr1 = ptr2; + ptr2 = temp; +} -void SwapPtr(/* write arguments here */) { - throw std::runtime_error{"Not implemented"}; +void SwapPtr(const int *&ptr1, const int *&ptr2) +{ + const int *temp = ptr1; + ptr1 = ptr2; + ptr2 = temp; +} + +void SwapPtr(int **&ptr1, int **&ptr2) +{ + int **temp = ptr1; + ptr1 = ptr2; + ptr2 = temp; } \ No newline at end of file From 766ddba4279139e05b6b10630d4a641ce383450e Mon Sep 17 00:00:00 2001 From: lVictorl Date: Wed, 3 Dec 2025 02:07:19 +0500 Subject: [PATCH 18/18] repeat old solutions --- 01_week/tasks/addition/addition.cpp | 7 +- 01_week/tasks/char_changer/char_changer.cpp | 110 +++++++++++++++- 01_week/tasks/check_flags/check_flags.cpp | 58 ++++++++- 01_week/tasks/length_lit/length_lit.cpp | 136 ++++++++++++++++++++ 01_week/tasks/print_bits/print_bits.cpp | 48 ++++++- 01_week/tasks/quadratic/quadratic.cpp | 77 ++++++++++- 01_week/tasks/rms/rms.cpp | 22 +++- 7 files changed, 441 insertions(+), 17 deletions(-) diff --git a/01_week/tasks/addition/addition.cpp b/01_week/tasks/addition/addition.cpp index 92872802..29b7c4e6 100644 --- a/01_week/tasks/addition/addition.cpp +++ b/01_week/tasks/addition/addition.cpp @@ -1,7 +1,8 @@ #include #include - -int64_t Addition(int a, int b) { - throw std::runtime_error{"Not implemented"}; +int64_t Addition(int a, int b) +{ + // throw std::runtime_error{"Not implemented"}; + return static_cast(a) + b; } \ No newline at end of file diff --git a/01_week/tasks/char_changer/char_changer.cpp b/01_week/tasks/char_changer/char_changer.cpp index 3a7344d9..164df6bb 100644 --- a/01_week/tasks/char_changer/char_changer.cpp +++ b/01_week/tasks/char_changer/char_changer.cpp @@ -1,7 +1,111 @@ #include #include +#include +size_t CharChanger(char array[], size_t size, char delimiter = ' ') +{ + // throw std::runtime_error{"Not implemented"}; + size_t j = 0; + size_t i = 0; -size_t CharChanger(char array[], size_t size, char delimiter = ' ') { - throw std::runtime_error{"Not implemented"}; -} + while (i < size && array[i] != '\0') + { + if (array[i] == ' ') + { + // Пропускаем все пробелы + size_t spaces = 0; + while (i < size && array[i] == ' ') + { + i++; + spaces++; + } + + // Записываем разделитель если есть пробелы + if (spaces > 0) + { + if (j < size - 1) + { + array[j] = delimiter; + j++; + } + else + { + break; + } + } + } + else + { + // Определяем длину последовательности одинаковых символов + char original = array[i]; + size_t count = 0; + while (i + count < size && array[i + count] == original && array[i + count] != '\0') + { + count++; + } + + // Преобразуем символ + char current = original; + if (std::isdigit(static_cast(original))) + { + current = '*'; + } + else if (std::islower(static_cast(original))) + { + current = std::toupper(static_cast(original)); + } + else if (!std::isupper(static_cast(original))) + { + current = '_'; + } + + // Записываем результат с учетом правила повторений + if (count == 1) + { + if (j < size - 1) + { + array[j] = current; + j++; + } + else + { + break; + } + } + else + { + if (j + 1 < size - 1) + { + array[j] = current; + if (count >= 10) + { + array[j + 1] = '0'; + } + else + { + array[j + 1] = '0' + count; + } + j += 2; + } + else + { + break; + } + } + + i += count; + } + } + + // Завершаем строку + if (j < size) + { + array[j] = '\0'; + } + else if (size > 0) + { + array[size - 1] = '\0'; + } + + return j; +} \ No newline at end of file diff --git a/01_week/tasks/check_flags/check_flags.cpp b/01_week/tasks/check_flags/check_flags.cpp index 75e7c652..e1aa25a0 100644 --- a/01_week/tasks/check_flags/check_flags.cpp +++ b/01_week/tasks/check_flags/check_flags.cpp @@ -1,8 +1,10 @@ #include #include +#include +#include - -enum class CheckFlags : uint8_t { +enum class CheckFlags : uint8_t +{ NONE = 0, TIME = (1 << 0), DATE = (1 << 1), @@ -13,6 +15,54 @@ enum class CheckFlags : uint8_t { ALL = TIME | DATE | USER | CERT | KEYS | DEST }; -void PrintCheckFlags(CheckFlags flags) { - throw std::runtime_error{"Not implemented"}; +void PrintCheckFlags(CheckFlags flags) +{ + // throw std::runtime_error{"Not implemented"}; + uint8_t value = static_cast(flags); + + // Проверка на выход за диапазон + if (value > static_cast(CheckFlags::ALL)) + { + return; + } + + std::vector active_flags; + + // Проверяем каждый флаг в правильном порядке + if (value & static_cast(CheckFlags::TIME)) + { + active_flags.push_back("TIME"); + } + if (value & static_cast(CheckFlags::DATE)) + { + active_flags.push_back("DATE"); + } + if (value & static_cast(CheckFlags::USER)) + { + active_flags.push_back("USER"); + } + if (value & static_cast(CheckFlags::CERT)) + { + active_flags.push_back("CERT"); + } + if (value & static_cast(CheckFlags::KEYS)) + { + active_flags.push_back("KEYS"); + } + if (value & static_cast(CheckFlags::DEST)) + { + active_flags.push_back("DEST"); + } + + // Формируем вывод + std::cout << "["; + for (size_t i = 0; i < active_flags.size(); ++i) + { + if (i > 0) + { + std::cout << ","; + } + std::cout << active_flags[i]; + } + std::cout << "]"; } diff --git a/01_week/tasks/length_lit/length_lit.cpp b/01_week/tasks/length_lit/length_lit.cpp index e69de29b..926ebdf2 100644 --- a/01_week/tasks/length_lit/length_lit.cpp +++ b/01_week/tasks/length_lit/length_lit.cpp @@ -0,0 +1,136 @@ +#include + +// Константы преобразования +constexpr double FEET_TO_METERS = 0.3048; +constexpr double INCHES_TO_METERS = 0.0254; +constexpr double METERS_TO_FEET = 1.0 / FEET_TO_METERS; +constexpr double METERS_TO_INCHES = 1.0 / INCHES_TO_METERS; +constexpr double FEET_TO_INCHES = 12.0; +constexpr double INCHES_TO_FEET = 1.0 / FEET_TO_INCHES; +constexpr double METERS_TO_CM = 100.0; +constexpr double CM_TO_METERS = 0.01; + +// Футы в другие единицы +constexpr double operator"" _ft_to_m(long double feet) +{ + return feet * FEET_TO_METERS; +} + +constexpr double operator"" _ft_to_cm(long double feet) +{ + return feet * FEET_TO_METERS * METERS_TO_CM; +} + +constexpr double operator"" _ft_to_in(long double feet) +{ + return feet * FEET_TO_INCHES; +} + +// Дюймы в другие единицы +constexpr double operator"" _in_to_m(long double inches) +{ + return inches * INCHES_TO_METERS; +} + +constexpr double operator"" _in_to_cm(long double inches) +{ + return inches * INCHES_TO_METERS * METERS_TO_CM; +} + +constexpr double operator"" _in_to_ft(long double inches) +{ + return inches * INCHES_TO_FEET; +} + +// Метры в другие единицы +constexpr double operator"" _m_to_ft(long double meters) +{ + return meters * METERS_TO_FEET; +} + +constexpr double operator"" _m_to_in(long double meters) +{ + return meters * METERS_TO_INCHES; +} + +constexpr double operator"" _m_to_cm(long double meters) +{ + return meters * METERS_TO_CM; +} + +// Сантиметры в другие единицы +constexpr double operator"" _cm_to_m(long double centimeters) +{ + return centimeters * CM_TO_METERS; +} + +constexpr double operator"" _cm_to_ft(long double centimeters) +{ + return centimeters * CM_TO_METERS * METERS_TO_FEET; +} + +constexpr double operator"" _cm_to_in(long double centimeters) +{ + return centimeters * CM_TO_METERS * METERS_TO_INCHES; +} + +// Перегрузки для целочисленных литералов +constexpr double operator"" _ft_to_m(unsigned long long feet) +{ + return static_cast(feet) * FEET_TO_METERS; +} + +constexpr double operator"" _ft_to_cm(unsigned long long feet) +{ + return static_cast(feet) * FEET_TO_METERS * METERS_TO_CM; +} + +constexpr double operator"" _ft_to_in(unsigned long long feet) +{ + return static_cast(feet) * FEET_TO_INCHES; +} + +constexpr double operator"" _in_to_m(unsigned long long inches) +{ + return static_cast(inches) * INCHES_TO_METERS; +} + +constexpr double operator"" _in_to_cm(unsigned long long inches) +{ + return static_cast(inches) * INCHES_TO_METERS * METERS_TO_CM; +} + +constexpr double operator"" _in_to_ft(unsigned long long inches) +{ + return static_cast(inches) * INCHES_TO_FEET; +} + +constexpr double operator"" _m_to_ft(unsigned long long meters) +{ + return static_cast(meters) * METERS_TO_FEET; +} + +constexpr double operator"" _m_to_in(unsigned long long meters) +{ + return static_cast(meters) * METERS_TO_INCHES; +} + +constexpr double operator"" _m_to_cm(unsigned long long meters) +{ + return static_cast(meters) * METERS_TO_CM; +} + +constexpr double operator"" _cm_to_m(unsigned long long centimeters) +{ + return static_cast(centimeters) * CM_TO_METERS; +} + +constexpr double operator"" _cm_to_ft(unsigned long long centimeters) +{ + return static_cast(centimeters) * CM_TO_METERS * METERS_TO_FEET; +} + +constexpr double operator"" _cm_to_in(unsigned long long centimeters) +{ + return static_cast(centimeters) * CM_TO_METERS * METERS_TO_INCHES; +} \ No newline at end of file diff --git a/01_week/tasks/print_bits/print_bits.cpp b/01_week/tasks/print_bits/print_bits.cpp index a48a43c1..568e1d82 100644 --- a/01_week/tasks/print_bits/print_bits.cpp +++ b/01_week/tasks/print_bits/print_bits.cpp @@ -1,7 +1,51 @@ #include #include +#include +void PrintBits(long long value, size_t bytes) +{ + // throw std::runtime_error{"Not implemented"}; + // Проверяем допустимость размера + if (bytes == 0 || bytes > 8) + { + return; + } -void PrintBits(long long value, size_t bytes) { - throw std::runtime_error{"Not implemented"}; + // Вычисляем общее количество битов + size_t total_bits = bytes * 8; + + // Создаем маску для извлечения нужного количества байтов + unsigned long long mask = 0; + if (bytes == 8) + { + mask = ~0ULL; // Все биты установлены в 1 + } + else + { + mask = (1ULL << total_bits) - 1; + } + + // Приводим значение к беззнаковому типу и применяем маску + unsigned long long unsigned_value = static_cast(value); + unsigned_value &= mask; + + // Выводим префикс + std::cout << "0b"; + + // Выводим биты группами по 4 + for (int i = static_cast(total_bits) - 1; i >= 0; i--) + { + // Получаем текущий бит + unsigned long long bit = (unsigned_value >> i) & 1; + std::cout << (bit ? '1' : '0'); + + // Добавляем апостроф после каждой группы из 4 битов (кроме последней) + if (i > 0 && i % 4 == 0) + { + std::cout << "'"; + } + } + + // Завершаем вывод переводом строки + std::cout << "\n"; } diff --git a/01_week/tasks/quadratic/quadratic.cpp b/01_week/tasks/quadratic/quadratic.cpp index abf7d632..4b2460bb 100644 --- a/01_week/tasks/quadratic/quadratic.cpp +++ b/01_week/tasks/quadratic/quadratic.cpp @@ -1,6 +1,79 @@ #include +#include +#include +#include +#include -void SolveQuadratic(int a, int b, int c) { - throw std::runtime_error{"Not implemented"}; +void PrintRoot(double root) +{ + if (std::abs(root) < 1e-10) + { // Проверяем, близок ли корень к нулю + std::cout << "0"; + } + else + { + std::cout << root; + } +} + +void SolveQuadratic(int a, int b, int c) +{ + // throw std::runtime_error{"Not implemented"}; + std::cout << std::setprecision(6); + + // Случай: a = 0 (линейное уравнение) + if (a == 0) + { + // Случай: b = 0 + if (b == 0) + { + if (c == 0) + { + std::cout << "infinite solutions"; + } + else + { + std::cout << "no solutions"; + } + } + else + { + // Линейное уравнение: bx + c = 0 + double root = -static_cast(c) / b; + PrintRoot(root); + } + return; + } + + // Квадратное уравнение + double discriminant = static_cast(b) * b - 4.0 * a * c; + + if (discriminant < 0) + { + std::cout << "no solutions"; + } + else if (discriminant == 0) + { + // Один корень + double root = -static_cast(b) / (2.0 * a); + PrintRoot(root); + } + else + { + // Два корня + double sqrt_d = std::sqrt(discriminant); + double root1 = (-b - sqrt_d) / (2.0 * a); + double root2 = (-b + sqrt_d) / (2.0 * a); + + // Упорядочиваем корни по возрастанию + if (root1 > root2) + { + std::swap(root1, root2); + } + + PrintRoot(root1); + std::cout << " "; + PrintRoot(root2); + } } \ No newline at end of file diff --git a/01_week/tasks/rms/rms.cpp b/01_week/tasks/rms/rms.cpp index 6882f0a9..0c75eec3 100644 --- a/01_week/tasks/rms/rms.cpp +++ b/01_week/tasks/rms/rms.cpp @@ -1,7 +1,23 @@ -#include +#include #include +double CalculateRMS(double values[], size_t size) +{ + // throw std::runtime_error{"Not implemented"}; + // Обработка особых случаев: пустой массив или nullptr + if (values == nullptr || size == 0) + { + return 0.0; + } -double CalculateRMS(double values[], size_t size) { - throw std::runtime_error{"Not implemented"}; + // Вычисление суммы квадратов элементов + double sum_of_squares = 0.0; + for (size_t i = 0; i < size; ++i) + { + sum_of_squares += values[i] * values[i]; + } + + // Вычисление среднего значения квадратов и извлечение корня + double mean_of_squares = sum_of_squares / size; + return std::sqrt(mean_of_squares); } \ No newline at end of file