diff --git a/.vscode/settings.json b/.vscode/settings.json index cc6fa74..7fe9890 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,4 +5,10 @@ } } +{ + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + } +} diff --git a/Project 1.1.tar.xz b/Archive/Project 1.1.tar.xz similarity index 100% rename from Project 1.1.tar.xz rename to Archive/Project 1.1.tar.xz diff --git a/Archive/Project_Antipenko_1.2.tar.xz b/Archive/Project_Antipenko_1.2.tar.xz new file mode 100644 index 0000000..f0be3d5 Binary files /dev/null and b/Archive/Project_Antipenko_1.2.tar.xz differ diff --git a/Project_1.2/README b/Project_1.2/README index c2a35f9..8c753a4 100644 --- a/Project_1.2/README +++ b/Project_1.2/README @@ -18,15 +18,15 @@ 2. После вызова меню выбора действий (Ctrl+C) можно использовать как верхний регистр, так и нижний. 3. Не рекомендуется бесконечно вызывать Ctrl+C без выбора действия, это может повлечь ошибки вследствие переполнения памяти. -4. ## Обработка сигнала SIGINT -Программа обрабатывает сигнал SIGINT, что позволяет давать пользователю выбор действия при нажатии сочетания клавиш Ctrl+C. + Программа обрабатывает сигнал SIGINT, что позволяет давать пользователю выбор действия +при нажатии сочетания клавиш Ctrl+C. ## Авторы -Антипенко Дмитрий Андреевич - https://github.com/ada-dmitry/ -Кузнецов Даниил Евгеньевич -Никитин Михаил Андреевич -Ускова Екатерина Александровна +Антипенко Дмитрий Андреевич [C22-712] - https://github.com/ada-dmitry/ +Кузнецов Даниил Евгеньевич [C22-712] +Никитин Михаил Андреевич [C22-712] +Ускова Екатерина Александровна [C22-712] diff --git a/Project_1.2/functions.c b/Project_1.2/functions.c index 7a99af2..107ded9 100644 --- a/Project_1.2/functions.c +++ b/Project_1.2/functions.c @@ -6,12 +6,9 @@ #include #include - #include "declare.h" - - -double f(double x) +double f(double x) { return x - 16; } @@ -25,12 +22,12 @@ void fork_method() printf("%lf %lf\n", *pa, *pb); if (f(*pa) * f(x) <= 0) *pb = x; - else if(f(*pb) * f(x) <= 0) + else if (f(*pb) * f(x) <= 0) *pa = x; - + sleep(1); - } while(fabs(*pb - *pa) > eps && f(x) != 0); + } while (fabs(*pb - *pa) > eps && f(x) != 0); return; } @@ -39,15 +36,15 @@ void choose_path() char choice, *ch = &choice; struct termios term; - + // Получение текущих настроек терминала tcgetattr(0, &term); - + // Отключение символа ECHO - //term.c_lflag &= ~ECHO; - + // term.c_lflag &= ~ECHO; + // Применение новых настроек терминала - //tcsetattr(0, TCSANOW, &term); + // tcsetattr(0, TCSANOW, &term); printf("\nПродолжить поиск корня?\n"); __fpurge(stdin); @@ -69,7 +66,7 @@ void choose_path() case 'r': // Включение символа ECHO term.c_lflag |= ECHO; - + // Применение новых настроек терминала tcsetattr(0, TCSANOW, &term); @@ -99,13 +96,12 @@ void choose_path() default: printf("Ошибка ввода, повторная попытка..."); - } - } while (*ch != 'A' || *ch != 'R' || *ch != 'C' || *ch != 'a' || *ch != 'r' || *ch != 'c'); + } while (*ch != 'A' || *ch != 'R' || *ch != 'C' || *ch != 'a' || *ch != 'r' || *ch != 'c'); // Включение символа ECHO term.c_lflag |= ECHO; - + // Применение новых настроек терминала tcsetattr(0, TCSANOW, &term); } diff --git a/Project_1.2/main.c b/Project_1.2/main.c index 611c1bb..6c81150 100644 --- a/Project_1.2/main.c +++ b/Project_1.2/main.c @@ -9,16 +9,18 @@ double a, b, eps, x, *pa, *pb, *px; - -int main(){ +int main() +{ double tmp; - pa = &a; pb = &b; px = &x; - + pa = &a; + pb = &b; + px = &x; + struct sigaction sig; sig.sa_handler = ctrlc_handler; sig.sa_flags = 0; - sigemptyset(&sig.sa_mask); + sigemptyset(&sig.sa_mask); printf("Введите интервал [a, b] и точность eps: "); scanf("%lf %lf %lf", pa, pb, &eps); @@ -27,8 +29,8 @@ int main(){ { perror("sigaction"); return 1; - } - + } + if (*pa > *pb) // Если пользователь перепутал границы { printf("Границы указаны неверно, запуск задачи с исправленным условием\n"); diff --git a/a.out b/a.out deleted file mode 100755 index e69de29..0000000 diff --git a/test.c b/test.c deleted file mode 100644 index 4048f69..0000000 --- a/test.c +++ /dev/null @@ -1,18 +0,0 @@ -#include - -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/README.md b/try/README.md similarity index 100% rename from README.md rename to try/README.md diff --git a/try/a.out b/try/a.out index c29759f..e69de29 100755 Binary files a/try/a.out and b/try/a.out differ diff --git a/try/test.c b/try/test.c index bfed2bd..4048f69 100644 --- a/try/test.c +++ b/try/test.c @@ -1,154 +1,18 @@ #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) // Функция обязана быть линейной +void plus1(int *px) { - return x + 4; + *px += 1; } -void choose_path() +int main() { + static int x = 5; + static int *px = &x; + plus1(px); + printf('%d %d\n', x, x+1); - 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"); - 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_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