From 1387869f371ac694c4465509e8fa3d7efc3bba67 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Sun, 31 Dec 2023 19:56:27 +0300 Subject: [PATCH] ready for test --- project/ada_712.tar | Bin 71680 -> 61440 bytes {test/ver1.6 => project/ada_712}/Makefile | 0 {test/ver1.6 => project/ada_712}/README.md | 0 {test/ver1.6 => project/ada_712}/declare.h | 0 {test/ver1.6 => project/ada_712}/functions.c | 0 {test/ver1.6 => project/ada_712}/main.c | 0 project/ver1.6/Makefile | 18 + project/ver1.6/README.md | 56 +++ project/ver1.6/declare.h | 30 ++ project/ver1.6/functions.c | 363 ++++++++++++++++++ project/ver1.6/main.c | 79 ++++ {test => project}/ver1.6/out/func_zero_calc | Bin .../ver1.6/out/function_zeros_calculator | Bin 13 files changed, 546 insertions(+) rename {test/ver1.6 => project/ada_712}/Makefile (100%) rename {test/ver1.6 => project/ada_712}/README.md (100%) rename {test/ver1.6 => project/ada_712}/declare.h (100%) rename {test/ver1.6 => project/ada_712}/functions.c (100%) rename {test/ver1.6 => project/ada_712}/main.c (100%) create mode 100644 project/ver1.6/Makefile create mode 100644 project/ver1.6/README.md create mode 100644 project/ver1.6/declare.h create mode 100644 project/ver1.6/functions.c create mode 100644 project/ver1.6/main.c rename {test => project}/ver1.6/out/func_zero_calc (100%) rename {test => project}/ver1.6/out/function_zeros_calculator (100%) diff --git a/project/ada_712.tar b/project/ada_712.tar index 78eed578f29e5ee4e66c94e4b01f91abb3d4a44b..d5e23edee52cce67e1ea283b6b44e1d2743ab016 100644 GIT binary patch literal 61440 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 CPh`YhZYbOe%cBhhh#!#O)}|ZBEeOP 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 diff --git a/test/ver1.6/Makefile b/project/ada_712/Makefile similarity index 100% rename from test/ver1.6/Makefile rename to project/ada_712/Makefile diff --git a/test/ver1.6/README.md b/project/ada_712/README.md similarity index 100% rename from test/ver1.6/README.md rename to project/ada_712/README.md diff --git a/test/ver1.6/declare.h b/project/ada_712/declare.h similarity index 100% rename from test/ver1.6/declare.h rename to project/ada_712/declare.h diff --git a/test/ver1.6/functions.c b/project/ada_712/functions.c similarity index 100% rename from test/ver1.6/functions.c rename to project/ada_712/functions.c diff --git a/test/ver1.6/main.c b/project/ada_712/main.c similarity index 100% rename from test/ver1.6/main.c rename to project/ada_712/main.c diff --git a/project/ver1.6/Makefile b/project/ver1.6/Makefile new file mode 100644 index 0000000..69c7793 --- /dev/null +++ b/project/ver1.6/Makefile @@ -0,0 +1,18 @@ +# Это комментарий, который говорит, что переменная CC указывает компилятор, используемый для сборки +CC=gcc +#Это еще один комментарий. Он поясняет, что в переменной CFLAGS лежат флаги, которые передаются компилятору +CFLAGS=-Wall -pedantic + +default: build + +clean: + rm ./out/func_zero_calc + + +build: + $(CC) ./main.c ./functions.c $(CFLAGS) -o ./out/func_zero_calc -lm + +run: + ./out/func_zero_calc + + \ No newline at end of file diff --git a/project/ver1.6/README.md b/project/ver1.6/README.md new file mode 100644 index 0000000..7d70136 --- /dev/null +++ b/project/ver1.6/README.md @@ -0,0 +1,56 @@ +# func_zero_calc + +## Описание + +Эта программа предназначена для вычисления нулей функции на языке C в среде Linux. + +## Установка (с помощью репозитория на GitHub) + +1. Склонируйте репозиторий: git clone https://github.com/ada-dmitry/tmp_project.git +2. Перейдите в директорию проекта: cd /done_project +3. Следуйте указаниям пункта "Использование" + +## Установка (с помощью архива .tar) + +1. Распакуйте архив в любую удобную вам директорию. +2. С помощью терминала зайдите в распакованную директорию по заданному пути. +3. Следуйте указаниям пункта "Использование" + +## Использование + +0. Для нормальной работы программы необходимо установить программу GNU PLot и сборщик make + (sudo apt install gnuplot || sudo apt install make) +1. Соберите программу: make +2. Запустите программу: make run +3. Строго следуйте указаниям программы, вводя границы отрезка, точность вычисления корня и + выбирая метод вычисления. + +## Замечания + +0. В поля ввода границ и точности необходимо соблюдать несколько ограничений: + а. Вводить числа(без использования иных символов, помимо знака отрицания в начале "-" или дробной точки ".") + б. Не выходить за пределы типа double(1,7E–308 до 1,7E+308) +1. Для корректной работы программы, необходимо вводить отрезок, на котором есть лишь один корень + (это можно проверить благодаря графику). +2. После вызова меню выбора действий (Ctrl+C) можно использовать как верхний регистр, так и нижний. +3. Не рекомендуется бесконечно вызывать Ctrl+C без выбора действия, это может повлечь ошибки + вследствие переполнения памяти. + +## Обработка сигнала SIGINT + + Программа обрабатывает сигнал SIGINT, что позволяет давать пользователю выбор действия + +при нажатии сочетания клавиш Ctrl+C. + +## Обработка сигнала SIGTSTP + + Программа обрабатывает сигнал SIGTSTP, переводящий программу в фоновый режим, + +вновь предоставляя пользователю управлять терминалом, но возвращающий настройки терминала к исходным. + +## Авторы + +Антипенко Дмитрий Андреевич [C22-712] - https://github.com/ada-dmitry/ +Кузнецов Даниил Евгеньевич [C22-712] +Никитин Михаил Андреевич [C22-712] +Ускова Екатерина Александровна [C22-712] diff --git a/project/ver1.6/declare.h b/project/ver1.6/declare.h new file mode 100644 index 0000000..3d7cd2b --- /dev/null +++ b/project/ver1.6/declare.h @@ -0,0 +1,30 @@ +#include + +extern double a, b, eps, x, *pa, *pb, *px; +extern short method, *mth, sig_flag; +extern struct termios default_term, modif_term; +// Декларирование глобальных переменных, +// как внешних для последующего использования их во всей программе. +#define H 0.000001 +#define A -10000 +#define B 10000 +#define EPS 0.001 + +double f(double x); +void ctrlc_handler(int signum); +void ctrlz_handler(int signum); +void choose_path(); +void fork_method(); +void chord_method(); +void newton_method(); +double numerical_derivative(double x); +void __exit(); +void show_grapgh(); +void input_diap(); +void change_diap(); +// double input_number(char ch); +bool is_digit(char c); +bool is_sign(char c); +bool is_dot(char c); +double read_parse(char ch); +bool is_enter(char c); \ No newline at end of file diff --git a/project/ver1.6/functions.c b/project/ver1.6/functions.c new file mode 100644 index 0000000..65d501d --- /dev/null +++ b/project/ver1.6/functions.c @@ -0,0 +1,363 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "declare.h" + +double f(double x) // Функция, заданная пользователем, для которой происходит поиск корней. +{ + return x - 20; +} + +void show_grapgh() +{ + char func[100] = "x-20"; + // Подключение GNU Plot + FILE *gp = popen("gnuplot -persist", "w"); + + if (gp == NULL) + { + printf("GNUerror\n"); + exit(3); + } + fprintf(gp, "set xrange [-5000:5000]\n"); + fprintf(gp, "set yrange [-5000:5000]\n"); + fprintf(gp, "set grid\n"); + fprintf(gp, "plot %s\n", func); + fflush(gp); // очищение буфера вывода + sig_flag = 1; + printf("Вернитесь в терминал и нажмите Enter, чтобы продолжить...\n"); + getchar(); + sig_flag = 0; + fprintf(gp, "exit\n"); + return; +} + +// Приближенное вычисление производной по методу конечных разностей +double numerical_derivative(double x) +{ + return (f(x + H) - f(x)) / H; +} + +void newton_method() +{ + *pb = *pa; + do + { + printf("%lf %lf\n", *pa, *pb); + *pa = *pb; + *pb = *pa - f(*pa) / numerical_derivative(*pa); + // Используем численно вычисленную производную + *px = *pb; + sleep(1); + } while (fabs(*pb - *pa) > eps && f(x) != 0); + return; +} + +void chord_method() +{ + *px = *pa; + while ((*pb - *pa) > eps && f(x) != 0) + { + // Находим точку пересечения хорды с осью x + *px = (*pa * f(*pb) - *pb * f(*pa)) / (f(*pb) - f(*pa)); + printf("%lf %lf\n", *pa, *pb); + // Проверяем знаки функции в точках a и x + if (f(*px) == 0) + break; + else if (f(*px) * f(*pa) < 0) + *pb = *px; + else + *pa = *px; + sleep(1); + } + return; +} + +void fork_method() // Функция поиска корней, использующая метод вилки. +{ + do + { + *px = (*pa + *pb) / 2; // метод деления отрезка пополам + + // Печать границ для отладки и для отслеживания хода вычислений + printf("%lf %lf\n", *pa, *pb); + + // Проверка, какой из отрезков [a, x] или [x, b] подходит под условие существования корня, + // т.е. различие знаков на границе. + + if (f(*pa) * f(x) <= 0) + *pb = x; + else if (f(*pb) * f(x) <= 0) + *pa = x; + + sleep(1); // Принудительное ожидание программой, для возможности прерывания пользователем. + + } while (fabs(*pb - *pa) > eps && f(x) != 0); + return; +} + +void choose_path() // Функция выбора действия после вызова сигнала. +{ + sig_flag = 1; + char choice; + tcsetattr(0, TCSANOW, &modif_term); + + printf("\nПродолжить поиск корня?\n"); + printf("\nC - продолжить, A - закончить работу программы, \ +R - начать поиск на другом отрезке: \n"); + + do + { + // Очистка стандартного потока ввода от "лишних" + __fpurge(stdin); + choice = getchar(); + + switch (choice) + { + case 'C': // Выбор вида "Продолжить вычисление". + case 'c': + sig_flag = 0; + system("clear"); + return; // Выход из функции без каких-либо изменений. + + case 'A': // Выбор вида "Завершить вычисление". + case 'a': + printf("\nКорень уравнения: %lf\n", *px); + printf("Работа программы завершена.\n"); + __exit(); // Принудительное завершение программы с выводом текущего приближения корня. + + case 'R': // Выбор вида "Продолжить вычисления с новым отрезком". + case 'r': + change_diap(); + return; + + default: + system("clear"); + printf("Ошибка ввода, повторная попытка...\n"); + __fpurge(stdin); + } + } while (choice != 'A' || choice != 'R' || choice != 'C' || choice != 'a' || choice != 'r' || choice != 'c' || choice != 'M' || choice != 'm'); + + // Применение новых настроек терминала + tcsetattr(0, TCSANOW, &default_term); + + sig_flag = 0; +} + +void ctrlc_handler(int signum) // Функция, заменяющая стандартный алгоритм для сигнала SIGINT. +{ + if (sig_flag == 0) + { + system("clear"); + printf("\nТекущее приближение: %lf\n", *px); + choose_path(); + } + return; +} + +void ctrlz_handler(int signum) +{ + kill(getpid(), SIGTSTP); // Отправляем сигнал SIGTSTP процессу + tcsetattr(STDIN_FILENO, TCSANOW, &default_term); + return; +} + +void __exit() +{ + tcsetattr(0, TCSANOW, &default_term); // Применение новых настроек терминала + exit(EXIT_SUCCESS); +} + +void input_diap() +{ + double tmp; + sig_flag = 1; + + system("clear"); + printf("\n\nТекущие значения: [%g] : %g | eps = %g\n\n\ +Введите левую границу отрезка и нажмите Enter (по умолчанию: %g): ", + *pa, *pb, eps, *pa); + + *pa = read_parse('A'); + + system("clear"); + printf("\nТекущие значения: %g : [%g] | eps = %g\n\n\ +Введите правую границу отрезка и нажмите Enter (по умолчанию: %g): ", + *pa, *pb, eps, *pb); + + *pb = read_parse('B'); + + system("clear"); + printf("\nТекущие значения: %g : %g | eps = [%g]\n\n\ +Введите точность вычисления и нажмите Enter (по умолчанию: %g): ", + *pa, *pb, eps, eps); + + eps = read_parse('E'); + + system("clear"); + __fpurge(stdin); + printf("\nВыберите метод вычисления корня и нажмите Enter:\ + 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"); + change_diap(); + } + if (eps < 0) // Если пользователь указал отрицательную точность + { + eps = eps * (-1); + printf("Точность отрицательна, условие приведено в порядок, запуск решения...\n"); + } + + if (*pa == *pb) + { + if (f(*pa) == 0) + { + printf("\nКорень уравнения: %lf\n", *pa); + printf("Работа программы завершена.\n"); + __exit(); + } + else + { + printf("Нажмите Ctrl+C и поменяйте границы\n"); + } + } + sig_flag = 0; + return; +} + +void change_diap() +{ + // Возврат к обычному выводу + tcsetattr(0, TCSANOW, &default_term); + + system("clear"); + + printf("Введите новое значение левой границы: "); + *pa = read_parse('A'); + printf("Введите новое значение правой границы: "); + *pb = read_parse('B'); + + if (f(*pa) * f(*pb) > 0) + { + printf("\nВ указанных границах нуля функции не существует.\n"); + printf("Поменяйте границы\n"); + choose_path(); + } + if (*pa == *pb) + { + if (f(*pa) == 0) + { + printf("\nКорень уравнения: %lf\n", *pa); + printf("Работа программы завершена.\n"); + __exit(); + } + else + { + printf("Нажмите Ctrl+C и поменяйте границы\n"); + } + } + + sig_flag = 0; + return; +} + +bool is_digit(char c) +{ + return (c >= '0' && c <= '9'); +} + +bool is_sign(char c) +{ + return (c == '+' || c == '-'); +} + +bool is_dot(char c) +{ + return (c == '.'); +} + +bool is_enter(char c) +{ + return (c == '\n'); +} + +double read_parse(char ch) +{ + char input[50]; + double number; + fgets(input, sizeof(input), stdin); + __fpurge(stdin); + + int i = 0; + bool is_valid = true; + bool has_dot = false; + // Проверка первого символа, который может быть знаком или переносом строки + if (is_sign(input[0])) + { + i++; + } + else if (is_enter(input[0])) + { + switch (ch) + { + case 'A': + return A; + case 'B': + return B; + case 'E': + return EPS; + } + } + // Проверка символов, формирующих цифры числа + while (input[i] != '\n') + { + if (is_digit(input[i])) + { + i++; + continue; + } + else if (is_dot(input[i]) && !has_dot) + { + has_dot = true; + i++; + continue; + } + else + { + is_valid = false; + break; + } + } + + if (is_valid) + { + number = atof(input); + return number; + } + else + { + printf("Ошибка: некорректный ввод\nЗавершение выполнения программы...\n"); + __exit(); + } + return 1; +} diff --git a/project/ver1.6/main.c b/project/ver1.6/main.c new file mode 100644 index 0000000..5baf7f3 --- /dev/null +++ b/project/ver1.6/main.c @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include +#include + +#include "declare.h" + +double a, b, eps, x, *pa, *pb, *px; +short method, *mth, sig_flag; +struct termios default_term, modif_term; // Задание структур, определяющих терминал Linux. + +int main() +{ + tcgetattr(0, &default_term); // Получение текущих настроек терминала + modif_term = default_term; + modif_term.c_lflag &= ~(ECHO | ICANON); // Отключение символа ECHO и канонического ввода + + sig_flag = 0; + method = 0; + mth = &method; + a = A; + b = B; + eps = EPS; + pa = &a; + pb = &b; + px = &x; + + struct sigaction sig_int, sig_tstp; // Инициализация структуры, отвечающей за обработку сигнала. + // Замена стандартного алгоритма на необходимый для вызова меню действий. + 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_int, NULL) == -1) // Обработчик ошибок и инициализация сигнала SIGINT. + { + perror("sigaction"); + return 1; + } + if (sigaction(SIGTSTP, &sig_tstp, NULL) == -1) // Обработчик ошибок и инициализация сигнала SIGTSTP. + { + perror("sigaction"); + return 1; + } + + show_grapgh(); + input_diap(); + + system("clear"); + if (*mth == 0) + { + printf("\nFork\n"); + fork_method(); + } + else if (*mth == 1) + { + printf("\nChord\n"); + chord_method(); + } + else if (*mth == 2) + { + printf("\nNewton\n"); + newton_method(); + } + else + { + printf("\nFork\n"); + fork_method(); + } + + printf("\nКорень уравнения: %lf\n", *px); + printf("Работа программы завершена.\n"); + + return 0; +} diff --git a/test/ver1.6/out/func_zero_calc b/project/ver1.6/out/func_zero_calc similarity index 100% rename from test/ver1.6/out/func_zero_calc rename to project/ver1.6/out/func_zero_calc diff --git a/test/ver1.6/out/function_zeros_calculator b/project/ver1.6/out/function_zeros_calculator similarity index 100% rename from test/ver1.6/out/function_zeros_calculator rename to project/ver1.6/out/function_zeros_calculator