From c022a02959c715f7a6a4daea3b1f5e8646c76498 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Thu, 7 Dec 2023 14:36:52 +0300 Subject: [PATCH] reboot prod --- Test/main.c | 104 ---------------- Test/out/function_zeros_calculator | Bin 21424 -> 0 bytes {Archive => archive}/Project 1.1.tar.xz | Bin .../Project_Antipenko_1.2.tar.xz | Bin {Project_1.2 => project/ver1.2}/Makefile | 0 {Project_1.2 => project/ver1.2}/README | 0 {Project_1.2 => project/ver1.2}/declare.h | 0 {Project_1.2 => project/ver1.2}/functions.c | 0 {Project_1.2 => project/ver1.2}/main.c | 0 .../ver1.2}/out/function_zeros_calculator | Bin {Project_1.3 => project/ver1.3}/Makefile | 0 {Project_1.3 => project/ver1.3}/README | 0 {Project_1.3 => project/ver1.3}/declare.h | 0 {Project_1.3 => project/ver1.3}/functions.c | 0 {Project_1.3 => project/ver1.3}/main.c | 0 .../ver1.3}/out/function_zeros_calculator | Bin {Test => test/ver1.4}/Makefile | 2 +- {Test => test/ver1.4}/README | 2 + {Test => test/ver1.4}/declare.h | 6 +- {Test => test/ver1.4}/functions.c | 115 ++++++++++++++++-- test/ver1.4/main.c | 63 ++++++++++ test/ver1.4/out/function_zeros_calculator | Bin 0 -> 21552 bytes 22 files changed, 173 insertions(+), 119 deletions(-) delete mode 100644 Test/main.c delete mode 100755 Test/out/function_zeros_calculator rename {Archive => archive}/Project 1.1.tar.xz (100%) rename {Archive => archive}/Project_Antipenko_1.2.tar.xz (100%) rename {Project_1.2 => project/ver1.2}/Makefile (100%) rename {Project_1.2 => project/ver1.2}/README (100%) rename {Project_1.2 => project/ver1.2}/declare.h (100%) rename {Project_1.2 => project/ver1.2}/functions.c (100%) rename {Project_1.2 => project/ver1.2}/main.c (100%) rename {Project_1.2 => project/ver1.2}/out/function_zeros_calculator (100%) rename {Project_1.3 => project/ver1.3}/Makefile (100%) rename {Project_1.3 => project/ver1.3}/README (100%) rename {Project_1.3 => project/ver1.3}/declare.h (100%) rename {Project_1.3 => project/ver1.3}/functions.c (100%) rename {Project_1.3 => project/ver1.3}/main.c (100%) rename {Project_1.3 => project/ver1.3}/out/function_zeros_calculator (100%) rename {Test => test/ver1.4}/Makefile (95%) rename {Test => test/ver1.4}/README (92%) rename {Test => test/ver1.4}/declare.h (84%) rename {Test => test/ver1.4}/functions.c (64%) create mode 100644 test/ver1.4/main.c create mode 100755 test/ver1.4/out/function_zeros_calculator 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 d82de89c89055a5f7e888ae9124021618aa7c776..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21424 zcmeHP3v`s#wLS@sq|`8jfJSI_sx|a1eTF@9EBw7jfVP~}7LSLp{X=g+wrh1#&*16w4=j@+cZN7JBI?6wcIaN4Z(JSjiWz&ZnH0g}VQ2N9iIvkGAt@JElWA5llIs zloR@Ae^zPzpqhjb`zvLPKR`c&f;N`~p8XtEbNPZ!KUfOwrtGHdxFfYJJOVFA3Q0KT&TzP$h*E`Z-#0Drguenx?QZ784* zbwRnamO22F#5CckRubM9gx6cw;`0W>O}>WkmH=2Rh&pdP;fp1_jlOV`2u5S!rbJLA z>godtUm_6`pmiZ%OvJcgfvAWl{BYy- zhU1aCOD^%o>wHb*4OY?{y!h%8;YgE+24b;DOaxlO2@#D%1893wES#XA5KrBgy>+24 zdxO4kgP<5`jm{UBuUfgR$~(ukz^KhLYI9r{8}+&Kgm>lI)n0!f7N`%$6M@*;)m06V zrodWXZ3DGX-xz7q-S#TgQ59*G7Gbs0-zl1oGY~>;5@nqtXg!0J^Flo{94@8Zq)%g0 zB!7zdzUG^!g>j@ACw`*&J$FBV{&(1f>nS3wQYL(=$A*dleahhJfIXaj#Ng>bJ)FJU;OPK8oZV{hbYLFN-eB-_ zKpxKe44w|e!`Z71o({mn*`)?gCnm$$3WKKu@o@Gt22Tgz;p`-XrvvYBw#eY^l7H_b z?k^o^(SPQVohL7&>?{{DKj1&W<))c`$HE`8@V~V1uUYsXS@;(%`~eHU*TO$(;UBf| zU$^l0Tlh{3-)`Y=w(!knzT%yg$@KM}M8)N7#me$Zt< z=QgmIfSrps1Mzg)Vni+(NleAmoKJO3%}?Y8?dPUcPjVph z+dt=W8tReaeWG0|{-L!(Ubb{SY`kDEtK_xd`swk|M zoOVo|OfhuWPLZLMzVms~I0W5U%AL|ZBz0}yk=``fvOK+PF(O$UOKb3dPo{Rfp}9+Sef&h^`qBBta!9hJ;wJ zVx^LXmPHK@PBwt3tR(cpA6ikah3(Vhio_Gd+~y{~yXq`%UJ!ymHYQS9f( zBWU)-B}%hxq)4iEYt;cmbsG*1$CpF(dxmPURJ~WLe$7xF!N44+iQK3~TMbbN4Z=qh zJ~%nh%c`(dFYkjgus`drxY^dzQ8VKA%$y?EZo-yX55Y?>@Z!dhxkoTE@}so%92%ze z{VL})lQtNdqi+LPl+`rHupZ?)yB^*<+SdbW8~h+CD~8JRy`-Y_R#3FvEza4_ia8gH z9ujzx?j4?F%}&pNd$;5V+>dM8rKub?$on*ZSksiIM>HMORBj~$?jgx`+Lp@P(AvI4 zXX(d(pxD(iX*)oxMaZq>LM_jY`>=i8VVWlNfeq)| z*!PHi0nUaL^iKrYXGnz?XjZ|r^mEemdeaQ^bZi*OZ>K%OkYY(v zBNecBs0R9wq$1V%Zh2s6|2^e#>U`zr@ACbWDb|5*)nwqTL_3pR`8Bpb-4)x3izy7f z8@+|&3U%!V!}jYB!|G=cA~<(Ob&fXXsfVP2Z9s`++y`lzWcJE>cPFLirlX6 zr(JY1R(;UER;H;QGTLW16(3&=)s4i;;Fjy)`gjYJJEHxL*C{r=Ne0
pojuj>c< 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 #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 0000000000000000000000000000000000000000..cd5b92d90353503c1ad5a514316de5880fe1eae5 GIT binary patch literal 21552 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 literal 0 HcmV?d00001