From f049a601476d05822f2dd69cb0a0025c51bee70d Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Tue, 28 Nov 2023 21:10:51 +0300 Subject: [PATCH] done 1.1 --- Fixed_Project 1.0/main.c | 64 +++++-------- Fixed_Project 1.0/out/app | Bin 0 -> 16632 bytes a.out | 0 test.c | 18 ++++ try/out/test_app1 | Bin 0 -> 16816 bytes try/out/test_app3 | Bin 0 -> 16784 bytes try/test.c | 185 +++++++++++++++++++++++++++----------- try/test3.c | 173 +++++++++++++++++++++++++++++++++++ 8 files changed, 349 insertions(+), 91 deletions(-) create mode 100755 Fixed_Project 1.0/out/app create mode 100755 a.out create mode 100644 test.c create mode 100755 try/out/test_app1 create mode 100755 try/out/test_app3 create mode 100644 try/test3.c diff --git a/Fixed_Project 1.0/main.c b/Fixed_Project 1.0/main.c index 53176cc..c48a132 100644 --- a/Fixed_Project 1.0/main.c +++ b/Fixed_Project 1.0/main.c @@ -4,17 +4,15 @@ #include #include -double a, b, eps, x, *pa = &a, *pb = &b; -char choice, *ch = &choice; +double a, b, eps, x, *pa = &a, *pb = &b, *px = &x; double f(double x); -void find_zero(); void ctrlc_handler(int signum); void choose_path(); double f(double x) // Функция обязана быть линейной { - return x + 4; + return exp(x)-1; } void choose_path() @@ -30,6 +28,7 @@ void choose_path() case 'C': return; case 'A': + printf("\nКорень уравнения: %lf\n", *px); printf("Работа программы завершена.\n"); exit(0); case 'R': @@ -53,8 +52,6 @@ void choose_path() printf("Нажмите Ctrl+C и поменяйте границы\n"); } } - find_zero(); - printf("Ожидание сигнала Ctrl+C...\n"); return; } } while (*ch != 'A' || *ch != 'R' || *ch != 'C'); @@ -64,42 +61,14 @@ void choose_path() void ctrlc_handler(int signum) { - printf("\nПолучен сигнал Ctrl+C\n"); + printf("\nТекущее приближение: %lf\n", *px); 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; + signal(SIGINT, ctrlc_handler); + printf("Введите интервал [a, b] и точность eps: "); scanf("%lf %lf %lf", pa, pb, &eps); @@ -136,10 +105,23 @@ int main(){ } } - find_zero(); + do + { + *px = (*pa + *pb) / 2; // метод деления отрезка пополам + printf("%lf %lf\n", *pa, *pb); + sleep(1); + + if (f(*pa) * f(x) <= 0) + *pb = x; + else if(f(*pb) * f(x) <= 0) + *pa = x; + + + + } while(fabs(*pb - *pa) > eps && f(x) != 0); + + printf("\nКорень уравнения: %lf\n", *px); + printf("Работа программы завершена.\n"); - printf("Ожидание сигнала Ctrl+C...\n"); - signal(SIGINT, ctrlc_handler); - while(1); return 0; } \ No newline at end of file diff --git a/Fixed_Project 1.0/out/app b/Fixed_Project 1.0/out/app new file mode 100755 index 0000000000000000000000000000000000000000..ed8a8d546dcac98cea57f09abe5f6e5e1d22fed3 GIT binary patch literal 16632 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 + +void plus1(int *px) +{ + *px += 1; +} + +int main() +{ + static int x = 5; + static int *px = &x; + plus1(px); + printf('%d %d\n', x, x+1); + + return 0; + + +} \ No newline at end of file diff --git a/try/out/test_app1 b/try/out/test_app1 new file mode 100755 index 0000000000000000000000000000000000000000..f9d135f3e1637fe62bd5aa80b6a342a3aa1e25a1 GIT binary patch literal 16816 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 literal 0 HcmV?d00001 diff --git a/try/out/test_app3 b/try/out/test_app3 new file mode 100755 index 0000000000000000000000000000000000000000..610c22e7a7330d20c20eca7832d31a1e06f64f09 GIT binary patch literal 16784 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 LnC>y~u;RY~n_p3! literal 0 HcmV?d00001 diff --git a/try/test.c b/try/test.c index b4e90ef..bfed2bd 100644 --- a/try/test.c +++ b/try/test.c @@ -1,69 +1,154 @@ #include -#include +#include #include +#include +#include -double f(double x) +double a, b, eps, x, *pa = &a, *pb = &b, *px = &x; +char choice, *ch = &choice; + +double f(double x); +void find_zero(); +void ctrlc_handler(int signum); +void choose_path(); + +double f(double x) // Функция обязана быть линейной { - return x + x - 16; // пример уравнения, замените на свою функцию + return x + 4; +} + +void choose_path() +{ + + printf("\nПродолжить поиск корня?\ + (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): \n"); + do + { + *ch = getchar(); + switch (*ch) + { + case 'C': + 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"); - printf("Продолжить поиск корня? (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): "); - - + choose_path(); + find_zero(); } -void vibor(char *ch) +void find_zero() { - scanf(" %c", ch); - if (*ch == 'A') - { - printf("Работа программы завершена.\n"); - exit(0); - } - else if (*ch == 'R') - { - break; - } -} - -int main() -{ - double a, b, x, eps; - char choice; - - signal(SIGINT, ctrlc_handler); - + signal(SIGINT, ctrlc_handler); do { - printf("Введите интервал [a, b] и точность eps: "); - scanf("%lf %lf %lf", &a, &b, &eps); + *px = (*pa + *pb) / 2; // метод деления отрезка пополам + printf("%lf %lf\n", *pa, *pb); + sleep(10); - do - { - x = (a + b) / 2; // метод деления отрезка пополам - if (f(a) * f(x) < 0) - { - b = x; - } - else - { - a = x; - } - printf("Текущее приближение: %lf\n", x); - // printf("Продолжить вычисления? (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): "); + if (f(*pa) * f(x) < 0) + *pb = x; + else if(f(*pb) * f(x) < 0) + *pa = x; - } while (fabs(b - a) > eps); + printf("Текущее приближение: %lf\n", *px); - if (choice != 'R') - { - printf("Корень уравнения: %lf\n", x); - printf("Работа программы завершена.\n"); - return 0; - } - } while (choice == 'R'); + } while(fabs(*pb - *pa) > eps && f(x) != 0); - return 0; + printf("\nКорень уравнения: %lf\n", *px); + printf("Работа программы завершена.\n"); + return; } + +int main(){ + double tmp; + + struct sigaction sa; + sa.sa_handler = ctrlc_handler; + sa.sa_flags = SA_RESTART; + sigemptyset(&sa.sa_mask); + + 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(); + + if (sigaction(SIGINT, &sa, NULL) == -1) + { + perror("sigaction"); + return 1; + } + + printf("Ожидание сигнала Ctrl+C...\n"); + // signal(SIGINT, ctrlc_handler); + while(1) + { + sleep(1); + } + return 0; +} \ No newline at end of file diff --git a/try/test3.c b/try/test3.c new file mode 100644 index 0000000..0e4fb03 --- /dev/null +++ b/try/test3.c @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include + +double a, b, eps, x, *pa = &a, *pb = &b, *px = &x; +char choice, *ch = &choice; + +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': + return; + case 'A': + printf("\nКорень уравнения: %lf\n", *px); + 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"); + printf("\nТекущее приближение: %lf\n", *px); + choose_path(); + // find_zero(); +} + +// void find_zero() +// { +// //signal(SIGINT, ctrlc_handler); +// do +// { +// *px = (*pa + *pb) / 2; // метод деления отрезка пополам +// printf("%lf %lf\n", *pa, *pb); +// sleep(10); + +// if (f(*pa) * f(x) < 0) +// *pb = x; +// else if(f(*pb) * f(x) < 0) +// *pa = x; + +// printf("Текущее приближение: %lf\n", *px); + +// } while(fabs(*pb - *pa) > eps && f(x) != 0); + +// printf("\nКорень уравнения: %lf\n", *px); +// printf("Работа программы завершена.\n"); +// return; +// } + +int main(){ + double tmp; + + struct sigaction sa; + sa.sa_handler = ctrlc_handler; + sa.sa_flags = SA_RESETHAND; + sigemptyset(&sa.sa_mask); + + 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"); + } + } + + signal(SIGINT, ctrlc_handler); + do + { + *px = (*pa + *pb) / 2; // метод деления отрезка пополам + printf("%lf %lf\n", *pa, *pb); + sleep(1); + + if (f(*pa) * f(x) < 0) + *pb = x; + else if(f(*pb) * f(x) < 0) + *pa = x; + + + + } while(fabs(*pb - *pa) > eps && f(x) != 0); + + printf("\nКорень уравнения: %lf\n", *px); + printf("Работа программы завершена.\n"); + + if (sigaction(SIGINT, &sa, NULL) == -1) + { + perror("sigaction"); + return 1; + } + + // printf("Ожидание сигнала Ctrl+C...\n"); + // signal(SIGINT, ctrlc_handler); + // while(1) + // { + // sleep(1); + // } + return 0; +} \ No newline at end of file