From f9142c1a1b97fbc97264384750daaad9f767ff2b Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Tue, 28 Oct 2025 18:44:46 +0000 Subject: [PATCH 1/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20counter.c=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20=D0=A1?= =?UTF-8?q?=D1=87=D0=B8=D1=82=D0=B0=D0=BB=D0=BE=D1=87=D0=BA=D0=B0=20=D0=B2?= =?UTF-8?q?=20=D0=94=D0=97=5F6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hw6_Lists/counter.c | 60 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/hw6_Lists/counter.c diff --git a/src/hw6_Lists/counter.c b/src/hw6_Lists/counter.c new file mode 100644 index 0000000..325c853 --- /dev/null +++ b/src/hw6_Lists/counter.c @@ -0,0 +1,60 @@ +#include +#include + +struct ListOfWarriors +{ + int position; + struct ListOfWarriors* next; +}; + + +int counter(int n, int m) +{ + if (n <= 0 || m <= 0) { + printf("Нельзя вводить отрицательные m, n\n"); + return -1; + } + + struct ListOfWarriors* first = malloc(sizeof(*first)); // Создаем циклический список + first->position = 1; + + struct ListOfWarriors* current = first; + for (int i = 2; i <= n; i++) { + current->next = malloc(sizeof(*current)); + current = current->next; + current->position = i; + } + current->next = first; // Замыкаем круг в циклическом списке + + current = first; + while (current->next != current) { //Пока не останется один воин (когда узел указывает сам на себя) + // Находим воина под номером m-1 + for (int i = 1; i < m - 1; i++) { + current = current->next; + } + + // Удаляем следующего воина от найденного (то есть под номером m) + struct ListOfWarriors* deletedWarrior = current->next; + current->next = deletedWarrior->next; + current = current->next; // Переходим к следующему + free(deletedWarrior); + } + + int neededPosition = current->position; + free(current); + + return neededPosition; // Возвращаем нужный номер +} + +int main() +{ + int n, m; + + printf("Введите n и m: "); + scanf("%d %d", &n, &m); + + int result = counter(n, m); + printf("Нужная позиция: %d\n", result); + + return 0; +} \ No newline at end of file From 2aa4ace93d480cd5df21309473afc6ac58e592e1 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Sat, 20 Dec 2025 22:29:47 +0300 Subject: [PATCH 2/8] Create CMakeLists.txt --- src/hw6_Lists/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/hw6_Lists/CMakeLists.txt diff --git a/src/hw6_Lists/CMakeLists.txt b/src/hw6_Lists/CMakeLists.txt new file mode 100644 index 0000000..219db59 --- /dev/null +++ b/src/hw6_Lists/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 4.0) +project(hw6_Lists C) + +set(CMAKE_C_STANDARD 17) + +add_executable(counter src/hw6_Lists/counter.c) From babd38f66463f11146882df0907a76ca01ab24ee Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Sun, 21 Dec 2025 12:53:49 +0300 Subject: [PATCH 3/8] Fixed CMakeLists.txt --- src/hw6_Lists/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hw6_Lists/CMakeLists.txt b/src/hw6_Lists/CMakeLists.txt index 219db59..3b503dc 100644 --- a/src/hw6_Lists/CMakeLists.txt +++ b/src/hw6_Lists/CMakeLists.txt @@ -3,4 +3,4 @@ project(hw6_Lists C) set(CMAKE_C_STANDARD 17) -add_executable(counter src/hw6_Lists/counter.c) +add_executable(counter counter.c) From 3f955d17759c0958acf142e198c70b836b6b0bd9 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Thu, 25 Dec 2025 22:02:51 +0300 Subject: [PATCH 4/8] Update of counter.c without main --- src/hw6_Lists/counter.c | 61 +++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/src/hw6_Lists/counter.c b/src/hw6_Lists/counter.c index 325c853..d13fe42 100644 --- a/src/hw6_Lists/counter.c +++ b/src/hw6_Lists/counter.c @@ -1,12 +1,31 @@ #include #include +#include "counter.h" -struct ListOfWarriors +struct ListOfWarriors* createList(int n) { - int position; - struct ListOfWarriors* next; -}; + struct ListOfWarriors* first = malloc(sizeof(struct ListOfWarriors)); // Создаем циклический список + first->position = 1; + + struct ListOfWarriors* current = first; + for (int i = 2; i <= n; i++) { + current->next = malloc(sizeof(struct ListOfWarriors)); + current = current->next; + current->position = i; + } + current->next = first; // Замыкаем круг в циклическом списке + + return first; +} + +void deleteWarrior(struct ListOfWarriors** current) +{ + struct ListOfWarriors* toDelete = (*current)->next; + (*current)->next = toDelete->next; + free(toDelete); + *current = (*current)->next; // Переходим к следующему +} int counter(int n, int m) { @@ -15,46 +34,22 @@ int counter(int n, int m) return -1; } - struct ListOfWarriors* first = malloc(sizeof(*first)); // Создаем циклический список - first->position = 1; - - struct ListOfWarriors* current = first; - for (int i = 2; i <= n; i++) { - current->next = malloc(sizeof(*current)); - current = current->next; - current->position = i; + if (m == 1) { + return n; // Возвращаем нужный номер } - current->next = first; // Замыкаем круг в циклическом списке - current = first; + struct ListOfWarriors* current = createList(n); + while (current->next != current) { //Пока не останется один воин (когда узел указывает сам на себя) // Находим воина под номером m-1 for (int i = 1; i < m - 1; i++) { current = current->next; } - // Удаляем следующего воина от найденного (то есть под номером m) - struct ListOfWarriors* deletedWarrior = current->next; - current->next = deletedWarrior->next; - current = current->next; // Переходим к следующему - free(deletedWarrior); + deleteWarrior(¤t); // Удаляем следующего воина от найденного (то есть под номером m) } int neededPosition = current->position; free(current); - return neededPosition; // Возвращаем нужный номер } - -int main() -{ - int n, m; - - printf("Введите n и m: "); - scanf("%d %d", &n, &m); - - int result = counter(n, m); - printf("Нужная позиция: %d\n", result); - - return 0; -} \ No newline at end of file From a7a01f378f24e5196d5c2c1cfa836b720ed8967a Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Thu, 25 Dec 2025 22:03:26 +0300 Subject: [PATCH 5/8] Add counter.h --- src/hw6_Lists/counter.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/hw6_Lists/counter.h diff --git a/src/hw6_Lists/counter.h b/src/hw6_Lists/counter.h new file mode 100644 index 0000000..eae6588 --- /dev/null +++ b/src/hw6_Lists/counter.h @@ -0,0 +1,14 @@ +#pragma once + +struct ListOfWarriors { + int position; + struct ListOfWarriors* next; +}; + +// Функция создания циклического списка из n воинов +struct ListOfWarriors* createList(int n); + +// Удаление война в списке +void deleteWarrior(struct ListOfWarriors** current); + +int counter(int n, int m); From 28e6e21d6bb1ffed2f177e4bd1d578dc4e6d3493 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Thu, 25 Dec 2025 22:04:01 +0300 Subject: [PATCH 6/8] Add main.c --- src/hw6_Lists/main.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/hw6_Lists/main.c diff --git a/src/hw6_Lists/main.c b/src/hw6_Lists/main.c new file mode 100644 index 0000000..3fb96ab --- /dev/null +++ b/src/hw6_Lists/main.c @@ -0,0 +1,19 @@ +#include +#include "counter.h" + +int main() +{ + int n, m; + printf("Введите n и m: "); + scanf("%d %d", &n, &m); + + int result = counter(n, m); + + if (result != -1) { + printf("Нужная позиция: %d\n", result); + } else { + printf("Ошибка в вычислениях\n"); + } + + return 0; +} From 8301bf0f02f441fbb65c2b97b291aec2fa3020d2 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Thu, 25 Dec 2025 22:05:11 +0300 Subject: [PATCH 7/8] New version of CMakeLists.txt --- src/hw6_Lists/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hw6_Lists/CMakeLists.txt b/src/hw6_Lists/CMakeLists.txt index 3b503dc..595a414 100644 --- a/src/hw6_Lists/CMakeLists.txt +++ b/src/hw6_Lists/CMakeLists.txt @@ -3,4 +3,7 @@ project(hw6_Lists C) set(CMAKE_C_STANDARD 17) -add_executable(counter counter.c) +add_executable(counter + main.c + counter.c +) From 42c5306ea54e34a04c8cf829421650c88643c027 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Thu, 25 Dec 2025 22:05:56 +0300 Subject: [PATCH 8/8] Fixed style of counter.c --- src/hw6_Lists/counter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hw6_Lists/counter.c b/src/hw6_Lists/counter.c index d13fe42..6eaddbc 100644 --- a/src/hw6_Lists/counter.c +++ b/src/hw6_Lists/counter.c @@ -4,7 +4,6 @@ struct ListOfWarriors* createList(int n) { - struct ListOfWarriors* first = malloc(sizeof(struct ListOfWarriors)); // Создаем циклический список first->position = 1; @@ -53,3 +52,4 @@ int counter(int n, int m) free(current); return neededPosition; // Возвращаем нужный номер } +