diff --git a/PROJECT/func.c b/PROJECT/func.c index 68fa35d..0405b0a 100644 --- a/PROJECT/func.c +++ b/PROJECT/func.c @@ -18,7 +18,7 @@ void find_zero(double *pa, double *pb, double eps, double *px) printf("Текущее приближение: %lf\n", *px); } -void ctrlc_handler(int signum, char *ch) +void ctrlc_handler(int signum) { printf("\nПолучен сигнал Ctrl+C\n"); printf("\nПродолжить поиск корня? (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): \n"); diff --git a/PROJECT/main.c b/PROJECT/main.c index fd93e1f..d1bb21c 100644 --- a/PROJECT/main.c +++ b/PROJECT/main.c @@ -5,16 +5,16 @@ double f(double x); void find_zero(double *pa, double *pb, double eps, double *px); -void ctrlc_handler(int signum, char *ch); -void choose_path(); -void new_row(double *pa, double *pb); +void ctrlc_handler(int signum); +// void choose_path(); +// void new_row(double *pa, double *pb); int main() { double a, b, eps, x, *pa = &a, *pb = &b, *px = &x; char choice, *ch = &choice; struct sigaction sa; - sa.sa_handler = ctrlc_handler(, ch); + sa.sa_handler = ctrlc_handler; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); diff --git a/PROJECT/out_p/prog4 b/PROJECT/out_p/prog4 index fb1721b..9399eaf 100755 Binary files a/PROJECT/out_p/prog4 and b/PROJECT/out_p/prog4 differ diff --git a/Prod_with_G/func.c b/Prod_with_G/func.c new file mode 100644 index 0000000..0405b0a --- /dev/null +++ b/Prod_with_G/func.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include + +double f(double x) +{ + return x * x - 16; +} + +void find_zero(double *pa, double *pb, double eps, double *px) +{ + *px = (*pa + *pb) / 2; // метод деления отрезка пополам + if (f(*pa) * f(*px) < 0) + *pb = *px; + else + *pa = *px; + printf("Текущее приближение: %lf\n", *px); +} + +void ctrlc_handler(int signum) +{ + printf("\nПолучен сигнал Ctrl+C\n"); + printf("\nПродолжить поиск корня? (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): \n"); +} + +// void choose_path() +// { +// char choice = getchar(); +// if(choice == 'A') +// break; +// else if(choice == 'C') +// find_zero() + +// } +// void new_row(double *pa, double *pb); \ No newline at end of file diff --git a/Prod_with_G/main.c b/Prod_with_G/main.c new file mode 100644 index 0000000..d1bb21c --- /dev/null +++ b/Prod_with_G/main.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include + +double f(double x); +void find_zero(double *pa, double *pb, double eps, double *px); +void ctrlc_handler(int signum); +// void choose_path(); +// void new_row(double *pa, double *pb); + +int main() +{ + double a, b, eps, x, *pa = &a, *pb = &b, *px = &x; + char choice, *ch = &choice; + 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); + find_zero(pa, pb, eps, px); + + if (sigaction(SIGINT, &sa, NULL) == -1) + { + perror("sigaction"); + return 1; + } + + printf("Ожидание сигнала Ctrl+C...\n"); + + while (1) + { + sleep(1); + } + + printf("\nКорень уравнения: %lf\n", *px); + printf("Работа программы завершена.\n"); + + return 0; +} diff --git a/try/func.c b/try/func.c new file mode 100644 index 0000000..0405b0a --- /dev/null +++ b/try/func.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include + +double f(double x) +{ + return x * x - 16; +} + +void find_zero(double *pa, double *pb, double eps, double *px) +{ + *px = (*pa + *pb) / 2; // метод деления отрезка пополам + if (f(*pa) * f(*px) < 0) + *pb = *px; + else + *pa = *px; + printf("Текущее приближение: %lf\n", *px); +} + +void ctrlc_handler(int signum) +{ + printf("\nПолучен сигнал Ctrl+C\n"); + printf("\nПродолжить поиск корня? (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): \n"); +} + +// void choose_path() +// { +// char choice = getchar(); +// if(choice == 'A') +// break; +// else if(choice == 'C') +// find_zero() + +// } +// void new_row(double *pa, double *pb); \ No newline at end of file diff --git a/try/out/app b/try/out/app new file mode 100755 index 0000000..47dfc6f Binary files /dev/null and b/try/out/app differ diff --git a/try/out/var b/try/out/var new file mode 100755 index 0000000..fcbbfb8 Binary files /dev/null and b/try/out/var differ diff --git a/try/test2.c b/try/test2.c new file mode 100644 index 0000000..75fad93 --- /dev/null +++ b/try/test2.c @@ -0,0 +1,31 @@ +#include +#include +#include +#include + +double f(double x); +void find_zero(double *pa, double *pb, double eps, double *px); +void ctrlc_handler(int signum); +// void choose_path(); +// void new_row(double *pa, double *pb); + +int main() +{ + double a, b, eps, x, *pa = &a, *pb = &b, *px = &x; + char choice, *ch = &choice; + + printf("Введите интервал [a, b] и точность eps: "); + scanf("%lf %lf %lf", pa, pb, &eps); + find_zero(pa, pb, eps, px); + + printf("Ожидание сигнала Ctrl+C...\n"); + signal(SIGINT, ctrlc_handler); + raise(SIGINT); + // while (1) + // sleep(1); + + printf("\nКорень уравнения: %lf\n", *px); + printf("Работа программы завершена.\n"); + + return 0; +}