From 73c627a29f29edb1e4541b05213e2f557a0f9f99 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Wed, 22 Nov 2023 15:04:18 +0300 Subject: [PATCH] update prod --- DON`T TOUCH/main.c | 201 +++++++++++++++++++++++ {PROJECT => DON`T TOUCH}/out_p/prog1 | Bin {PROJECT => DON`T TOUCH}/out_p/prog2 | Bin DON`T TOUCH/out_p/prog4 | Bin 0 -> 16592 bytes PROJECT/func.c | 36 ----- PROJECT/main.c | 42 ----- PROJECT/out_p/prog4 | Bin 16408 -> 0 bytes Prod_with_G/declare.h | 3 - Prod_with_G/func.c | 33 ---- Prod_with_G/main | Bin 20952 -> 0 bytes Prod_with_G/main.c | 94 +++++++---- Prod_with_G/main_wo_struct.c | 231 +++++++++++++++++++++++++++ Prod_with_G/out_prod/main__app1 | Bin 0 -> 16640 bytes Prod_with_G/out_prod/main_app1 | Bin 16736 -> 16736 bytes 14 files changed, 498 insertions(+), 142 deletions(-) create mode 100644 DON`T TOUCH/main.c rename {PROJECT => DON`T TOUCH}/out_p/prog1 (100%) rename {PROJECT => DON`T TOUCH}/out_p/prog2 (100%) create mode 100755 DON`T TOUCH/out_p/prog4 delete mode 100644 PROJECT/func.c delete mode 100644 PROJECT/main.c delete mode 100755 PROJECT/out_p/prog4 delete mode 100644 Prod_with_G/declare.h delete mode 100644 Prod_with_G/func.c delete mode 100755 Prod_with_G/main create mode 100644 Prod_with_G/main_wo_struct.c create mode 100755 Prod_with_G/out_prod/main__app1 diff --git a/DON`T TOUCH/main.c b/DON`T TOUCH/main.c new file mode 100644 index 0000000..2294c1f --- /dev/null +++ b/DON`T TOUCH/main.c @@ -0,0 +1,201 @@ +#include +#include +#include +#include +#include + +double f(double x); +void find_zero(); +void ctrlc_handler(int signum); +void choose_path(); +// int cnt_root(); + +double a, b, eps, x, *pa = &a, *pb = &b; +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); + + 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; +} + +double f(double x) // Функция обязана быть линейной +{ + return x + x - 16; +} + +void find_zero() +{ + double x; + x = (*pa + *pb) / 2; // метод деления отрезка пополам + if (f(*pa) * f(x) < 0) + *pb = x; + else + *pa = x; + printf("Текущее приближение: %lf\n", x); + + if (fabs(*pb - *pa) < eps) + { + printf("\nКорень уравнения: %lf\n", x); + printf("Работа программы завершена.\n"); + exit(0); + } + else + { + return; + } +} + +void ctrlc_handler(int signum) +{ + printf("\nПолучен сигнал Ctrl+C\n"); + 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(); + } + */ + 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(); +} +/* +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/prog1 b/DON`T TOUCH/out_p/prog1 similarity index 100% rename from PROJECT/out_p/prog1 rename to DON`T TOUCH/out_p/prog1 diff --git a/PROJECT/out_p/prog2 b/DON`T TOUCH/out_p/prog2 similarity index 100% rename from PROJECT/out_p/prog2 rename to DON`T TOUCH/out_p/prog2 diff --git a/DON`T TOUCH/out_p/prog4 b/DON`T TOUCH/out_p/prog4 new file mode 100755 index 0000000000000000000000000000000000000000..d2d1376d752c5066199181c2831789fc9ec8ed80 GIT binary patch literal 16592 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 -#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/PROJECT/main.c b/PROJECT/main.c deleted file mode 100644 index d1bb21c..0000000 --- a/PROJECT/main.c +++ /dev/null @@ -1,42 +0,0 @@ -#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/PROJECT/out_p/prog4 b/PROJECT/out_p/prog4 deleted file mode 100755 index 9399eaf9487862650bf95f27891fdcf31b624ce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16408 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 KM4y3ARR03eP3Hyx diff --git a/Prod_with_G/declare.h b/Prod_with_G/declare.h deleted file mode 100644 index b28b04f..0000000 --- a/Prod_with_G/declare.h +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Prod_with_G/func.c b/Prod_with_G/func.c deleted file mode 100644 index cf1e70d..0000000 --- a/Prod_with_G/func.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "declare.h" - -double f(double x) -{ - return x * x - 16; -} - -void find_zero() -{ - *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 b/Prod_with_G/main deleted file mode 100755 index f14ee7c74c19e2f20b08fd0d112354a03d4de974..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20952 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 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; @@ -160,3 +181,20 @@ 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/Prod_with_G/main_wo_struct.c b/Prod_with_G/main_wo_struct.c new file mode 100644 index 0000000..a2d2d36 --- /dev/null +++ b/Prod_with_G/main_wo_struct.c @@ -0,0 +1,231 @@ +#include +#include +#include +#include +#include + +double f(double x); +void find_zero_x(); +void ctrlc_handler(int signum); +void choose_path(); +// int cnt_root(); + +double a, b, eps, x, *pa = &a, *pb = &b; +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); + + 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_x(); + /* + if (sigaction(SIGINT, &sa, NULL) == -1) + { + perror("sigaction"); + return 1; + } + */ + printf("Ожидание сигнала Ctrl+C...\n"); + signal(SIGINT, ctrlc_handler); + while (1) + { + sleep(1); + } + + return 0; +} + +double f(double x) // Функция обязана быть линейной +{ + return x * x - 16; +} + +void find_zero() +{ + double x; + x = (*pa + *pb) / 2; // метод деления отрезка пополам + if (f(*pa) * f(x) < 0) + *pb = x; + else + *pa = x; + printf("Текущее приближение: %lf\n", x); + + if (fabs(b - a) < eps) + { + printf("\nКорень уравнения: %lf\n", x); + printf("Работа программы завершена.\n"); + exit(0); + } + else + { + return; + } +} + +void ctrlc_handler(int signum) +{ + printf("\nПолучен сигнал Ctrl+C\n"); + 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_x(); + printf("Ожидание сигнала Ctrl+C...\n"); + } + else if (*ch == 'R') + { + printf("Введите новые значения границ a и b: "); + scanf("%lf %lf", pa, pb); + find_zero_x(); + printf("Ожидание сигнала Ctrl+C...\n"); + } + else + { + printf("Ошибка ввода, повторная попытка..."); + choose_path(); + } + */ + printf("\nПродолжить поиск корня?\ + (C - продолжить, A - закончить работу программы, R - начать поиск на другом отрезке): \n"); + do + { + + *ch = getchar(); + switch (*ch) + { + case 'C': + find_zero_x(); + 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_x(); + printf("Ожидание сигнала Ctrl+C...\n"); + return; + } + } while (*ch != 'A' || *ch != 'R' || *ch != 'C'); + 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); + } + } +} +*/ + +void find_zero_x() +{ + float mid = (*pa + *pb) / 2; + mid = (*pb + *pa) / 2; + if (f(mid) > 0) + { + *pa = (f(*pa) > f(*pb)) ? mid : *pa; + *pb = (f(*pa) < f(*pb)) ? mid : *pb; + } + else + { + *pa = (f(*pa) < f(*pb)) ? mid : *pa; + *pb = (f(*pa) > f(*pb)) ? mid : *pb; + } + + printf("Текущее приближение: %lf\n", *pa); + + if (fabs(f(mid)) < eps) + { + printf("\nКорень уравнения: %lf\n", *pa); + printf("Работа программы завершена.\n"); + exit(0); + } + else + { + return; + } +} diff --git a/Prod_with_G/out_prod/main__app1 b/Prod_with_G/out_prod/main__app1 new file mode 100755 index 0000000000000000000000000000000000000000..d1b73d87c477e35a76d012ee83c127a091f05e46 GIT binary patch literal 16640 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 g94CT}LdwFH)mAyC{I)u47iG!DB(P-V_u8|