diff --git a/main/arr_xor/func.c b/main/arr_xor/func.c new file mode 100644 index 0000000..b006750 --- /dev/null +++ b/main/arr_xor/func.c @@ -0,0 +1,115 @@ +#include "head.h" + +void node_print(Node *n) +{ + while (n != NULL) + { + printf("%s\n", n->name); + n = n->next; + } +} + +Node get(Node *node, int n) +{ + int i; + for (i = 0; i < n; i++) + { + node = node->next; + } + return *node; +} + +int len(Node *n) +{ + int res = 0; + while (n != NULL) + { + res++; + n = n->next; + } + return res; +} + +Node *xor_find(Node *n1, Node *n2) +{ + int i, j, f = 0; + Node *res = NULL; + if ((res = malloc(sizeof(Node))) == NULL) + { + printf("could not malloc\n"); + exit(3); + } + + for (i = 0; i < len(n1); i++) + { + Node tmp1 = get(n1, i); + for (j = 0; j < len(n2); j++) + { + Node tmp2 = get(n2, j); + if (strcmp(tmp1.name, tmp2.name) == 0) + { + f = 1; + } + } + if (f == 0) + { + Node tmp = get(n1, i); + res = add_tail(res, tmp.name); + } + f = 0; + } + + for (i = 0; i < len(n2); i++) + { + Node tmp2 = get(n2, i); + for (j = 0; j < len(n1); j++) + { + Node tmp1 = get(n1, j); + if (strcmp(tmp2.name, tmp1.name) == 0) + { + f = 1; + } + } + if (f == 0) + { + Node tmp = get(n2, i); + res = add_tail(res, tmp.name); + } + f = 0; + } + + return res; +} + +Node *add_tail(Node *n, char s[]) +{ + if (n == NULL) + { + if ((n = malloc(sizeof(Node))) == NULL) + { + printf("could not malloc\n"); + exit(1); + } + n->next = NULL; + n->prev = NULL; + memcpy(n->name, s, LEN); + return n; + } + if (!strcmp(n->name, "\0")) + { + memcpy(n->name, s, LEN); + n->next = NULL; + n->prev = NULL; + return n; + } + + Node *res = n; + while (n->next != NULL) + n = n->next; + + Node *tmp = malloc(sizeof(Node)); + memcpy(tmp->name, s, LEN); + tmp->prev = n; + n->next = tmp; + return res; +} diff --git a/main/arr_xor/head.h b/main/arr_xor/head.h new file mode 100644 index 0000000..fdd9b33 --- /dev/null +++ b/main/arr_xor/head.h @@ -0,0 +1,18 @@ +#include +#include +#include +#include + +#define N 3 +#define LEN 3 + +typedef struct Node { + struct Node* next; + struct Node* prev; + char name[LEN]; +} Node; + +void node_print(Node* n); +Node get(Node* node, int n); +Node* xor_find(Node* n1, Node* n2); +Node* add_tail(Node* n, char s[]); \ No newline at end of file diff --git a/main/arr_xor/main.c b/main/arr_xor/main.c new file mode 100644 index 0000000..e425e3c --- /dev/null +++ b/main/arr_xor/main.c @@ -0,0 +1,50 @@ +#include "head.h" + +int main(int argc, char *argv[]) +{ + srand(time(0)); + Node *n1 = NULL; + Node *n2 = NULL; + Node *n3 = NULL; + if ((n1 = malloc(sizeof(Node))) == NULL || + (n2 = malloc(sizeof(Node))) == NULL || + (n3 = malloc(sizeof(Node))) == NULL) + { + printf("Could not malloc\n"); + exit(2); + } + + int i; + for (i = 0; i < N; i++) + { + char s[LEN]; + int j; + + for (j = 0; j < LEN - 1; j++) + s[j] = 'a' + rand() % 2; + s[LEN - 1] = '\0'; + + n1 = add_tail(n1, s); + + for (j = 0; j < LEN - 1; j++) + s[j] = 'a' + rand() % 2; + s[LEN - 1] = '\0'; + n2 = add_tail(n2, s); + } + + printf("Begin arrays:\n"); + node_print(n1); + printf("\n"); + node_print(n2); + + n3 = xor_find(n1, n2); + + printf("\nFinal array:\n"); + node_print(n3); + + free(n1); + free(n2); + free(n3); + + return 0; +} \ No newline at end of file diff --git a/main/arr_xor/xorApp.exe b/main/arr_xor/xorApp.exe new file mode 100644 index 0000000..b0a5c95 Binary files /dev/null and b/main/arr_xor/xorApp.exe differ diff --git a/main/zero_finder/main.c b/main/zero_finder/main.c new file mode 100644 index 0000000..3a96e9f --- /dev/null +++ b/main/zero_finder/main.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include + +double func(double x) + { + return exp(x*5.8) + sin(x+3.5); + } + +int main(int argc, char *argv[]) +{ + srand(time(0)); + + double start = -5.6, finish = -1.0, e = 1e-6, mid = (finish + start) / 2.0; + + if (func(start) * func(finish) > 0) + { + printf("Couldn`t find\n"); + exit(0); + } + + while (fabs(func(mid)) >= e) + { + mid = (finish + start) / 2.0; + if (func(mid) > 0) + { + start = (func(start) > func(finish)) ? mid : start; + finish = (func(start) < func(finish)) ? mid : finish; + } + else + { + start = (func(start) < func(finish)) ? mid : start; + finish = (func(start) > func(finish)) ? mid : finish; + } + } + + printf("Zero: %lF\n", start); + + return 0; +} \ No newline at end of file diff --git a/main/zero_finder/main.exe b/main/zero_finder/main.exe new file mode 100644 index 0000000..20bbd73 Binary files /dev/null and b/main/zero_finder/main.exe differ