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