From 19e0da8dc6d9bfe938663206f851d6b00bbfe360 Mon Sep 17 00:00:00 2001 From: AZEN-SGG Date: Wed, 11 Dec 2024 18:04:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=B2=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20?= =?UTF-8?q?=D0=BA=20=D0=90=D0=B2=D1=82=D0=BE=D1=82=D0=B5=D1=81=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +- Session/1Ex/ina.txt | 1 + Session/1Ex/inb.txt | 1 + Session/1Ex/main.c | 117 +++++++++++++++++++++++++++++++++++++++++++ Session/1Ex/makefile | 37 ++++++++++++++ Session/2Ex/ina.txt | 1 + Session/2Ex/inb.txt | 1 + Session/2Ex/main.c | 96 +++++++++++++++++++++++++++++++++++ Session/2Ex/makefile | 37 ++++++++++++++ 9 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 Session/1Ex/ina.txt create mode 100644 Session/1Ex/inb.txt create mode 100644 Session/1Ex/main.c create mode 100644 Session/1Ex/makefile create mode 100644 Session/2Ex/ina.txt create mode 100644 Session/2Ex/inb.txt create mode 100644 Session/2Ex/main.c create mode 100644 Session/2Ex/makefile diff --git a/.gitignore b/.gitignore index 12097e4..c74296f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,7 @@ *.exe *~ *.out -.*.sw* \ No newline at end of file +.*.sw* +*.zip +*.rar +*output* \ No newline at end of file diff --git a/Session/1Ex/ina.txt b/Session/1Ex/ina.txt new file mode 100644 index 0000000..d126bba --- /dev/null +++ b/Session/1Ex/ina.txt @@ -0,0 +1 @@ +1 2 3 4 5 6 7 \ No newline at end of file diff --git a/Session/1Ex/inb.txt b/Session/1Ex/inb.txt new file mode 100644 index 0000000..f00a656 --- /dev/null +++ b/Session/1Ex/inb.txt @@ -0,0 +1 @@ +2 3 4 6 7 \ No newline at end of file diff --git a/Session/1Ex/main.c b/Session/1Ex/main.c new file mode 100644 index 0000000..895cf37 --- /dev/null +++ b/Session/1Ex/main.c @@ -0,0 +1,117 @@ +#include +#include +#include + +typedef struct { + double * arr; + int len; +} arr; + +#define exp 1.e-6 + +FILE * getFile(const char * name); +arr getArray(FILE * file); +bool compare(arr first, arr second); +int max(int f, int s); +int min(int f, int s); +int write(const char * str); + + +FILE * getFile(const char * name) { + FILE * file = fopen(name, "r"); + return file; +} + + +arr getArray(FILE * file) { + int size = 2, len = 0; + double * array = (double *)malloc(size * sizeof(double)); + double current; + + if (fscanf(file, "%lf", ¤t) != 1) return (arr){NULL, -1}; + + do { + if (++len > size) { + size *= 2; + array = (double *)realloc(array, size * sizeof(double)); + } + + array[len - 1] = current; + } while (fscanf(file, "%lf", ¤t) == 1); + + return (arr){array, len}; +} + +bool compare(arr first, arr second) { + int len = min(first.len, second.len); + double maximf = 0, maxims = 0; + + for (int i = 0; i < len; ++i) { + if (first.arr[i] - second.arr[i] > -exp) return false; + maximf = max(maximf, first.arr[i]); + maxims = max(maxims, second.arr[i]); + } + + if (first.len > second.len) { + for (int i = len; i < first.len; ++i) { + if (first.arr[i] - maxims > -exp) return false; + } + } else { + for (int i = len; i < second.len; ++i) { + if (maximf - second.arr[i] > -exp) return false; + } + } + + return true; +} + + +int min(int f, int s) { + if (f > s) return s; + return f; +} + +int max(int f, int s) { + if (f < s) return s; + return f; +} + +int write(const char * str) { + FILE * file = fopen("output.txt", "w"); + if (file == NULL) return -1; + + if (fprintf(file, "%s", str) < 1) { + fclose(file); + return -1; + } + + if (fclose(file) != 0) return -1; + + return 0; +} + +int main(void) { + arr arr1, arr2; + FILE * file; + bool answer; + + file = getFile("ina.txt"); + if (file == NULL) return -1; + arr1 = getArray(file); + if (fclose(file) != 0) return -1; + if (arr1.arr == NULL) return -1; + + + + file = getFile("inb.txt"); + if (file == NULL) return -1; + arr2 = getArray(file); + if (fclose(file) != 0) return -1; + if (arr2.arr == NULL) return -1; + + answer = compare(arr1, arr2); + + if (answer) return write("YES"); + else return write("NO"); +} + diff --git a/Session/1Ex/makefile b/Session/1Ex/makefile new file mode 100644 index 0000000..5878e2b --- /dev/null +++ b/Session/1Ex/makefile @@ -0,0 +1,37 @@ +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 \ + -O2 \ + -D_DEBUG -g \ + -c + +all: main.o + gcc main.o -lssp && del *.o + a.exe + +main.o: main.c + gcc $(CFLAGS) main.c + diff --git a/Session/2Ex/ina.txt b/Session/2Ex/ina.txt new file mode 100644 index 0000000..7e92570 --- /dev/null +++ b/Session/2Ex/ina.txt @@ -0,0 +1 @@ +1 2 3 4 5 \ No newline at end of file diff --git a/Session/2Ex/inb.txt b/Session/2Ex/inb.txt new file mode 100644 index 0000000..f9affbd --- /dev/null +++ b/Session/2Ex/inb.txt @@ -0,0 +1 @@ +1 2 3 5 6 \ No newline at end of file diff --git a/Session/2Ex/main.c b/Session/2Ex/main.c new file mode 100644 index 0000000..da5694a --- /dev/null +++ b/Session/2Ex/main.c @@ -0,0 +1,96 @@ +#include +#include +#include + +#define exp 1.e-6 + +typedef struct { + double * arr; + int len; +} array; + +int min(int f, int s); +FILE * getFile(const char * name); +array getArray(FILE * file); +bool compare(array first, array second); +int write(const char * str); + +int min(int f, int s) { + if (f > s) return s; + return f; +} + +FILE * getFile(const char * name) { + FILE * file = fopen(name, "r"); + return file; +} + +array getArray(FILE * file) { + int size = 2, len = 0; + double * arr = (double *)malloc(size * sizeof(double)); + double current; + + if (fscanf(file, "%lf", ¤t) != 1) return (array){NULL, -1}; + + do { + if (++len > size) { + size *= 2; + arr = (double *)realloc(arr, size * sizeof(double)); + } + + arr[len - 1] = current; + } while (fscanf(file, "%lf", ¤t) == 1); + + return (array){arr, len}; +} + +bool compare(array first, array second) { + int count = 0; + + for (int i = 0; i < min(first.len, second.len); ++i) { + if (first.arr[i] - second.arr[i] > -exp) --count; + else ++count; + } + + if (count > 0) return true; + else return false; +} + +int write(const char * str) { + FILE * file = fopen("output.txt", "w"); + + if (file == NULL) return -1; + + if (fprintf(file, "%s", str) < 1) { + fclose(file); + return -1; + } + + if (fclose(file) != 0) return -1; + + return 0; +} + + +int main(void) { + array arr1, arr2; + FILE * file; + bool answer; + + file = getFile("ina.txt"); + if (file == NULL) return -1; + arr1 = getArray(file); + if (fclose(file) != 0) return -1; + if (arr1.arr == NULL) return -1; + + file = getFile("inb.txt"); + if (file == NULL) return -1; + arr2 = getArray(file); + if (fclose(file) != 0) return -1; + if (arr2.arr == NULL) return -1; + + answer = compare(arr1, arr2); + + if (answer) return write("YES"); + else return write("NO"); +} diff --git a/Session/2Ex/makefile b/Session/2Ex/makefile new file mode 100644 index 0000000..5878e2b --- /dev/null +++ b/Session/2Ex/makefile @@ -0,0 +1,37 @@ +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 \ + -O2 \ + -D_DEBUG -g \ + -c + +all: main.o + gcc main.o -lssp && del *.o + a.exe + +main.o: main.c + gcc $(CFLAGS) main.c +