1.4 to prod
This commit is contained in:
ada-dmitry
2023-12-08 12:59:45 +03:00
parent fd68d8046e
commit 4e08a3ad71
19 changed files with 636 additions and 11 deletions
+2 -1
View File
@@ -16,7 +16,8 @@
b - ПРАВАЯ граница отрезка, eps > 0 - точность вычисления корня(до 10^-6).
## Замечания
1. Для корректной работы программы, необходимо вводить отрезок, на котором есть лишь один корень.
1. Для корректной работы программы, необходимо вводить отрезок, на котором есть лишь один корень
(это можно проверить благодаря графику).
2. После вызова меню выбора действий (Ctrl+C) можно использовать как верхний регистр, так и нижний.
3. Не рекомендуется бесконечно вызывать Ctrl+C без выбора действия, это может повлечь ошибки
вследствие переполнения памяти.
@@ -10,6 +10,7 @@ extern short method, *mth, sig_flag;
double f(double x);
void ctrlc_handler(int signum);
void ctrlz_handler(int signum);
void choose_path();
void fork_method();
void chord_method();
@@ -17,4 +18,4 @@ void newton_method();
double numerical_derivative(double x);
void exit_777();
void show_grapgh();
void input_diap();
void input_diap();
@@ -2,7 +2,7 @@
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
#include <signal.h>
// #include <signal.h>
#include <termios.h>
#include <stdio_ext.h>
@@ -159,8 +159,9 @@ R - начать поиск на другом отрезке: \n");
if (f(*pa) * f(*pb) > 0)
{
printf("В указанных границах нуля функции не существует.\n");
printf("Нажмите Ctrl+C и поменяйте границы\n");
printf("\nВ указанных границах нуля функции не существует.\n");
printf("Поменяйте границы\n");
choose_path();
}
if (*pa == *pb)
{
@@ -201,6 +202,12 @@ void ctrlc_handler(int signum) // Функция, заменяющая стан
return;
}
void ctrlz_handler(int signum)
{
printf("Аварийное завершение программы, возврат к настройкам по умолчанию...");
exit_777();
}
void exit_777()
{
struct termios term;
@@ -255,7 +262,7 @@ void input_diap()
}
__fpurge(stdin);
printf("Выберите метод вычисления корня:\
printf("Выберите метод вычисления корня и нажмите Enter:\
0 - метод вилки, 1 - метод хорд, 2 - метод касательных\n(По умолчанию: 0): ");
*mth = getchar();
+13 -5
View File
@@ -18,13 +18,21 @@ int main()
pb = &b;
px = &x;
struct sigaction sig; // Инициализация структуры, отвечающей за обработку сигнала.
struct sigaction sig_int, sig_tstp; // Инициализация структуры, отвечающей за обработку сигнала.
// Замена стандартного алгоритма на необходимый для вызова меню действий.
sig.sa_handler = ctrlc_handler;
sig.sa_flags = 0; // Очистка флагов "на всякий случай".
sigemptyset(&sig.sa_mask); // Очистка маски "на всякий случай".
sig_int.sa_handler = ctrlc_handler;
sig_int.sa_flags = 0; // Очистка флагов "на всякий случай".
sigemptyset(&sig_int.sa_mask); // Очистка маски "на всякий случай".
sig_tstp.sa_handler = ctrlz_handler;
sig_tstp.sa_flags = 0;
sigemptyset(&sig_tstp.sa_mask);
if (sigaction(SIGINT, &sig, NULL) == -1) // Обработчик ошибок и инициализация сигнала SIGINT.
if (sigaction(SIGINT, &sig_int, NULL) == -1) // Обработчик ошибок и инициализация сигнала SIGINT.
{
perror("sigaction");
return 1;
}
if (sigaction(SIGTSTP, &sig_tstp, NULL) == -1) // Обработчик ошибок и инициализация сигнала SIGTSTP.
{
perror("sigaction");
return 1;
Binary file not shown.