From 5e3792e3893940a545b660139d9b5c2e2e2af706 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 26 Dec 2025 16:55:14 +0500 Subject: [PATCH 01/22] Update phasor.cpp --- 04_week/tasks/phasor/phasor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04_week/tasks/phasor/phasor.cpp b/04_week/tasks/phasor/phasor.cpp index 3ec1b9ad..fa99de69 100644 --- a/04_week/tasks/phasor/phasor.cpp +++ b/04_week/tasks/phasor/phasor.cpp @@ -6,5 +6,5 @@ struct AlgTag {}; class Phasor { - + }; From 4f1cfc11eee354c931f451b32bf31e2058b70876 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 26 Dec 2025 20:09:15 +0500 Subject: [PATCH 02/22] Update stack.cpp Stack --- 04_week/tasks/stack/stack.cpp | 66 +++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/04_week/tasks/stack/stack.cpp b/04_week/tasks/stack/stack.cpp index 222e4ffc..04841d83 100644 --- a/04_week/tasks/stack/stack.cpp +++ b/04_week/tasks/stack/stack.cpp @@ -2,5 +2,71 @@ class Stack { + public: + // методы: + + void Push(int newData); // Добавление нэлемента в стек + + bool Pop(void); // удаление элемента с верхушки стека + + int& Top(); // Доступ к элементу на вершине стека + + const int& Top() const; // Доступ к элементу на вершине стека + + bool Empty() const; // Проверка отсутсвия элементов на вершине + + size_t Size() const; // Размер стека + + void Clear(); // Очистка стека + + void Swap(Stack& other); // меняем местами элементы + + // определение для == + bool operator==(const Stack& x) const {return data == x.data;} + + // определение для != + bool operator!=(const Stack& x) const {return !(data == x.data);} + + private: + std::vector data; // данные }; + + + +// в Методах для Stack используем методы для vector + +void Stack::Push(int newData){ + data.push_back(newData); +} + +bool Stack::Pop(void){ + if(data.empty()) return false; + data.pop_back(); + return true; +} + +int& Stack::Top(){ + return data.back(); +} + +const int& Stack::Top() const{ + return data.back(); +} + +bool Stack::Empty() const{ + return data.empty(); +} + +size_t Stack::Size() const{ + return data.size(); +} + +void Stack::Clear() { + data.clear(); +} + +void Stack::Swap(Stack& other){ + data.swap(other.data); +} + From be4a8cb884780ec8120566974756a433263173b7 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 26 Dec 2025 20:12:25 +0500 Subject: [PATCH 03/22] Update CMakeLists.txt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Временно отключаю контроль задачь недели 3 --- 03_week/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/03_week/CMakeLists.txt b/03_week/CMakeLists.txt index e5df5bac..fb663b00 100644 --- a/03_week/CMakeLists.txt +++ b/03_week/CMakeLists.txt @@ -7,11 +7,11 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) # Гарантирует использов set(EXAMPLES_DIR examples) # Определим переменную с именем директории set(TASKS_DIR tasks) -add_subdirectory(tasks) + #add_subdirectory(tasks) # Создать исполняемый файл для каждого примера if (BUILD_EXAMPLES_03_WEEK) add_example(struct_examples ${EXAMPLES_DIR}/struct_examples.cpp) add_example(union_examples ${EXAMPLES_DIR}/union_examples.cpp) add_example(vector_examples ${EXAMPLES_DIR}/vector_examples.cpp) -endif() \ No newline at end of file +endif() From f42a9980b76908b42aabf2d2cd553fd288b91e61 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 26 Dec 2025 20:13:08 +0500 Subject: [PATCH 04/22] Update CMakeLists.txt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Временно отключаю контроль задачь недели 2 иначе в проверке куча строк. --- 02_week/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/02_week/CMakeLists.txt b/02_week/CMakeLists.txt index 625e6fbe..856d2248 100644 --- a/02_week/CMakeLists.txt +++ b/02_week/CMakeLists.txt @@ -7,7 +7,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) # Гарантирует использов set(EXAMPLES_DIR examples) # Определим переменную с именем директории set(TASKS_DIR tasks) -add_subdirectory(tasks) +#add_subdirectory(tasks) # Создать исполняемый файл для каждого примера if (BUILD_EXAMPLES_02_WEEK) @@ -17,4 +17,4 @@ if (BUILD_EXAMPLES_02_WEEK) add_example(ptr_access ${EXAMPLES_DIR}/ptr_access.cpp) add_example(ptr_arithmetic ${EXAMPLES_DIR}/ptr_arithmetic.cpp) add_example(reinterpret ${EXAMPLES_DIR}/reinterpret.cpp) -endif() \ No newline at end of file +endif() From d7911f1d19a4f1c91630762e7704c267e06a180c Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 26 Dec 2025 20:13:46 +0500 Subject: [PATCH 05/22] Update CMakeLists.txt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Временно отключаю контроль задачь недели 1 иначе в проверке куча строк. --- 01_week/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/01_week/CMakeLists.txt b/01_week/CMakeLists.txt index 5ecaacbc..166189d5 100644 --- a/01_week/CMakeLists.txt +++ b/01_week/CMakeLists.txt @@ -7,7 +7,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) # Гарантирует использов set(EXAMPLES_DIR examples) # Определим переменную с именем директории set(TASKS_DIR tasks) -add_subdirectory(tasks) +#add_subdirectory(tasks) # Создать исполняемый файл для каждого примера if (BUILD_EXAMPLES_01_WEEK) @@ -32,4 +32,4 @@ if (BUILD_EXAMPLES_01_WEEK) add_example(functions_recursive ${EXAMPLES_DIR}/functions_recursive.cpp) add_example(io_streams ${EXAMPLES_DIR}/io_streams.cpp) add_example(main_with_args ${EXAMPLES_DIR}/main_with_args.cpp) -endif() \ No newline at end of file +endif() From 28f780ab60cb75ec69cce81f36bd79384a33fe4b Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 26 Dec 2025 23:01:20 +0500 Subject: [PATCH 06/22] Update ring_buffer.cpp --- 04_week/tasks/ring_buffer/ring_buffer.cpp | 145 ++++++++++++++++++++++ 1 file changed, 145 insertions(+) diff --git a/04_week/tasks/ring_buffer/ring_buffer.cpp b/04_week/tasks/ring_buffer/ring_buffer.cpp index e2b57ba2..dc9eb16b 100644 --- a/04_week/tasks/ring_buffer/ring_buffer.cpp +++ b/04_week/tasks/ring_buffer/ring_buffer.cpp @@ -1,6 +1,151 @@ #include + class RingBuffer { +public: + + // ---- Конструкторы ----- + explicit RingBuffer(size_t capacity); // Конструктор от емкости + RingBuffer(size_t capacity, int initialValue); // Конструткор от емкасти и начального значения + RingBuffer(std::initializer_list init); // конструктор по размеру контейнера + + // ---- Методы ----- + void Push(int value); + bool TryPush(int value); + + bool Pop(); + bool TryPop(int& value); + + int& Front(); + const int& Front() const; + int& Back(); + const int& Back() const; + + bool Empty() const {return countElem == 0;} + bool Full() const {return countElem == buf.capacity();} + size_t Size() const{return countElem;} + size_t Capacity() const{return buf.capacity();} + + void Clear() {prevElem = nextElem = countElem = 0;} + void Resize(size_t newCapacity); + + std::vector Vector() const; + + bool operator==(const RingBuffer& other) const; + bool operator!=(const RingBuffer& other) const; + int& operator[](size_t index); + const int& operator[](size_t index) const; + +private: + std::vector buf; + size_t prevElem = 0; + size_t nextElem = 0; + size_t countElem = 0; // счетчик текущего элемента + + + size_t NextIndex(size_t i) const { + if((i + 1) >= buf.capacity()) return 0; + return i+1; + } + }; + +RingBuffer::RingBuffer(size_t capacity) { + if(capacity == 0) capacity = 1; // Емкость 0 не должна быть + buf.reserve(capacity); + buf.resize(capacity); + prevElem = 0; + nextElem = 0; + countElem = 0; +} + +RingBuffer::RingBuffer(size_t capacity, int initialValue) { + + if(capacity == 0) capacity = 1; // Емкость 0 не должна быть + buf.reserve(capacity); + buf.resize(capacity); + prevElem = 0; + nextElem = 0; + countElem = 0; + for (size_t i = 0; i < capacity; ++i) Push(initialValue); + +} + +RingBuffer::RingBuffer(std::initializer_list init) { + + size_t capacity = init.size(); + if(capacity == 0) capacity = 1; // Емкость 0 не должна быть + + buf.reserve(capacity); + buf.resize(capacity); + prevElem = 0; + nextElem = 0; + countElem = 0; + + for (int value : init) Push(value); +} + +void RingBuffer::Push(int value) { + if (Full()) { + buf[nextElem] = value; + prevElem = NextIndex(prevElem); + nextElem = NextIndex(nextElem); + } else { + buf[nextElem] = value; + nextElem = NextIndex(nextElem); + ++countElem; + } +} + +bool RingBuffer::TryPush(int value) { + if (Full()) return false; + buf[nextElem] = value; + nextElem = NextIndex(nextElem); + ++countElem; + return true; +} + +bool RingBuffer::Pop() { + if (Empty()) return false; + prevElem = NextIndex(prevElem); + --countElem; + return true; +} + +bool RingBuffer::TryPop(int& value) { + if (Empty()) return false; + value = buf[prevElem]; + Pop(); + return true; +} + +int& RingBuffer::operator[](size_t i) { + if(i >= countElem) return buf[countElem]; + return buf[((i + prevElem)%buf.capacity())]; + +} + +const int& RingBuffer::operator[](size_t i) const { + if(i >= countElem) return buf[countElem]; + return buf[((i + prevElem)%buf.capacity())]; +} + +int& RingBuffer::Front() { + if(nextElem == 0) return buf[buf.capacity() - 1]; + return buf[nextElem - 1]; +} + +const int& RingBuffer::Front() const { + if(nextElem == 0) return buf[buf.capacity() - 1]; + return buf[nextElem - 1]; +} + +int& RingBuffer::Back() { + return buf[prevElem]; +} + +const int& RingBuffer::Back() const { + return buf[prevElem]; +} From d2884cac3d14227e3e8d9b21443ae2e988e6a9f3 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 26 Dec 2025 23:05:33 +0500 Subject: [PATCH 07/22] Update ring_buffer.cpp --- 04_week/tasks/ring_buffer/ring_buffer.cpp | 43 +++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/04_week/tasks/ring_buffer/ring_buffer.cpp b/04_week/tasks/ring_buffer/ring_buffer.cpp index dc9eb16b..ae43a220 100644 --- a/04_week/tasks/ring_buffer/ring_buffer.cpp +++ b/04_week/tasks/ring_buffer/ring_buffer.cpp @@ -149,3 +149,46 @@ int& RingBuffer::Back() { const int& RingBuffer::Back() const { return buf[prevElem]; } + + + + + + +void RingBuffer::Resize(size_t newCapacity) { + newCapacity = newCapacity ? newCapacity : 1; + if (newCapacity == buf.capacity()) return; + + size_t newCount = countElem < newCapacity ? countElem : newCapacity; + std::vector newBuffer = {}; + newBuffer.reserve(newCapacity); + newBuffer.resize(newCapacity); + + for (size_t i = 0; i < newCount; ++i) { + newBuffer[i] = (*this)[countElem - newCount + i]; + } + + buf = std::move(newBuffer); + prevElem = 0; + nextElem = newCount % newCapacity; + countElem = newCount; +} + +std::vector RingBuffer::Vector() const { + std::vector result; + result.reserve(countElem); + for (size_t i = 0; i < countElem; ++i) result.push_back((*this)[i]); + return result; +} + +bool RingBuffer::operator==(const RingBuffer& other) const { + if (countElem != other.countElem || buf.capacity() != other.buf.capacity()) + return false; + for (size_t i = 0; i < countElem; ++i) + if ((*this)[i] != other[i]) return false; + return true; +} + +bool RingBuffer::operator!=(const RingBuffer& other) const { + return !(*this == other); +} From 8f7f43460a2a64c66ef5b3f45cb3c855b1d28f7e Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 26 Dec 2025 23:08:53 +0500 Subject: [PATCH 08/22] Update ring_buffer.cpp From bb9d376d1342dce9104027aacb136d5ed6bf1b56 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 10:51:01 +0500 Subject: [PATCH 09/22] Update addition.cpp --- 01_week/tasks/addition/addition.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/01_week/tasks/addition/addition.cpp b/01_week/tasks/addition/addition.cpp index 92872802..1290aa2b 100644 --- a/01_week/tasks/addition/addition.cpp +++ b/01_week/tasks/addition/addition.cpp @@ -3,5 +3,7 @@ int64_t Addition(int a, int b) { - throw std::runtime_error{"Not implemented"}; -} \ No newline at end of file +int64_t res = static_cast(a); // Присвоение и приведение типов. +res = res + static_cast(b); // Вычисление суммы и приведение типов. + return res; +} From 6ee45a65375f011a8b963ee9b4b8ae85ac7803a1 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 10:51:16 +0500 Subject: [PATCH 10/22] Update char_changer.cpp --- 01_week/tasks/char_changer/char_changer.cpp | 55 ++++++++++++++++++++- 1 file changed, 53 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..a4011b6c 100644 --- a/01_week/tasks/char_changer/char_changer.cpp +++ b/01_week/tasks/char_changer/char_changer.cpp @@ -1,7 +1,58 @@ #include #include +// !!!! ВАЖНО !!!! Изначальное объявление функции изменено в части инициализации передаваемого элемента с «char delimiter = ' '» на «char delimiter». +size_t CharChanger(char array[], size_t size, char delimiter) { -size_t CharChanger(char array[], size_t size, char delimiter = ' ') { - throw std::runtime_error{"Not implemented"}; + char symbol; // Актуальный символ. + char prevSymbol; // Предыдущий символ. + char newSymbol = 0; // Новый символ. + size_t i = 0; // счетчик. + size_t j = 0; // счетчик итераций для индексации элементов обновленного массива. + char numMatch = 0; + prevSymbol = ~array[i]; + + + while(i != size) // Проверка. + { + symbol = array[i]; // Присваиваем значение элемента массива для анализа. + + if(('0' <= symbol) && (symbol <= '9')) newSymbol = '*'; // Если символ - цифра меняем ее на ‘*’. + else if(('a' <= symbol) && (symbol <= 'z')) newSymbol = symbol - ('a' - 'A'); // Если символ – сточная буква, меняем ее на заглавную. + else if(('A' <= symbol) && (symbol <= 'Z')) newSymbol = symbol; // Если символ – заглавная буква – ничего не делаем. + else if(symbol == ' ') newSymbol = delimiter; // Пробел меняем на спец символ. + else newSymbol = '_'; // Все остальные символы заменяем на ‘_’. + + if(symbol != prevSymbol) // Проверка совпадения текущего символа с предыдущим. + { + prevSymbol = symbol; // Запоминаем символ. + + if(numMatch != 0) // Количество совпадений равно 0? + { + if(array[i-1] != ' ') // Проверяем, прядущий проверяемый символ – пробел. Если да то не нужно печатать количество со впавших символов. + { + if(numMatch >= 9) array[j] = '0'; // Если количество совпадении больше 10 (9 т.к. 10-1). Печатаем 0. + else array[j] = '0' + numMatch + 1; // Иначе печатаем количество одинаковых символов подряд. + j++; + } + } + numMatch = 0; // Обнуляем количество совпадений. + array[j] = newSymbol; // Записываем изменений элемент в массив символов. + j++; // Увеличение счетчика итераций для индексации элементов обновленного массива. + + } + else numMatch++; //Символы совпали, увеличиваем счетчик итераций. + + i++; // Счетчик для анализируемых элементов массива. + + if(symbol == '\0') { // Проверка символа окончания строки. + j = j-1; // уменьшаем счетчик для записи символа окончания строки в обновлённый массив. + array[j] = '\0'; // записываем символ окончания строки + return j; // возвращаемое значение - номер последнего элемента обнавленного массива. + } + } + array[j] = '\0'; + + return j; + } From 6f90138ec34e258a8d78941c39377e7e4ee789bb Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 10:51:44 +0500 Subject: [PATCH 11/22] Update rms.cpp --- 01_week/tasks/rms/rms.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/01_week/tasks/rms/rms.cpp b/01_week/tasks/rms/rms.cpp index 6882f0a9..9df36853 100644 --- a/01_week/tasks/rms/rms.cpp +++ b/01_week/tasks/rms/rms.cpp @@ -1,7 +1,16 @@ -#include +#include #include double CalculateRMS(double values[], size_t size) { - throw std::runtime_error{"Not implemented"}; -} \ No newline at end of file + double sum = 0.0; + + if(0 == size) return 0.0;// + if(&values[0] == nullptr) return 0.0; + + for(size_t i = 0; i < size; i++){ + sum += values[i]*values[i]; + } + + return std::sqrt(sum / size); +} From 216e9d9c293658a598ac82bdb3e68bd7c7abd4bb Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 10:52:06 +0500 Subject: [PATCH 12/22] Update quadratic.cpp --- 01_week/tasks/quadratic/quadratic.cpp | 60 +++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/01_week/tasks/quadratic/quadratic.cpp b/01_week/tasks/quadratic/quadratic.cpp index abf7d632..b00486ae 100644 --- a/01_week/tasks/quadratic/quadratic.cpp +++ b/01_week/tasks/quadratic/quadratic.cpp @@ -1,6 +1,60 @@ #include - +#include +#include void SolveQuadratic(int a, int b, int c) { - throw std::runtime_error{"Not implemented"}; -} \ No newline at end of file + float x1 = 0.0; // Превый корень уравнения + float x2 = 0.0; // Второй корень уравнения. + + float fA = static_cast(a); // Явное приведение типа int к float + float fB = static_cast(b); // Явное приведение типа int к float + float fC = static_cast(c); // Явное приведение типа int к float + float disc = static_cast(c); // Явное приведение типа int к float + float negativeUnit = -1; // Защита для формул при умножении на -1 + + // Если a, b, c равны нулю – решений бесконечно много. + if((a == 0) && (b == 0) && (c == 0)){ + std::cout <<"infinite solutions"; + return; + } + + // Если a, b равны нулю – решений а не равно нулю –решений нет! + if((a == 0) && (b == 0) && (c != 0)) + { + std::cout <<"no solutions"; + return; + } + + // Если x = 0 + if(((a == 0) && (c == 0)) || ((b == 0) && (c == 0))) + { + std::cout <<"0"; + return; + } + + + if(a == 0) // Своего рода ускорение вычисления при a равном нулю + { + x1 = (-fC)/fB; + std::cout << std::setprecision(6) << x1; + } + else // Решение через дискрименант + { + disc = fB * fB - 4 * fA * fC; + + if(disc < 0) + { + std::cout <<"no solutions"; + return; + } + + x1 = (negativeUnit * fB - sqrt(disc))/(2*fA); + x2 = (negativeUnit * fB + sqrt(disc))/(2*fA); + + // определяем вывод в зависимости от X1 и X2 + if (x1 == x2) std::cout << std::setprecision(6) << x1 ; + else if(x1 < x2) std::cout << std::setprecision(6) << x1 << ' ' << x2; + else std::cout << std::setprecision(6) << x2 << ' ' << x1; + + return; + } From 58c5f64dda75887b30d27257dfc3e31ef2f7cb63 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 10:52:26 +0500 Subject: [PATCH 13/22] Update print_bits.cpp --- 01_week/tasks/print_bits/print_bits.cpp | 64 ++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/01_week/tasks/print_bits/print_bits.cpp b/01_week/tasks/print_bits/print_bits.cpp index a48a43c1..242e6e9f 100644 --- a/01_week/tasks/print_bits/print_bits.cpp +++ b/01_week/tasks/print_bits/print_bits.cpp @@ -3,5 +3,67 @@ void PrintBits(long long value, size_t bytes) { - throw std::runtime_error{"Not implemented"}; + +// Защита от неверного значения размера в байтах. Размер в байтах должен быть от 1 до 8. +if(bytes == 0) return; +if(bytes > 8) return; + +char buf[90] = {'\0'}; // Объявление и инициализация массива '\0'. + +// !!!! Важно!!!!! +// при отладке были проблемы, по ну установленной причине при переводе от 5 до 8 байт некорректно выводилось значение. Связано это было с некорректным смещением 0х01. Даже если 0х01 присваивалось 64 битной переменной при смещении на значение от 32 до 64, результат был не верный, в результате анализа добегу переменная смещалось на 32 и все. +// Поэтом начались танцы с бубном и все переменные сделаны 8 битными. +unsigned long long count = 0; // Счётчик проанализированных бит +unsigned long long temp = 0; +unsigned long long sizeBit = bytes*8; // количество бит для вывода +unsigned long long countFour = 0; +unsigned long long countBuf = 0; // счетчик для элементов массива +unsigned long long countBit = 0; +char res; // +unsigned long long tempBit = 0; + + buf[0] = '0'; // присвоение значения первому элементу массива + buf[1] = 'b'; // присвоение значения второму элементу массива + + countBuf = 2; + + while( count < sizeBit) // Проверка количество проанализированных бит совпала с требуемым? + { // Нет, анализируем. + + //Усложнённая конструкция но без нее работало не корректно. + temp = (sizeBit-1 - count); + countBit = 0; + tempBit = 0x01; + while(temp > countBit) + { + countBit ++; + tempBit = tempBit << 1; + } + //Конец сложной конструкции. ее можно было свирнуть до temp = 0х01 << (sizeBit-1 - count); но так не работало при значении coun< 32. + + temp = tempBit & value; // определение 0 или 1 для конкретного бита. + + if(temp) res = '1'; + else res = '0'; + + buf[countBuf + count] = res; // Запись значения в массив. + + count++; // Увеличиваема счетчик + + if(countFour == 3) // После 4х значении надо вывести символ ''' (номер 39 в таблице ASCII). + { + if(sizeBit != count) + { + buf[countBuf + count] = 39; + countBuf++; + } + countFour = 0; + } + else countFour++; + + } + buf[countBuf+count] = '\n'; // последний элемент массива '\n' + + + std::cout << buf; // Вывод результата. } From 620c1931624beea2aeb260fdd641a2e00924e810 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 10:52:44 +0500 Subject: [PATCH 14/22] Update length_lit.cpp --- 01_week/tasks/length_lit/length_lit.cpp | 62 +++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/01_week/tasks/length_lit/length_lit.cpp b/01_week/tasks/length_lit/length_lit.cpp index e69de29b..a2956b03 100644 --- a/01_week/tasks/length_lit/length_lit.cpp +++ b/01_week/tasks/length_lit/length_lit.cpp @@ -0,0 +1,62 @@ + +// Константы для преобразования +#define IN_TO_CM 2.54 +#define FT_TO_IN 12.0 +#define M_TO_CM 100.0 + + +constexpr double operator"" _ft_to_m(long double x) { + return static_cast(x / M_TO_CM * FT_TO_IN * IN_TO_CM); // преобразование фт в метры +} + +constexpr double operator"" _ft_to_cm(long double x) { + return static_cast(x * FT_TO_IN * IN_TO_CM); // преобразование фт в см +} + +constexpr double operator"" _ft_to_in(long double x) { + return static_cast( x * FT_TO_IN); // преобразование фт в дюймы +} + + +//Дюймы +constexpr double operator"" _in_to_m(long double x) { + return static_cast(x * IN_TO_CM / M_TO_CM); +} + +constexpr double operator"" _in_to_cm(long double x) { + return static_cast(x * IN_TO_CM); // +} + +constexpr double operator"" _in_to_ft(long double x) { + return static_cast(x / FT_TO_IN); // +} + +//Метры +constexpr double operator"" _m_to_ft(long double x) { + return static_cast(x / IN_TO_CM / FT_TO_IN * M_TO_CM); // +} + +constexpr double operator"" _m_to_cm(long double x) { + return static_cast( x * M_TO_CM); // +} + +constexpr double operator"" _m_to_in(long double x) { + return static_cast(x / IN_TO_CM * M_TO_CM); // +} + + +//см +constexpr double operator"" _cm_to_ft(long double x) { + return static_cast(x / FT_TO_IN / IN_TO_CM); // +} + +constexpr double operator"" _cm_to_m(long double x) { + return static_cast(x / M_TO_CM); // +} + +constexpr double operator"" _cm_to_in(long double x) { + return static_cast(x / IN_TO_CM); // +} + + + From abc3ef0947785bfc7ed8d7142320b06bc5d2aa44 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 10:53:10 +0500 Subject: [PATCH 15/22] Update check_flags.cpp --- 01_week/tasks/check_flags/check_flags.cpp | 66 ++++++++++++++++++++++- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/01_week/tasks/check_flags/check_flags.cpp b/01_week/tasks/check_flags/check_flags.cpp index 75e7c652..8d065e0b 100644 --- a/01_week/tasks/check_flags/check_flags.cpp +++ b/01_week/tasks/check_flags/check_flags.cpp @@ -1,7 +1,6 @@ #include #include - enum class CheckFlags : uint8_t { NONE = 0, TIME = (1 << 0), @@ -14,5 +13,68 @@ enum class CheckFlags : uint8_t { }; void PrintCheckFlags(CheckFlags flags) { - throw std::runtime_error{"Not implemented"}; + + char buf[40] = {'\0'}; + uint8_t data = static_cast(flags); // приведение типа к uint8_t т.к. CheckFlags типа uint8_t + size_t i = 0; + + buf[0] = '['; + i =1; + // Проверка наличия "лишних флагов", ALL приводим к типу uint8_t + // Если есть лишние флаги, выходим. + if(data > static_cast(CheckFlags::ALL)) return; + if(data != 0) + { + if(data & static_cast(CheckFlags::TIME)){ + if(buf[i-1] != '['){ + buf[i] = ','; + i++; + } + + buf[i++] = 'T'; buf[i++] = 'I'; buf[i++] = 'M'; buf[i++] = 'E'; + } + if(data & static_cast(CheckFlags::DATE)){ + if(buf[i-1] != '['){ + buf[i] = ','; + i++; + } + + buf[i++] = 'D'; buf[i++] = 'A'; buf[i++] = 'T'; buf[i++] = 'E'; + } + if(data & static_cast(CheckFlags::USER)){ + if(buf[i-1] != '['){ + buf[i] = ','; + i++; + } + + buf[i++] = 'U'; buf[i++] = 'S'; buf[i++] = 'E'; buf[i++] = 'R'; + } + if(data & static_cast(CheckFlags::CERT)){ + if(buf[i-1] != '['){ + buf[i] = ','; + i++; + } + + buf[i++] = 'C'; buf[i++] = 'E'; buf[i++] = 'R'; buf[i++] = 'T'; + } + if(data & static_cast(CheckFlags::KEYS)){ + if(buf[i-1] != '['){ + buf[i] = ','; + i++; + } + + buf[i++] = 'K'; buf[i++] = 'E'; buf[i++] = 'Y'; buf[i++] = 'S'; + } + if(data & static_cast(CheckFlags::DEST)){ + if(buf[i-1] != '['){ + buf[i] = ','; + i++; + } + + buf[i++] = 'D'; buf[i++] = 'E'; buf[i++] = 'S'; buf[i++] = 'T'; + } + } + + buf[i] = ']'; + std::cout << buf; } From 3f8538b3c9283091ec335d338124a1e1f44e0882 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 10:57:16 +0500 Subject: [PATCH 16/22] Update CMakeLists.txt --- 04_week/tasks/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/04_week/tasks/CMakeLists.txt b/04_week/tasks/CMakeLists.txt index 6ddf92b4..b42c26a7 100644 --- a/04_week/tasks/CMakeLists.txt +++ b/04_week/tasks/CMakeLists.txt @@ -1,4 +1,3 @@ add_subdirectory(stack) -add_subdirectory(queue) + add_subdirectory(ring_buffer) -add_subdirectory(phasor) \ No newline at end of file From 88dbd8a9a3dfab1cb89afb77e27545bb75d02485 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 11:27:53 +0500 Subject: [PATCH 17/22] Update tracer.cpp --- 05_week/tasks/tracer/tracer.cpp | 41 ++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/05_week/tasks/tracer/tracer.cpp b/05_week/tasks/tracer/tracer.cpp index 2ccfb417..de3fe505 100644 --- a/05_week/tasks/tracer/tracer.cpp +++ b/05_week/tasks/tracer/tracer.cpp @@ -1,6 +1,45 @@ +/* + Трассировщик +Необходимо реализовать класс Tracer, подсчитывающий вызовы своих конструкторов, операторов присваивания и деструктора. + +В качестве данных внутри класса должна храниться имя std::string и идентификатор. + +В классе присутствуют следующие счетчики, доступные извне: + +count - общее количество созданных объектов (используется для генерации id) +default_ctor - количество вызовов конструктора по умолчанию +str_ctor - количество вызовов конструктора от строки +copy_ctor - количество вызовов конструктора копирования +move_ctor - количество вызовов конструктора перемещения +copy_assign - количество вызовов оператора копирующего присваивания +move_assign - количество вызовов оператора перемещающего присваивания +dtor - количество вызовов деструктора +alive - количество живых объектов в данный момент +Правила изменения идентификатора (id): + +присваивается при создании и НЕ меняется в течение жизни объекта +каждый новый объект получает уникальный id (увеличивающийся счетчик) +при использовании операторов не изменяется +Класс предоставляет следующий функционал: + +Конструктор по умолчанию - создает объект с именем obj_{id} ("obj_1") +Конструктор от строки std::string - создает объект с именем {name}_{id} +Конструктор копирования - копирует имя, но создает id +Конструктор перемещения - перемещает имя, но создает id +Оператор присваивания копированием - копирует имя, не изменяет id +Оператор перемещения копированием - перемещает имя, не изменяет id +Деструктор - изменяет свои счетчики +Метод Id - возвращает идентификатор объекта +Метод Name - возвращает константную ссылку на имя. +Метод Data - возвращает указатель на данные строки. +Метод ResetStats - сбрасывает на 0 все счетчики +Примечание +Для удобства отладки можно написать функции, выводящие на экран статистики и логирующие действия. +*/ + #include class Tracer { -}; \ No newline at end of file +}; From b2fb4f4975c11116fe9e5a85377564426d281788 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 12:54:22 +0500 Subject: [PATCH 18/22] Update tracer.cpp Start --- 05_week/tasks/tracer/tracer.cpp | 51 +++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/05_week/tasks/tracer/tracer.cpp b/05_week/tasks/tracer/tracer.cpp index de3fe505..3af22906 100644 --- a/05_week/tasks/tracer/tracer.cpp +++ b/05_week/tasks/tracer/tracer.cpp @@ -42,4 +42,55 @@ alive - количество живых объектов в данный мом class Tracer { +public: + // static для переменных, тогда при вызове значение будет известно предыдущее значение. + static size_t count; //- общее количество созданных объектов (используется для генерации id) + static size_t default_ctor; // - количество вызовов конструктора по умолчанию + static size_t str_ctor; // - количество вызовов конструктора от строки + static size_t copy_ctor; // - количество вызовов конструктора копирования + static size_t move_ctor; // - количество вызовов конструктора перемещения + static size_t copy_assign; // - количество вызовов оператора копирующего присваивания + static size_t move_assign; // - количество вызовов оператора перемещающего присваивания + static size_t dtor; // - количество вызовов деструктора + static size_t alive; // - количество живых объектов в данный момент + + Trice(): id_(++count), name_ ("obj_" + (std::to_string(count+1))){ + ++default_ctor; + ++alive; + } + + Trice(const std::string data): id_(++count), name_ (data +"_" + (std::to_string(count+1))){ + ++default_ctor; + ++alive; + } + + + + void ResetStats() { + count = 0; + default_ctor = 0; + str_ctor = 0; + copy_ctor = 0; + move_ctor = 0; + copy_assign = 0; + move_assign = 0; + dtor = 0; + alive = 0; +} + +private: + std::string name_; + size_t id_; }; + + +// Инициализация статических членов класса +size_t Tracer::count = 0; +size_t Tracer::default_ctor = 0; +size_t Tracer::str_ctor = 0; +size_t Tracer::copy_ctor = 0; +size_t Tracer::move_ctor = 0; +size_t Tracer::copy_assign = 0; +size_t Tracer::move_assign = 0; +size_t Tracer::dtor = 0; +size_t Tracer::alive = 0; From 21116bf1b548dcd11c8d2eb822720695bc7d3df2 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 13:07:26 +0500 Subject: [PATCH 19/22] Update tracer.cpp --- 05_week/tasks/tracer/tracer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/05_week/tasks/tracer/tracer.cpp b/05_week/tasks/tracer/tracer.cpp index 3af22906..db514782 100644 --- a/05_week/tasks/tracer/tracer.cpp +++ b/05_week/tasks/tracer/tracer.cpp @@ -54,12 +54,12 @@ class Tracer { static size_t dtor; // - количество вызовов деструктора static size_t alive; // - количество живых объектов в данный момент - Trice(): id_(++count), name_ ("obj_" + (std::to_string(count+1))){ + Tracer(): id_(++count), name_ ("obj_" + (std::to_string(count+1))){ ++default_ctor; ++alive; } - Trice(const std::string data): id_(++count), name_ (data +"_" + (std::to_string(count+1))){ + Tracer(const std::string data): id_(++count), name_ (data +"_" + (std::to_string(count+1))){ ++default_ctor; ++alive; } @@ -76,7 +76,7 @@ class Tracer { move_assign = 0; dtor = 0; alive = 0; -} + } private: std::string name_; From b5f508579ab6ebf3d0713bd96362ea6e75dc251f Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 13:11:08 +0500 Subject: [PATCH 20/22] Update tracer.cpp --- 05_week/tasks/tracer/tracer.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/05_week/tasks/tracer/tracer.cpp b/05_week/tasks/tracer/tracer.cpp index db514782..c297b59a 100644 --- a/05_week/tasks/tracer/tracer.cpp +++ b/05_week/tasks/tracer/tracer.cpp @@ -40,7 +40,12 @@ alive - количество живых объектов в данный мом #include + class Tracer { +private: + size_t id_; + std::string name_; + public: // static для переменных, тогда при вызове значение будет известно предыдущее значение. @@ -78,9 +83,7 @@ class Tracer { alive = 0; } -private: - std::string name_; - size_t id_; + }; From 7f9c09ed84d1dee8d7251ef5270b4bf0f5f0cc31 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 13:16:03 +0500 Subject: [PATCH 21/22] Update tracer.cpp --- 05_week/tasks/tracer/tracer.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/05_week/tasks/tracer/tracer.cpp b/05_week/tasks/tracer/tracer.cpp index c297b59a..0243dcd5 100644 --- a/05_week/tasks/tracer/tracer.cpp +++ b/05_week/tasks/tracer/tracer.cpp @@ -69,9 +69,18 @@ class Tracer { ++alive; } - - - void ResetStats() { + // Деструктор + ~Tracer() { + ++dtor; + --alive; + } + + // Методы доступа + size_t Id() const { return id_; } + const std::string& Name() const { return name_; } + const char* Data() const { return name_.c_str(); } + + static void ResetStats() { count = 0; default_ctor = 0; str_ctor = 0; From 64e94d21dff8167e60e4c92bc02efe82f00d3435 Mon Sep 17 00:00:00 2001 From: Evgenii Sh <79617771614@yandex.ru> Date: Fri, 13 Feb 2026 13:18:08 +0500 Subject: [PATCH 22/22] Update tracer.cpp --- 05_week/tasks/tracer/tracer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/05_week/tasks/tracer/tracer.cpp b/05_week/tasks/tracer/tracer.cpp index 0243dcd5..69bf4ac7 100644 --- a/05_week/tasks/tracer/tracer.cpp +++ b/05_week/tasks/tracer/tracer.cpp @@ -59,12 +59,12 @@ class Tracer { static size_t dtor; // - количество вызовов деструктора static size_t alive; // - количество живых объектов в данный момент - Tracer(): id_(++count), name_ ("obj_" + (std::to_string(count+1))){ + Tracer(): id_(++count), name_ ("obj_" + (std::to_string(count))){ ++default_ctor; ++alive; } - Tracer(const std::string data): id_(++count), name_ (data +"_" + (std::to_string(count+1))){ + Tracer(const std::string data): id_(++count), name_ (data +"_" + (std::to_string(count))){ ++default_ctor; ++alive; }