From a45af76154de08d4a54fea865e8f10391d351940 Mon Sep 17 00:00:00 2001 From: AZEN-SGG Date: Wed, 4 Dec 2024 13:25:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BA=20=D1=81=D0=B5=D0=B4=D1=8C=D0=BC=D0=BE=D0=BC=D1=83=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8E=20=D1=81=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B7=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D1=81=D0=BE=D1=80=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=BA,=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=209=D0=B5?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BC=D0=B0=D1=81=D1=81=D0=B8=D0=B2=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sorting/7Ex/main.c | 42 ++++++++----- Sorting/7Ex/main.o | Bin 0 -> 4881 bytes Sorting/7Ex/makefile | 7 ++- Sorting/7Ex/quicksort.c | 30 ++++++++- Sorting/7Ex/quicksort.h | 2 + Sorting/7Ex/quicksort.o | Bin 0 -> 8337 bytes Sorting/7Ex/seagwithsob.c | 37 +++++++++++ Sorting/7Ex/seagwithsob.h | 12 ++++ Sorting/7Ex/seagwithsob.o | Bin 0 -> 8181 bytes Sorting/7Ex/tools.c | 48 +++++++++++++- Sorting/7Ex/tools.h | 6 +- Sorting/7ExOriginal/input.txt | 1 + Sorting/7ExOriginal/main.c | 27 ++++++++ Sorting/7ExOriginal/makefile | 43 +++++++++++++ Sorting/7ExOriginal/quicksort.c | 26 ++++++++ Sorting/7ExOriginal/quicksort.h | 9 +++ Sorting/7ExOriginal/tools.c | 108 ++++++++++++++++++++++++++++++++ Sorting/7ExOriginal/tools.h | 24 +++++++ WorkingArrays/9Ex/grouping.c | 58 +++++++++++++++++ WorkingArrays/9Ex/grouping.h | 14 +++++ WorkingArrays/9Ex/input.txt | 1 + WorkingArrays/9Ex/main.c | 27 ++++++++ WorkingArrays/9Ex/makefile | 43 +++++++++++++ WorkingArrays/9Ex/tools.c | 47 ++++++++++++++ WorkingArrays/9Ex/tools.h | 10 +++ 25 files changed, 599 insertions(+), 23 deletions(-) create mode 100644 Sorting/7Ex/main.o create mode 100644 Sorting/7Ex/quicksort.o create mode 100644 Sorting/7Ex/seagwithsob.c create mode 100644 Sorting/7Ex/seagwithsob.h create mode 100644 Sorting/7Ex/seagwithsob.o create mode 100644 Sorting/7ExOriginal/input.txt create mode 100644 Sorting/7ExOriginal/main.c create mode 100644 Sorting/7ExOriginal/makefile create mode 100644 Sorting/7ExOriginal/quicksort.c create mode 100644 Sorting/7ExOriginal/quicksort.h create mode 100644 Sorting/7ExOriginal/tools.c create mode 100644 Sorting/7ExOriginal/tools.h create mode 100644 WorkingArrays/9Ex/grouping.c create mode 100644 WorkingArrays/9Ex/grouping.h create mode 100644 WorkingArrays/9Ex/input.txt create mode 100644 WorkingArrays/9Ex/main.c create mode 100644 WorkingArrays/9Ex/makefile create mode 100644 WorkingArrays/9Ex/tools.c create mode 100644 WorkingArrays/9Ex/tools.h diff --git a/Sorting/7Ex/main.c b/Sorting/7Ex/main.c index 9b9d54a..92fa96b 100644 --- a/Sorting/7Ex/main.c +++ b/Sorting/7Ex/main.c @@ -1,27 +1,35 @@ #include #include "quicksort.h" +#include "seagwithsob.h" #include "tools.h" #include "stdlib.h" +void iquicksort(double * array, int length); + int main(void) { - FILE * file = getFile(); - double * array; - double * orig_arr; - int length; +// FILE * file = getFile(); +// double * array; +// double * orig_arr; +// int length; +// +// if (file == NULL) return -1; +// array = getArray(file); +// if (array == NULL) return -2; +// length = (int)array[0] - 1; +// +// orig_arr = array; +// array = &array[1]; +// testSort(array, length, quicksort); +// +// free(orig_arr); - if (file == NULL) return -1; - array = getArray(file); - if (array == NULL) return -2; - length = (int)array[0] - 1; - - orig_arr = array; - array = &array[1]; - testSort(array, length, quicksort); - - free(orig_arr); - - printf("\n"); - testSortRandomArray(quicksort); +// printf("\n"); +// testSortRandomArray(quicksort; + compareSorts(quicksort, iquicksort); return 0; } + +void iquicksort(double * array, int length) { + qsort(array, length, sizeof(double), compare); +} diff --git a/Sorting/7Ex/main.o b/Sorting/7Ex/main.o new file mode 100644 index 0000000000000000000000000000000000000000..c6ebb1f0114e71d11b1b5282d614d95e4374bf5f GIT binary patch literal 4881 zcmc&&U2Ggz6+U-nXLsy%HtTLt>=wdQI892}S+8yU*QQz9NxMO&v11|%7`fx!@p|L+ z>~?mRx*?#bK~+0Npnun?{NI^nk=&8w%6P3dlIDKGVyle4o$QL7&lr*CTFWd_2aZxPL|7yZhqC{oT?4K0x04k~fI$N|2o|OpeC< zeTdR4)Tv0}ys7v=?x6ir3gAa+LCoTf^QONXX-PV~a4=)kQ7kkh&MS__0+VnVc}tQ< z^DB78Sm3u%{~P4(NS+q*#wHPle@AyV31fR z3~*B1U@}w`Rb{WW5wH&gSdQL@0i8g=za8CZ%fzLRAGh& z#yK`hKAxZo%MF|`8UujIo_y-OwJ%1E;c;Z~4u@ ztprU!?=%`Pu`9{9?5sCj&=QG_M$^GAWD~p#O0OBB0~ACz&*H*O)SvCtD_d>s7O;oHhg~fLcB3CB z$#8t%c^>T#e4o}j7Ng;MwO|ufN0O+b#gkNP^#Zo|7b;Wioc<9zmtxC(AF*ZA8ZoVh zQ|xIrZL)7bpNjBZWJ5pA1+YGYoT;Lg3A;fa`{ZT?KR_XEOVV`|R`D`LobD#sr&@FW z1JCjSidwtCvV0MfkIdQ{k1cNpX)mNp&n1BkvLj|Lt(y;;=MN3C>>&Vc1k&lpQH6|y z2+!m&g*H1mtedmxN7FOuqr-#jzEo-Gr}M)MZH9q)7M3$P4ILz}zQEA$kLQPrIU=N9 zeu05D^xFIo4nklYE0SQ4717=wcYY=pbDtL8gsTA?P7Xgd?3p~GF@wAD0jbL9860ZY z4sft*5#6I?$f7no2Imx1bDIF1(VI$oTsAA9JzO%jE zF4QWO0`6FAlN0&p@Y=?0<+<^(Lfxx0aK8bNn-Mm}eXCJlxAED+(?+w|Xd|RzKo*(%f!2zDt{48=hQPn6-}KuKbAHl6fEg_v(IZ`Uw^WY{wc%nYZMF zKC;K9%KNEIsnwq`Ps<|(d}$9)&EH%mdqqR?^Zl9Z+}jy*PBy^f2;}ifz{6MXhqC>beC;tV5ojrjyp?F!99NIH_ z#Ul2WYl4C?Z5}yr=Jib7cX8^(DvPpR^Z#+1HR-agUZt$b@X6R>o|T@ zh1tNPj0=$uhEH!OI;8@BdQa$2Pd8V5ALxqzhfInY5(8JG=#ifunHITMDUP<`hplcZ LV#ls1PvrhTyf1u@ literal 0 HcmV?d00001 diff --git a/Sorting/7Ex/makefile b/Sorting/7Ex/makefile index 7199963..6e7d53b 100644 --- a/Sorting/7Ex/makefile +++ b/Sorting/7Ex/makefile @@ -29,8 +29,8 @@ CFLAGS = -mfpmath=sse \ -c -all: main.o quicksort.o tools.o - gcc main.o quicksort.o tools.o -lssp && del *.o +all: main.o quicksort.o seagwithsob.o tools.o + gcc main.o quicksort.o seagwithsob.o tools.o -lssp && del *.o a.exe main.o: main.c @@ -38,6 +38,9 @@ main.o: main.c quicksort.o: quicksort.c gcc $(CFLAGS) quicksort.c + +seagwithsob.o: seagwithsob.c + gcc $(CFLAGS) seagwithsob.c tools.o: tools.c gcc $(CFLAGS) tools.c diff --git a/Sorting/7Ex/quicksort.c b/Sorting/7Ex/quicksort.c index 807f0d3..932c80a 100644 --- a/Sorting/7Ex/quicksort.c +++ b/Sorting/7Ex/quicksort.c @@ -21,6 +21,32 @@ void quicksort(double * array, int length) { } } while (si < ei); - if (si > 1) quicksort(array, si); - if (ei < length - 2) quicksort(&array[head + 1], length - ei - 1); + if (si > 1) { + if (si < 7) bubble(array, si); + else quicksort(array, si); + } + if (ei < length - 2) { + if (si < 7) bubble(&array[head + 1], length - ei - 1); + else quicksort(&array[head + 1], length - ei - 1); + } +} + +void bubble(double *arr, int length) { + double temp; + bool swapped; + + for (int i = 0; i < length; ++i) { + swapped = false; + + for (int j = 0; j < length - i - 1; ++j) { + if (arr[j] > arr[j + 1]) { + swapped = true; + temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } + + if (!swapped) break; + } } diff --git a/Sorting/7Ex/quicksort.h b/Sorting/7Ex/quicksort.h index 52ab6ff..571be41 100644 --- a/Sorting/7Ex/quicksort.h +++ b/Sorting/7Ex/quicksort.h @@ -3,7 +3,9 @@ #include #include +#include void quicksort(double * array, int length); +void bubble(double *arr, int length); #endif diff --git a/Sorting/7Ex/quicksort.o b/Sorting/7Ex/quicksort.o new file mode 100644 index 0000000000000000000000000000000000000000..b59dd0b645c24f5a42954888ba02b338227f4d23 GIT binary patch literal 8337 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 j) & 1) unit[index++] = array[i]; + else zero[i - index] = array[i]; + } + + rewrite(array, zero, length - index, unit, index); + } + + index = 0; + + for (int i = 0; i < length; ++i) { + if ((*(unsigned long long*)&array[i] >> 63) & 1) unit[index++] = array[i]; + else zero[i - index] = array[i]; + } + + for (int i = 0; i < index; ++i) array[i] = unit[index - i - 1]; + for (int i = index; i < length; ++i) array[i] = zero[i - index]; + + free(zero); + free(unit); +} + +void rewrite(double * array, double * zero, int len_zero, double * unit, int len_unit) { + for (int i = 0; i < len_zero; ++i) array[i] = zero[i]; + for (int i = len_zero; i < len_zero + len_unit; ++i) array[i] = unit[i - len_zero]; +} diff --git a/Sorting/7Ex/seagwithsob.h b/Sorting/7Ex/seagwithsob.h new file mode 100644 index 0000000..e2f1ab5 --- /dev/null +++ b/Sorting/7Ex/seagwithsob.h @@ -0,0 +1,12 @@ +#ifndef SEAGWITHSOB +#define SEAGWITHSOB + +#include +#include +#include +#include + +void sort(double * array, int length); +void rewrite(double * array, double * zero, int len_zero, double * unit, int len_unit); + +#endif diff --git a/Sorting/7Ex/seagwithsob.o b/Sorting/7Ex/seagwithsob.o new file mode 100644 index 0000000000000000000000000000000000000000..6e86ed77f0825e627f066ba9171b866ff846abc1 GIT binary patch literal 8181 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 exp; } + +int compare(const void * ufirst, const void * usecond) { + double first = (double)ufirst; + double second = (double)usecond; + + if ((first - second) > eps) { + return 1; + } else ((second - first) > eps) { + return -1; + } else { + return 0; + } +} diff --git a/Sorting/7Ex/tools.h b/Sorting/7Ex/tools.h index 3fe14d0..ba4eb3e 100644 --- a/Sorting/7Ex/tools.h +++ b/Sorting/7Ex/tools.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #define exp 1.e-6 @@ -15,10 +16,13 @@ FILE * getFile(void); double * getArray(FILE * file); bool orderliness(double * array, int length); void testSortRandomArray(sort_op op); +void compareSorts(sort_op first, sort_op second); void generate(double * array, int length); +void copy(double * from, double * to, int length); void printArray(double * array, int length); -void testSort(double * array, int length, sort_op op); +int testSort(double * array, int length, sort_op op); bool isSorted(double * array, int length); bool more(double a, double b); +int compare(const void * ufirst, const void * usecond); #endif diff --git a/Sorting/7ExOriginal/input.txt b/Sorting/7ExOriginal/input.txt new file mode 100644 index 0000000..7cb5790 --- /dev/null +++ b/Sorting/7ExOriginal/input.txt @@ -0,0 +1 @@ +0 -1 -2 -2.001 6 6 5 5 4 4 3 3 2 2 1 1 diff --git a/Sorting/7ExOriginal/main.c b/Sorting/7ExOriginal/main.c new file mode 100644 index 0000000..9b9d54a --- /dev/null +++ b/Sorting/7ExOriginal/main.c @@ -0,0 +1,27 @@ +#include +#include "quicksort.h" +#include "tools.h" +#include "stdlib.h" + +int main(void) { + FILE * file = getFile(); + double * array; + double * orig_arr; + int length; + + if (file == NULL) return -1; + array = getArray(file); + if (array == NULL) return -2; + length = (int)array[0] - 1; + + orig_arr = array; + array = &array[1]; + testSort(array, length, quicksort); + + free(orig_arr); + + printf("\n"); + testSortRandomArray(quicksort); + + return 0; +} diff --git a/Sorting/7ExOriginal/makefile b/Sorting/7ExOriginal/makefile new file mode 100644 index 0000000..7199963 --- /dev/null +++ b/Sorting/7ExOriginal/makefile @@ -0,0 +1,43 @@ +CFLAGS = -mfpmath=sse \ + -fstack-protector-all \ + -W \ + -Wall \ + -Wextra \ + -Wunused \ + -Wcast-align \ + -Werror \ + -pedantic \ + -pedantic-errors \ + -Wfloat-equal \ + -Wpointer-arith \ + -Wformat-security \ + -Wmissing-format-attribute \ + -Wformat=1 \ + -Wwrite-strings \ + -Wcast-align \ + -Wno-long-long \ + -std=gnu99 \ + -Wstrict-prototypes \ + -Wmissing-prototypes \ + -Wmissing-declarations \ + -Wold-style-definition \ + -Wdeclaration-after-statement \ + -Wbad-function-cast \ + -Wnested-externs \ + -O3 \ + -D_DEBUG -g \ + -c + + +all: main.o quicksort.o tools.o + gcc main.o quicksort.o tools.o -lssp && del *.o + a.exe + +main.o: main.c + gcc $(CFLAGS) main.c + +quicksort.o: quicksort.c + gcc $(CFLAGS) quicksort.c + +tools.o: tools.c + gcc $(CFLAGS) tools.c diff --git a/Sorting/7ExOriginal/quicksort.c b/Sorting/7ExOriginal/quicksort.c new file mode 100644 index 0000000..807f0d3 --- /dev/null +++ b/Sorting/7ExOriginal/quicksort.c @@ -0,0 +1,26 @@ +#include "quicksort.h" + +void quicksort(double * array, int length) { + int head, si = 0, ei = length - 1; + double temp; + + srand(time(NULL)); + head = rand() % length; + + do { + while (array[si] < array[head]) ++si; + while (array[ei] > array[head]) --ei; + + if (si < ei) { + temp = array[si]; + array[si] = array[ei]; + array[ei] = temp; + + if (si == head || ei == head) head = si == head ? ei++ : si--; + ++si, --ei; + } + } while (si < ei); + + if (si > 1) quicksort(array, si); + if (ei < length - 2) quicksort(&array[head + 1], length - ei - 1); +} diff --git a/Sorting/7ExOriginal/quicksort.h b/Sorting/7ExOriginal/quicksort.h new file mode 100644 index 0000000..52ab6ff --- /dev/null +++ b/Sorting/7ExOriginal/quicksort.h @@ -0,0 +1,9 @@ +#ifndef QUICKSORT +#define QUICKSORT + +#include +#include + +void quicksort(double * array, int length); + +#endif diff --git a/Sorting/7ExOriginal/tools.c b/Sorting/7ExOriginal/tools.c new file mode 100644 index 0000000..afa3644 --- /dev/null +++ b/Sorting/7ExOriginal/tools.c @@ -0,0 +1,108 @@ +#include "tools.h" + +FILE * getFile(void) { + char filename[50]; + + printf("Enter file name: "); + if (scanf("%s", filename) == 1) { + FILE * file = fopen(filename, "r"); + if (file == NULL) { + printf("Error file!\n)"); + return NULL; + } else { + return file; + } + } else { + printf("Empty name!\n"); + return NULL; + } +} + +double * getArray(FILE * file) { + int i, size = 2; + double * array = NULL; + double current; + + if (fscanf(file, "%lf", ¤t) != 1) { + printf("File if empty!"); + return array; + } + + array = (double *)malloc(size * sizeof(double)); + + i = 1; + do { + if (i >= size) { + size *= 2; + array = (double *)realloc(array, sizeof(double) * size); + } + array[i] = current; + ++i; + } while (fscanf(file, "%lf", ¤t) == 1); + + array = (double *)realloc(array, sizeof(double) * i); + array[0] = (double)i; + + return array; +} + + +bool orderliness(double * array, int length) { + for (int i = 1; i < length; ++i) if ((array[i] - array[i - 1]) < exp) return false; + return true; +} + +void testSortRandomArray(sort_op op) { + int length; + + printf("Enter length of array: "); + if (scanf("%d", &length) == 1) { + double * array = (double *)malloc(length * sizeof(double)); + generate(array, length); + testSort(array, length, op); + free(array); + } else { + printf("Length not entered!\n"); + } +} + +void generate(double * array, int length) { + srand(time(NULL)); + + for (int i = 0; i < length; ++i) { + array[i] = ((rand() % 2) == 1 ? -1. : 1.) * 1.*rand() / (1. + rand()) * 1000; + } +} + +void testSort(double * array, int length, sort_op op) { + int timer; + + printArray(array, length); + + timer = -clock(); + op(array, length); + timer += clock(); + + printArray(array, length); + if (isSorted(array, length)) printf("The array was sorted for %lf sec.\n", (double)timer / CLOCKS_PER_SEC); + else printf("The array was not sorted!\n"); +} + +void printArray(double * array, int length) { + length = (length > 10) ? 10 : length; + + for (int i = 0; i < length; ++i) { + printf("%.2lf ", array[i]); + } + + printf("\n"); +} + +bool isSorted(double * array, int length) { + for (int i = 0; i < length - 1; ++i) if (more(array[i], array[i + 1])) return false; + return true; +} + +bool more(double a, double b) { + return (a - b) > exp; +} diff --git a/Sorting/7ExOriginal/tools.h b/Sorting/7ExOriginal/tools.h new file mode 100644 index 0000000..3fe14d0 --- /dev/null +++ b/Sorting/7ExOriginal/tools.h @@ -0,0 +1,24 @@ +#ifndef TOOLS +#define TOOLS + +#include +#include +#include +#include +#include + +#define exp 1.e-6 + +typedef void (sort_op)(double * array, int length); + +FILE * getFile(void); +double * getArray(FILE * file); +bool orderliness(double * array, int length); +void testSortRandomArray(sort_op op); +void generate(double * array, int length); +void printArray(double * array, int length); +void testSort(double * array, int length, sort_op op); +bool isSorted(double * array, int length); +bool more(double a, double b); + +#endif diff --git a/WorkingArrays/9Ex/grouping.c b/WorkingArrays/9Ex/grouping.c new file mode 100644 index 0000000..4f921f8 --- /dev/null +++ b/WorkingArrays/9Ex/grouping.c @@ -0,0 +1,58 @@ +#include "grouping.h" + +void group(double * array, int length) { + negativeToRight(array, length); + zeroesToCenter(array, length); +} + +void negativeToRight(double * array, int length) { + double temp; + int negative = 0, last_index = length - 1; + + for (int i = 0; i <= last_index - negative; ++i) { + // Так как мы передвигаем каждый отрицательный эл-нт в конец + // То тогда нам не нужно проверять последний эл-нт (т.к. он отрицательный) - поэтому я его пропускаю - -negative + if (array[i] < 0) { + for (int j = length - 2; j >= i; --j) { + // Сначала последний эл-нт копируется в предпоследний, а предпоследний в последний + // Далее каждый следующий j-й элемент заменяется тем, что находится на месте последнего, а последний элемент заменяется на j + // Так шаг за шагов элементы переставляются и наш i-й элемент оказывается на месте последнего (типа ЭП2) + temp = array[j]; + array[j] = array[last_index]; + array[last_index] = temp; + } + + --i, ++negative; + } + } +} + +void zeroesToCenter(double * array, int length) { + // Аналогичный способ перемещения эл-тов, но только не в конец, а в место между отрицательными и положительными числами + double temp; + int zeroes = 0, last_index = 0; + + while (array[last_index] >= 0 && last_index < length) ++last_index; + // last_index < length - очень важен, так как если нет отрицательных чисел, то цикл уёдет в бесконечность + --last_index; // Так как изначально указывает на первый отрицательный элемент, а нам нужен последний положительный + + for (int i = 0; i <= last_index - zeroes; ++i) { + if (fabs(array[i]) < eps) { + for (int j = last_index - 1; j >= i; --j) { + temp = array[j]; + array[j] = array[last_index]; + array[last_index] = temp; + } + + --i, ++zeroes; + } + } +} + + +void printArray(double * array, int length) { + for (int i = 0; i < length; ++i) { + printf("%.2lf ", array[i]); + } + printf("\n"); +} diff --git a/WorkingArrays/9Ex/grouping.h b/WorkingArrays/9Ex/grouping.h new file mode 100644 index 0000000..6e3bf52 --- /dev/null +++ b/WorkingArrays/9Ex/grouping.h @@ -0,0 +1,14 @@ +#ifndef GROUPING +#define GROUPING + +#include +#include + +#define eps 1.e-6 + +void group(double * array, int length); +void negativeToRight(double * array, int length); +void zeroesToCenter(double * array, int length); +void printArray(double * array, int length); + +#endif diff --git a/WorkingArrays/9Ex/input.txt b/WorkingArrays/9Ex/input.txt new file mode 100644 index 0000000..7e3460a --- /dev/null +++ b/WorkingArrays/9Ex/input.txt @@ -0,0 +1 @@ +-1 -2 -3 -4 -5 0 1 2 3 4 5 diff --git a/WorkingArrays/9Ex/main.c b/WorkingArrays/9Ex/main.c new file mode 100644 index 0000000..8949744 --- /dev/null +++ b/WorkingArrays/9Ex/main.c @@ -0,0 +1,27 @@ +#include "tools.h" +#include "grouping.h" + +int main(void) { + FILE * file = getFile(); + double * array; + double * orig_arr; + int length; + + if (file == NULL) return -1; + array = getArray(file); + if (array == NULL) return -2; + length = (int)array[0] - 1; + + orig_arr = array; + array = &array[1]; + + printArray(array, length); + + group(array, length); + + printArray(array, length); + + free(orig_arr); + + return 0; +} diff --git a/WorkingArrays/9Ex/makefile b/WorkingArrays/9Ex/makefile new file mode 100644 index 0000000..556c520 --- /dev/null +++ b/WorkingArrays/9Ex/makefile @@ -0,0 +1,43 @@ +CFLAGS = -mfpmath=sse \ + -fstack-protector-all \ + -W \ + -Wall \ + -Wextra \ + -Wunused \ + -Wcast-align \ + -Werror \ + -pedantic \ + -pedantic-errors \ + -Wfloat-equal \ + -Wpointer-arith \ + -Wformat-security \ + -Wmissing-format-attribute \ + -Wformat=1 \ + -Wwrite-strings \ + -Wcast-align \ + -Wno-long-long \ + -std=gnu99 \ + -Wstrict-prototypes \ + -Wmissing-prototypes \ + -Wmissing-declarations \ + -Wold-style-definition \ + -Wdeclaration-after-statement \ + -Wbad-function-cast \ + -Wnested-externs \ + -O3 \ + -D_DEBUG -g \ + -c + + +all: main.o grouping.o tools.o + gcc main.o grouping.o tools.o -lssp && del *.o + a.exe + +main.o: main.c + gcc $(CFLAGS) main.c + +grouping.o: grouping.c + gcc $(CFLAGS) grouping.c + +tools.o: tools.c + gcc $(CFLAGS) tools.c diff --git a/WorkingArrays/9Ex/tools.c b/WorkingArrays/9Ex/tools.c new file mode 100644 index 0000000..50b7a52 --- /dev/null +++ b/WorkingArrays/9Ex/tools.c @@ -0,0 +1,47 @@ +#include "tools.h" + +FILE * getFile(void) { + char filename[50]; + + printf("Enter file name: "); + if (scanf("%s", filename) == 1) { + FILE * file = fopen(filename, "r"); + if (file == NULL) { + printf("Error file!\n)"); + return NULL; + } else { + return file; + } + } else { + printf("Empty name!\n"); + return NULL; + } +} + +double * getArray(FILE * file) { + int i, size = 2; + double * array = NULL; + double current; + + if (fscanf(file, "%lf", ¤t) != 1) { + printf("File if empty!"); + return array; + } + + array = (double *)malloc(size * sizeof(double)); + + i = 1; + do { + if (i >= size) { + size *= 2; + array = (double *)realloc(array, sizeof(double) * size); + } + array[i] = current; + ++i; + } while (fscanf(file, "%lf", ¤t) == 1); + + array = (double *)realloc(array, sizeof(double) * i); + array[0] = (double)i; + + return array; +} diff --git a/WorkingArrays/9Ex/tools.h b/WorkingArrays/9Ex/tools.h new file mode 100644 index 0000000..9702590 --- /dev/null +++ b/WorkingArrays/9Ex/tools.h @@ -0,0 +1,10 @@ +#ifndef TOOLS +#define TOOLS + +#include +#include + +FILE * getFile(void); +double * getArray(FILE * file); + +#endif