diff --git a/PROJECT/func.c b/PROJECT/func.c index bd525f6..8476242 100644 --- a/PROJECT/func.c +++ b/PROJECT/func.c @@ -3,11 +3,9 @@ #include #include -static wait = 1; - double f(double x) { - return x + x - 16; + return x * x - 16; } void find_zero(double *pa, double *pb, double eps, double *px) @@ -22,15 +20,8 @@ void find_zero(double *pa, double *pb, double eps, double *px) void ctrlc_handler(int signum) { - printf("\nПолучен сигнал Ctrl+C\n"); printf("Продолжить поиск корня? (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): "); - while (getchar() != '\n') - { - printf("listener: stop"); - wait = 0; - _getch(); - } } // void choose_path(char *choice); // void new_row(double *pa, double *pb); \ No newline at end of file diff --git a/PROJECT/main.c b/PROJECT/main.c index 66416cc..8a03173 100644 --- a/PROJECT/main.c +++ b/PROJECT/main.c @@ -1,5 +1,6 @@ #include #include +#include double f(double x); // function x void find_zero(double *pa, double *pb, double eps, double *px); // @@ -11,13 +12,27 @@ int main() { double a, b, eps, x, *pa = &a, *pb = &b, *px = &x; char choice = ' ', *ch = &choice; + sigset_t set; + int sig; printf("Введите интервал [a, b] и точность eps: "); scanf("%lf %lf %lf", pa, pb, &eps); // if (a > b || ) + find_zero(pa, pb, eps, px); + // Создание набора сигналов и добавление в него SIGINT + sigemptyset(&set); + sigaddset(&set, SIGINT); + + // Блокировка SIGINT + sigprocmask(SIG_BLOCK, &set, NULL); + + // Ожидание получения сигнала Ctrl+C с помощью sigwait + sigwait(&set, &sig); + signal(SIGINT, ctrlc_handler); + printf("Корень уравнения: %lf\n", *px); printf("Работа программы завершена.\n"); diff --git a/PROJECT/out_p/prog2 b/PROJECT/out_p/prog2 new file mode 100755 index 0000000..af8efe0 Binary files /dev/null and b/PROJECT/out_p/prog2 differ