From 49b2b840c668c64089936e681192c75a8de2c81c Mon Sep 17 00:00:00 2001 From: justanothercatgirl Date: Fri, 13 Sep 2024 15:03:36 +0300 Subject: iniial commit --- main.c | 72 +++++++++++++++++------------------------------------------------- 1 file changed, 18 insertions(+), 54 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 76afcef..74277f0 100644 --- a/main.c +++ b/main.c @@ -1,59 +1,23 @@ +#include -/* - * Сотов Константин Алексеевич, 117 группа - * sotov@twistea.su +7 914 329 50 01 - * - * Данный код загружает динамическую библиотеку, - * имя которой передано в аргументах командной строки, - * и считает интеграл функции "f", если она есть - * в этой динамической библиотеке. - */ +#define EPSILON 0.001*0.001 +#define MAX_ITERATIONS 100 -#include // printf, scanf -#include // exit -#include // dlopen, dlsym, dlclose +int main(void) { + double x; + double result; + double last_elem; + int i; + + printf("Input a number\n"); + scanf("%lf", &x); + last_elem = result = x; - -// Integrates function f from a to b with steps. -// Uses "naive" and straightforward integration technique -// Assumes a < b -double integral(double (*f)(double), double a, double b, int sums) { - double result = 0; - const double dx = (b-a)/sums; - for (double i = a; i < b; i += dx) - result += dx * f(i); - return result; -} - -int main(int argc, char* argv[]) { - if (argc != 2) { - printf("Недостаточно аргументов. использование:\n" - "%s <путь к динамической библиотеке>\n", argv[0]); - exit(EXIT_FAILURE); - } - // Open the dynamic library - void* handle = dlopen(argv[1], RTLD_NOW); - if (handle == NULL) { - printf("ERROR: %s\n", dlerror()); - exit(EXIT_FAILURE); + for (i = 1; i < MAX_ITERATIONS; ++i) { + last_elem = last_elem * x * x / (2*i * (2*i+1)); + if (last_elem*last_elem <= EPSILON) break; + result += last_elem * ( (i%2 * -2) + 1 ); } - // Locate the function - void* f = dlsym(handle, "f"); - if (f == NULL) { - printf("ERROR: %s", dlerror()); - dlclose(handle); - exit(EXIT_FAILURE); - } - - // Input-output block - const char* fullname - = "Сотов Константин Алексеевич"; - printf("Автор: %s\n", fullname); - double a, b; - puts("Введите нижнюю и верхнюю границы интегрирования через пробел"); - scanf("%lf %lf", &a, &b); - printf("Интеграл f от %lf до %lf = %lf\n", - a, b, integral(f, a, b, 10000)); - - exit(EXIT_SUCCESS); + printf("result = %lf; iterations = %i; last_elem = %lf\n", result, i, last_elem); + return 0; } -- cgit v1.2.3-70-g09d2