From b5ac165fdbb122ad94ba7f894875b0dc1fa4b0f7 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Fri, 24 Nov 2023 18:24:48 +0300 Subject: [PATCH] added --- Fixed_Project 1.0/main.c | 148 +++++++++++++++++++++++++++++++++++++++ Project/main.c | 75 +++----------------- Project/out_p/app_done | Bin 0 -> 16576 bytes Project/out_p/app_test | Bin 0 -> 16592 bytes 4 files changed, 157 insertions(+), 66 deletions(-) create mode 100644 Fixed_Project 1.0/main.c create mode 100755 Project/out_p/app_done create mode 100755 Project/out_p/app_test diff --git a/Fixed_Project 1.0/main.c b/Fixed_Project 1.0/main.c new file mode 100644 index 0000000..99d0d45 --- /dev/null +++ b/Fixed_Project 1.0/main.c @@ -0,0 +1,148 @@ +#include +#include +#include +#include +#include + +double a, b, eps, x, *pa = &a, *pb = &b; +char ch, *pch = &ch; + +double f(double x); +void find_zero(); +void ctrlc_handler(int signum); +void choose_path(); + +double f(double x) // Функция обязана быть линейной +{ + return x + 4; +} + +void choose_path() +{ + printf("\nПродолжить поиск корня?\ + (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): \n"); + do + { + *ch = getchar(); + switch (*ch) + { + case 'C': + // find_zero(); + //printf("Ожидание сигнала Ctrl+C...\n"); + return; + case 'A': + printf("Работа программы завершена.\n"); + exit(0); + case 'R': + printf("Введите новые значения границ a и b: "); + scanf("%lf %lf", pa, pb); + if (f(*pa) * f(*pb) > 0) + { + printf("В указанных границах нуля функции не существует.\n"); + printf("Нажмите Ctrl+C и поменяйте границы\n"); + } + if (*pa == *pb) + { + if (f(*pa) == 0) + { + printf("\nКорень уравнения: %lf\n", *pa); + printf("Работа программы завершена.\n"); + exit(0); + } + else + { + printf("Нажмите Ctrl+C и поменяйте границы\n"); + } + } + find_zero(); + printf("Ожидание сигнала Ctrl+C...\n"); + return; + } + } while (*ch != 'A' || *ch != 'R' || *ch != 'C'); + printf("Ошибка ввода, повторная попытка..."); + choose_path(); +} + +void ctrlc_handler(int signum) +{ + printf("\nПолучен сигнал Ctrl+C\n"); + choose_path(); + find_zero(); +} + +void find_zero() +{ + double x; + x = (*pa + *pb) / 2; // метод деления отрезка пополам + while(fabs(*pb - *pa) > eps || f(x) != 0){ + printf("%lf %lf", *pa, *pb); + sleep(2); + + if (f(*pa) * f(x) < 0) + *pb = x; + else if(f(*pb) * f(x) < 0) + *pb = x; + + printf("Текущее приближение: %lf\n", x); + + if(f(x) <= eps) + { + printf("\nКорень уравнения: %lf\n", x); + printf("Работа программы завершена.\n"); + exit(0); + } + + x = (*pa + *pb) / 2; // метод деления отрезка пополам + } + printf("\nКорень уравнения: %lf\n", x); + printf("Работа программы завершена.\n"); + exit(0); +} + + + +int main(){ + double tmp; + printf("Введите интервал [a, b] и точность eps: "); + scanf("%lf %lf %lf", pa, pb, &eps); + + if (*pa > *pb) // Если пользователь перепутал границы + { + printf("Границы указаны неверно, запуск задачи с исправленным условием\n"); + tmp = *pa; + *pa = *pb; + *pb = tmp; + } + + if (f(*pa) * f(*pb) > 0) + { + printf("В указанных границах нуля функции не существует.\n"); + printf("Нажмите Ctrl+C и поменяйте границы\n"); + } + if (eps < 0) // Если пользователь указал отрицательную точность + { + eps = eps * (-1); + printf("Точность отрицательна, условие приведено в порядок, запуск решения...\n"); + } + + if (*pa == *pb) + { + if (f(*pa) == 0) + { + printf("\nКорень уравнения: %lf\n", *pa); + printf("Работа программы завершена.\n"); + exit(0); + } + else + { + printf("Нажмите Ctrl+C и поменяйте границы\n"); + } + } + + find_zero(); + + printf("Ожидание сигнала Ctrl+C...\n"); + signal(SIGINT, ctrlc_handler); + while(1); + return 0; +} \ No newline at end of file diff --git a/Project/main.c b/Project/main.c index 2294c1f..7fca5c1 100644 --- a/Project/main.c +++ b/Project/main.c @@ -11,17 +11,12 @@ void choose_path(); // int cnt_root(); double a, b, eps, x, *pa = &a, *pb = &b; -char choice, *ch = &choice; +// char choice, *ch = &choice; int main() { double tmp; - /* - struct sigaction sa; - sa.sa_handler = ctrlc_handler; - sa.sa_flags = 0; - sigemptyset(&sa.sa_mask); - */ + printf("Введите интервал [a, b] и точность eps: "); scanf("%lf %lf %lf", pa, pb, &eps); @@ -57,13 +52,6 @@ int main() } find_zero(); - /* - if (sigaction(SIGINT, &sa, NULL) == -1) - { - perror("sigaction"); - return 1; - } - */ printf("Ожидание сигнала Ctrl+C...\n"); signal(SIGINT, ctrlc_handler); while (1) @@ -80,15 +68,14 @@ double f(double x) // Функция обязана быть линейной } void find_zero() -{ - double x; +{ + double x; x = (*pa + *pb) / 2; // метод деления отрезка пополам if (f(*pa) * f(x) < 0) *pb = x; else *pa = x; - printf("Текущее приближение: %lf\n", x); - + printf("Текущее приближение: %lf\n", x); if (fabs(*pb - *pa) < eps) { printf("\nКорень уравнения: %lf\n", x); @@ -104,50 +91,22 @@ void find_zero() void ctrlc_handler(int signum) { printf("\nПолучен сигнал Ctrl+C\n"); + find_zero(); choose_path(); } void choose_path() { - /* - printf("\nПродолжить поиск корня? (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): \n"); - choice = 'Q'; - *ch = getchar(); - - if (*ch == 'A') - { - printf("Работа программы завершена.\n"); - exit(0); - } - - else if (*ch == 'C') - { - find_zero(); - printf("Ожидание сигнала Ctrl+C...\n"); - } - else if (*ch == 'R') - { - printf("Введите новые значения границ a и b: "); - scanf("%lf %lf", pa, pb); - find_zero(); - printf("Ожидание сигнала Ctrl+C...\n"); - } - else - { - printf("Ошибка ввода, повторная попытка..."); - choose_path(); - } - */ + char choice, *ch = &choice; printf("\nПродолжить поиск корня?\ (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): \n"); do { - *ch = getchar(); switch (*ch) { case 'C': - find_zero(); + // find_zero(); printf("Ожидание сигнала Ctrl+C...\n"); return; case 'A': @@ -182,20 +141,4 @@ void choose_path() printf("Ошибка ввода, повторная попытка..."); choose_path(); } -/* -int cnt_root() -{ - if (fabs(*pb - *pa) < eps) - return (f(*pa) * f(*pb) <= 0) ? 1 : 0; - else - { - double m = (*pa + *pb) / 2; - if(f(*pa)*f(m)<=0) - { - return cnt_root(*pa, m); - } else { - return cnt_root(m, *pb); - } - } -} -*/ \ No newline at end of file + diff --git a/Project/out_p/app_done b/Project/out_p/app_done new file mode 100755 index 0000000000000000000000000000000000000000..b0698dcb70a513d46823a6f4ea1f5bbdef1b92f9 GIT binary patch literal 16576 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 C`n)#) literal 0 HcmV?d00001 diff --git a/Project/out_p/app_test b/Project/out_p/app_test new file mode 100755 index 0000000000000000000000000000000000000000..6d51bf2e619ce98b5baa837bfd75ca507ed81943 GIT binary patch literal 16592 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