Полностью сделал задачу 6 на вычислительную геометрию
This commit is contained in:
parent
a08f95aef8
commit
3efd67c703
15 changed files with 570 additions and 60 deletions
1
Session/3Ex/ina.txt
Normal file
1
Session/3Ex/ina.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
1 3 7 8 11
|
||||
1
Session/3Ex/inb.txt
Normal file
1
Session/3Ex/inb.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
-1 5 7 10
|
||||
79
Session/3Ex/main.c
Normal file
79
Session/3Ex/main.c
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#define eps 1.e-6
|
||||
|
||||
double * getArray(FILE * file);
|
||||
int level(double * arr1, int len1, double * arr2, int len2);
|
||||
int contains(double * arr, int len, double num);
|
||||
|
||||
double * getArray(FILE * file) {
|
||||
int size = 2, i = 0;
|
||||
double * arr = (double *)malloc(size * sizeof(double));
|
||||
double current;
|
||||
|
||||
if (arr == NULL) return NULL;
|
||||
|
||||
while (fscanf(file, "%lf", ¤t) == 1) {
|
||||
if (size == (i + 1)) arr = (double *)realloc(arr, (size *= 2) * sizeof(double));
|
||||
arr[++i] = current;
|
||||
}
|
||||
|
||||
arr = (double *)realloc(arr, (i + 1) * sizeof(double));
|
||||
arr[0] = i;
|
||||
|
||||
if (i == 0) return NULL;
|
||||
return arr;
|
||||
}
|
||||
|
||||
int level(double * arr1, int len1, double * arr2, int len2) {
|
||||
double start = 0, end = 0;
|
||||
int count = 0, len = len1 < len2 ? len2 : len1;
|
||||
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (start - arr1[i % len2] > eps || (i == 0)) start = arr2[i % len2];
|
||||
if (arr1[i % len1] - end > eps || i == 0) end = arr1[i % len1];
|
||||
}
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (i < len1) if (arr1[i] - start > -eps && end - arr1[i] > -eps && (contains(arr2, len2, arr1[i]) == 0)) ++count;
|
||||
if (i < len2) if (arr2[i] - start > -eps && end - arr2[i] > -eps) ++count;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
int contains(double * arr, int len, double num) {
|
||||
for (int i = 0; i < len; ++i) if (fabs(arr[i] - num) < eps) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
FILE * file = fopen("ina.txt", "r");
|
||||
double *arr1, *arr2;
|
||||
|
||||
if (file == NULL) return -1;
|
||||
arr1 = getArray(file);
|
||||
if (fclose(file) != 0) return -1;
|
||||
if (arr1 == NULL) return -1;
|
||||
|
||||
file = fopen("inb.txt", "r");
|
||||
if (file == NULL) return -1;
|
||||
arr2 = getArray(file);
|
||||
if (fclose(file) != 0) return -1;
|
||||
if (arr1 == NULL) return -1;
|
||||
|
||||
file = fopen("output.txt", "w");
|
||||
if (file == NULL) return -1;
|
||||
if (fprintf(file, "%d", level(&arr1[1], (int)arr1[0], &arr2[1], (int)arr2[0])) <= 0) {fclose(file); return -1;}
|
||||
if (fclose(file) != 0) return -1;
|
||||
|
||||
free(arr1);
|
||||
free(arr2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
37
Session/3Ex/makefile
Normal file
37
Session/3Ex/makefile
Normal file
|
|
@ -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 \
|
||||
-O3 \
|
||||
-D_DEBUG -g \
|
||||
-c
|
||||
|
||||
all: main.o
|
||||
gcc main.o -lssp && del *.o
|
||||
a.exe
|
||||
|
||||
main.o: main.c
|
||||
gcc $(CFLAGS) main.c
|
||||
|
||||
1
Session/4Ex/ina.txt
Normal file
1
Session/4Ex/ina.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
89 12 65
|
||||
1
Session/4Ex/inb.txt
Normal file
1
Session/4Ex/inb.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
5 4 3 2 1 0
|
||||
93
Session/4Ex/main.c
Normal file
93
Session/4Ex/main.c
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#define eps 1.e-6
|
||||
|
||||
int ctv(const void * unum1, const void * unum2);
|
||||
double * getArray(FILE * file);
|
||||
int isContains(double * arr1, int len1, double * arr2, int len2);
|
||||
int write(const char * str);
|
||||
|
||||
int ctv(const void * unum1, const void * unum2) {
|
||||
double num1 = *(double *)unum1;
|
||||
double num2 = *(double *)unum2;
|
||||
|
||||
if (num1 - num2 > eps) return 1;
|
||||
else if (num2 - num1 > eps) return -1;
|
||||
else return 0;
|
||||
}
|
||||
|
||||
double * getArray(FILE * file) {
|
||||
int size = 2, i = 0;
|
||||
double * arr = (double *)malloc(size * sizeof(double));
|
||||
double current;
|
||||
|
||||
if (arr == NULL) return NULL;
|
||||
|
||||
|
||||
while (fscanf(file, "%lf", ¤t) == 1) {
|
||||
if (size == (i + 1)) {
|
||||
arr = (double *)realloc(arr, (size *= 2) * sizeof(double));
|
||||
if (arr == NULL) return NULL;
|
||||
}
|
||||
arr[++i] = current;
|
||||
}
|
||||
|
||||
arr[0] = i;
|
||||
return arr;
|
||||
}
|
||||
|
||||
int isContains(double * arr1, int len1, double * arr2, int len2) {
|
||||
for (int i = 0, k = 0; i < len2; ++i, ++k) {
|
||||
if (fabs(arr2[i] - arr1[k]) < eps) {
|
||||
if (k + 1 == len1) return 1;
|
||||
} else if (len2 - i <= len1) return 0;
|
||||
else k = -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
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) {
|
||||
FILE * file = fopen("ina.txt", "r");
|
||||
double *arr1, *arr2;
|
||||
|
||||
if (file == NULL) return -1;
|
||||
arr1 = getArray(file);
|
||||
if (arr1 == NULL) {fclose(file); return -1;}
|
||||
if (fclose(file) != 0) return -1;
|
||||
|
||||
file = fopen("inb.txt", "r");
|
||||
if (file == NULL) return -1;
|
||||
arr2 = getArray(file);
|
||||
if (arr2 == NULL) {fclose(file); return -1;}
|
||||
if (fclose(file) != 0) return -1;
|
||||
|
||||
if ((int)arr2[0] < (int)arr1[0]) return -1;
|
||||
|
||||
qsort(&arr1[1], (int)arr1[0], sizeof(double), ctv);
|
||||
qsort(&arr2[1], (int)arr2[0], sizeof(double), ctv);
|
||||
|
||||
if (isContains(&arr1[1], (int)arr1[0], &arr2[1], (int)arr2[0]) == 0) {
|
||||
free(arr1);
|
||||
free(arr2);
|
||||
|
||||
return write("NO");
|
||||
} else {
|
||||
free(arr1);
|
||||
free(arr2);
|
||||
|
||||
return write("YES");
|
||||
}
|
||||
}
|
||||
37
Session/4Ex/makefile
Normal file
37
Session/4Ex/makefile
Normal file
|
|
@ -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 \
|
||||
-O3 \
|
||||
-D_DEBUG -g \
|
||||
-c
|
||||
|
||||
all: main.o
|
||||
gcc main.o -lssp && del *.o
|
||||
a.exe
|
||||
|
||||
main.o: main.c
|
||||
gcc $(CFLAGS) main.c
|
||||
|
||||
70
Session/5Ex/main.c
Normal file
70
Session/5Ex/main.c
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int cmp(const * void unum1, const void * unum2) {
|
||||
double num1 = *(double *)unum1;
|
||||
double num2 = *(double *)unum2;
|
||||
|
||||
if (num1 - num2 > eps) return -1;
|
||||
else if (num2 - num1 > eps) return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
double * getArray(FILE * file) {
|
||||
int size = 2, i = 0;
|
||||
double * arr = (double *)malloc(size * sizeof(double));
|
||||
double current;
|
||||
|
||||
if (arr == NULL) return NULL;
|
||||
|
||||
while (fscanf(file, "%lf", ¤t) == 1) {
|
||||
if (size == i + 1) {
|
||||
arr = (double *)realloc(arr, (size *= 2) * sizeof(double));
|
||||
if (arr == NULL) return NULL;
|
||||
}
|
||||
|
||||
arr[++i] = current;
|
||||
}
|
||||
|
||||
arr[0] = i;
|
||||
return arr;
|
||||
}
|
||||
|
||||
int * compare(double *arr1, int len1, double *arr2, int len2) {
|
||||
int *answer = (int *)malloc(2 * sizeof(int));
|
||||
int len = len1 < len2 ? len1 : len2;
|
||||
|
||||
if (answer == NULL) return NULL;
|
||||
answer[0] = 0, answer[1] = 0;
|
||||
|
||||
for (int i = 0; i < len; ++i) {
|
||||
|
||||
}
|
||||
|
||||
return answer;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
FILE * file = fopen("ina.txt", "r");
|
||||
double *arr1, *arr2;
|
||||
|
||||
if (file == NULL) return -1;
|
||||
arr1 = getArray(file);
|
||||
if (arr1 == NULL) {fclose(file); return -1;}
|
||||
if (fclose(file) != 0) return -1;
|
||||
|
||||
file = fopen("inb.txt", "r");
|
||||
if (file == NULL) return -1;
|
||||
arr2 = getArray(file);
|
||||
if (arr2 == NULL) {fclose(file); return -1;}
|
||||
if (Fclose(file) != 0) return -1;
|
||||
|
||||
qsort(&arr1[1], (int)arr1[0], sizeof(double), cmp);
|
||||
qsort(&arr2[1], (int)arr2[0], sizeof(double), cmp);
|
||||
|
||||
free(arr1);
|
||||
free(arr2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue