From 91f3acd62d692bbade0e2348905a18398367c05a Mon Sep 17 00:00:00 2001 From: AZEN-SGG Date: Wed, 16 Apr 2025 15:39:17 +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=B8=D1=81=D1=85=D0=BE=D0=B4=D0=BD=D0=B8=D0=BA=D0=B8=20=D0=9C?= =?UTF-8?q?=D0=B0=D1=82=D0=B2=D0=B5=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2025.04.04/asymptotics_test/asymptotics.xlsx | Bin 11715 -> 29930 bytes 2025.04.18/dist/Ulyanov_MT/Makefile | 36 +++++++ 2025.04.18/dist/Ulyanov_MT/array.c | 98 +++++++++++++++++++ 2025.04.18/dist/Ulyanov_MT/array.h | 6 ++ 2025.04.18/dist/Ulyanov_MT/functions.c | 8 ++ 2025.04.18/dist/Ulyanov_MT/functions.h | 3 + 2025.04.18/dist/Ulyanov_MT/io_status.h | 7 ++ 2025.04.18/dist/Ulyanov_MT/task01.c | 95 ++++++++++++++++++ 2025.04.18/dist/Ulyanov_MT/task02.c | 91 +++++++++++++++++ 2025.04.18/dist/Ulyanov_MT/task03.c | 87 ++++++++++++++++ 2025.04.18/dist/Ulyanov_MT/task04.c | 98 +++++++++++++++++++ 2025.04.18/dist/Ulyanov_MT/task05.c | 80 +++++++++++++++ 2025.04.18/dist/Ulyanov_MT/task06.c | 88 +++++++++++++++++ 2025.04.18/dist/Ulyanov_MT/task07.c | 48 +++++++++ 14 files changed, 745 insertions(+) create mode 100644 2025.04.18/dist/Ulyanov_MT/Makefile create mode 100644 2025.04.18/dist/Ulyanov_MT/array.c create mode 100644 2025.04.18/dist/Ulyanov_MT/array.h create mode 100644 2025.04.18/dist/Ulyanov_MT/functions.c create mode 100644 2025.04.18/dist/Ulyanov_MT/functions.h create mode 100644 2025.04.18/dist/Ulyanov_MT/io_status.h create mode 100644 2025.04.18/dist/Ulyanov_MT/task01.c create mode 100644 2025.04.18/dist/Ulyanov_MT/task02.c create mode 100644 2025.04.18/dist/Ulyanov_MT/task03.c create mode 100644 2025.04.18/dist/Ulyanov_MT/task04.c create mode 100644 2025.04.18/dist/Ulyanov_MT/task05.c create mode 100644 2025.04.18/dist/Ulyanov_MT/task06.c create mode 100644 2025.04.18/dist/Ulyanov_MT/task07.c diff --git a/2025.04.04/asymptotics_test/asymptotics.xlsx b/2025.04.04/asymptotics_test/asymptotics.xlsx index 48f80d6a480a076e9163b637584ff84aa95b7736..8ab27931d50709970775b11f5298d794d731fdb1 100644 GIT binary patch literal 29930 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 delta 5840 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 diff --git a/2025.04.18/dist/Ulyanov_MT/Makefile b/2025.04.18/dist/Ulyanov_MT/Makefile new file mode 100644 index 0000000..f90ef27 --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/Makefile @@ -0,0 +1,36 @@ +FLAGS = -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 -Wmaybe-uninitialized -O3 +all: a01.out a02.out a03.out a04.out a05.out a06.out a07.out +a01.out: a01.o array.o functions.o + gcc a01.o array.o functions.o -lm -o a01.out +a02.out: a02.o array.o functions.o + gcc a02.o array.o functions.o -lm -o a02.out +a03.out: a03.o array.o functions.o + gcc a03.o array.o functions.o -lm -o a03.out +a04.out: a04.o array.o functions.o + gcc a04.o array.o functions.o -lm -o a04.out +a05.out: a05.o array.o functions.o + gcc a05.o array.o functions.o -lm -o a05.out +a06.out: a06.o array.o functions.o + gcc a06.o array.o functions.o -lm -o a06.out +a07.out: a07.o array.o functions.o + gcc a07.o array.o functions.o -lm -o a07.out +array.o: + gcc -c $(FLAGS) -o array.o array.c +functions.o: + gcc -c $(FLAGS) -o functions.o functions.c +a01.o: + gcc -c $(FLAGS) -o a01.o task01.c +a02.o: + gcc -c $(FLAGS) -o a02.o task02.c +a03.o: + gcc -c $(FLAGS) -o a03.o task03.c +a04.o: + gcc -c $(FLAGS) -o a04.o task04.c +a05.o: + gcc -c $(FLAGS) -o a05.o task05.c +a06.o: + gcc -c $(FLAGS) -o a06.o task06.c +a07.o: + gcc -c $(FLAGS) -o a07.o task07.c +clean: + rm -f *.o *.out diff --git a/2025.04.18/dist/Ulyanov_MT/array.c b/2025.04.18/dist/Ulyanov_MT/array.c new file mode 100644 index 0000000..64e33f0 --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/array.c @@ -0,0 +1,98 @@ +#include +#include +#include +#include "io_status.h" +#include "array.h" +#include "functions.h" + +io_status read_matrix(double* a, int n, int m, const char* name) + { + int i, j; + FILE* fp; + if (!(fp = fopen(name, "r"))) + return ERROR_OPEN; + for (i = 0; i < n; i++) + { + for (j = 0; j < m; j++) + { + if (fscanf(fp, "%lf", a + i * m + j) != 1) + { + fclose(fp); + return ERROR_READ; + } + } + } + fclose(fp); + return SUCCESS; + } + +io_status read_function(double* x, double* y, int n, const char* name) + { + int i; + FILE* fp; + if (!(fp = fopen(name, "r"))) + return ERROR_OPEN; + for (i = 0; i < n; i++) + { + if ((fscanf(fp, "%lf", x + i) != 1) || (fscanf(fp, "%lf", y + i) != 1)) + { + fclose(fp); + return ERROR_READ; + } + } + fclose(fp); + return SUCCESS; + } + +io_status read_func_diff(double* x, double* yd, int n, const char* name) + { + int i; + FILE* fp; + if (!(fp = fopen(name, "r"))) + return ERROR_OPEN; + for (i = 0; i < n; i++) + { + if ((fscanf(fp, "%lf", x + i) != 1) || (fscanf(fp, "%lf", yd + 2 * i) != 1) || (fscanf(fp, "%lf", yd + 2 * i + 1) != 1)) + { + fclose(fp); + return ERROR_READ; + } + } + fclose(fp); + return SUCCESS; + } + +void print_matrix(const double* a, int n, int m, int p) + { + int np = (n > p ? p : n); + int mp = (m > p ? p : m); + int i, j; + for (i = 0; i < np; i++) + { + for (j = 0; j < mp; j++) + printf(" %10.3e", a[i * m + j]); + printf("\n"); + } + } + +void init_matrix(double* a, int n, int m, int k) + { + int i, j; + for (i = 0; i < n; i++) + { + for (j = 0; j < m; j++) + a[i * m + j] = f(k, n, m, i+1, j+1); + } + } + +double f(int k, int n, int m, int i, int j) + { + switch (k) + { + case 1: return (n >= m ? n : m) - (i >= j ? i : j) + 1; + case 2: return (i >= j ? i : j); + case 3: return (i - j >= 0 ? i - j : j - i); + case 4: return 1./(i + j - 1); + } + return -1e308; + } diff --git a/2025.04.18/dist/Ulyanov_MT/array.h b/2025.04.18/dist/Ulyanov_MT/array.h new file mode 100644 index 0000000..e64dc5a --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/array.h @@ -0,0 +1,6 @@ +io_status read_matrix(double*, int, int, const char*); +io_status read_function(double*, double*, int, const char*); +io_status read_func_diff(double*, double*, int, const char*); +void print_matrix(const double*, int, int, int); +void init_matrix(double*, int, int, int); +double f(int, int, int, int, int); diff --git a/2025.04.18/dist/Ulyanov_MT/functions.c b/2025.04.18/dist/Ulyanov_MT/functions.c new file mode 100644 index 0000000..0eef828 --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/functions.c @@ -0,0 +1,8 @@ +#include +#include "functions.h" + +int equal(double a, double b) + { + if (fabs(a - b) <= EPS * fmax(fabs(a), fabs(b))) return 1; + return 0; + } diff --git a/2025.04.18/dist/Ulyanov_MT/functions.h b/2025.04.18/dist/Ulyanov_MT/functions.h new file mode 100644 index 0000000..25355d0 --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/functions.h @@ -0,0 +1,3 @@ +#define EPS 1e-16 + +int equal(double, double); diff --git a/2025.04.18/dist/Ulyanov_MT/io_status.h b/2025.04.18/dist/Ulyanov_MT/io_status.h new file mode 100644 index 0000000..9ade840 --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/io_status.h @@ -0,0 +1,7 @@ +typedef enum io_status_ + { + SUCCESS, + ERROR_OPEN, + ERROR_READ, + ERROR_FUNCTION, + } io_status; diff --git a/2025.04.18/dist/Ulyanov_MT/task01.c b/2025.04.18/dist/Ulyanov_MT/task01.c new file mode 100644 index 0000000..78f9fee --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/task01.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include "io_status.h" +#include "array.h" +#include "functions.h" + +io_status solve1(double*, double*, double, int, double*); + +int main(int argc, char* argv[]) + { + int task = 1; + io_status ret; + double* x; + double* y; + int n; + double x0; + char* name = 0; + double res; + double t; + if (!((argc == 4) && sscanf(argv[1], "%le", &x0) == 1 && sscanf(argv[2], "%d", &n) == 1)) + { + printf("Usage: %s x0 n file\n", argv[0]); + return 1; + } + name = argv[3]; + x = (double*) malloc(n * sizeof(double)); + y = (double*) malloc(n * sizeof(double)); + if ((!x) || (!y)) + { + printf("Not enough memory\n"); + if (x) free(x); + if (y) free(y); + return 2; + } + ret = read_function(x, y, n, name); + if (ret != SUCCESS) + { + switch(ret) + { + case ERROR_OPEN: + printf("Can not open file %s\n", name); + break; + case ERROR_READ: + printf("Can not read file %s\n", name); + break; + default: + printf("UNknown error in file %s\n", name); + } + free(x); + free(y); + return 3; + } + t = clock(); + ret = solve1(x, y, x0, n, &res); + t = (clock() - t) / CLOCKS_PER_SEC; + if (ret != SUCCESS) + { + printf("Similar points in file %s\n", name); + free(x); + free(y); + return 4; + } + printf ("%s : Task = %d Result = %e Elapsed = %.2f\n", argv[0], task, res, t); + free(x); + free(y); + return 0; + } + +io_status solve1(double* x, double* y, double x0, int n, double* res) + { + int i, j; + double el_i, el_j, mult, sum = 0; + for (i = 0; i < n; i++) + { + mult = 1; + el_i = x[i]; + for (j = 0; j < i; j++) + { + el_j =x[j]; + if (equal(el_i, el_j)) return ERROR_FUNCTION; + mult *= (x0 - el_j) / (el_i - el_j); + } + for (j = i + 1; j < n; j++) + { + el_j =x[j]; + if (equal(el_i, el_j)) return ERROR_FUNCTION; + mult *= (x0 - el_j) / (el_i - el_j); + } + sum += y[i] * mult; + } + *res = sum; + return SUCCESS; + } diff --git a/2025.04.18/dist/Ulyanov_MT/task02.c b/2025.04.18/dist/Ulyanov_MT/task02.c new file mode 100644 index 0000000..a5b006f --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/task02.c @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include "io_status.h" +#include "array.h" +#include "functions.h" + +io_status solve2(double*, double*, double, int, double*); + +int main(int argc, char* argv[]) + { + int task = 2; + io_status ret; + double* x; + double* y; + int n; + double x0; + char* name = 0; + double res; + double t; + if (!((argc == 4) && sscanf(argv[1], "%le", &x0) == 1 && sscanf(argv[2], "%d", &n) == 1)) + { + printf("Usage: %s x0 n file\n", argv[0]); + return 1; + } + name = argv[3]; + x = (double*) malloc(n * sizeof(double)); + y = (double*) malloc(n * sizeof(double)); + if ((!x) || (!y)) + { + printf("Not enough memory\n"); + if (x) free(x); + if (y) free(y); + return 2; + } + ret = read_function(x, y, n, name); + if (ret != SUCCESS) + { + switch(ret) + { + case ERROR_OPEN: + printf("Can not open file %s\n", name); + break; + case ERROR_READ: + printf("Can not read file %s\n", name); + break; + default: + printf("UNknown error in file %s\n", name); + } + free(x); + free(y); + return 3; + } + t = clock(); + ret = solve2(x, y, x0, n, &res); + t = (clock() - t) / CLOCKS_PER_SEC; + if (ret != SUCCESS) + { + printf("Similar points in file %s\n", name); + free(x); + free(y); + return 4; + } + printf ("%s : Task = %d Result = %e Elapsed = %.2f\n", argv[0], task, res, t); + free(x); + free(y); + return 0; + } + +io_status solve2(double* x, double* y, double x0, int n, double* res) + { + int i, j; + double el_n, el_prev, sum = 0; + for (j = 0; j < n; j++) + { + for (i = n - 1; i > j; i--) + { + el_n = x[i]; + el_prev = x[i - j - 1]; + if (equal(el_n, el_prev)) return ERROR_FUNCTION; + y[i] = (y[i] - y[i - 1]) / (el_n - el_prev); + } + } + for (i = n - 1; i >= 0; i--) + { + sum = y[i] + (x0 - x[i]) * sum; + } + *res = sum; + return SUCCESS; + } diff --git a/2025.04.18/dist/Ulyanov_MT/task03.c b/2025.04.18/dist/Ulyanov_MT/task03.c new file mode 100644 index 0000000..7ad7006 --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/task03.c @@ -0,0 +1,87 @@ +#include +#include +#include +#include +#include "io_status.h" +#include "array.h" +#include "functions.h" + +io_status solve3(double*, double*, double, int, double*); + +int main(int argc, char* argv[]) + { + int task = 3; + io_status ret; + double* x; + double* y; + int n; + double x0; + char* name = 0; + double res; + double t; + if (!((argc == 4) && sscanf(argv[1], "%le", &x0) == 1 && sscanf(argv[2], "%d", &n) == 1)) + { + printf("Usage: %s x0 n file\n", argv[0]); + return 1; + } + name = argv[3]; + x = (double*) malloc(n * sizeof(double)); + y = (double*) malloc(n * sizeof(double)); + if ((!x) || (!y)) + { + printf("Not enough memory\n"); + if (x) free(x); + if (y) free(y); + return 2; + } + ret = read_function(x, y, n, name); + if (ret != SUCCESS) + { + switch(ret) + { + case ERROR_OPEN: + printf("Can not open file %s\n", name); + break; + case ERROR_READ: + printf("Can not read file %s\n", name); + break; + default: + printf("UNknown error in file %s\n", name); + } + free(x); + free(y); + return 3; + } + t = clock(); + ret = solve3(x, y, x0, n, &res); + t = (clock() - t) / CLOCKS_PER_SEC; + if (ret != SUCCESS) + { + printf("Similar points in file %s\n", name); + free(x); + free(y); + return 4; + } + printf ("%s : Task = %d Result = %e Elapsed = %.2f\n", argv[0], task, res, t); + free(x); + free(y); + return 0; + } + +io_status solve3(double* x, double* y, double x0, int n, double* res) + { + int i, j; + double el_n, el_prev; + for (j = 0; j < n; j++) + { + for (i = n - 1; i > j; i--) + { + el_n = x[i]; + el_prev = x[i - j - 1]; + if (equal(el_n, el_prev)) return ERROR_FUNCTION; + y[i] = (y[i] * (x0 - el_prev) - y[i - 1] * (x0 - el_n)) / (el_n - el_prev); + } + } + *res = y[n - 1]; + return SUCCESS; + } diff --git a/2025.04.18/dist/Ulyanov_MT/task04.c b/2025.04.18/dist/Ulyanov_MT/task04.c new file mode 100644 index 0000000..be44ec8 --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/task04.c @@ -0,0 +1,98 @@ +#include +#include +#include +#include +#include "io_status.h" +#include "array.h" +#include "functions.h" + +io_status solve4(double*, double*, double, int, double*); + +int main(int argc, char* argv[]) + { + int task = 4; + io_status ret; + double* x; + double* yd; + int n; + double x0; + char* name = 0; + double res; + double t; + if (!((argc == 4) && sscanf(argv[1], "%le", &x0) == 1 && sscanf(argv[2], "%d", &n) == 1)) + { + printf("Usage: %s x0 n file\n", argv[0]); + return 1; + } + name = argv[3]; + x = (double*) malloc(n * sizeof(double)); + yd = (double*) malloc(2 * n * sizeof(double)); + if ((!x) || (!yd)) + { + printf("Not enough memory\n"); + if (x) free(x); + if (yd) free(yd); + return 2; + } + ret = read_func_diff(x, yd, n, name); + if (ret != SUCCESS) + { + switch(ret) + { + case ERROR_OPEN: + printf("Can not open file %s\n", name); + break; + case ERROR_READ: + printf("Can not read file %s\n", name); + break; + default: + printf("UNknown error in file %s\n", name); + } + free(x); + free(yd); + return 3; + } + t = clock(); + ret = solve4(x, yd, x0, n, &res); + t = (clock() - t) / CLOCKS_PER_SEC; + if (ret != SUCCESS) + { + printf("Similar points in file %s\n", name); + free(x); + free(yd); + return 4; + } + printf ("%s : Task = %d Result = %e Elapsed = %.2f\n", argv[0], task, res, t); + free(x); + free(yd); + return 0; + } + +io_status solve4(double* x, double* yd, double x0, int n, double* res) + { + int i, j; + double el_n, el_prev, sum = 0; + for (i = n - 1; i > 0; i--) + { + el_n = x[i]; + el_prev = x[i - 1]; + if (equal(el_n, el_prev)) return ERROR_FUNCTION; + yd[2 * i] = (yd[2 * i] - yd[2 * i - 2]) / (el_n - el_prev); + } + for (j = 1; j < 2 * n; j++) + { + for (i = 2 * n - 1; i > j; i--) + { + el_n = x[i / 2]; + el_prev = x[(i - j - 1) / 2]; + if (equal(el_n, el_prev)) return ERROR_FUNCTION; + yd[i] = (yd[i] - yd[i - 1]) / (el_n - el_prev); + } + } + for (i = 2 * n - 1; i >= 0; i--) + { + sum = yd[i] + (x0 - x[i / 2]) * sum; + } + *res = sum; + return SUCCESS; + } diff --git a/2025.04.18/dist/Ulyanov_MT/task05.c b/2025.04.18/dist/Ulyanov_MT/task05.c new file mode 100644 index 0000000..cbf26b7 --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/task05.c @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include "io_status.h" +#include "array.h" +#include "functions.h" + +double solve5(double, double); + +int main(int argc, char* argv[]) + { + int task = 5; + double x, eps; + double res; + double diff; + double t; + if (!((argc == 3) && sscanf(argv[1], "%le", &x) == 1 && sscanf(argv[2], "%le", &eps) == 1)) + { + printf("Usage: %s x0 eps\n", argv[0]); + return 1; + } + t = clock(); + res = solve5(x, eps); + t = (clock() - t) / CLOCKS_PER_SEC; + diff = fabs(res - sin(x)); + printf ("%s : Task = %d Result = %e Residual = %e Elapsed = %.2f\n", argv[0], task, res, diff, t); + return 0; + } + +double solve5(double x, double eps) + { + int i = 1, sign = 1, flag = 0; + double el, res = 0; + x = fmod(x, 2 * M_PI); + if (x > M_PI) + { + x = x - M_PI; + sign *= -1; + } + if (x < -M_PI) + { + x = x + M_PI; + sign *= -1; + } + if (x > M_PI / 2) x = M_PI - x; + if (x < -M_PI / 2) x = -M_PI - x; + if (x > M_PI / 4) + { + x = M_PI / 2 - x; + flag = 1; + } + if (x < -M_PI / 4) + { + x = -M_PI / 2 - x; + sign *= -1; + flag = 1; + } + if (flag == 0) + { + el = x; + while (fabs(el) >= eps) + { + res += el; + el *= -1 * ((x * x) / (4 * i * i + 2 * i)); + i++; + } + } + else + { + el = 1; + while (fabs(el) >= eps) + { + res += el; + el *= -1 * ((x * x) / (4 * i * i - 2 * i)); + i++; + } + } + return sign * res; + } diff --git a/2025.04.18/dist/Ulyanov_MT/task06.c b/2025.04.18/dist/Ulyanov_MT/task06.c new file mode 100644 index 0000000..6f39bda --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/task06.c @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include "io_status.h" +#include "array.h" +#include "functions.h" + +double solve6(double, double); + +int main(int argc, char* argv[]) + { + int task = 6; + double x, eps; + double res; + double diff; + double t; + if (!((argc == 3) && sscanf(argv[1], "%le", &x) == 1 && sscanf(argv[2], "%le", &eps) == 1)) + { + printf("Usage: %s x0 eps\n", argv[0]); + return 1; + } + t = clock(); + res = solve6(x, eps); + t = (clock() - t) / CLOCKS_PER_SEC; + diff = fabs(res - cos(x)); + printf ("%s : Task = %d Result = %e Residual = %e Elapsed = %.2f\n", argv[0], task, res, diff, t); + return 0; + } + +double solve6(double x, double eps) + { + int i = 1, sign = 1, flag = 1; + double el, res = 0; + x = fmod(x, 2 * M_PI); + if (x > M_PI) + { + x = x - M_PI; + sign *= -1; + } + if (x < -M_PI) + { + x = x + M_PI; + sign *= -1; + } + if (x > M_PI / 2) + { + x = M_PI - x; + sign *= -1; + } + if (x < -M_PI / 2) + { + x = -M_PI - x; + sign *= -1; + } + if (x > M_PI / 4) + { + x = M_PI / 2 - x; + flag = 0; + } + if (x < -M_PI / 4) + { + x = -M_PI / 2 - x; + sign *= -1; + flag = 0; + } + if (flag == 1) + { + el = 1; + while (fabs(el) >= eps) + { + res += el; + el *= -1 * ((x * x) / (4 * i * i - 2 * i)); + i++; + } + } + else + { + el = x; + while (fabs(el) >= eps) + { + res += el; + el *= -1 * ((x * x) / (4 * i * i + 2 * i)); + i++; + } + } + return sign * res; + } diff --git a/2025.04.18/dist/Ulyanov_MT/task07.c b/2025.04.18/dist/Ulyanov_MT/task07.c new file mode 100644 index 0000000..a5e7578 --- /dev/null +++ b/2025.04.18/dist/Ulyanov_MT/task07.c @@ -0,0 +1,48 @@ +#include +#include +#include +#include +#include "io_status.h" +#include "array.h" +#include "functions.h" + +double solve7(double, double); + +int main(int argc, char* argv[]) + { + int task = 7; + double x, eps; + double res; + double diff; + double t; + if (!((argc == 3) && sscanf(argv[1], "%le", &x) == 1 && sscanf(argv[2], "%le", &eps) == 1)) + { + printf("Usage: %s x0 eps\n", argv[0]); + return 1; + } + t = clock(); + res = solve7(x, eps); + t = (clock() - t) / CLOCKS_PER_SEC; + diff = fabs(res - exp(x)); + printf ("%s : Task = %d Result = %e Residual = %e Elapsed = %.2f\n", argv[0], task, res, diff, t); + return 0; + } + +double solve7(double x, double eps) + { + int i = 1, intg; + double mult = 1, el = 1, res = 0; + intg = floor(x); + x = x - intg; + while (fabs(el) >= eps) + { + res += el; + el *= x / i; + i++; + } + for (i = 0; i < intg; i++) + { + mult *= M_E; + } + return mult * res; + }