diff --git a/Test/main.c b/Test/main.c deleted file mode 100644 index 26a02c6..0000000 --- a/Test/main.c +++ /dev/null @@ -1,104 +0,0 @@ -#include -#include -#include -#include -#include - -#include "declare.h" - -double a, b, eps, x, *pa, *pb, *px; -short method, *mth, sig_flag; - -int main() -{ - double tmp; - sig_flag = 0; - method = 0; - mth = &method; - pa = &a; - pb = &b; - px = &x; - - struct sigaction sig; // Инициализация структуры, отвечающей за обработку сигнала. - // Замена стандартного алгоритма на необходимый для вызова меню действий. - sig.sa_handler = ctrlc_handler; - sig.sa_flags = 0; // Очистка флагов "на всякий случай". - sigemptyset(&sig.sa_mask); // Очистка маски "на всякий случай". - - if (sigaction(SIGINT, &sig, NULL) == -1) // Обработчик ошибок и инициализация сигнала SIGINT. - { - perror("sigaction"); - return 1; - } - - show_grapgh(); - - printf("Введите интервал [a, b] и точность eps и нажмите Enter: "); - scanf("%lf %lf %lf", pa, pb, &eps); - - __fpurge(stdin); - printf("Выберите метод вычисления корня:\ - 0 - метод вилки, 1 - метод хорд, 2 - метод касательных\n(По умолчанию: 0): "); - *mth = getchar(); - - 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_777(); - } - else - { - printf("Нажмите Ctrl+C и поменяйте границы\n"); - } - } - - if (*mth == 0) - { - printf("Fork\n"); - fork_method(); - } - else if (*mth == 1) - { - printf("Chord\n"); - chord_method(); - } - else if (*mth == 2) - { - printf("Newton\n"); - newton_method(); - } - else - { - printf("Fork\n"); - fork_method(); - } - - printf("\nКорень уравнения: %lf\n", *px); - printf("Работа программы завершена.\n"); - - return 0; -} - -// MEEEEEEEOW \ No newline at end of file diff --git a/Test/out/function_zeros_calculator b/Test/out/function_zeros_calculator deleted file mode 100755 index d82de89..0000000 Binary files a/Test/out/function_zeros_calculator and /dev/null differ diff --git a/Archive/Project 1.1.tar.xz b/archive/Project 1.1.tar.xz similarity index 100% rename from Archive/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 similarity index 100% rename from Archive/Project_Antipenko_1.2.tar.xz rename to archive/Project_Antipenko_1.2.tar.xz diff --git a/Project_1.2/Makefile b/project/ver1.2/Makefile similarity index 100% rename from Project_1.2/Makefile rename to project/ver1.2/Makefile diff --git a/Project_1.2/README b/project/ver1.2/README similarity index 100% rename from Project_1.2/README rename to project/ver1.2/README diff --git a/Project_1.2/declare.h b/project/ver1.2/declare.h similarity index 100% rename from Project_1.2/declare.h rename to project/ver1.2/declare.h diff --git a/Project_1.2/functions.c b/project/ver1.2/functions.c similarity index 100% rename from Project_1.2/functions.c rename to project/ver1.2/functions.c diff --git a/Project_1.2/main.c b/project/ver1.2/main.c similarity index 100% rename from Project_1.2/main.c rename to project/ver1.2/main.c diff --git a/Project_1.2/out/function_zeros_calculator b/project/ver1.2/out/function_zeros_calculator similarity index 100% rename from Project_1.2/out/function_zeros_calculator rename to project/ver1.2/out/function_zeros_calculator diff --git a/Project_1.3/Makefile b/project/ver1.3/Makefile similarity index 100% rename from Project_1.3/Makefile rename to project/ver1.3/Makefile diff --git a/Project_1.3/README b/project/ver1.3/README similarity index 100% rename from Project_1.3/README rename to project/ver1.3/README diff --git a/Project_1.3/declare.h b/project/ver1.3/declare.h similarity index 100% rename from Project_1.3/declare.h rename to project/ver1.3/declare.h diff --git a/Project_1.3/functions.c b/project/ver1.3/functions.c similarity index 100% rename from Project_1.3/functions.c rename to project/ver1.3/functions.c diff --git a/Project_1.3/main.c b/project/ver1.3/main.c similarity index 100% rename from Project_1.3/main.c rename to project/ver1.3/main.c diff --git a/Project_1.3/out/function_zeros_calculator b/project/ver1.3/out/function_zeros_calculator similarity index 100% rename from Project_1.3/out/function_zeros_calculator rename to project/ver1.3/out/function_zeros_calculator diff --git a/Test/Makefile b/test/ver1.4/Makefile similarity index 95% rename from Test/Makefile rename to test/ver1.4/Makefile index 9c762be..92fa3cb 100644 --- a/Test/Makefile +++ b/test/ver1.4/Makefile @@ -6,7 +6,7 @@ CFLAGS= -c -Wall default: build general: main.o functions.o - + killall -9 function_zeros_calculator $(CC) ./out/main.o ./out/functions.o -o ./out/function_zeros_calculator -lm main.o: main.c diff --git a/Test/README b/test/ver1.4/README similarity index 92% rename from Test/README rename to test/ver1.4/README index 6a1c669..50a1fba 100644 --- a/Test/README +++ b/test/ver1.4/README @@ -8,6 +8,8 @@ 2. Перейдите в каталог проекта: cd /Project_1.2 ## Использование +0. Для нормальной работы программы необходимо установить программу GNU PLot + (sudo apt install gnuplot) 1. Соберите программу: make 2. Запустите программу: ./out/function_zeros_calculator 3. Введите необходимые параметры для вычисления нуля функции: a - ЛЕВАЯ граница отрезка diff --git a/Test/declare.h b/test/ver1.4/declare.h similarity index 84% rename from Test/declare.h rename to test/ver1.4/declare.h index fbda3e6..67eda93 100644 --- a/Test/declare.h +++ b/test/ver1.4/declare.h @@ -4,6 +4,9 @@ extern short method, *mth, sig_flag; // Декларирование глобальных переменных, // как внешних для последующего использования их во всей программе. #define H 0.000001 +#define A -10000 +#define B 10000 +#define EPS 0.001 double f(double x); void ctrlc_handler(int signum); @@ -13,4 +16,5 @@ void chord_method(); void newton_method(); double numerical_derivative(double x); void exit_777(); -void show_grapgh(); \ No newline at end of file +void show_grapgh(); +void input_diap(); \ No newline at end of file diff --git a/Test/functions.c b/test/ver1.4/functions.c similarity index 64% rename from Test/functions.c rename to test/ver1.4/functions.c index fa79e56..46ee0ff 100644 --- a/Test/functions.c +++ b/test/ver1.4/functions.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -14,13 +15,15 @@ double f(double x) // Функция, заданная пользователе void show_grapgh() { - struct termios term; + struct termios old_term, new_term; - tcgetattr(STDIN_FILENO, &term); - term.c_lflag &= ~(ECHO | ICANON); - tcsetattr(STDIN_FILENO, TCSANOW, &term); + tcgetattr(STDIN_FILENO, &old_term); + new_term = old_term; + new_term.c_lflag &= ~(ECHO | ICANON); + tcsetattr(STDIN_FILENO, TCSANOW, &new_term); char func[100] = "x - 125"; + // Подключение GNU Plot FILE *gp = popen("gnuplot -persist", "w"); @@ -33,11 +36,12 @@ void show_grapgh() fprintf(gp, "set yrange [0:500]\n"); fprintf(gp, "plot %s\n", func); fflush(gp); // очищение буфера вывода - printf("Введите любую букву, чтобы продолжить...\n"); + sig_flag = 1; + printf("Нажмите любую клавишу, чтобы продолжить...\n"); getchar(); + sig_flag = 0; fprintf(gp, "exit\n"); - term.c_lflag |= (ECHO | ICANON); - tcsetattr(STDIN_FILENO, TCSANOW, &term); + tcsetattr(STDIN_FILENO, TCSANOW, &old_term); return; } @@ -117,11 +121,11 @@ void choose_path() // Функция выбора действия после в tcgetattr(0, &default_term); modif_term = default_term; // Отключение символа ECHO - modif_term.c_lflag &= ~ECHO; + modif_term.c_lflag &= ~(ECHO | ICANON); // Применение новых настроек терминала tcsetattr(0, TCSANOW, &modif_term); - printf("\nПродолжить поиск корня? Напечатайте букву и нажмите Enter\n"); + printf("\nПродолжить поиск корня?\n"); printf("\nC - продолжить, A - закончить работу программы, \ R - начать поиск на другом отрезке: \n"); @@ -129,8 +133,8 @@ R - начать поиск на другом отрезке: \n"); { // Очистка стандартного потока ввода от "лишних" __fpurge(stdin); - scanf("%c", &choice); // Запись буквы, введенной пользователем в переменную choice. - + choice = getchar(); + // scanf("%c", &choice); // Запись буквы, введенной пользователем в переменную choice. switch (choice) { case 'C': // Выбор вида "Продолжить вычисление". @@ -146,7 +150,6 @@ R - начать поиск на другом отрезке: \n"); case 'R': // Выбор вида "Продолжить вычисления с новым отрезком". case 'r': - // Возврат к обычному выводу tcsetattr(0, TCSANOW, &default_term); @@ -174,7 +177,6 @@ R - начать поиск на другом отрезке: \n"); } sig_flag = 0; - __fpurge(stdin); return; default: @@ -207,3 +209,90 @@ void exit_777() tcsetattr(0, TCSANOW, &term); exit(1); } + +void input_diap() +{ + double tmp; + char input[50]; + sig_flag = 1; + printf("\nПоочередно вводите через Enter: левую границу, правую и точность\n\ +(или нажимайте Enter для значений по умолчанию: -10000/10000/0.0001): "); + + // printf("Введите левую границу отрезка (или нажмите Enter для значения по умолчанию): "); + fgets(input, sizeof(input), stdin); + + if (input[0] == '\n') + { + *pa = A; // значение по умолчанию + } + else + { + sscanf(input, "%lf", pa); + } + + // printf("Введите правую границу отрезка (или нажмите Enter для значения по умолчанию): "); + fgets(input, sizeof(input), stdin); + + if (input[0] == '\n') + { + *pb = B; // значение по умолчанию + } + else + { + sscanf(input, "%lf", pb); + } + + // printf("Введите точность вычисления (или нажмите Enter для значения по умолчанию): "); + fgets(input, sizeof(input), stdin); + + if (input[0] == '\n') + { + eps = EPS; // значение по умолчанию + } + else + { + sscanf(input, "%lf", &eps); + } + + __fpurge(stdin); + printf("Выберите метод вычисления корня:\ + 0 - метод вилки, 1 - метод хорд, 2 - метод касательных\n(По умолчанию: 0): "); + *mth = getchar(); + + if (*pa > *pb) // Если пользователь перепутал границы + { + printf("Границы указаны неверно, запуск задачи с исправленным условием\n"); + tmp = *pa; + *pa = *pb; + *pb = tmp; + } + + if (f(*pa) * f(*pb) > 0) + { + sig_flag = 0; + printf("В указанных границах нуля функции не существует.\n"); + printf("Поменяйте границы\n"); + choose_path(); + } + if (eps < 0) // Если пользователь указал отрицательную точность + { + eps = eps * (-1); + printf("Точность отрицательна, условие приведено в порядок, запуск решения...\n"); + } + + if (*pa == *pb) + { + if (f(*pa) == 0) + { + printf("\nКорень уравнения: %lf\n", *pa); + printf("Работа программы завершена.\n"); + exit_777(); + } + else + { + printf("Нажмите Ctrl+C и поменяйте границы\n"); + } + } + sig_flag = 0; + return; +} \ No newline at end of file diff --git a/test/ver1.4/main.c b/test/ver1.4/main.c new file mode 100644 index 0000000..ba324ed --- /dev/null +++ b/test/ver1.4/main.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include +#include + +#include "declare.h" + +double a, b, eps, x, *pa, *pb, *px; +short method, *mth, sig_flag; + +int main() +{ + sig_flag = 0; + method = 0; + mth = &method; + pa = &a; + pb = &b; + px = &x; + + struct sigaction sig; // Инициализация структуры, отвечающей за обработку сигнала. + // Замена стандартного алгоритма на необходимый для вызова меню действий. + sig.sa_handler = ctrlc_handler; + sig.sa_flags = 0; // Очистка флагов "на всякий случай". + sigemptyset(&sig.sa_mask); // Очистка маски "на всякий случай". + + if (sigaction(SIGINT, &sig, NULL) == -1) // Обработчик ошибок и инициализация сигнала SIGINT. + { + perror("sigaction"); + return 1; + } + + show_grapgh(); + input_diap(); + + if (*mth == 0) + { + printf("Fork\n"); + fork_method(); + } + else if (*mth == 1) + { + printf("Chord\n"); + chord_method(); + } + else if (*mth == 2) + { + printf("Newton\n"); + newton_method(); + } + else + { + printf("Fork\n"); + fork_method(); + } + + printf("\nКорень уравнения: %lf\n", *px); + printf("Работа программы завершена.\n"); + + return 0; +} + +// MEEEEEEEOW \ No newline at end of file diff --git a/test/ver1.4/out/function_zeros_calculator b/test/ver1.4/out/function_zeros_calculator new file mode 100755 index 0000000..cd5b92d Binary files /dev/null and b/test/ver1.4/out/function_zeros_calculator differ