From 5852a9f0342dbc776d97c15e7b08285740632916 Mon Sep 17 00:00:00 2001 From: AZEN-SGG Date: Wed, 9 Oct 2024 15:51:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=2022=20?= =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=9C=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B2=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 22Ex/input.txt | 0 22Ex/main.c | 30 ---------- {13Ex => WorkingArrays/13Ex}/equal.c | 0 {13Ex => WorkingArrays/13Ex}/equal.h | 0 {13Ex => WorkingArrays/13Ex}/input.txt | 0 {13Ex => WorkingArrays/13Ex}/main.c | 0 {13Ex => WorkingArrays/13Ex}/makefile | 0 {13Ex => WorkingArrays/13Ex}/tools.c | 0 {13Ex => WorkingArrays/13Ex}/tools.h | 0 {15Ex => WorkingArrays/15Ex}/input.txt | 0 {15Ex => WorkingArrays/15Ex}/main.c | 0 {15Ex => WorkingArrays/15Ex}/makefile | 0 .../15Ex}/replace_local_min.c | 0 .../15Ex}/replace_local_min.h | 0 {15Ex => WorkingArrays/15Ex}/tools.c | 0 {15Ex => WorkingArrays/15Ex}/tools.h | 0 WorkingArrays/22Ex/input.txt | 1 + WorkingArrays/22Ex/local_minimum.c | 56 +++++++++++++++++++ WorkingArrays/22Ex/local_minimum.h | 10 ++++ WorkingArrays/22Ex/main.c | 19 +++++++ WorkingArrays/22Ex/makefile | 11 ++++ {22Ex => WorkingArrays/22Ex}/tools.c | 3 +- {22Ex => WorkingArrays/22Ex}/tools.h | 0 23 files changed, 99 insertions(+), 31 deletions(-) delete mode 100644 22Ex/input.txt delete mode 100644 22Ex/main.c rename {13Ex => WorkingArrays/13Ex}/equal.c (100%) rename {13Ex => WorkingArrays/13Ex}/equal.h (100%) rename {13Ex => WorkingArrays/13Ex}/input.txt (100%) rename {13Ex => WorkingArrays/13Ex}/main.c (100%) rename {13Ex => WorkingArrays/13Ex}/makefile (100%) rename {13Ex => WorkingArrays/13Ex}/tools.c (100%) rename {13Ex => WorkingArrays/13Ex}/tools.h (100%) rename {15Ex => WorkingArrays/15Ex}/input.txt (100%) rename {15Ex => WorkingArrays/15Ex}/main.c (100%) rename {15Ex => WorkingArrays/15Ex}/makefile (100%) rename {15Ex => WorkingArrays/15Ex}/replace_local_min.c (100%) rename {15Ex => WorkingArrays/15Ex}/replace_local_min.h (100%) rename {15Ex => WorkingArrays/15Ex}/tools.c (100%) rename {15Ex => WorkingArrays/15Ex}/tools.h (100%) create mode 100644 WorkingArrays/22Ex/input.txt create mode 100644 WorkingArrays/22Ex/local_minimum.c create mode 100644 WorkingArrays/22Ex/local_minimum.h create mode 100644 WorkingArrays/22Ex/main.c create mode 100644 WorkingArrays/22Ex/makefile rename {22Ex => WorkingArrays/22Ex}/tools.c (96%) rename {22Ex => WorkingArrays/22Ex}/tools.h (100%) diff --git a/22Ex/input.txt b/22Ex/input.txt deleted file mode 100644 index e69de29..0000000 diff --git a/22Ex/main.c b/22Ex/main.c deleted file mode 100644 index d467ff4..0000000 --- a/22Ex/main.c +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include "tools.h" - -int transposition(double * numbers); - -int transposition(double * numbers) { - unsigned length = (int)numbers[0]; - - - int last_index = -1; - unsigned last_length = 0; - - return 0 -} - -int main(void) { - double * numbers; - FILE * file = getFile(); - if (file == NULL) return -1; - - numbers = getList(file); - if (numbers == NULL) return -1; - - if (transposition(numbers) != 0) return -1; - - for (int i = 1; i < numbers[0]; ++i) printf("%d ", numbers[i]); - - free(numbers); - return 0; -} diff --git a/13Ex/equal.c b/WorkingArrays/13Ex/equal.c similarity index 100% rename from 13Ex/equal.c rename to WorkingArrays/13Ex/equal.c diff --git a/13Ex/equal.h b/WorkingArrays/13Ex/equal.h similarity index 100% rename from 13Ex/equal.h rename to WorkingArrays/13Ex/equal.h diff --git a/13Ex/input.txt b/WorkingArrays/13Ex/input.txt similarity index 100% rename from 13Ex/input.txt rename to WorkingArrays/13Ex/input.txt diff --git a/13Ex/main.c b/WorkingArrays/13Ex/main.c similarity index 100% rename from 13Ex/main.c rename to WorkingArrays/13Ex/main.c diff --git a/13Ex/makefile b/WorkingArrays/13Ex/makefile similarity index 100% rename from 13Ex/makefile rename to WorkingArrays/13Ex/makefile diff --git a/13Ex/tools.c b/WorkingArrays/13Ex/tools.c similarity index 100% rename from 13Ex/tools.c rename to WorkingArrays/13Ex/tools.c diff --git a/13Ex/tools.h b/WorkingArrays/13Ex/tools.h similarity index 100% rename from 13Ex/tools.h rename to WorkingArrays/13Ex/tools.h diff --git a/15Ex/input.txt b/WorkingArrays/15Ex/input.txt similarity index 100% rename from 15Ex/input.txt rename to WorkingArrays/15Ex/input.txt diff --git a/15Ex/main.c b/WorkingArrays/15Ex/main.c similarity index 100% rename from 15Ex/main.c rename to WorkingArrays/15Ex/main.c diff --git a/15Ex/makefile b/WorkingArrays/15Ex/makefile similarity index 100% rename from 15Ex/makefile rename to WorkingArrays/15Ex/makefile diff --git a/15Ex/replace_local_min.c b/WorkingArrays/15Ex/replace_local_min.c similarity index 100% rename from 15Ex/replace_local_min.c rename to WorkingArrays/15Ex/replace_local_min.c diff --git a/15Ex/replace_local_min.h b/WorkingArrays/15Ex/replace_local_min.h similarity index 100% rename from 15Ex/replace_local_min.h rename to WorkingArrays/15Ex/replace_local_min.h diff --git a/15Ex/tools.c b/WorkingArrays/15Ex/tools.c similarity index 100% rename from 15Ex/tools.c rename to WorkingArrays/15Ex/tools.c diff --git a/15Ex/tools.h b/WorkingArrays/15Ex/tools.h similarity index 100% rename from 15Ex/tools.h rename to WorkingArrays/15Ex/tools.h diff --git a/WorkingArrays/22Ex/input.txt b/WorkingArrays/22Ex/input.txt new file mode 100644 index 0000000..f0ac2bb --- /dev/null +++ b/WorkingArrays/22Ex/input.txt @@ -0,0 +1 @@ +1 1 2 3 2 2 2 3 3 3 4 4 4 0 0 0 9 9 9 7 7 7 8 8 8 5 5 \ No newline at end of file diff --git a/WorkingArrays/22Ex/local_minimum.c b/WorkingArrays/22Ex/local_minimum.c new file mode 100644 index 0000000..bf3334f --- /dev/null +++ b/WorkingArrays/22Ex/local_minimum.c @@ -0,0 +1,56 @@ +#include "local_minimum.h" + +int transposition(double * numbers, unsigned * start_end) +{ + unsigned f_start = start_end[0], f_end = start_end[1], s_start = start_end[2], s_end = start_end[3]; + unsigned f_len = f_end - f_start + 1, s_len = s_end - s_start + 1, betw_len = s_start - f_end - 1; + + double buffer[start_end[3] - start_end[0] + 1]; + + for (unsigned i = 0; i < s_len; ++i) buffer[i] = numbers[s_start + i]; + for (unsigned i = 0; i < betw_len; ++i) buffer[i + s_len] = numbers[f_end + 1 + i]; + for (unsigned i = 0; i < f_len; ++i) buffer[i + s_len + betw_len] = numbers[f_start + i]; + for (unsigned i = f_start; i <= s_end; ++i) numbers[i] = buffer[i - f_start]; + + return 0; +} + + +int searching_loc_min(double * numbers) +{ + unsigned length = (int)numbers[0]; + unsigned start_end[4]; + int curr_len = 1; + + bool min_num = false; + + + for (unsigned i = 2; i < length; ++i) { + if (numbers[i] == numbers[i - 1]) { + if (curr_len) ++curr_len; + } else if (numbers[i] > numbers[i - 1]) { + if (curr_len) { + // It is important to remember that numbers[0] is equal to the length of the list! + start_end[0 + (min_num * 2)] = (i - curr_len), start_end[1 + (min_num * 2)] = i - 1; + + if (min_num) { + if (transposition(numbers, start_end)) return -1; + memset(start_end, 0, sizeof(start_end)); + } + + min_num = !min_num; + curr_len = 0; + } + } else { + curr_len = 1; + } + } + + if (curr_len) { + start_end[0 + (min_num * 2)] = (length - curr_len), start_end[1 + (min_num * 2)] = length - 1; + + if (min_num && transposition(numbers, start_end)) return -1; + } + + return 0; +} diff --git a/WorkingArrays/22Ex/local_minimum.h b/WorkingArrays/22Ex/local_minimum.h new file mode 100644 index 0000000..dae8dcf --- /dev/null +++ b/WorkingArrays/22Ex/local_minimum.h @@ -0,0 +1,10 @@ +#ifndef LOCAL_MINIMUM +#define LOCAL_MINIMUM + +#include +#include + +int transposition(double * numbers, unsigned * start_end); +int searching_loc_min(double * numbers); + +#endif // LOCAL_MINIMUM diff --git a/WorkingArrays/22Ex/main.c b/WorkingArrays/22Ex/main.c new file mode 100644 index 0000000..6b9b72e --- /dev/null +++ b/WorkingArrays/22Ex/main.c @@ -0,0 +1,19 @@ +#include +#include "tools.h" +#include "local_minimum.h" + +int main(void) { + double * numbers; + FILE * file = getFile(); + if (file == NULL) return -1; + + numbers = getList(file); + if (numbers == NULL) return -1; + + if (searching_loc_min(numbers)) return -1; + + for (int i = 1; i < numbers[0]; ++i) printf("%.1lf ", numbers[i]); + + free(numbers); + return 0; +} diff --git a/WorkingArrays/22Ex/makefile b/WorkingArrays/22Ex/makefile new file mode 100644 index 0000000..6016e1e --- /dev/null +++ b/WorkingArrays/22Ex/makefile @@ -0,0 +1,11 @@ +all: main.o local_minimum.o tools.o + gcc main.o local_minimum.o tools.o && del *.o + +main.o: main.c + gcc -c main.c + +local_minimum.o: local_minimum.c + gcc -c local_minimum.c + +tools.o: tools.c + gcc -c tools.c \ No newline at end of file diff --git a/22Ex/tools.c b/WorkingArrays/22Ex/tools.c similarity index 96% rename from 22Ex/tools.c rename to WorkingArrays/22Ex/tools.c index f2ebc66..7f14c54 100644 --- a/22Ex/tools.c +++ b/WorkingArrays/22Ex/tools.c @@ -22,7 +22,8 @@ FILE * getFile(void) } } -double * getList(FILE * file) { +double * getList(FILE * file) +{ double current; int i, length = 2; double * numbers = NULL; diff --git a/22Ex/tools.h b/WorkingArrays/22Ex/tools.h similarity index 100% rename from 22Ex/tools.h rename to WorkingArrays/22Ex/tools.h